pax_global_header00006660000000000000000000000064131716663710014525gustar00rootroot0000000000000052 comment=8ddfc8afb2d520d41997ebddd921b52152706c01 dep-0.3.2/000077500000000000000000000000001317166637100122775ustar00rootroot00000000000000dep-0.3.2/.codeclimate.yml000066400000000000000000000003601317166637100153500ustar00rootroot00000000000000engines: gofmt: enabled: true govet: enabled: true golint: enabled: true ratings: paths: - "**.go" exclude_paths: - vendor/ - internal/gps/_testdata - cmd/dep/testdata - testdata - internal/gps/internal/pb dep-0.3.2/.gitattributes000066400000000000000000000001201317166637100151630ustar00rootroot00000000000000# Prevent problems comparing golden files on Windows **/testdata/** text eol=lf dep-0.3.2/.github/000077500000000000000000000000001317166637100136375ustar00rootroot00000000000000dep-0.3.2/.github/CODEOWNERS000066400000000000000000000014651317166637100152400ustar00rootroot00000000000000# general * @sdboyer # init /cmd/dep/init* @carolynvs /cmd/dep/gopath_scanner* @carolynvs /cmd/dep/root_analyzer* @carolynvs /cmd/dep/testdata/init @carolynvs /cmd/dep/testdata/harness_tests/init @carolynvs /internal/importers @carolynvs /analyzer* @carolynvs /testdata/analyzer @carolynvs /internal/feedback @carolynvs # ensure /cmd/dep/ensure* @ibrasho /cmd/dep/testdata/harness_tests/ensure** @ibrasho # status /cmd/dep/status* @darkowlzz /cmd/dep/testdata/harness_tests/status** @darkowlzz /cmd/dep/graphviz* @darkowlzz # gps caching /internal/gps/source_cache* @jmank88 dep-0.3.2/.github/ISSUE_TEMPLATE.md000066400000000000000000000012101317166637100163360ustar00rootroot00000000000000 ### What version of `dep` are you using (`dep version`)? ### What `dep` command did you run? ### What did you expect to see? ### What did you see instead? dep-0.3.2/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000010421317166637100174350ustar00rootroot00000000000000 ### What does this do / why do we need it? ### What should your reviewer look out for in this PR? ### Do you need help or clarification on anything? ### Which issue(s) does this PR fix? dep-0.3.2/.gitignore000066400000000000000000000005171317166637100142720ustar00rootroot00000000000000# dep project generated files to ignore # if you want to ignore files created by your editor/tools, # please consider a global .gitignore https://help.github.com/articles/ignoring-files # please do not open a pull request to add something created by your editor or tools /dep /testdep /dep.exe /licenseok /profile.out /coverage.txt dep-0.3.2/.travis.yml000066400000000000000000000057631317166637100144230ustar00rootroot00000000000000language: go sudo: false notifications: email: false jobs: include: - stage: test go_import_path: github.com/golang/dep install: - go get -u github.com/golang/lint/golint honnef.co/go/tools/cmd/megacheck - npm install -g codeclimate-test-reporter env: - DEPTESTBYPASS501=1 os: linux go: 1.9.x script: - go test -i ./... - ./hack/lint.bash - ./hack/validate-vendor.bash - ./hack/validate-licence.bash - ./hack/coverage.bash after_success: - codeclimate-test-reporter < coverage.txt # YAML alias, for settings shared across the simpler builds - &simple-test go: 1.8.x stage: test go_import_path: github.com/golang/dep install: skip env: - DEPTESTBYPASS501=1 script: go test -race $(go list ./... | grep -v vendor) - <<: *simple-test go: tip - <<: *simple-test os: osx go: 1.9.x install: # brew takes horribly long to update itself despite the above caching # attempt; only bzr install if it's not on the $PATH - test $(which bzr) || brew install bzr env: - HOMEBREW_NO_AUTO_UPDATE=1 - DEPTESTBYPASS501=1 script: # OSX as of El Capitan sets an exit trap that interacts poorly with how # travis seems to spawn these shells; if set -e is set, then it can cause # build failures. We're not doing that here, but retain the trap statement # for future safety. # Related: https://superuser.com/questions/1044130/why-am-i-having-how-can-i-fix-this-error-shell-session-update-command-not-f - trap EXIT - go test -race ./... - go: 1.9.x stage: deploy go_import_path: github.com/golang/dep install: skip script: skip before_deploy: - ./hack/build-all.bash deploy: - provider: releases api_key: secure: fL9GX11J3JLizEBTPZHN32wuAT91eAJsGl0kjlAdIc6Lb/9UCe1XZGgFnpQFN4qo/S+omhHBDbM6Ty1xhNy7xmjDecpQGDU8Rmap9Oll0TuxqMigG+njOuPp5VUYPofPP0PGKdxAcYg+KaFM7x0o2rK+qA046NHwo2gH1BbE+bn55TZglEajEfc8j9iX4jt96KC7zlu+WiKArLmfUtlrI8m8ZYgbYcvFmlYjeCiEqlNhvNL59ejug9Rl0PLtPbamqVXkGLafYtekgPCb4WSxBiCt8pq5Rb5svk9YcdXpiaWQhZjMPAuKN6BrmN2lw1PiXzADUG5fjvNc8eo2HY70GD2utU9cAsY8VIafhoH5n6uM1WI8MHwDfd7P1PiQA3ZGQ8CPwk4q/8HSfQU9ap7vZgSF63pTIbtlviyIG67orOJE9PWWncl9olYM946UylZu6m3hWI/rmJxOeJ1UJjym/3GNPMRfKubaGhV/TyRdM0bKX4M0cXHU6k/ESVFupGXdKRt4RpvkD4/1Km6b2OShW6PNI+ifFspnJr7obkI7dm7ubySdnNz4lMv9WWymxRpMVc8hUAhuoDvXeZJq7pSnkjBEWDxIRoTkA93CU3/Rf7MFYCJMnGSqjcxWUpIfCAk2/r4BqL9NQnqBvvVt+MYi64QaD5n7ZF3dVbr6HZ2zjSU= file: - release/dep-linux-amd64 - release/dep-linux-amd64.sha256 - release/dep-darwin-amd64 - release/dep-darwin-amd64.sha256 - release/dep-windows-amd64 - release/dep-windows-amd64.sha256 skip_cleanup: true on: repo: golang/dep branch: master tags: true dep-0.3.2/AUTHORS000066400000000000000000000002551317166637100133510ustar00rootroot00000000000000# This source code refers to The Go Authors for copyright purposes. # The master list of authors is in the main Go distribution, # visible at http://tip.golang.org/AUTHORS. dep-0.3.2/CHANGELOG.md000066400000000000000000000062131317166637100141120ustar00rootroot00000000000000# v0.3.2 (Unreleased) NEW FEATURES: * Add support for importing from [gvt](https://github.com/FiloSottile/gvt) and [gb](https://godoc.org/github.com/constabulary/gb/cmd/gb-vendor). (#1149) * Wildcard ignore support. (#1156) * Disable SourceManager lock by setting `DEPNOLOCK` environment variable. (#1206) * `dep ensure -no-vendor -dry-run` now exits with an error when changes would have to be made to `Gopkg.lock`. This is useful for CI. (#1256) BUG FIXES: * gps: Fix case mismatch error with multiple dependers. (#1233) * Skip broken `vendor` symlink rather than returning an error. (#1191) * Fix `status` shows incorrect reason for lock mismatch when ignoring packages. (#1216) IMPROVEMENTS: * Allow `dep ensure -add` and `-update` when lock is out-of-sync. (#1225) * gps: vcs: Dedupe git version list (#1212) * gps: Add prune functions to gps. (#1020) * gps: Skip broken vendor symlinks. (#1191) * `dep ensure -add` now concurrently fetches the source and adds the projects. (#1218) * File name case check is now performed on `Gopkg.toml` and `Gopkg.lock`. (#1114) * gps: gps now supports pruning. (#1020) * `dep ensure -update` now concurrently validates the passed project arguments. Improving performance when updating dependencies with `-update`. (#1175) * `dep status` now concurrently fetches repo info. Improving status performance. (#1135) * gps: Add SourceURLsForPath() to SourceManager. (#1166) * gps: Include output in error. (#1180) WIP: * gps: Process canonical import paths. (#1017) * gps: Persistent cache. (#1127, #1215) # v0.3.1 * gps: Add satisfiability check for case variants (#1079) * Validate Project Roots in manifest (#1116) * gps: Properly separate sources for different gopkg.in versions & github (#1132) * gps: Add persistent BoltDB cache (#1098) * gps: Increase default subcommand timeout to 30s (#1087) * Fix importer [issue](https://github.com/golang/dep/issues/939) where the importer would drop the imported version of a project (#1100) * Import analyzer now always uses the same name, fixing the lock mismatch immediately after dep init issue (#1099) * Add support for importing from [govend](https://github.com/govend/govend) (#1040) and [LK4D4/vndr](https://github.com/LK4D4/vndr) (#978) based projects * gps: gps no longer assumes that every git repo has a HEAD (#1053) * `os.Chmod` failures on Windows due to long path length has been fixed (#925) * Add `version` command (#996) * Drop support for building with go1.7 (#714) * gps: Parse abbreviated git revisions (#1027) * gps: Parallelize writing dep tree (#1021) * `status` now shows the progress in verbose mode (#1009, #1037) * Fix empty `Constraint` and `Version` in `status` json output (#976) * `status` table output now shows override constraints (#918) * gps: Display warning message every 15 seconds when lockfile is busy (#958) * gps: Hashing directory tree and tree verification (#959) * `ensure` now has `-vendor-only` mode to populate vendor/ without updating Gopkg.lock (#954) * Use fork of Masterminds/semver until Masterminds/semver [issue#59](https://github.com/Masterminds/semver/issues/59) is fixed upstream (#938) * gps: Ensure packages are deducible before attempting to solve (#697) dep-0.3.2/CODE_OF_CONDUCT.md000066400000000000000000000062371317166637100151060ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at sam (at) samboyer.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ dep-0.3.2/CONTRIBUTING.md000066400000000000000000000176021317166637100145360ustar00rootroot00000000000000# Contributing to `dep` `dep` is an open source project. It is the work of hundreds of contributors. We appreciate your help! Keep an eye on the [Roadmap](https://github.com/golang/dep/wiki/Roadmap) for a summary of where the project is, and where we're headed. ## Filing issues Please check the existing issues and [FAQ](docs/FAQ.md) to see if your feedback has already been reported. When [filing an issue](https://github.com/golang/dep/issues/new), make sure to answer these five questions: 1. What version of Go (`go version`) and `dep` (`git describe --tags`) are you using?? 3. What `dep` command did you run? 4. What did you expect to see? 5. What did you see instead? General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. ## Contributing code Let us know if you are interested in working on an issue by leaving a comment on the issue in GitHub. This helps avoid multiple people unknowingly working on the same issue. Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. The [help wanted](https://github.com/golang/dep/issues?q=is%3Aissue+is%3Aopen+label%3A%22help%20wanted%22) label highlights issues that are well-suited for folks to jump in on. The [good first issue](https://github.com/golang/dep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good%20first%20issue%22) label further identifies issues that are particularly well-sized for newcomers. Unless otherwise noted, the `dep` source files are distributed under the BSD-style license found in the LICENSE file. All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult [GitHub Help] for more information on using pull requests. We check `dep`'s own `vendor` directory into git. For any PR to `dep` where you're updating `Gopkg.toml`, make sure to run `dep ensure` and ([for now](https://github.com/golang/dep/issues/944)) `dep prune` and commit all changes to `vendor`. [GitHub Help]: https://help.github.com/articles/about-pull-requests/ ## Contributor License Agreement Contributions to this project must be accompanied by a Contributor License Agreement. You (or your employer) retain the copyright to your contribution, this simply gives us permission to use and redistribute your contributions as part of the project. Head over to to see your current agreements on file or to sign a new one. You generally only need to submit a CLA once, so if you've already submitted one (even if it was for a different project), you probably don't need to do it again. ## Maintainer's Guide `dep` has subsystem maintainers; this guide is intended for them in performing their work as a maintainer. ### General guidelines * _Be kind, respectful, and inclusive_. Really live [that CoC](https://github.com/golang/dep/blob/master/CODE_OF_CONDUCT.md). We've developed a reputation as one of the most welcoming and supportive project environments in the Go community, and we want to keep that up! * The lines of responsibility between maintainership areas can be fuzzy. Get to know your fellow maintainers - it's important to work _with_ them when an issue falls in this grey area. * Remember, the long-term goal of `dep` is to disappear into the `go` toolchain. That's going to be a challenging process, no matter what. Minimizing that eventual difficulty should be a guiding light for all your decisions today. * Try to match the toolchain's assumptions as closely as possible ([example](https://github.com/golang/dep/issues/564#issuecomment-300994599)), and avoid introducing new rules the toolchain would later have to incorporate. * Every new flag or option in the metadata files is more exposed surface area that demands conversion later. Only add these with a clear design plan. * `dep` is experimental, but increasingly only on a larger scale. Experiments need clear hypotheses and parameters for testing - nothing off-the-cuff. * Being a maintainer doesn't mean you're always right. Admitting when you've made a mistake keeps the code flowing, the environment health, and the respect level up. * It's fine if you need to step back from maintainership responsibilities - just, please, don't fade away! Let other maintainers know what's going on. ### Issue management * We use [Zenhub](https://www.zenhub.com) to manage the queue, in addition to what we do with labels. * You will need to install [ZenHub extension](https://www.zenhub.com/extension) to your browser to show the board. * Pipelines, and [the board](https://github.com/golang/dep#boards) are one thing we try to utilize: * **New Issues Pipeline**: When someone creates a new issue, it goes here first. Keep an eye out for issues that fall into your area. Add labels to them, and if it's something we should do, put it in the `Backlog` pipeline. If you aren't sure, throw it in the `Icebox`. It helps to sort this pipeline by date. * **Icebox Pipeline**: Issues that we aren't immediately closing but aren't really ready to be prioritized and started on. It's not a wontfix bucket, but a "not sure if we should/can fix right now" bucket. * **Backlog Pipeline**: Issues that we know we want to tackle. You can drag/drop up and down to prioritize issues. * Marking dependencies/blockers is also quite useful where appropriate; please do that. * We use epics and milestones in roughly the same way (because OSS projects don't have real sprints). Epics should be duplicated as milestones; if there's a main epic issue, it should contain a checklist of the relevant issues to complete it. * The `area:` labels correspond to maintainership areas. Apply yours to any issues or PRs that fall under your purview. It's to be expected that multiple `area:` labels may be applied to a single issue. * The [`help-wanted`](https://github.com/golang/dep/issues?q=is%3Aissue+is%3Aopen+label%3Ahelp-wanted) and [`good-first-pr`](https://github.com/golang/dep/issues?q=is%3Aissue+is%3Aopen+label%3Agood-first-pr) labels are two of our most important tools for making the project accessible to newcomers - a key goal for our community. Here's how to use them well. * `good-first-pr` should be applied when there's a very straightforward, self-contained task that is very unlikely to have any hidden complexity. The real purpose of these is to provide a "chink in the armor", providing newcomers a lens through which to start understanding the project. * `help-wanted` should be applied to issues where there's a clear, stated goal, there is at most one significant question that needs answering, and it looks like the implementation won't be inordinately difficult, or disruptive to other parts of the system. * `help-wanted` should also be applied to all `good-first-pr` issues - it's duplicative, but not doing so seems unfriendly. ### Pull Requests * Try to make, and encourage, smaller pull requests. * [No is temporary. Yes is forever.](https://blog.jessfraz.com/post/the-art-of-closing/) * Long-running feature branches should generally be avoided. Discuss it with other maintainers first. * Unless it's trivial, don't merge your own PRs - ask another maintainer. * Commit messages should follow [Tim Pope's rules](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). * Checklist for merging PRs: * Does the PR pass [the code review comments](https://github.com/golang/go/wiki/CodeReviewComments)? (internalize these rules!) * Are there tests to cover new or changed behavior? Prefer reliable tests > no tests > flaky tests. * Does the first post in the PR contain "Fixes #..." text for any issues it resolves? * Are any necessary follow-up issues _already_ posted, prior to merging? * Does this change entail the updating of any docs? * For docs kept in the repo, e.g. FAQ.md, docs changes _must_ be submitted as part of the same PR. dep-0.3.2/CONTRIBUTORS000066400000000000000000000002521317166637100141560ustar00rootroot00000000000000# This source code was written by the Go contributors. # The master list of contributors is in the main Go distribution, # visible at http://tip.golang.org/CONTRIBUTORS. dep-0.3.2/Gopkg.lock000066400000000000000000000050071317166637100142220ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "parse-constraints-with-dash-in-pre" name = "github.com/Masterminds/semver" packages = ["."] revision = "a93e51b5a57ef416dac8bb02d11407b6f55d8929" source = "https://github.com/carolynvs/semver.git" [[projects]] name = "github.com/Masterminds/vcs" packages = ["."] revision = "3084677c2c188840777bff30054f2b553729d329" version = "v1.11.1" [[projects]] branch = "master" name = "github.com/armon/go-radix" packages = ["."] revision = "4239b77079c7b5d1243b7b4736304ce8ddb6f0f2" [[projects]] name = "github.com/boltdb/bolt" packages = ["."] revision = "2f1ce7a837dcb8da3ec595b1dac9d0632f0f99e8" version = "v1.3.1" [[projects]] branch = "v2" name = "github.com/go-yaml/yaml" packages = ["."] revision = "cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b" [[projects]] branch = "master" name = "github.com/golang/protobuf" packages = ["proto"] revision = "5afd06f9d81a86d6e3bb7dc702d6bd148ea3ff23" [[projects]] name = "github.com/jmank88/nuts" packages = ["."] revision = "a1e02c788669d022c325a8ee674f15360d7104f4" version = "v0.2.0" [[projects]] branch = "master" name = "github.com/nightlyone/lockfile" packages = ["."] revision = "e83dc5e7bba095e8d32fb2124714bf41f2a30cb5" [[projects]] name = "github.com/pelletier/go-buffruneio" packages = ["."] revision = "c37440a7cf42ac63b919c752ca73a85067e05992" version = "v0.2.0" [[projects]] branch = "master" name = "github.com/pelletier/go-toml" packages = ["."] revision = "fe206efb84b2bc8e8cfafe6b4c1826622be969e3" [[projects]] name = "github.com/pkg/errors" packages = ["."] revision = "645ef00459ed84a119197bfb8d8205042c6df63d" version = "v0.8.0" [[projects]] branch = "master" name = "github.com/sdboyer/constext" packages = ["."] revision = "836a144573533ea4da4e6929c235fd348aed1c80" [[projects]] branch = "master" name = "golang.org/x/net" packages = ["context"] revision = "66aacef3dd8a676686c7ae3716979581e8b03c47" [[projects]] branch = "master" name = "golang.org/x/sync" packages = ["errgroup"] revision = "f52d1811a62927559de87708c8913c1650ce4f26" [[projects]] branch = "master" name = "golang.org/x/sys" packages = ["unix"] revision = "bb24a47a89eac6c1227fbcb2ae37a8b9ed323366" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "05c1cd69be2c917c0cc4b32942830c2acfa044d8200fdc94716aae48a8083702" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/Gopkg.toml000066400000000000000000000012231317166637100142410ustar00rootroot00000000000000[[constraint]] branch = "parse-constraints-with-dash-in-pre" name = "github.com/Masterminds/semver" source = "https://github.com/carolynvs/semver.git" [[constraint]] name = "github.com/Masterminds/vcs" version = "1.11.0" [[constraint]] branch = "v2" name = "github.com/go-yaml/yaml" [[constraint]] branch = "master" name = "github.com/pelletier/go-toml" [[constraint]] name = "github.com/pkg/errors" version = "0.8.0" [[constraint]] name = "github.com/boltdb/bolt" version = "1.0.0" [[constraint]] name = "github.com/jmank88/nuts" version = "0.2.0" [[constraint]] name = "github.com/golang/protobuf" branch = "master" dep-0.3.2/LICENSE000066400000000000000000000027071317166637100133120ustar00rootroot00000000000000Copyright (c) 2014 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. dep-0.3.2/MAINTAINERS.md000066400000000000000000000007001317166637100143700ustar00rootroot00000000000000 General maintainers: sam boyer (@sdboyer) * dep * `init` command: Carolyn Van Slyck (@carolynvs) * `ensure` command: Ibrahim AshShohail (@ibrasho) * `status` command: Sunny (@darkowlzz) * testing harness: (vacant) * gps * solver: (vacant) * source manager: (vacant) * root deduction: (vacant) * source/vcs interaction: (vacant) * caching: Jordan Krage (@jmank88) * pkgtree: (vacant) * versions and constraints: (vacant) dep-0.3.2/PATENTS000066400000000000000000000024271317166637100133450ustar00rootroot00000000000000Additional 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. dep-0.3.2/README.md000066400000000000000000000270671317166637100135720ustar00rootroot00000000000000

Build Status Windows Build Status Code Climate

## Dep `dep` is a prototype dependency management tool for Go. It requires Go 1.8 or newer to compile. `dep` is the official _experiment_, but not yet the official tool. Check out the [Roadmap](https://github.com/golang/dep/wiki/Roadmap) for more on what this means! ## Current status `dep` is safe for production use. That means two things: * Any valid metadata file (`Gopkg.toml` and `Gopkg.lock`) will be readable and considered valid by any future version of `dep`. * The CLI UI is mostly stable. `dep init` and `dep ensure` are mostly set; `dep status` is likely to change a fair bit, and `dep prune` is [going to be absorbed into `dep ensure`](https://github.com/golang/dep/issues/944). That said, keep in mind the following: * `dep init` on an existing project can be a rocky experience - we try to automatically convert from other tools' metadata files, and that process is often complex and murky. Once your project is converted and you're using `dep ensure`, its behavior is quite stable. * `dep` still has nasty bugs, but in general these are comparable or fewer to other tools out there. * `dep` is [pretty slow right now](https://github.com/golang/dep/blob/master/docs/FAQ.md#why-is-dep-slow), especially on the first couple times you run it. Just know that there is a _lot_ of headroom for improvement, and work is actively underway. * `dep` is still changing rapidly. If you need stability (e.g. for CI), it's best to rely on a released version, not tip. * `dep`'s exported API interface will continue to change in unpredictable, backwards-incompatible ways until we tag a v1.0.0 release. ## Context - [The Saga of Go Dependency Management](https://blog.gopheracademy.com/advent-2016/saga-go-dependency-management/) - Official Google Docs - [Go Packaging Proposal Process](https://docs.google.com/document/d/18tNd8r5DV0yluCR7tPvkMTsWD_lYcRO7NhpNSDymRr8/edit) - [User Stories](https://docs.google.com/document/d/1wT8e8wBHMrSRHY4UF_60GCgyWGqvYye4THvaDARPySs/edit) - [Features](https://docs.google.com/document/d/1JNP6DgSK-c6KqveIhQk-n_HAw3hsZkL-okoleM43NgA/edit) - [Design Space](https://docs.google.com/document/d/1TpQlQYovCoX9FkpgsoxzdvZplghudHAiQOame30A-v8/edit) - [Frequently Asked Questions](docs/FAQ.md) ## Setup Grab the latest binary from the [releases](https://github.com/golang/dep/releases) page. On macOS you can install or upgrade to the latest released version with Homebrew: ```sh $ brew install dep $ brew upgrade dep ``` If you're interested in hacking on `dep`, you can install via `go get`: ```sh go get -u github.com/golang/dep/cmd/dep ``` To start managing dependencies using dep, run the following from your project's root directory: ```sh $ dep init ``` This does the following: 1. Look for [existing dependency management files](docs/FAQ.md#what-external-tools-are-supported) to convert 1. Check if your dependencies use dep 1. Identify your dependencies 1. Back up your existing `vendor/` directory (if you have one) to `_vendor-TIMESTAMP/` 1. Pick the highest compatible version for each dependency 1. Generate [`Gopkg.toml`](docs/Gopkg.toml.md) ("manifest") and `Gopkg.lock` files 1. Install the dependencies in `vendor/` ## Usage There is one main subcommand you will use: `dep ensure`. `ensure` first checks that `Gopkg.lock` is consistent with `Gopkg.toml` and the `import`s in your code. If any changes are detected, `dep`'s solver works out a new `Gopkg.lock`. Then, `dep` checks if the contents of `vendor/` are what `Gopkg.lock` (the new one if applicable, else the existing one) says it should be, and rewrites `vendor/` as needed to bring it into line. In essence, `dep ensure` [works in two phases to keep four buckets of state in sync](https://youtu.be/5LtMb090AZI?t=20m4s): states-flow _Note: until we ship [vendor verification](https://github.com/golang/dep/issues/121), we can't efficiently perform the `Gopkg.lock` <-> `vendor/` comparison, so `dep ensure` unconditionally regenerates all of `vendor/` to be safe._ `dep ensure` is safe to run early and often. See the help text for more detailed usage instructions. ```sh $ dep help ensure ``` ### Installing dependencies (if your `vendor/` directory isn't [checked in with your code](docs/FAQ.md#should-i-commit-my-vendor-directory)) ```sh $ dep ensure ``` If a dependency already exists in your `vendor/` folder, dep will ensure it matches the constraints from the manifest. If the dependency is missing from `vendor/`, the latest version allowed by your manifest will be installed. ### Adding a dependency ```sh $ dep ensure -add github.com/foo/bar ``` This adds a version constraint to your `Gopkg.toml`, and updates `Gopkg.lock` and `vendor/`. Now, import and use the package in your code! ✨ `dep ensure -add` has some subtle behavior variations depending on the project or package named, and the state of your tree. See `dep ensure -examples` for more information. ### Changing dependencies If you want to: * Change the allowed `version`/`branch`/`revision` * Switch to using a fork for one or more dependencies, do the following: 1. Manually edit your `Gopkg.toml`. 1. Run ```sh $ dep ensure ``` ### Checking the status of dependencies Run `dep status` to see the current status of all your dependencies. ```sh $ dep status PROJECT CONSTRAINT VERSION REVISION LATEST github.com/Masterminds/semver branch 2.x branch 2.x 139cc09 c2e7f6c github.com/Masterminds/vcs ^1.11.0 v1.11.1 3084677 3084677 github.com/armon/go-radix * branch master 4239b77 4239b77 ``` On top of that, if you have added new imports to your project or modified `Gopkg.toml` without running `dep ensure` again, `dep status` will tell you there is a mismatch between `Gopkg.lock` and the current status of the project. ```sh $ dep status Lock inputs-digest mismatch due to the following packages missing from the lock: PROJECT MISSING PACKAGES github.com/Masterminds/goutils [github.com/Masterminds/goutils] This happens when a new import is added. Run `dep ensure` to install the missing packages. ``` As `dep status` suggests, run `dep ensure` to update your lockfile. Then run `dep status` again, and the lock mismatch should go away. ### Visualizing dependencies Generate a visual representation of the dependency tree by piping the output of `dep status -dot` to [graphviz](http://www.graphviz.org/). #### Linux ``` $ sudo apt-get install graphviz $ dep status -dot | dot -T png | display ``` #### MacOS ``` $ brew install graphviz $ dep status -dot | dot -T png | open -f -a /Applications/Preview.app ``` #### Windows ``` > choco install graphviz.portable > dep status -dot | dot -T png -o status.png; start status.png ```

### Updating dependencies Updating brings the version of a dependency in `Gopkg.lock` and `vendor/` to the latest version allowed by the constraints in `Gopkg.toml`. You can update just a targeted subset of dependencies (recommended): ```sh $ dep ensure -update github.com/some/project github.com/other/project $ dep ensure -update github.com/another/project ``` Or you can update all your dependencies at once: ```sh $ dep ensure -update ``` "Latest" means different things depending on the type of constraint in use. If you're depending on a `branch`, `dep` will update to the latest tip of that branch. If you're depending on a `version` using [a semver range](#semantic-versioning), it will update to the latest version in that range. ### Removing dependencies 1. Remove the `import`s and all usage from your code. 1. Remove `[[constraint]]` rules from `Gopkg.toml` (if any). 1. Run ```sh $ dep ensure ``` ### Testing changes to a dependency Making changes in your `vendor/` directory directly is not recommended, as dep will overwrite any changes. Instead: 1. Delete the dependency from the `vendor/` directory. ```sh rm -rf vendor/ ``` 1. Add that dependency to your `GOPATH`, if it isn't already. ```sh $ go get ``` 1. Modify the dependency in `$GOPATH/src/`. 1. Test, build, etc. Don't run `dep ensure` until you're done. `dep ensure` will reinstall the dependency into `vendor/` based on your manifest, as if you were installing from scratch. This solution works for short-term use, but for something long-term, take a look at [virtualgo](https://github.com/GetStream/vg). To test out code that has been pushed as a new version, or to a branch or fork, see [changing dependencies](#changing-dependencies). ## Semantic Versioning `dep ensure` a uses an external [semver library](https://github.com/Masterminds/semver) to interpret the version constraints you specify in the manifest. The comparison operators are: * `=`: equal * `!=`: not equal * `>`: greater than * `<`: less than * `>=`: greater than or equal to * `<=`: less than or equal to * `-`: literal range. Eg: 1.2 - 1.4.5 is equivalent to >= 1.2, <= 1.4.5 * `~`: minor range. Eg: ~1.2.3 is equivalent to >= 1.2.3, < 1.3.0 * `^`: major range. Eg: ^1.2.3 is equivalent to >= 1.2.3, < 2.0.0 * `[xX*]`: wildcard. Eg: 1.2.x is equivalent to >= 1.2.0, < 1.3.0 You might, for example, include a constraint in your manifest that specifies `version = "=2.0.0"` to pin a dependency to version 2.0.0, or constrain to minor releases with: `version = "2.*"`. Refer to the [semver library](https://github.com/Masterminds/semver) documentation for more info. **Note**: When you specify a version *without an operator*, `dep` automatically uses the `^` operator by default. `dep ensure` will interpret the given version as the min-boundry of a range, for example: * `1.2.3` becomes the range `>=1.2.3, <2.0.0` * `0.2.3` becomes the range `>=0.2.3, <0.3.0` * `0.0.3` becomes the range `>=0.0.3, <0.1.0` ## Feedback Feedback is greatly appreciated. At this stage, the maintainers are most interested in feedback centered on the user experience (UX) of the tool. Do you have workflows that the tool supports well, or doesn't support at all? Do any of the commands have surprising effects, output, or results? Please check the existing issues and [FAQ](docs/FAQ.md) to see if your feedback has already been reported. If not, please file an issue, describing what you did or wanted to do, what you expected to happen, and what actually happened. ## Contributing Contributions are greatly appreciated. The maintainers actively manage the issues list, and try to highlight issues suitable for newcomers. The project follows the typical GitHub pull request model. See [CONTRIBUTING.md](CONTRIBUTING.md) for more details. Before starting any work, please either comment on an existing issue, or file a new one. dep-0.3.2/analyzer.go000066400000000000000000000024421317166637100144550ustar00rootroot00000000000000// 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 dep import ( "os" "path/filepath" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps" ) // Analyzer implements gps.ProjectAnalyzer. type Analyzer struct{} // HasDepMetadata determines if a dep manifest exists at the specified path. func (a Analyzer) HasDepMetadata(path string) bool { mf := filepath.Join(path, ManifestName) fileOK, err := fs.IsRegular(mf) return err == nil && fileOK } // DeriveManifestAndLock reads and returns the manifest at path/ManifestName or nil if one is not found. // The Lock is always nil for now. func (a Analyzer) DeriveManifestAndLock(path string, n gps.ProjectRoot) (gps.Manifest, gps.Lock, error) { if !a.HasDepMetadata(path) { return nil, nil, nil } f, err := os.Open(filepath.Join(path, ManifestName)) if err != nil { return nil, nil, err } defer f.Close() // Ignore warnings irrelevant to user. m, _, err := readManifest(f) if err != nil { return nil, nil, err } return m, nil, nil } // Info returns Analyzer's name and version info. func (a Analyzer) Info() gps.ProjectAnalyzerInfo { return gps.ProjectAnalyzerInfo{ Name: "dep", Version: 1, } } dep-0.3.2/analyzer_notwindows_test.go000066400000000000000000000006541317166637100200120ustar00rootroot00000000000000// Copyright 2017 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 !windows package dep import ( "io" "os" ) func makeUnreadable(path string) (io.Closer, error) { err := os.Chmod(path, 0222) if err != nil { return nil, err } return closer{}, nil } type closer struct{} func (closer) Close() error { return nil } dep-0.3.2/analyzer_test.go000066400000000000000000000053401317166637100155140ustar00rootroot00000000000000// 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 dep import ( "path/filepath" "testing" "github.com/golang/dep/internal/test" ) func TestAnalyzerDeriveManifestAndLock(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir("dep") golden := filepath.Join("analyzer", ManifestName) want := h.GetTestFileString(golden) h.TempCopy(filepath.Join("dep", ManifestName), golden) a := Analyzer{} m, l, err := a.DeriveManifestAndLock(h.Path("dep"), "my/fake/project") if err != nil { t.Fatal(err) } got, err := m.(*Manifest).MarshalTOML() if err != nil { t.Fatal(err) } if want != string(got) { if *test.UpdateGolden { if err := h.WriteTestFile(golden, string(got)); err != nil { t.Fatal(err) } } else { t.Fatalf("expected %s\n got %s", want, string(got)) } } if l != nil { t.Fatalf("expected lock to be nil, got: %#v", l) } } func TestAnalyzerDeriveManifestAndLockDoesNotExist(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir("dep") a := Analyzer{} m, l, err := a.DeriveManifestAndLock(h.Path("dep"), "my/fake/project") if m != nil || l != nil || err != nil { t.Fatalf("expected manifest & lock & err to be nil: m -> %#v l -> %#v err-> %#v", m, l, err) } } func TestAnalyzerDeriveManifestAndLockCannotOpen(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir("dep") // Simulate an inaccessible manifest file. h.TempFile(filepath.Join("dep", ManifestName), "") closer, err := makeUnreadable(filepath.Join(h.Path("dep"), ManifestName)) if err != nil { t.Fatal(err) } defer closer.Close() a := Analyzer{} // Verify that the solver rejects the manifest, rather than treating it as // offering no constraints. m, l, err := a.DeriveManifestAndLock(h.Path("dep"), "my/fake/project") if m != nil || l != nil || err == nil { t.Fatalf("expected manifest & lock to be nil, err to be not nil: m -> %#v l -> %#v err -> %#v", m, l, err) } } func TestAnalyzerDeriveManifestAndLockInvalidManifest(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir("dep") // Create a manifest with invalid contents h.TempFile(filepath.Join("dep", ManifestName), "invalid manifest") a := Analyzer{} m, l, err := a.DeriveManifestAndLock(h.Path("dep"), "my/fake/project") if m != nil || l != nil || err == nil { t.Fatalf("expected manifest & lock & err to be nil: m -> %#v l -> %#v err-> %#v", m, l, err) } } func TestAnalyzerInfo(t *testing.T) { a := Analyzer{} info := a.Info() if info.Name != "dep" || info.Version != 1 { t.Fatalf("expected name to be 'dep' and version to be 1: name -> %q vers -> %d", info.Name, info.Version) } } dep-0.3.2/analyzer_windows_test.go000066400000000000000000000017231317166637100172670ustar00rootroot00000000000000// Copyright 2017 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 dep import ( "io" "os" "syscall" ) // makeUnreadable opens the file at path in exclusive mode. A file opened in // exclusive mode cannot be opened again until the exclusive mode file handle // is closed. func makeUnreadable(path string) (io.Closer, error) { if len(path) == 0 { return nil, syscall.ERROR_FILE_NOT_FOUND } pathp, err := syscall.UTF16PtrFromString(path) if err != nil { return nil, err } access := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE) sharemode := uint32(0) // no sharing == exclusive mode sa := (*syscall.SecurityAttributes)(nil) createmode := uint32(syscall.OPEN_EXISTING) h, err := syscall.CreateFile(pathp, access, sharemode, sa, createmode, syscall.FILE_ATTRIBUTE_NORMAL, 0) if err != nil { return nil, err } return os.NewFile(uintptr(h), path), nil } dep-0.3.2/appveyor.yml000066400000000000000000000014551317166637100146740ustar00rootroot00000000000000version: "{build}" # Source Config clone_folder: c:\gopath\src\github.com\golang\dep # Build host environment: GOPATH: c:\gopath DEPTESTBYPASS501: 1 GOVERSION: 1.8 init: - git config --global core.autocrlf input # Build install: # Install the specific Go version. - rmdir c:\go /s /q - appveyor DownloadFile https://storage.googleapis.com/golang/go%GOVERSION%.windows-amd64.msi - msiexec /i go%GOVERSION%.windows-amd64.msi /q - choco install bzr - set Path=c:\go\bin;c:\gopath\bin;C:\Program Files (x86)\Bazaar\;C:\Program Files\Mercurial\%Path% - go version - go env build: false deploy: false test_script: - go build github.com/golang/dep/cmd/dep - for /f "" %%G in ('go list github.com/golang/dep/... ^| find /i /v "/vendor/"') do ( go test %%G & IF ERRORLEVEL == 1 EXIT 1) dep-0.3.2/cmd/000077500000000000000000000000001317166637100130425ustar00rootroot00000000000000dep-0.3.2/cmd/dep/000077500000000000000000000000001317166637100136125ustar00rootroot00000000000000dep-0.3.2/cmd/dep/dep_test.go000066400000000000000000000024611317166637100157530ustar00rootroot00000000000000// 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 main import ( "fmt" "os" "os/exec" "path/filepath" "testing" "github.com/golang/dep/internal/test" ) // The TestMain function creates a dep command for testing purposes and // deletes it after the tests have been run. // Most of this is taken from https://github.com/golang/go/blob/master/src/cmd/go/go_test.go and reused here. func TestMain(m *testing.M) { args := []string{"build", "-o", "testdep" + test.ExeSuffix} out, err := exec.Command("go", args...).CombinedOutput() if err != nil { fmt.Fprintf(os.Stderr, "building testdep failed: %v\n%s", err, out) os.Exit(2) } // Don't let these environment variables confuse the test. os.Unsetenv("GOPATH") os.Unsetenv("GIT_ALLOW_PROTOCOL") if home, ccacheDir := os.Getenv("HOME"), os.Getenv("CCACHE_DIR"); home != "" && ccacheDir == "" { // On some systems the default C compiler is ccache. // Setting HOME to a non-existent directory will break // those systems. Set CCACHE_DIR to cope. Issue 17668. os.Setenv("CCACHE_DIR", filepath.Join(home, ".ccache")) } os.Setenv("HOME", "/test-dep-home-does-not-exist") r := m.Run() os.Remove("testdep" + test.ExeSuffix) os.Exit(r) } dep-0.3.2/cmd/dep/ensure.go000066400000000000000000000722231317166637100154500ustar00rootroot00000000000000// 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 main import ( "bytes" "flag" "fmt" "go/build" "io/ioutil" "log" "os" "path/filepath" "sort" "strings" "sync" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/paths" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) const ensureShortHelp = `Ensure a dependency is safely vendored in the project` const ensureLongHelp = ` Project spec: [:alt source URL][@] Ensure gets a project into a complete, reproducible, and likely compilable state: * All non-stdlib imports are fulfilled * All rules in Gopkg.toml are respected * Gopkg.lock records precise versions for all dependencies * vendor/ is populated according to Gopkg.lock Ensure has fast techniques to determine that some of these steps may be unnecessary. If that determination is made, ensure may skip some steps. Flags may be passed to bypass these checks; -vendor-only will allow an out-of-date Gopkg.lock to populate vendor/, and -no-vendor will update Gopkg.lock (if needed), but never touch vendor/. The effect of passing project spec arguments varies slightly depending on the combination of flags that are passed. Examples: dep ensure Populate vendor from existing Gopkg.toml and Gopkg.lock dep ensure -add github.com/pkg/foo Introduce a named dependency at its newest version dep ensure -add github.com/pkg/foo@^1.0.1 Introduce a named dependency with a particular constraint For more detailed usage examples, see dep ensure -examples. ` const ensureExamples = ` dep ensure Solve the project's dependency graph, and place all dependencies in the vendor folder. If a dependency is in the lock file, use the version specified there. Otherwise, use the most recent version that can satisfy the constraints in the manifest file. dep ensure -vendor-only Write vendor/ from an exising Gopkg.lock file, without first verifying that the lock is in sync with imports and Gopkg.toml. (This may be useful for e.g. strategically layering a Docker images) dep ensure -add github.com/pkg/foo github.com/pkg/foo/bar Introduce one or more dependencies, at their newest version, ensuring that specific packages are present in Gopkg.lock and vendor/. Also, append a corresponding constraint to Gopkg.toml. Note: packages introduced in this way will disappear on the next "dep ensure" if an import statement is not added first. dep ensure -add github.com/pkg/foo/subpkg@1.0.0 bitbucket.org/pkg/bar/baz@master Append version constraints to Gopkg.toml for one or more packages, if no such rules already exist. If the named packages are not already imported, also ensure they are present in Gopkg.lock and vendor/. As in the preceding example, packages introduced in this way will disappear on the next "dep ensure" if an import statement is not added first. dep ensure -add github.com/pkg/foo:git.internal.com/alt/foo Specify an alternate location to treat as the upstream source for a dependency. dep ensure -update github.com/pkg/foo github.com/pkg/bar Update a list of dependencies to the latest versions allowed by Gopkg.toml, ignoring any versions recorded in Gopkg.lock. Write the results to Gopkg.lock and vendor/. dep ensure -update Update all dependencies to the latest versions allowed by Gopkg.toml, ignoring any versions recorded in Gopkg.lock. Update the lock file with any changes. (NOTE: Not recommended. Updating one/some dependencies at a time is preferred.) dep ensure -update -no-vendor As above, but only modify Gopkg.lock; leave vendor/ unchanged. dep ensure -no-vendor -dry-run This fails with a non zero exit code if Gopkg.lock is not up to date with the Gopkg.toml or the project imports. It can be useful to run this during CI to check if Gopkg.lock is up to date. ` var ( errUpdateArgsValidation = errors.New("update arguments validation failed") errAddDepsFailed = errors.New("adding dependencies failed") ) func (cmd *ensureCommand) Name() string { return "ensure" } func (cmd *ensureCommand) Args() string { return "[-update | -add] [-no-vendor | -vendor-only] [-dry-run] [...]" } func (cmd *ensureCommand) ShortHelp() string { return ensureShortHelp } func (cmd *ensureCommand) LongHelp() string { return ensureLongHelp } func (cmd *ensureCommand) Hidden() bool { return false } func (cmd *ensureCommand) Register(fs *flag.FlagSet) { fs.BoolVar(&cmd.examples, "examples", false, "print detailed usage examples") fs.BoolVar(&cmd.update, "update", false, "update the named dependencies (or all, if none are named) in Gopkg.lock to the latest allowed by Gopkg.toml") fs.BoolVar(&cmd.add, "add", false, "add new dependencies, or populate Gopkg.toml with constraints for existing dependencies") fs.BoolVar(&cmd.vendorOnly, "vendor-only", false, "populate vendor/ from Gopkg.lock without updating it first") fs.BoolVar(&cmd.noVendor, "no-vendor", false, "update Gopkg.lock (if needed), but do not update vendor/") fs.BoolVar(&cmd.dryRun, "dry-run", false, "only report the changes that would be made") } type ensureCommand struct { examples bool update bool add bool noVendor bool vendorOnly bool dryRun bool } func (cmd *ensureCommand) Run(ctx *dep.Ctx, args []string) error { if cmd.examples { ctx.Err.Println(strings.TrimSpace(ensureExamples)) return nil } if err := cmd.validateFlags(); err != nil { return err } p, err := ctx.LoadProject() if err != nil { return err } sm, err := ctx.SourceManager() if err != nil { return err } sm.UseDefaultSignalHandling() defer sm.Release() if err := dep.ValidateProjectRoots(ctx, p.Manifest, sm); err != nil { return err } params := p.MakeParams() if ctx.Verbose { params.TraceLogger = ctx.Err } if cmd.vendorOnly { return cmd.runVendorOnly(ctx, args, p, sm, params) } params.RootPackageTree, err = p.ParseRootPackageTree() if err != nil { return err } if fatal, err := checkErrors(params.RootPackageTree.Packages, p.Manifest.IgnoredPackages()); err != nil { if fatal { return err } else if ctx.Verbose { ctx.Out.Println(err) } } if cmd.add { return cmd.runAdd(ctx, args, p, sm, params) } else if cmd.update { return cmd.runUpdate(ctx, args, p, sm, params) } return cmd.runDefault(ctx, args, p, sm, params) } func (cmd *ensureCommand) validateFlags() error { if cmd.add && cmd.update { return errors.New("cannot pass both -add and -update") } if cmd.vendorOnly { if cmd.update { return errors.New("-vendor-only makes -update a no-op; cannot pass them together") } if cmd.add { return errors.New("-vendor-only makes -add a no-op; cannot pass them together") } if cmd.noVendor { // TODO(sdboyer) can't think of anything not snarky right now return errors.New("really?") } } return nil } func (cmd *ensureCommand) runDefault(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error { // Bare ensure doesn't take any args. if len(args) != 0 { return errors.New("dep ensure only takes spec arguments with -add or -update") } if err := ctx.ValidateParams(sm, params); err != nil { return err } solver, err := gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "prepare solver") } if p.Lock != nil && bytes.Equal(p.Lock.InputsDigest(), solver.HashInputs()) { // Memo matches, so there's probably nothing to do. if ctx.Verbose { ctx.Out.Printf("%s was already in sync with imports and %s\n", dep.LockName, dep.ManifestName) } if cmd.noVendor { // The user said not to touch vendor/, so definitely nothing to do. return nil } // TODO(sdboyer) The desired behavior at this point is to determine // whether it's necessary to write out vendor, or if it's already // consistent with the lock. However, we haven't yet determined what // that "verification" is supposed to look like (#121); in the meantime, // we unconditionally write out vendor/ so that `dep ensure`'s behavior // is maximally compatible with what it will eventually become. sw, err := dep.NewSafeWriter(nil, p.Lock, p.Lock, dep.VendorAlways) if err != nil { return err } if cmd.dryRun { return sw.PrintPreparedActions(ctx.Out, ctx.Verbose) } logger := ctx.Err if !ctx.Verbose { logger = log.New(ioutil.Discard, "", 0) } return errors.WithMessage(sw.Write(p.AbsRoot, sm, true, logger), "grouped write of manifest, lock and vendor") } if cmd.noVendor && cmd.dryRun { return errors.New("Gopkg.lock was not up to date") } solution, err := solver.Solve() if err != nil { handleAllTheFailuresOfTheWorld(err) return errors.Wrap(err, "ensure Solve()") } vendorBehavior := dep.VendorOnChanged if cmd.noVendor { vendorBehavior = dep.VendorNever } sw, err := dep.NewSafeWriter(nil, p.Lock, dep.LockFromSolution(solution), vendorBehavior) if err != nil { return err } if cmd.dryRun { return sw.PrintPreparedActions(ctx.Out, ctx.Verbose) } logger := ctx.Err if !ctx.Verbose { logger = log.New(ioutil.Discard, "", 0) } return errors.Wrap(sw.Write(p.AbsRoot, sm, false, logger), "grouped write of manifest, lock and vendor") } func (cmd *ensureCommand) runVendorOnly(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error { if len(args) != 0 { return errors.Errorf("dep ensure -vendor-only only populates vendor/ from %s; it takes no spec arguments", dep.LockName) } if p.Lock == nil { return errors.Errorf("no %s exists from which to populate vendor/", dep.LockName) } // Pass the same lock as old and new so that the writer will observe no // difference and choose not to write it out. sw, err := dep.NewSafeWriter(nil, p.Lock, p.Lock, dep.VendorAlways) if err != nil { return err } if cmd.dryRun { return sw.PrintPreparedActions(ctx.Out, ctx.Verbose) } logger := ctx.Err if !ctx.Verbose { logger = log.New(ioutil.Discard, "", 0) } return errors.WithMessage(sw.Write(p.AbsRoot, sm, true, logger), "grouped write of manifest, lock and vendor") } func (cmd *ensureCommand) runUpdate(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error { if p.Lock == nil { return errors.Errorf("-update works by updating the versions recorded in %s, but %s does not exist", dep.LockName, dep.LockName) } if err := ctx.ValidateParams(sm, params); err != nil { return err } // We'll need to discard this prepared solver as later work changes params, // but solver preparation is cheap and worth doing up front in order to // perform the fastpath check of hash comparison. solver, err := gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "fastpath solver prepare") } // Compare the hashes. If they're not equal, bail out and ask the user to // run a straight `dep ensure` before updating. This is handholding the // user a bit, but the extra effort required is minimal, and it ensures the // user is isolating variables in the event of solve problems (was it the // "pending" changes, or the -update that caused the problem?). if !bytes.Equal(p.Lock.InputsDigest(), solver.HashInputs()) { ctx.Out.Printf("Warning: %s is out of sync with %s or the project's imports.", dep.LockName, dep.ManifestName) } // When -update is specified without args, allow every dependency to change // versions, regardless of the lock file. if len(args) == 0 { params.ChangeAll = true } if err := validateUpdateArgs(ctx, args, p, sm, ¶ms); err != nil { return err } // Re-prepare a solver now that our params are complete. solver, err = gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "fastpath solver prepare") } solution, err := solver.Solve() if err != nil { // TODO(sdboyer) special handling for warning cases as described in spec // - e.g., named projects did not upgrade even though newer versions // were available. handleAllTheFailuresOfTheWorld(err) return errors.Wrap(err, "ensure Solve()") } sw, err := dep.NewSafeWriter(nil, p.Lock, dep.LockFromSolution(solution), dep.VendorOnChanged) if err != nil { return err } if cmd.dryRun { return sw.PrintPreparedActions(ctx.Out, ctx.Verbose) } logger := ctx.Err if !ctx.Verbose { logger = log.New(ioutil.Discard, "", 0) } return errors.Wrap(sw.Write(p.AbsRoot, sm, false, logger), "grouped write of manifest, lock and vendor") } func (cmd *ensureCommand) runAdd(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error { if len(args) == 0 { return errors.New("must specify at least one project or package to -add") } if err := ctx.ValidateParams(sm, params); err != nil { return err } // We'll need to discard this prepared solver as later work changes params, // but solver preparation is cheap and worth doing up front in order to // perform the fastpath check of hash comparison. solver, err := gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "fastpath solver prepare") } // Compare the hashes. If they're not equal, bail out and ask the user to // run a straight `dep ensure` before updating. This is handholding the // user a bit, but the extra effort required is minimal, and it ensures the // user is isolating variables in the event of solve problems (was it the // "pending" changes, or the -add that caused the problem?). if p.Lock != nil && !bytes.Equal(p.Lock.InputsDigest(), solver.HashInputs()) { ctx.Out.Printf("Warning: %s is out of sync with %s or the project's imports.", dep.LockName, dep.ManifestName) } rm, _ := params.RootPackageTree.ToReachMap(true, true, false, p.Manifest.IgnoredPackages()) // TODO(sdboyer) re-enable this once we ToReachMap() intelligently filters out normally-excluded (_*, .*), dirs from errmap //rm, errmap := params.RootPackageTree.ToReachMap(true, true, false, p.Manifest.IgnoredPackages()) // Having some problematic internal packages isn't cause for termination, // but the user needs to be warned. //for fail, err := range errmap { //if _, is := err.Err.(*build.NoGoError); !is { //ctx.Err.Printf("Warning: %s, %s", fail, err) //} //} // Compile unique sets of 1) all external packages imported or required, and // 2) the project roots under which they fall. exmap := make(map[string]bool) exrmap := make(map[gps.ProjectRoot]bool) for _, ex := range append(rm.FlattenFn(paths.IsStandardImportPath), p.Manifest.Required...) { exmap[ex] = true root, err := sm.DeduceProjectRoot(ex) if err != nil { // This should be very uncommon to hit, as it entails that we // couldn't deduce the root for an import, but that some previous // solve run WAS able to deduce the root. It's most likely to occur // if the user has e.g. not connected to their organization's VPN, // and thus cannot access an internal go-get metadata service. return errors.Wrapf(err, "could not deduce project root for %s", ex) } exrmap[root] = true } // Note: these flags are only partialy used by the latter parts of the // algorithm; rather, it relies on inference. However, they remain in their // entirety as future needs may make further use of them, being a handy, // terse way of expressing the original context of the arg inputs. type addType uint8 const ( // Straightforward case - this induces a temporary require, and thus // a warning message about it being ephemeral. isInManifest addType = 1 << iota // If solving works, we'll pull this constraint from the in-memory // manifest (where we recorded it earlier) and then append it to the // manifest on disk. isInImportsWithConstraint // If solving works, we'll extract a constraint from the lock and // append it into the manifest on disk, similar to init's behavior. isInImportsNoConstraint // This gets a message AND a hoist from the solution up into the // manifest on disk. isInNeither ) type addInstruction struct { id gps.ProjectIdentifier ephReq map[string]bool constraint gps.Constraint typ addType } addInstructions := make(map[gps.ProjectRoot]addInstruction) // A mutex for limited access to addInstructions by goroutines. var mutex sync.Mutex // Channel for receiving all the errors. errCh := make(chan error, len(args)) var wg sync.WaitGroup ctx.Out.Println("Fetching sources...") for i, arg := range args { wg.Add(1) if ctx.Verbose { ctx.Err.Printf("(%d/%d) %s\n", i+1, len(args), arg) } go func(arg string) { defer wg.Done() pc, path, err := getProjectConstraint(arg, sm) if err != nil { // TODO(sdboyer) ensure these errors are contextualized in a sensible way for -add errCh <- err return } // check if the the parsed path is the current root path if strings.EqualFold(string(p.ImportRoot), string(pc.Ident.ProjectRoot)) { errCh <- errors.New("cannot add current project to itself") return } inManifest := p.Manifest.HasConstraintsOn(pc.Ident.ProjectRoot) inImports := exrmap[pc.Ident.ProjectRoot] if inManifest && inImports { errCh <- errors.Errorf("nothing to -add, %s is already in %s and the project's direct imports or required list", pc.Ident.ProjectRoot, dep.ManifestName) return } err = sm.SyncSourceFor(pc.Ident) if err != nil { errCh <- errors.Wrapf(err, "failed to fetch source for %s", pc.Ident.ProjectRoot) return } someConstraint := !gps.IsAny(pc.Constraint) || pc.Ident.Source != "" // Obtain a lock for addInstructions mutex.Lock() defer mutex.Unlock() instr, has := addInstructions[pc.Ident.ProjectRoot] if has { // Multiple packages from the same project were specified as // arguments; make sure they agree on declared constraints. // TODO(sdboyer) until we have a general method for checking constraint equality, only allow one to declare if someConstraint { if !gps.IsAny(instr.constraint) || instr.id.Source != "" { errCh <- errors.Errorf("can only specify rules once per project being added; rules were given at least twice for %s", pc.Ident.ProjectRoot) return } instr.constraint = pc.Constraint instr.id = pc.Ident } } else { instr.ephReq = make(map[string]bool) instr.constraint = pc.Constraint instr.id = pc.Ident } if inManifest { if someConstraint { errCh <- errors.Errorf("%s already contains rules for %s, cannot specify a version constraint or alternate source", dep.ManifestName, path) return } instr.ephReq[path] = true instr.typ |= isInManifest } else if inImports { if !someConstraint { if exmap[path] { errCh <- errors.Errorf("%s is already imported or required, so -add is only valid with a constraint", path) return } // No constraints, but the package isn't imported; require it. // TODO(sdboyer) this case seems like it's getting overly specific and risks muddying the water more than it helps instr.ephReq[path] = true instr.typ |= isInImportsNoConstraint } else { // Don't require on this branch if the path was a ProjectRoot; // most common here will be the user adding constraints to // something they already imported, and if they specify the // root, there's a good chance they don't actually want to // require the project's root package, but are just trying to // indicate which project should receive the constraints. if !exmap[path] && string(pc.Ident.ProjectRoot) != path { instr.ephReq[path] = true } instr.typ |= isInImportsWithConstraint } } else { instr.typ |= isInNeither instr.ephReq[path] = true } addInstructions[pc.Ident.ProjectRoot] = instr }(arg) } wg.Wait() close(errCh) // Newline after printing the fetching source output. ctx.Err.Println() // Log all the errors. if len(errCh) > 0 { ctx.Err.Printf("Failed to add the dependencies:\n\n") for err := range errCh { ctx.Err.Println(" ✗", err.Error()) } ctx.Err.Println() return errAddDepsFailed } // We're now sure all of our add instructions are individually and mutually // valid, so it's safe to begin modifying the input parameters. for pr, instr := range addInstructions { // The arg processing logic above only adds to the ephReq list if // that package definitely needs to be on that list, so we don't // need to check instr.typ here - if it's in instr.ephReq, it // definitely needs to be added to the manifest's required list. for path := range instr.ephReq { p.Manifest.Required = append(p.Manifest.Required, path) } // Only two branches can possibly be adding rules, though the // isInNeither case may or may not have an empty constraint. if instr.typ&(isInNeither|isInImportsWithConstraint) != 0 { p.Manifest.Constraints[pr] = gps.ProjectProperties{ Source: instr.id.Source, Constraint: instr.constraint, } } } // Re-prepare a solver now that our params are complete. solver, err = gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "fastpath solver prepare") } solution, err := solver.Solve() if err != nil { // TODO(sdboyer) detect if the failure was specifically about some of the -add arguments handleAllTheFailuresOfTheWorld(err) return errors.Wrap(err, "ensure Solve()") } // Prep post-actions and feedback from adds. var reqlist []string appender := dep.NewManifest() for pr, instr := range addInstructions { for path := range instr.ephReq { reqlist = append(reqlist, path) } if instr.typ&isInManifest == 0 { var pp gps.ProjectProperties var found bool for _, proj := range solution.Projects() { // We compare just ProjectRoot instead of the whole // ProjectIdentifier here because an empty source on the input side // could have been converted into a source by the solver. if proj.Ident().ProjectRoot == pr { found = true pp = getProjectPropertiesFromVersion(proj.Version()) break } } if !found { panic(fmt.Sprintf("unreachable: solution did not contain -add argument %s, but solver did not fail", pr)) } pp.Source = instr.id.Source if !gps.IsAny(instr.constraint) { pp.Constraint = instr.constraint } appender.Constraints[pr] = pp } } extra, err := appender.MarshalTOML() if err != nil { return errors.Wrap(err, "could not marshal manifest into TOML") } sort.Strings(reqlist) sw, err := dep.NewSafeWriter(nil, p.Lock, dep.LockFromSolution(solution), dep.VendorOnChanged) if err != nil { return err } if cmd.dryRun { return sw.PrintPreparedActions(ctx.Out, ctx.Verbose) } logger := ctx.Err if !ctx.Verbose { logger = log.New(ioutil.Discard, "", 0) } if err := errors.Wrap(sw.Write(p.AbsRoot, sm, true, logger), "grouped write of manifest, lock and vendor"); err != nil { return err } // FIXME(sdboyer) manifest writes ABSOLUTELY need verification - follow up! f, err := os.OpenFile(filepath.Join(p.AbsRoot, dep.ManifestName), os.O_APPEND|os.O_WRONLY, 0666) if err != nil { return errors.Wrapf(err, "opening %s failed", dep.ManifestName) } if _, err := f.Write(extra); err != nil { f.Close() return errors.Wrapf(err, "writing to %s failed", dep.ManifestName) } switch len(reqlist) { case 0: // nothing to tell the user case 1: if cmd.noVendor { ctx.Out.Printf("%q is not imported by your project, and has been temporarily added to %s.\n", reqlist[0], dep.LockName) ctx.Out.Printf("If you run \"dep ensure\" again before actually importing it, it will disappear from %s. Running \"dep ensure -vendor-only\" is safe, and will guarantee it is present in vendor/.", dep.LockName) } else { ctx.Out.Printf("%q is not imported by your project, and has been temporarily added to %s and vendor/.\n", reqlist[0], dep.LockName) ctx.Out.Printf("If you run \"dep ensure\" again before actually importing it, it will disappear from %s and vendor/.", dep.LockName) } default: if cmd.noVendor { ctx.Out.Printf("The following packages are not imported by your project, and have been temporarily added to %s:\n", dep.LockName) ctx.Out.Printf("\t%s\n", strings.Join(reqlist, "\n\t")) ctx.Out.Printf("If you run \"dep ensure\" again before actually importing them, they will disappear from %s. Running \"dep ensure -vendor-only\" is safe, and will guarantee they are present in vendor/.", dep.LockName) } else { ctx.Out.Printf("The following packages are not imported by your project, and have been temporarily added to %s and vendor/:\n", dep.LockName) ctx.Out.Printf("\t%s\n", strings.Join(reqlist, "\n\t")) ctx.Out.Printf("If you run \"dep ensure\" again before actually importing them, they will disappear from %s and vendor/.", dep.LockName) } } return errors.Wrapf(f.Close(), "closing %s", dep.ManifestName) } func getProjectConstraint(arg string, sm gps.SourceManager) (gps.ProjectConstraint, string, error) { emptyPC := gps.ProjectConstraint{ Constraint: gps.Any(), // default to any; avoids panics later } // try to split on '@' // When there is no `@`, use any version var versionStr string atIndex := strings.Index(arg, "@") if atIndex > 0 { parts := strings.SplitN(arg, "@", 2) arg = parts[0] versionStr = parts[1] } // TODO: if we decide to keep equals..... // split on colon if there is a network location var source string colonIndex := strings.Index(arg, ":") if colonIndex > 0 { parts := strings.SplitN(arg, ":", 2) arg = parts[0] source = parts[1] } pr, err := sm.DeduceProjectRoot(arg) if err != nil { return emptyPC, "", errors.Wrapf(err, "could not infer project root from dependency path: %s", arg) // this should go through to the user } pi := gps.ProjectIdentifier{ProjectRoot: pr, Source: source} c, err := sm.InferConstraint(versionStr, pi) if err != nil { return emptyPC, "", err } return gps.ProjectConstraint{Ident: pi, Constraint: c}, arg, nil } func checkErrors(m map[string]pkgtree.PackageOrErr, ignore *pkgtree.IgnoredRuleset) (fatal bool, err error) { var ( noGoErrors int pkgtreeErrors = make(pkgtreeErrs, 0, len(m)) ) for ip, poe := range m { if ignore.IsIgnored(ip) { continue } if poe.Err != nil { switch poe.Err.(type) { case *build.NoGoError: noGoErrors++ default: pkgtreeErrors = append(pkgtreeErrors, poe.Err) } } } // If pkgtree was empty or all dirs lacked any Go code, return an error. if len(m) == 0 || len(m) == noGoErrors { return true, errors.New("no dirs contained any Go code") } // If all dirs contained build errors, return an error. if len(m) == len(pkgtreeErrors) { return true, errors.New("all dirs contained build errors") } // If all directories either had no Go files or caused a build error, return an error. if len(m) == len(pkgtreeErrors)+noGoErrors { return true, pkgtreeErrors } // If m contained some errors, return a warning with those errors. if len(pkgtreeErrors) > 0 { return false, pkgtreeErrors } return false, nil } type pkgtreeErrs []error func (e pkgtreeErrs) Error() string { errs := make([]string, 0, len(e)) for _, err := range e { errs = append(errs, err.Error()) } return fmt.Sprintf("found %d errors in the package tree:\n%s", len(e), strings.Join(errs, "\n")) } func validateUpdateArgs(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params *gps.SolveParameters) error { // Channel for receiving all the valid arguments. argsCh := make(chan string, len(args)) // Channel for receiving all the validation errors. errCh := make(chan error, len(args)) var wg sync.WaitGroup // Allow any of specified project versions to change, regardless of the lock // file. for _, arg := range args { wg.Add(1) go func(arg string) { defer wg.Done() // Ensure the provided path has a deducible project root. pc, path, err := getProjectConstraint(arg, sm) if err != nil { // TODO(sdboyer) ensure these errors are contextualized in a sensible way for -update errCh <- err return } if path != string(pc.Ident.ProjectRoot) { // TODO(sdboyer): does this really merit an abortive error? errCh <- errors.Errorf("%s is not a project root, try %s instead", path, pc.Ident.ProjectRoot) return } if !p.Lock.HasProjectWithRoot(pc.Ident.ProjectRoot) { errCh <- errors.Errorf("%s is not present in %s, cannot -update it", pc.Ident.ProjectRoot, dep.LockName) return } if pc.Ident.Source != "" { errCh <- errors.Errorf("cannot specify alternate sources on -update (%s)", pc.Ident.Source) return } if !gps.IsAny(pc.Constraint) { // TODO(sdboyer) constraints should be allowed to allow solves that // target particular versions while remaining within declared constraints. errCh <- errors.Errorf("version constraint %s passed for %s, but -update follows constraints declared in %s, not CLI arguments", pc.Constraint, pc.Ident.ProjectRoot, dep.ManifestName) return } // Valid argument. argsCh <- arg }(arg) } wg.Wait() close(errCh) close(argsCh) // Log all the errors. if len(errCh) > 0 { ctx.Err.Printf("Invalid arguments passed to ensure -update:\n\n") for err := range errCh { ctx.Err.Println(" ✗", err.Error()) } ctx.Err.Println() return errUpdateArgsValidation } // Add all the valid arguments to solve params. for arg := range argsCh { params.ToChange = append(params.ToChange, gps.ProjectRoot(arg)) } return nil } dep-0.3.2/cmd/dep/ensure_test.go000066400000000000000000000141501317166637100165020ustar00rootroot00000000000000// Copyright 2017 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 main import ( "bytes" "errors" "go/build" "io/ioutil" "log" "strings" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/pkgtree" "github.com/golang/dep/internal/test" ) func TestInvalidEnsureFlagCombinations(t *testing.T) { ec := &ensureCommand{ update: true, add: true, } if err := ec.validateFlags(); err == nil { t.Error("-add and -update together should fail validation") } ec.vendorOnly, ec.add = true, false if err := ec.validateFlags(); err == nil { t.Error("-vendor-only with -update should fail validation") } ec.add, ec.update = true, false if err := ec.validateFlags(); err == nil { t.Error("-vendor-only with -add should fail validation") } ec.noVendor, ec.add = true, false if err := ec.validateFlags(); err == nil { t.Error("-vendor-only with -no-vendor should fail validation") } ec.noVendor = false // Also verify that the plain ensure path takes no args. This is a shady // test, as lots of other things COULD return errors, and we don't check // anything other than the error being non-nil. For now, it works well // because a panic will quickly result if the initial arg length validation // checks are incorrectly handled. if err := ec.runDefault(nil, []string{"foo"}, nil, nil, gps.SolveParameters{}); err == nil { t.Errorf("no args to plain ensure with -vendor-only") } ec.vendorOnly = false if err := ec.runDefault(nil, []string{"foo"}, nil, nil, gps.SolveParameters{}); err == nil { t.Errorf("no args to plain ensure") } } func TestCheckErrors(t *testing.T) { tt := []struct { name string fatal bool pkgOrErrMap map[string]pkgtree.PackageOrErr }{ { name: "noErrors", fatal: false, pkgOrErrMap: map[string]pkgtree.PackageOrErr{ "mypkg": { P: pkgtree.Package{}, }, }, }, { name: "hasErrors", fatal: true, pkgOrErrMap: map[string]pkgtree.PackageOrErr{ "github.com/me/pkg": { Err: &build.NoGoError{}, }, "github.com/someone/pkg": { Err: errors.New("code is busted"), }, }, }, { name: "onlyGoErrors", fatal: false, pkgOrErrMap: map[string]pkgtree.PackageOrErr{ "github.com/me/pkg": { Err: &build.NoGoError{}, }, "github.com/someone/pkg": { P: pkgtree.Package{}, }, }, }, { name: "onlyBuildErrors", fatal: false, pkgOrErrMap: map[string]pkgtree.PackageOrErr{ "github.com/me/pkg": { Err: &build.NoGoError{}, }, "github.com/someone/pkg": { P: pkgtree.Package{}, }, }, }, { name: "allGoErrors", fatal: true, pkgOrErrMap: map[string]pkgtree.PackageOrErr{ "github.com/me/pkg": { Err: &build.NoGoError{}, }, }, }, { name: "allMixedErrors", fatal: true, pkgOrErrMap: map[string]pkgtree.PackageOrErr{ "github.com/me/pkg": { Err: &build.NoGoError{}, }, "github.com/someone/pkg": { Err: errors.New("code is busted"), }, }, }, } for _, tc := range tt { t.Run(tc.name, func(t *testing.T) { fatal, err := checkErrors(tc.pkgOrErrMap, nil) if tc.fatal != fatal { t.Fatalf("expected fatal flag to be %T, got %T", tc.fatal, fatal) } if err == nil && fatal { t.Fatal("unexpected fatal flag value while err is nil") } }) } } func TestValidateUpdateArgs(t *testing.T) { cases := []struct { name string args []string wantError error wantWarn []string lockedProjects []string }{ { name: "empty args", args: []string{}, wantError: nil, }, { name: "not project root", args: []string{"github.com/golang/dep/cmd"}, wantError: errUpdateArgsValidation, wantWarn: []string{ "github.com/golang/dep/cmd is not a project root, try github.com/golang/dep instead", }, }, { name: "not present in lock", args: []string{"github.com/golang/dep"}, wantError: errUpdateArgsValidation, wantWarn: []string{ "github.com/golang/dep is not present in Gopkg.lock, cannot -update it", }, }, { name: "cannot specify alternate sources", args: []string{"github.com/golang/dep:github.com/example/dep"}, wantError: errUpdateArgsValidation, wantWarn: []string{ "cannot specify alternate sources on -update (github.com/example/dep)", }, lockedProjects: []string{"github.com/golang/dep"}, }, { name: "version constraint passed", args: []string{"github.com/golang/dep@master"}, wantError: errUpdateArgsValidation, wantWarn: []string{ "version constraint master passed for github.com/golang/dep, but -update follows constraints declared in Gopkg.toml, not CLI arguments", }, lockedProjects: []string{"github.com/golang/dep"}, }, } h := test.NewHelper(t) defer h.Cleanup() h.TempDir("src") pwd := h.Path(".") stderrOutput := &bytes.Buffer{} errLogger := log.New(stderrOutput, "", 0) ctx := &dep.Ctx{ GOPATH: pwd, Out: log.New(ioutil.Discard, "", 0), Err: errLogger, } sm, err := ctx.SourceManager() h.Must(err) defer sm.Release() p := new(dep.Project) params := p.MakeParams() for _, c := range cases { t.Run(c.name, func(t *testing.T) { // Empty the buffer for every case stderrOutput.Reset() // Fill up the locked projects lockedProjects := []gps.LockedProject{} for _, lp := range c.lockedProjects { pi := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot(lp)} lockedProjects = append(lockedProjects, gps.NewLockedProject(pi, gps.NewVersion("v1.0.0"), []string{})) } // Add lock to project p.Lock = &dep.Lock{P: lockedProjects} err := validateUpdateArgs(ctx, c.args, p, sm, ¶ms) if err != c.wantError { t.Fatalf("Unexpected error while validating update args:\n\t(GOT): %v\n\t(WNT): %v", err, c.wantError) } warnings := stderrOutput.String() for _, warn := range c.wantWarn { if !strings.Contains(warnings, warn) { t.Fatalf("Expected validateUpdateArgs errors to contain: %q", warn) } } }) } } dep-0.3.2/cmd/dep/gopath_scanner.go000066400000000000000000000246201317166637100171400ustar00rootroot00000000000000// 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 main import ( "os" "path/filepath" "strings" "sync" "github.com/golang/dep" fb "github.com/golang/dep/internal/feedback" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/paths" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) // gopathScanner supplies manifest/lock data by scanning the contents of GOPATH // It uses its results to fill-in any missing details left by the rootAnalyzer. type gopathScanner struct { ctx *dep.Ctx directDeps map[string]bool sm gps.SourceManager pd projectData origM *dep.Manifest origL *dep.Lock } func newGopathScanner(ctx *dep.Ctx, directDeps map[string]bool, sm gps.SourceManager) *gopathScanner { return &gopathScanner{ ctx: ctx, directDeps: directDeps, sm: sm, } } // InitializeRootManifestAndLock performs analysis of the filesystem tree rooted // at path, with the root import path importRoot, to determine the project's // constraints. Respect any initial constraints defined in the root manifest and // lock. func (g *gopathScanner) InitializeRootManifestAndLock(rootM *dep.Manifest, rootL *dep.Lock) error { var err error g.ctx.Err.Println("Searching GOPATH for projects...") g.pd, err = g.scanGopathForDependencies() if err != nil { return err } g.origM = dep.NewManifest() g.origM.Constraints = g.pd.constraints g.origL = &dep.Lock{ P: make([]gps.LockedProject, 0, len(g.pd.ondisk)), } for pr, v := range g.pd.ondisk { // That we have to chop off these path prefixes is a symptom of // a problem in gps itself pkgs := make([]string, 0, len(g.pd.dependencies[pr])) prslash := string(pr) + "/" for _, pkg := range g.pd.dependencies[pr] { if pkg == string(pr) { pkgs = append(pkgs, ".") } else { pkgs = append(pkgs, trimPathPrefix(pkg, prslash)) } } g.origL.P = append(g.origL.P, gps.NewLockedProject( gps.ProjectIdentifier{ProjectRoot: pr}, v, pkgs), ) } g.overlay(rootM, rootL) return nil } // Fill in gaps in the root manifest/lock with data found from the GOPATH. func (g *gopathScanner) overlay(rootM *dep.Manifest, rootL *dep.Lock) { for pkg, prj := range g.origM.Constraints { if _, has := rootM.Constraints[pkg]; has { continue } rootM.Constraints[pkg] = prj v := g.pd.ondisk[pkg] pi := gps.ProjectIdentifier{ProjectRoot: pkg, Source: prj.Source} f := fb.NewConstraintFeedback(gps.ProjectConstraint{Ident: pi, Constraint: v}, fb.DepTypeDirect) f.LogFeedback(g.ctx.Err) f = fb.NewLockedProjectFeedback(gps.NewLockedProject(pi, v, nil), fb.DepTypeDirect) f.LogFeedback(g.ctx.Err) } // Keep track of which projects have been locked lockedProjects := map[gps.ProjectRoot]bool{} for _, lp := range rootL.P { lockedProjects[lp.Ident().ProjectRoot] = true } for _, lp := range g.origL.P { pkg := lp.Ident().ProjectRoot if _, isLocked := lockedProjects[pkg]; isLocked { continue } rootL.P = append(rootL.P, lp) lockedProjects[pkg] = true if _, isDirect := g.directDeps[string(pkg)]; !isDirect { f := fb.NewLockedProjectFeedback(lp, fb.DepTypeTransitive) f.LogFeedback(g.ctx.Err) } } // Identify projects whose version is unknown and will have to be solved for var unlockedProjects []string for pr := range g.pd.notondisk { if _, isLocked := lockedProjects[pr]; isLocked { continue } unlockedProjects = append(unlockedProjects, string(pr)) } if len(unlockedProjects) > 0 { g.ctx.Err.Printf("Following dependencies were not found in GOPATH. "+ "Dep will use the most recent versions of these projects.\n %s", strings.Join(unlockedProjects, "\n ")) } } func trimPathPrefix(p1, p2 string) string { if isPrefix, _ := fs.HasFilepathPrefix(p1, p2); isPrefix { return p1[len(p2):] } return p1 } // contains checks if a array of strings contains a value func contains(a []string, b string) bool { for _, v := range a { if b == v { return true } } return false } // getProjectPropertiesFromVersion takes a Version and returns a proper // ProjectProperties with Constraint value based on the provided version. func getProjectPropertiesFromVersion(v gps.Version) gps.ProjectProperties { pp := gps.ProjectProperties{} // extract version and ignore if it's revision only switch tv := v.(type) { case gps.PairedVersion: v = tv.Unpair() case gps.Revision: return pp } switch v.Type() { case gps.IsBranch, gps.IsVersion: pp.Constraint = v case gps.IsSemver: c, err := gps.NewSemverConstraintIC(v.String()) if err != nil { panic(err) } pp.Constraint = c } return pp } type projectData struct { constraints gps.ProjectConstraints // constraints that could be found dependencies map[gps.ProjectRoot][]string // all dependencies (imports) found by project root notondisk map[gps.ProjectRoot]bool // projects that were not found on disk ondisk map[gps.ProjectRoot]gps.Version // projects that were found on disk } func (g *gopathScanner) scanGopathForDependencies() (projectData, error) { constraints := make(gps.ProjectConstraints) dependencies := make(map[gps.ProjectRoot][]string) packages := make(map[string]bool) notondisk := make(map[gps.ProjectRoot]bool) ondisk := make(map[gps.ProjectRoot]gps.Version) var syncDepGroup sync.WaitGroup syncDep := func(pr gps.ProjectRoot, sm gps.SourceManager) { if err := sm.SyncSourceFor(gps.ProjectIdentifier{ProjectRoot: pr}); err != nil { g.ctx.Err.Printf("%+v", errors.Wrapf(err, "Unable to cache %s", pr)) } syncDepGroup.Done() } if len(g.directDeps) == 0 { return projectData{}, nil } for ip := range g.directDeps { pr, err := g.sm.DeduceProjectRoot(ip) if err != nil { return projectData{}, errors.Wrap(err, "sm.DeduceProjectRoot") } packages[ip] = true if _, has := dependencies[pr]; has { dependencies[pr] = append(dependencies[pr], ip) continue } syncDepGroup.Add(1) go syncDep(pr, g.sm) dependencies[pr] = []string{ip} abs, err := g.ctx.AbsForImport(string(pr)) if err != nil { notondisk[pr] = true continue } v, err := gps.VCSVersion(abs) if err != nil { notondisk[pr] = true continue } ondisk[pr] = v pp := getProjectPropertiesFromVersion(v) if pp.Constraint != nil || pp.Source != "" { constraints[pr] = pp } } // Explore the packages we've found for transitive deps, either // completing the lock or identifying (more) missing projects that we'll // need to ask gps to solve for us. colors := make(map[string]uint8) const ( white uint8 = iota grey black ) // cache of PackageTrees, so we don't parse projects more than once ptrees := make(map[gps.ProjectRoot]pkgtree.PackageTree) // depth-first traverser var dft func(string) error dft = func(pkg string) error { switch colors[pkg] { case white: colors[pkg] = grey pr, err := g.sm.DeduceProjectRoot(pkg) if err != nil { return errors.Wrap(err, "could not deduce project root for "+pkg) } // We already visited this project root earlier via some other // pkg within it, and made the decision that it's not on disk. // Respect that decision, and pop the stack. if notondisk[pr] { colors[pkg] = black return nil } ptree, has := ptrees[pr] if !has { // It's fine if the root does not exist - it indicates that this // project is not present in the workspace, and so we need to // solve to deal with this dep. r := filepath.Join(g.ctx.GOPATH, "src", string(pr)) fi, err := os.Stat(r) if os.IsNotExist(err) || !fi.IsDir() { colors[pkg] = black notondisk[pr] = true return nil } // We know the project is on disk; the question is whether we're // first seeing it here, in the transitive exploration, or if it // was found in the initial pass on direct imports. We know it's // the former if there's no entry for it in the ondisk map. if _, in := ondisk[pr]; !in { abs, err := g.ctx.AbsForImport(string(pr)) if err != nil { colors[pkg] = black notondisk[pr] = true return nil } v, err := gps.VCSVersion(abs) if err != nil { // Even if we know it's on disk, errors are still // possible when trying to deduce version. If we // encounter such an error, just treat the project as // not being on disk; the solver will work it out. colors[pkg] = black notondisk[pr] = true return nil } ondisk[pr] = v } ptree, err = pkgtree.ListPackages(r, string(pr)) if err != nil { // Any error here other than an a nonexistent dir (which // can't happen because we covered that case above) is // probably critical, so bail out. return errors.Wrap(err, "gps.ListPackages") } ptrees[pr] = ptree } // Get a reachmap that includes main pkgs (even though importing // them is an error, what we're checking right now is simply whether // there's a package with go code present on disk), and does not // backpropagate errors (again, because our only concern right now // is package existence). rm, errmap := ptree.ToReachMap(true, false, false, nil) reached, ok := rm[pkg] if !ok { colors[pkg] = black // not on disk... notondisk[pr] = true return nil } if _, ok := errmap[pkg]; ok { // The package is on disk, but contains some errors. colors[pkg] = black return nil } if deps, has := dependencies[pr]; has { if !contains(deps, pkg) { dependencies[pr] = append(deps, pkg) } } else { dependencies[pr] = []string{pkg} syncDepGroup.Add(1) go syncDep(pr, g.sm) } // recurse for _, rpkg := range reached.External { if paths.IsStandardImportPath(rpkg) { continue } err := dft(rpkg) if err != nil { // Bubble up any errors we encounter return err } } colors[pkg] = black case grey: return errors.Errorf("Import cycle detected on %s", pkg) } return nil } // run the depth-first traversal from the set of immediate external // package imports we found in the current project for pkg := range packages { err := dft(pkg) if err != nil { return projectData{}, err // already errors.Wrap()'d internally } } syncDepGroup.Wait() pd := projectData{ constraints: constraints, dependencies: dependencies, notondisk: notondisk, ondisk: ondisk, } return pd, nil } dep-0.3.2/cmd/dep/gopath_scanner_test.go000066400000000000000000000115751317166637100202040ustar00rootroot00000000000000// 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 main import ( "io/ioutil" "log" "reflect" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/test" ) const testProject1 string = "github.com/sdboyer/deptest" const testProject2 string = "github.com/sdboyer/deptestdos" // NewTestContext creates a unique context with its own GOPATH for a single test. func NewTestContext(h *test.Helper) *dep.Ctx { h.TempDir("src") pwd := h.Path(".") discardLogger := log.New(ioutil.Discard, "", 0) return &dep.Ctx{ GOPATH: pwd, Out: discardLogger, Err: discardLogger, } } func TestGopathScanner_OverlayManifestConstraints(t *testing.T) { h := test.NewHelper(t) h.Parallel() defer h.Cleanup() ctx := NewTestContext(h) pi1 := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot(testProject1)} pi2 := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot(testProject2)} v1 := gps.NewVersion("v1.0.0") v2 := gps.NewVersion("v2.0.0") v3 := gps.NewVersion("v3.0.0") rootM := dep.NewManifest() rootM.Constraints[pi1.ProjectRoot] = gps.ProjectProperties{Constraint: v1} rootL := &dep.Lock{} origM := dep.NewManifest() origM.Constraints[pi1.ProjectRoot] = gps.ProjectProperties{Constraint: v2} origM.Constraints[pi2.ProjectRoot] = gps.ProjectProperties{Constraint: v3} gs := gopathScanner{ origM: origM, origL: &dep.Lock{}, ctx: ctx, pd: projectData{ ondisk: map[gps.ProjectRoot]gps.Version{ pi1.ProjectRoot: v2, pi2.ProjectRoot: v3, }, }, } gs.overlay(rootM, rootL) dep, has := rootM.Constraints[pi1.ProjectRoot] if !has { t.Fatalf("Expected the root manifest to contain %s", pi1.ProjectRoot) } wantC := v1.String() gotC := dep.Constraint.String() if wantC != gotC { t.Fatalf("Expected %s to be constrained to '%s', got '%s'", pi1.ProjectRoot, wantC, gotC) } dep, has = rootM.Constraints[pi2.ProjectRoot] if !has { t.Fatalf("Expected the root manifest to contain %s", pi2.ProjectRoot) } wantC = v3.String() gotC = dep.Constraint.String() if wantC != gotC { t.Fatalf("Expected %s to be constrained to '%s', got '%s'", pi2.ProjectRoot, wantC, gotC) } } func TestGopathScanner_OverlayLockProjects(t *testing.T) { h := test.NewHelper(t) h.Parallel() defer h.Cleanup() ctx := NewTestContext(h) rootM := dep.NewManifest() pi1 := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot(testProject1)} pi2 := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot(testProject2)} v1 := gps.NewVersion("v1.0.0") v2 := gps.NewVersion("v2.0.0") v3 := gps.NewVersion("v3.0.0") rootL := &dep.Lock{ P: []gps.LockedProject{gps.NewLockedProject(pi1, v1, []string{})}, } gs := gopathScanner{ origM: dep.NewManifest(), origL: &dep.Lock{ P: []gps.LockedProject{ gps.NewLockedProject(pi1, v2, []string{}), // ignored, already exists in lock gps.NewLockedProject(pi2, v3, []string{}), // should be added to the lock }, }, ctx: ctx, pd: projectData{ ondisk: map[gps.ProjectRoot]gps.Version{ pi1.ProjectRoot: v2, pi2.ProjectRoot: v3, }, }, } gs.overlay(rootM, rootL) if len(rootL.P) != 2 { t.Fatalf("Expected the root manifest to contain 2 packages, got %d", len(rootL.P)) } if rootL.P[0].Version() != v1 { t.Fatalf("Expected %s to be locked to '%s', got '%s'", rootL.P[0].Ident().ProjectRoot, v1, rootL.P[0].Version()) } if rootL.P[1].Version() != v3 { t.Fatalf("Expected %s to be locked to '%s', got '%s'", rootL.P[1].Ident().ProjectRoot, v3, rootL.P[1].Version()) } } func TestContains(t *testing.T) { t.Parallel() a := []string{"a", "b", "abcd"} if !contains(a, "a") { t.Fatal("expected array to contain 'a'") } if contains(a, "d") { t.Fatal("expected array to not contain 'd'") } } func TestGetProjectPropertiesFromVersion(t *testing.T) { t.Parallel() wantSemver, _ := gps.NewSemverConstraintIC("v1.0.0") cases := []struct { version, want gps.Constraint }{ { version: gps.NewBranch("foo-branch"), want: gps.NewBranch("foo-branch"), }, { version: gps.NewVersion("foo-version"), want: gps.NewVersion("foo-version"), }, { version: gps.NewVersion("v1.0.0"), want: wantSemver, }, { version: gps.NewBranch("foo-branch").Pair("some-revision"), want: gps.NewBranch("foo-branch"), }, { version: gps.NewVersion("foo-version").Pair("some-revision"), want: gps.NewVersion("foo-version"), }, { version: gps.Revision("some-revision"), want: nil, }, { version: gps.NewVersion("v1.0.0").Pair("some-revision"), want: wantSemver, }, } for _, c := range cases { actualProp := getProjectPropertiesFromVersion(c.version.(gps.Version)) if !reflect.DeepEqual(c.want, actualProp.Constraint) { t.Fatalf("Constraints are not as expected: \n\t(GOT) %v\n\t(WNT) %v", actualProp.Constraint, c.want) } } } dep-0.3.2/cmd/dep/graphviz.go000066400000000000000000000044111317166637100157730ustar00rootroot00000000000000// 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 main import ( "bytes" "fmt" "hash/fnv" "strings" ) type graphviz struct { ps []*gvnode b bytes.Buffer h map[string]uint32 } type gvnode struct { project string version string children []string } func (g graphviz) New() *graphviz { ga := &graphviz{ ps: []*gvnode{}, h: make(map[string]uint32), } return ga } func (g graphviz) output() bytes.Buffer { g.b.WriteString("digraph {\n\tnode [shape=box];") for _, gvp := range g.ps { // Create node string g.b.WriteString(fmt.Sprintf("\n\t%d [label=\"%s\"];", gvp.hash(), gvp.label())) } // Store relations to avoid duplication rels := make(map[string]bool) // Create relations for _, dp := range g.ps { for _, bsc := range dp.children { for pr, hsh := range g.h { if isPathPrefix(bsc, pr) { r := fmt.Sprintf("\n\t%d -> %d", g.h[dp.project], hsh) if _, ex := rels[r]; !ex { g.b.WriteString(r + ";") rels[r] = true } } } } } g.b.WriteString("\n}") return g.b } func (g *graphviz) createNode(project, version string, children []string) { pr := &gvnode{ project: project, version: version, children: children, } g.h[pr.project] = pr.hash() g.ps = append(g.ps, pr) } func (dp gvnode) hash() uint32 { h := fnv.New32a() h.Write([]byte(dp.project)) return h.Sum32() } func (dp gvnode) label() string { label := []string{dp.project} if dp.version != "" { label = append(label, dp.version) } return strings.Join(label, "\\n") } // isPathPrefix ensures that the literal string prefix is a path tree match and // guards against possibilities like this: // // github.com/sdboyer/foo // github.com/sdboyer/foobar/baz // // Verify that prefix is path match and either the input is the same length as // the match (in which case we know they're equal), or that the next character // is a "/". (Import paths are defined to always use "/", not the OS-specific // path separator.) func isPathPrefix(path, pre string) bool { pathlen, prflen := len(path), len(pre) if pathlen < prflen || path[0:prflen] != pre { return false } return prflen == pathlen || strings.Index(path[prflen:], "/") == 0 } dep-0.3.2/cmd/dep/graphviz_test.go000066400000000000000000000034641317166637100170410ustar00rootroot00000000000000// 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 main import ( "testing" "github.com/golang/dep/internal/test" ) func TestEmptyProject(t *testing.T) { h := test.NewHelper(t) h.Parallel() defer h.Cleanup() g := new(graphviz).New() b := g.output() want := h.GetTestFileString("graphviz/empty.dot") if b.String() != want { t.Fatalf("expected '%v', got '%v'", want, b.String()) } } func TestSimpleProject(t *testing.T) { h := test.NewHelper(t) h.Parallel() defer h.Cleanup() g := new(graphviz).New() g.createNode("project", "", []string{"foo", "bar"}) g.createNode("foo", "master", []string{"bar"}) g.createNode("bar", "dev", []string{}) b := g.output() want := h.GetTestFileString("graphviz/case1.dot") if b.String() != want { t.Fatalf("expected '%v', got '%v'", want, b.String()) } } func TestNoLinks(t *testing.T) { h := test.NewHelper(t) h.Parallel() defer h.Cleanup() g := new(graphviz).New() g.createNode("project", "", []string{}) b := g.output() want := h.GetTestFileString("graphviz/case2.dot") if b.String() != want { t.Fatalf("expected '%v', got '%v'", want, b.String()) } } func TestIsPathPrefix(t *testing.T) { t.Parallel() tcs := []struct { path string pre string want bool }{ {"github.com/sdboyer/foo/bar", "github.com/sdboyer/foo", true}, {"github.com/sdboyer/foobar", "github.com/sdboyer/foo", false}, {"github.com/sdboyer/bar/foo", "github.com/sdboyer/foo", false}, {"golang.org/sdboyer/bar/foo", "github.com/sdboyer/foo", false}, {"golang.org/sdboyer/FOO", "github.com/sdboyer/foo", false}, } for _, tc := range tcs { r := isPathPrefix(tc.path, tc.pre) if tc.want != r { t.Fatalf("expected '%v', got '%v'", tc.want, r) } } } dep-0.3.2/cmd/dep/hash_in.go000066400000000000000000000024401317166637100155520ustar00rootroot00000000000000// Copyright 2017 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 main import ( "flag" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) func (cmd *hashinCommand) Name() string { return "hash-inputs" } func (cmd *hashinCommand) Args() string { return "" } func (cmd *hashinCommand) ShortHelp() string { return "" } func (cmd *hashinCommand) LongHelp() string { return "" } func (cmd *hashinCommand) Hidden() bool { return true } func (cmd *hashinCommand) Register(fs *flag.FlagSet) {} type hashinCommand struct{} func (hashinCommand) Run(ctx *dep.Ctx, args []string) error { p, err := ctx.LoadProject() if err != nil { return err } sm, err := ctx.SourceManager() if err != nil { return err } sm.UseDefaultSignalHandling() defer sm.Release() params := p.MakeParams() params.RootPackageTree, err = pkgtree.ListPackages(p.ResolvedAbsRoot, string(p.ImportRoot)) if err != nil { return errors.Wrap(err, "gps.ListPackages") } s, err := gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "prepare solver") } ctx.Out.Println(gps.HashingInputsAsString(s)) return nil } dep-0.3.2/cmd/dep/init.go000066400000000000000000000161311317166637100151060ustar00rootroot00000000000000// 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 main import ( "flag" "io/ioutil" "log" "os" "path/filepath" "time" "github.com/golang/dep" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/paths" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) const initShortHelp = `Initialize a new project with manifest and lock files` const initLongHelp = ` Initialize the project at filepath root by parsing its dependencies, writing manifest and lock files, and vendoring the dependencies. If root isn't specified, use the current directory. When configuration for another dependency management tool is detected, it is imported into the initial manifest and lock. Use the -skip-tools flag to disable this behavior. The following external tools are supported: glide, godep, vndr, govend, gb, gvt. Any dependencies that are not constrained by external configuration use the GOPATH analysis below. By default, the dependencies are resolved over the network. A version will be selected from the versions available from the upstream source per the following algorithm: - Tags conforming to semver (sorted by semver rules) - Default branch(es) (sorted lexicographically) - Non-semver tags (sorted lexicographically) An alternate mode can be activated by passing -gopath. In this mode, the version of each dependency will reflect the current state of the GOPATH. If a dependency doesn't exist in the GOPATH, a version will be selected based on the above network version selection algorithm. A Gopkg.toml file will be written with inferred version constraints for all direct dependencies. Gopkg.lock will be written with precise versions, and vendor/ will be populated with the precise versions written to Gopkg.lock. ` func (cmd *initCommand) Name() string { return "init" } func (cmd *initCommand) Args() string { return "[root]" } func (cmd *initCommand) ShortHelp() string { return initShortHelp } func (cmd *initCommand) LongHelp() string { return initLongHelp } func (cmd *initCommand) Hidden() bool { return false } func (cmd *initCommand) Register(fs *flag.FlagSet) { fs.BoolVar(&cmd.noExamples, "no-examples", false, "don't include example in Gopkg.toml") fs.BoolVar(&cmd.skipTools, "skip-tools", false, "skip importing configuration from other dependency managers") fs.BoolVar(&cmd.gopath, "gopath", false, "search in GOPATH for dependencies") } type initCommand struct { noExamples bool skipTools bool gopath bool } func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error { if len(args) > 1 { return errors.Errorf("too many args (%d)", len(args)) } var root string if len(args) <= 0 { root = ctx.WorkingDir } else { root = args[0] if !filepath.IsAbs(args[0]) { root = filepath.Join(ctx.WorkingDir, args[0]) } if err := os.MkdirAll(root, os.FileMode(0777)); err != nil { return errors.Wrapf(err, "unable to create directory %s", root) } } var err error p := new(dep.Project) if err = p.SetRoot(root); err != nil { return errors.Wrap(err, "NewProject") } ctx.GOPATH, err = ctx.DetectProjectGOPATH(p) if err != nil { return errors.Wrapf(err, "ctx.DetectProjectGOPATH") } mf := filepath.Join(root, dep.ManifestName) lf := filepath.Join(root, dep.LockName) vpath := filepath.Join(root, "vendor") mok, err := fs.IsRegular(mf) if err != nil { return err } if mok { return errors.Errorf("manifest already exists: %s", mf) } // Manifest file does not exist. lok, err := fs.IsRegular(lf) if err != nil { return err } if lok { return errors.Errorf("invalid state: manifest %q does not exist, but lock %q does", mf, lf) } ip, err := ctx.ImportForAbs(root) if err != nil { return errors.Wrap(err, "root project import") } p.ImportRoot = gps.ProjectRoot(ip) sm, err := ctx.SourceManager() if err != nil { return errors.Wrap(err, "getSourceManager") } sm.UseDefaultSignalHandling() defer sm.Release() if ctx.Verbose { ctx.Out.Println("Getting direct dependencies...") } pkgT, directDeps, err := getDirectDependencies(sm, p) if err != nil { return err } if ctx.Verbose { ctx.Out.Printf("Checked %d directories for packages.\nFound %d direct dependencies.\n", len(pkgT.Packages), len(directDeps)) } // Initialize with imported data, then fill in the gaps using the GOPATH rootAnalyzer := newRootAnalyzer(cmd.skipTools, ctx, directDeps, sm) p.Manifest, p.Lock, err = rootAnalyzer.InitializeRootManifestAndLock(root, p.ImportRoot) if err != nil { return err } if cmd.gopath { gs := newGopathScanner(ctx, directDeps, sm) err = gs.InitializeRootManifestAndLock(p.Manifest, p.Lock) if err != nil { return err } } rootAnalyzer.skipTools = true // Don't import external config during solve for now copyLock := *p.Lock // Copy lock before solving. Use this to separate new lock projects from solved lock params := gps.SolveParameters{ RootDir: root, RootPackageTree: pkgT, Manifest: p.Manifest, Lock: p.Lock, ProjectAnalyzer: rootAnalyzer, } if ctx.Verbose { params.TraceLogger = ctx.Err } if err := ctx.ValidateParams(sm, params); err != nil { return err } s, err := gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "prepare solver") } soln, err := s.Solve() if err != nil { handleAllTheFailuresOfTheWorld(err) return err } p.Lock = dep.LockFromSolution(soln) rootAnalyzer.FinalizeRootManifestAndLock(p.Manifest, p.Lock, copyLock) // Run gps.Prepare with appropriate constraint solutions from solve run // to generate the final lock memo. s, err = gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "prepare solver") } p.Lock.SolveMeta.InputsDigest = s.HashInputs() // Pass timestamp (yyyyMMddHHmmss format) as suffix to backup name. vendorbak, err := dep.BackupVendor(vpath, time.Now().Format("20060102150405")) if err != nil { return err } if vendorbak != "" { ctx.Err.Printf("Old vendor backed up to %v", vendorbak) } sw, err := dep.NewSafeWriter(p.Manifest, nil, p.Lock, dep.VendorAlways) if err != nil { return err } logger := ctx.Err if !ctx.Verbose { logger = log.New(ioutil.Discard, "", 0) } if err := sw.Write(root, sm, !cmd.noExamples, logger); err != nil { return errors.Wrap(err, "safe write of manifest and lock") } return nil } func getDirectDependencies(sm gps.SourceManager, p *dep.Project) (pkgtree.PackageTree, map[string]bool, error) { pkgT, err := p.ParseRootPackageTree() if err != nil { return pkgtree.PackageTree{}, nil, err } directDeps := map[string]bool{} rm, _ := pkgT.ToReachMap(true, true, false, nil) for _, ip := range rm.FlattenFn(paths.IsStandardImportPath) { pr, err := sm.DeduceProjectRoot(ip) if err != nil { return pkgtree.PackageTree{}, nil, err } directDeps[string(pr)] = true } return pkgT, directDeps, nil } // TODO solve failures can be really creative - we need to be similarly creative // in handling them and informing the user appropriately func handleAllTheFailuresOfTheWorld(err error) { } dep-0.3.2/cmd/dep/init_test.go000066400000000000000000000020321317166637100161400ustar00rootroot00000000000000// 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 main import ( "path/filepath" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/test" ) func TestGetDirectDependencies_ConsolidatesRootProjects(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() ctx := NewTestContext(h) sm, err := ctx.SourceManager() h.Must(err) defer sm.Release() testprj := "directdepstest" testdir := filepath.Join("src", testprj) h.TempDir(testdir) h.TempCopy(filepath.Join(testdir, "main.go"), "init/directdeps/main.go") testpath := h.Path(testdir) prj := &dep.Project{AbsRoot: testpath, ResolvedAbsRoot: testpath, ImportRoot: gps.ProjectRoot(testprj)} _, dd, err := getDirectDependencies(sm, prj) h.Must(err) wantpr := "github.com/carolynvs/deptest-subpkg" if _, has := dd[wantpr]; !has { t.Fatalf("Expected direct dependencies to contain %s, got %v", wantpr, dd) } } dep-0.3.2/cmd/dep/integration_test.go000066400000000000000000000074221317166637100175300ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "io" "os" "os/exec" "path/filepath" "strings" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/test" "github.com/golang/dep/internal/test/integration" ) func TestIntegration(t *testing.T) { t.Parallel() test.NeedsExternalNetwork(t) test.NeedsGit(t) wd, err := os.Getwd() if err != nil { t.Fatal(err) } relPath := filepath.Join("testdata", "harness_tests") filepath.Walk(relPath, func(path string, info os.FileInfo, err error) error { if err != nil { t.Fatal("error walking filepath") } if filepath.Base(path) != "testcase.json" { return nil } parse := strings.Split(path, string(filepath.Separator)) testName := strings.Join(parse[2:len(parse)-1], "/") t.Run(testName, func(t *testing.T) { t.Parallel() t.Run("external", testIntegration(testName, relPath, wd, execCmd)) t.Run("internal", testIntegration(testName, relPath, wd, runMain)) }) return nil }) } // execCmd is a test.RunFunc which runs the program in another process. func execCmd(prog string, args []string, stdout, stderr io.Writer, dir string, env []string) error { cmd := exec.Command(prog, args...) cmd.Stdout = stdout cmd.Stderr = stderr cmd.Env = env cmd.Dir = dir return cmd.Run() } // runMain is a test.RunFunc which runs the program in-process. func runMain(prog string, args []string, stdout, stderr io.Writer, dir string, env []string) (err error) { defer func() { if r := recover(); r != nil { switch r := r.(type) { case error: err = r default: err = fmt.Errorf("%v", r) } } }() m := &Config{ Args: append([]string{prog}, args...), Stdout: stdout, Stderr: stderr, WorkingDir: dir, Env: env, } if exitCode := m.Run(); exitCode != 0 { err = fmt.Errorf("exit status %d", exitCode) } return } // testIntegration runs the test specified by ///testcase.json func testIntegration(name, relPath, wd string, run integration.RunFunc) func(t *testing.T) { return func(t *testing.T) { t.Parallel() // Set up environment testCase := integration.NewTestCase(t, filepath.Join(wd, relPath), name) testProj := integration.NewTestProject(t, testCase.InitialPath(), wd, run) defer testProj.Cleanup() // Create and checkout the vendor revisions for ip, rev := range testCase.VendorInitial { testProj.GetVendorGit(ip) testProj.RunGit(testProj.VendorPath(ip), "checkout", rev) } // Create and checkout the import revisions for ip, rev := range testCase.GopathInitial { testProj.RunGo("get", ip) testProj.RunGit(testProj.Path("src", ip), "checkout", rev) } // Run commands testProj.RecordImportPaths() var err error for i, args := range testCase.Commands { err = testProj.DoRun(args) if err != nil && i < len(testCase.Commands)-1 { t.Fatalf("cmd %s raised an unexpected error: %s", args[0], err.Error()) } } // Check error raised in final command testCase.CompareError(err, testProj.GetStderr()) if *test.UpdateGolden { testCase.UpdateOutput(testProj.GetStdout()) } else { // Check output testCase.CompareOutput(testProj.GetStdout()) } // Check vendor paths testProj.CompareImportPaths() testCase.CompareVendorPaths(testProj.GetVendorPaths()) if *test.UpdateGolden { // Update manifest and lock testCase.UpdateFile(dep.ManifestName, testProj.ProjPath(dep.ManifestName)) testCase.UpdateFile(dep.LockName, testProj.ProjPath(dep.LockName)) } else { // Check final manifest and lock testCase.CompareFile(dep.ManifestName, testProj.ProjPath(dep.ManifestName)) testCase.CompareFile(dep.LockName, testProj.ProjPath(dep.LockName)) } } } dep-0.3.2/cmd/dep/main.go000066400000000000000000000134651317166637100150760ustar00rootroot00000000000000// 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. // Command dep is a prototype dependency management tool. package main import ( "bytes" "flag" "fmt" "io" "log" "os" "path/filepath" "strings" "text/tabwriter" "github.com/golang/dep" ) type command interface { Name() string // "foobar" Args() string // " [quux...]" ShortHelp() string // "Foo the first bar" LongHelp() string // "Foo the first bar meeting the following conditions..." Register(*flag.FlagSet) // command-specific flags Hidden() bool // indicates whether the command should be hidden from help output Run(*dep.Ctx, []string) error } func main() { wd, err := os.Getwd() if err != nil { fmt.Fprintln(os.Stderr, "failed to get working directory", err) os.Exit(1) } c := &Config{ Args: os.Args, Stdout: os.Stdout, Stderr: os.Stderr, WorkingDir: wd, Env: os.Environ(), } os.Exit(c.Run()) } // A Config specifies a full configuration for a dep execution. type Config struct { WorkingDir string // Where to execute Args []string // Command-line arguments, starting with the program name. Env []string // Environment variables Stdout, Stderr io.Writer // Log output } // Run executes a configuration and returns an exit code. func (c *Config) Run() (exitCode int) { // Build the list of available commands. commands := []command{ &initCommand{}, &statusCommand{}, &ensureCommand{}, &hashinCommand{}, &pruneCommand{}, &versionCommand{}, } examples := [][2]string{ { "dep init", "set up a new project", }, { "dep ensure", "install the project's dependencies", }, { "dep ensure -update", "update the locked versions of all dependencies", }, { "dep ensure -add github.com/pkg/errors", "add a dependency to the project", }, } outLogger := log.New(c.Stdout, "", 0) errLogger := log.New(c.Stderr, "", 0) usage := func() { errLogger.Println("dep is a tool for managing dependencies for Go projects") errLogger.Println() errLogger.Println("Usage: dep ") errLogger.Println() errLogger.Println("Commands:") errLogger.Println() w := tabwriter.NewWriter(c.Stderr, 0, 4, 2, ' ', 0) for _, cmd := range commands { if !cmd.Hidden() { fmt.Fprintf(w, "\t%s\t%s\n", cmd.Name(), cmd.ShortHelp()) } } w.Flush() errLogger.Println() errLogger.Println("Examples:") for _, example := range examples { fmt.Fprintf(w, "\t%s\t%s\n", example[0], example[1]) } w.Flush() errLogger.Println() errLogger.Println("Use \"dep help [command]\" for more information about a command.") } cmdName, printCommandHelp, exit := parseArgs(c.Args) if exit { usage() exitCode = 1 return } for _, cmd := range commands { if cmd.Name() == cmdName { // Build flag set with global flags in there. fs := flag.NewFlagSet(cmdName, flag.ContinueOnError) fs.SetOutput(c.Stderr) verbose := fs.Bool("v", false, "enable verbose logging") // Register the subcommand flags in there, too. cmd.Register(fs) // Override the usage text to something nicer. resetUsage(errLogger, fs, cmdName, cmd.Args(), cmd.LongHelp()) if printCommandHelp { fs.Usage() exitCode = 1 return } // Parse the flags the user gave us. // flag package automatically prints usage and error message in err != nil // or if '-h' flag provided if err := fs.Parse(c.Args[2:]); err != nil { exitCode = 1 return } // Set up dep context. ctx := &dep.Ctx{ Out: outLogger, Err: errLogger, Verbose: *verbose, DisableLocking: getEnv(c.Env, "DEPNOLOCK") != "", } GOPATHS := filepath.SplitList(getEnv(c.Env, "GOPATH")) ctx.SetPaths(c.WorkingDir, GOPATHS...) // Run the command with the post-flag-processing args. if err := cmd.Run(ctx, fs.Args()); err != nil { errLogger.Printf("%v\n", err) exitCode = 1 return } // Easy peasy livin' breezy. return } } errLogger.Printf("dep: %s: no such command\n", cmdName) usage() exitCode = 1 return } func resetUsage(logger *log.Logger, fs *flag.FlagSet, name, args, longHelp string) { var ( hasFlags bool flagBlock bytes.Buffer flagWriter = tabwriter.NewWriter(&flagBlock, 0, 4, 2, ' ', 0) ) fs.VisitAll(func(f *flag.Flag) { hasFlags = true // Default-empty string vars should read "(default: )" // rather than the comparatively ugly "(default: )". defValue := f.DefValue if defValue == "" { defValue = "" } fmt.Fprintf(flagWriter, "\t-%s\t%s (default: %s)\n", f.Name, f.Usage, defValue) }) flagWriter.Flush() fs.Usage = func() { logger.Printf("Usage: dep %s %s\n", name, args) logger.Println() logger.Println(strings.TrimSpace(longHelp)) logger.Println() if hasFlags { logger.Println("Flags:") logger.Println() logger.Println(flagBlock.String()) } } } // parseArgs determines the name of the dep command and whether the user asked for // help to be printed. func parseArgs(args []string) (cmdName string, printCmdUsage bool, exit bool) { isHelpArg := func() bool { return strings.Contains(strings.ToLower(args[1]), "help") || strings.ToLower(args[1]) == "-h" } switch len(args) { case 0, 1: exit = true case 2: if isHelpArg() { exit = true } cmdName = args[1] default: if isHelpArg() { cmdName = args[2] printCmdUsage = true } else { cmdName = args[1] } } return cmdName, printCmdUsage, exit } // getEnv returns the last instance of an environment variable. func getEnv(env []string, key string) string { for i := len(env) - 1; i >= 0; i-- { v := env[i] kv := strings.SplitN(v, "=", 2) if kv[0] == key { if len(kv) > 1 { return kv[1] } return "" } } return "" } dep-0.3.2/cmd/dep/prune.go000066400000000000000000000124371317166637100153010ustar00rootroot00000000000000// 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 main import ( "bytes" "flag" "io/ioutil" "log" "os" "path/filepath" "sort" "strings" "github.com/golang/dep" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) const pruneShortHelp = `Prune the vendor tree of unused packages` const pruneLongHelp = ` Prune is used to remove unused packages from your vendor tree. STABILITY NOTICE: this command creates problems for vendor/ verification. As such, it may be removed and/or moved out into a separate project later on. ` type pruneCommand struct { } func (cmd *pruneCommand) Name() string { return "prune" } func (cmd *pruneCommand) Args() string { return "" } func (cmd *pruneCommand) ShortHelp() string { return pruneShortHelp } func (cmd *pruneCommand) LongHelp() string { return pruneLongHelp } func (cmd *pruneCommand) Hidden() bool { return false } func (cmd *pruneCommand) Register(fs *flag.FlagSet) { } func (cmd *pruneCommand) Run(ctx *dep.Ctx, args []string) error { p, err := ctx.LoadProject() if err != nil { return err } sm, err := ctx.SourceManager() if err != nil { return err } sm.UseDefaultSignalHandling() defer sm.Release() // While the network churns on ListVersions() requests, statically analyze // code from the current project. ptree, err := pkgtree.ListPackages(p.ResolvedAbsRoot, string(p.ImportRoot)) if err != nil { return errors.Wrap(err, "analysis of local packages failed: %v") } // Set up a solver in order to check the InputHash. params := p.MakeParams() params.RootPackageTree = ptree if ctx.Verbose { params.TraceLogger = ctx.Err } s, err := gps.Prepare(params, sm) if err != nil { return errors.Wrap(err, "could not set up solver for input hashing") } if p.Lock == nil { return errors.Errorf("Gopkg.lock must exist for prune to know what files are safe to remove.") } if !bytes.Equal(s.HashInputs(), p.Lock.SolveMeta.InputsDigest) { return errors.Errorf("Gopkg.lock is out of sync; run dep ensure before pruning.") } pruneLogger := ctx.Err if !ctx.Verbose { pruneLogger = log.New(ioutil.Discard, "", 0) } return pruneProject(p, sm, pruneLogger) } // pruneProject removes unused packages from a project. func pruneProject(p *dep.Project, sm gps.SourceManager, logger *log.Logger) error { td, err := ioutil.TempDir(os.TempDir(), "dep") if err != nil { return errors.Wrap(err, "error while creating temp dir for writing manifest/lock/vendor") } defer os.RemoveAll(td) if err := gps.WriteDepTree(td, p.Lock, sm, true, logger); err != nil { return err } var toKeep []string for _, project := range p.Lock.Projects() { projectRoot := string(project.Ident().ProjectRoot) for _, pkg := range project.Packages() { toKeep = append(toKeep, filepath.Join(projectRoot, pkg)) } } toDelete, err := calculatePrune(td, toKeep, logger) if err != nil { return err } if len(toDelete) > 0 { logger.Println("Calculated the following directories to prune:") for _, d := range toDelete { logger.Printf(" %s\n", d) } } else { logger.Println("No directories found to prune") } if err := deleteDirs(toDelete); err != nil { return err } vpath := filepath.Join(p.AbsRoot, "vendor") vendorbak := vpath + ".orig" var failerr error if _, err := os.Stat(vpath); err == nil { // Move out the old vendor dir. just do it into an adjacent dir, to // try to mitigate the possibility of a pointless cross-filesystem // move with a temp directory. if _, err := os.Stat(vendorbak); err == nil { // If the adjacent dir already exists, bite the bullet and move // to a proper tempdir. vendorbak = filepath.Join(td, "vendor.orig") } failerr = fs.RenameWithFallback(vpath, vendorbak) if failerr != nil { goto fail } } // Move in the new one. failerr = fs.RenameWithFallback(td, vpath) if failerr != nil { goto fail } os.RemoveAll(vendorbak) return nil fail: fs.RenameWithFallback(vendorbak, vpath) return failerr } func calculatePrune(vendorDir string, keep []string, logger *log.Logger) ([]string, error) { logger.Println("Calculating prune. Checking the following packages:") sort.Strings(keep) toDelete := []string{} err := filepath.Walk(vendorDir, func(path string, info os.FileInfo, err error) error { if _, err := os.Lstat(path); err != nil { return nil } if !info.IsDir() { return nil } if path == vendorDir { return nil } name := strings.TrimPrefix(path, vendorDir+string(filepath.Separator)) logger.Printf(" %s", name) i := sort.Search(len(keep), func(i int) bool { return name <= keep[i] }) if i >= len(keep) || !strings.HasPrefix(keep[i], name) { toDelete = append(toDelete, path) } return nil }) return toDelete, err } func deleteDirs(toDelete []string) error { // sort by length so we delete sub dirs first sort.Sort(byLen(toDelete)) for _, path := range toDelete { if err := os.RemoveAll(path); err != nil { return err } } return nil } type byLen []string func (a byLen) Len() int { return len(a) } func (a byLen) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a byLen) Less(i, j int) bool { return len(a[i]) > len(a[j]) } dep-0.3.2/cmd/dep/prune_test.go000066400000000000000000000022401317166637100163270ustar00rootroot00000000000000// Copyright 2017 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 main import ( "io/ioutil" "log" "path/filepath" "reflect" "sort" "testing" "github.com/golang/dep/internal/test" ) func TestCalculatePrune(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() vendorDir := "vendor" h.TempDir(vendorDir) h.TempDir(filepath.Join(vendorDir, "github.com/keep/pkg/sub")) h.TempDir(filepath.Join(vendorDir, "github.com/prune/pkg/sub")) toKeep := []string{ filepath.FromSlash("github.com/keep/pkg"), filepath.FromSlash("github.com/keep/pkg/sub"), } discardLogger := log.New(ioutil.Discard, "", 0) got, err := calculatePrune(h.Path(vendorDir), toKeep, discardLogger) if err != nil { t.Fatal(err) } sort.Sort(byLen(got)) want := []string{ h.Path(filepath.Join(vendorDir, "github.com/prune/pkg/sub")), h.Path(filepath.Join(vendorDir, "github.com/prune/pkg")), h.Path(filepath.Join(vendorDir, "github.com/prune")), } if !reflect.DeepEqual(want, got) { t.Fatalf("calculated prune paths are not as expected.\n(WNT) %s\n(GOT) %s", want, got) } } dep-0.3.2/cmd/dep/root_analyzer.go000066400000000000000000000106131317166637100170320ustar00rootroot00000000000000// 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 main import ( "io/ioutil" "log" "github.com/golang/dep" fb "github.com/golang/dep/internal/feedback" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers" ) // rootAnalyzer supplies manifest/lock data from both dep and external tool's // configuration files. // * When used on the root project, it imports only from external tools. // * When used by the solver for dependencies, it first looks for dep config, // then external tools. type rootAnalyzer struct { skipTools bool ctx *dep.Ctx sm gps.SourceManager directDeps map[string]bool } func newRootAnalyzer(skipTools bool, ctx *dep.Ctx, directDeps map[string]bool, sm gps.SourceManager) *rootAnalyzer { return &rootAnalyzer{ skipTools: skipTools, ctx: ctx, sm: sm, directDeps: directDeps, } } func (a *rootAnalyzer) InitializeRootManifestAndLock(dir string, pr gps.ProjectRoot) (rootM *dep.Manifest, rootL *dep.Lock, err error) { if !a.skipTools { rootM, rootL, err = a.importManifestAndLock(dir, pr, false) if err != nil { return } } if rootM == nil { rootM = dep.NewManifest() } if rootL == nil { rootL = &dep.Lock{} } return } func (a *rootAnalyzer) importManifestAndLock(dir string, pr gps.ProjectRoot, suppressLogs bool) (*dep.Manifest, *dep.Lock, error) { logger := a.ctx.Err if suppressLogs { logger = log.New(ioutil.Discard, "", 0) } for _, i := range importers.BuildAll(logger, a.ctx.Verbose, a.sm) { if i.HasDepMetadata(dir) { a.ctx.Err.Printf("Importing configuration from %s. These are only initial constraints, and are further refined during the solve process.", i.Name()) m, l, err := i.Import(dir, pr) if err != nil { return nil, nil, err } a.removeTransitiveDependencies(m) return m, l, err } } var emptyManifest = dep.NewManifest() return emptyManifest, nil, nil } func (a *rootAnalyzer) removeTransitiveDependencies(m *dep.Manifest) { for pr := range m.Constraints { if _, isDirect := a.directDeps[string(pr)]; !isDirect { delete(m.Constraints, pr) } } } // DeriveManifestAndLock evaluates a dependency for existing dependency manager // configuration (ours or external) and passes any configuration found back // to the solver. func (a *rootAnalyzer) DeriveManifestAndLock(dir string, pr gps.ProjectRoot) (gps.Manifest, gps.Lock, error) { // Ignore other tools if we find dep configuration var depAnalyzer dep.Analyzer if depAnalyzer.HasDepMetadata(dir) { return depAnalyzer.DeriveManifestAndLock(dir, pr) } if !a.skipTools { // The assignment back to an interface prevents interface-based nil checks from failing later var manifest gps.Manifest = gps.SimpleManifest{} var lock gps.Lock im, il, err := a.importManifestAndLock(dir, pr, true) if im != nil { manifest = im } if il != nil { lock = il } return manifest, lock, err } return gps.SimpleManifest{}, nil, nil } func (a *rootAnalyzer) FinalizeRootManifestAndLock(m *dep.Manifest, l *dep.Lock, ol dep.Lock) { // Iterate through the new projects in solved lock and add them to manifest // if they are direct deps and log feedback for all the new projects. for _, y := range l.Projects() { var f *fb.ConstraintFeedback pr := y.Ident().ProjectRoot // New constraints: in new lock and dir dep but not in manifest if _, ok := a.directDeps[string(pr)]; ok { if _, ok := m.Constraints[pr]; !ok { pp := getProjectPropertiesFromVersion(y.Version()) if pp.Constraint != nil { m.Constraints[pr] = pp pc := gps.ProjectConstraint{Ident: y.Ident(), Constraint: pp.Constraint} f = fb.NewConstraintFeedback(pc, fb.DepTypeDirect) f.LogFeedback(a.ctx.Err) } f = fb.NewLockedProjectFeedback(y, fb.DepTypeDirect) f.LogFeedback(a.ctx.Err) } } else { // New locked projects: in new lock but not in old lock newProject := true for _, opl := range ol.Projects() { if pr == opl.Ident().ProjectRoot { newProject = false } } if newProject { f = fb.NewLockedProjectFeedback(y, fb.DepTypeTransitive) f.LogFeedback(a.ctx.Err) } } } } // Info provides metadata on the analyzer algorithm used during solve. func (a *rootAnalyzer) Info() gps.ProjectAnalyzerInfo { return gps.ProjectAnalyzerInfo{ Name: "dep", Version: 1, } } dep-0.3.2/cmd/dep/status.go000066400000000000000000000407341317166637100154740ustar00rootroot00000000000000// 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 main import ( "bytes" "encoding/json" "flag" "fmt" "io" "io/ioutil" "log" "sort" "sync" "text/tabwriter" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/paths" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) const statusShortHelp = `Report the status of the project's dependencies` const statusLongHelp = ` With no arguments, print the status of each dependency of the project. PROJECT Import path CONSTRAINT Version constraint, from the manifest VERSION Version chosen, from the lock REVISION VCS revision of the chosen version LATEST Latest VCS revision available PKGS USED Number of packages from this project that are actually used With one or more explicitly specified packages, or with the -detailed flag, print an extended status output for each dependency of the project. TODO Another column description FOOBAR Another column description Status returns exit code zero if all dependencies are in a "good state". ` const ( shortRev uint8 = iota longRev ) var ( errFailedUpdate = errors.New("failed to fetch updates") errFailedListPkg = errors.New("failed to list packages") errMultipleFailures = errors.New("multiple sources of failure") errInputDigestMismatch = errors.New("input-digest mismatch") ) func (cmd *statusCommand) Name() string { return "status" } func (cmd *statusCommand) Args() string { return "[package...]" } func (cmd *statusCommand) ShortHelp() string { return statusShortHelp } func (cmd *statusCommand) LongHelp() string { return statusLongHelp } func (cmd *statusCommand) Hidden() bool { return false } func (cmd *statusCommand) Register(fs *flag.FlagSet) { fs.BoolVar(&cmd.detailed, "detailed", false, "report more detailed status") fs.BoolVar(&cmd.json, "json", false, "output in JSON format") fs.StringVar(&cmd.template, "f", "", "output in text/template format") fs.BoolVar(&cmd.dot, "dot", false, "output the dependency graph in GraphViz format") fs.BoolVar(&cmd.old, "old", false, "only show out-of-date dependencies") fs.BoolVar(&cmd.missing, "missing", false, "only show missing dependencies") fs.BoolVar(&cmd.unused, "unused", false, "only show unused dependencies") fs.BoolVar(&cmd.modified, "modified", false, "only show modified dependencies") } type statusCommand struct { detailed bool json bool template string output string dot bool old bool missing bool unused bool modified bool } type outputter interface { BasicHeader() BasicLine(*BasicStatus) BasicFooter() MissingHeader() MissingLine(*MissingStatus) MissingFooter() } type tableOutput struct{ w *tabwriter.Writer } func (out *tableOutput) BasicHeader() { fmt.Fprintf(out.w, "PROJECT\tCONSTRAINT\tVERSION\tREVISION\tLATEST\tPKGS USED\n") } func (out *tableOutput) BasicFooter() { out.w.Flush() } func (out *tableOutput) BasicLine(bs *BasicStatus) { fmt.Fprintf(out.w, "%s\t%s\t%s\t%s\t%s\t%d\t\n", bs.ProjectRoot, bs.getConsolidatedConstraint(), formatVersion(bs.Version), formatVersion(bs.Revision), bs.getConsolidatedLatest(shortRev), bs.PackageCount, ) } func (out *tableOutput) MissingHeader() { fmt.Fprintln(out.w, "PROJECT\tMISSING PACKAGES") } func (out *tableOutput) MissingLine(ms *MissingStatus) { fmt.Fprintf(out.w, "%s\t%s\t\n", ms.ProjectRoot, ms.MissingPackages, ) } func (out *tableOutput) MissingFooter() { out.w.Flush() } type jsonOutput struct { w io.Writer basic []*rawStatus missing []*MissingStatus } func (out *jsonOutput) BasicHeader() { out.basic = []*rawStatus{} } func (out *jsonOutput) BasicFooter() { json.NewEncoder(out.w).Encode(out.basic) } func (out *jsonOutput) BasicLine(bs *BasicStatus) { out.basic = append(out.basic, bs.marshalJSON()) } func (out *jsonOutput) MissingHeader() { out.missing = []*MissingStatus{} } func (out *jsonOutput) MissingLine(ms *MissingStatus) { out.missing = append(out.missing, ms) } func (out *jsonOutput) MissingFooter() { json.NewEncoder(out.w).Encode(out.missing) } type dotOutput struct { w io.Writer o string g *graphviz p *dep.Project } func (out *dotOutput) BasicHeader() { out.g = new(graphviz).New() ptree, _ := out.p.ParseRootPackageTree() // TODO(sdboyer) should be true, true, false, out.p.Manifest.IgnoredPackages() prm, _ := ptree.ToReachMap(true, false, false, nil) out.g.createNode(string(out.p.ImportRoot), "", prm.FlattenFn(paths.IsStandardImportPath)) } func (out *dotOutput) BasicFooter() { gvo := out.g.output() fmt.Fprintf(out.w, gvo.String()) } func (out *dotOutput) BasicLine(bs *BasicStatus) { out.g.createNode(bs.ProjectRoot, bs.getConsolidatedVersion(), bs.Children) } func (out *dotOutput) MissingHeader() {} func (out *dotOutput) MissingLine(ms *MissingStatus) {} func (out *dotOutput) MissingFooter() {} func (cmd *statusCommand) Run(ctx *dep.Ctx, args []string) error { p, err := ctx.LoadProject() if err != nil { return err } sm, err := ctx.SourceManager() if err != nil { return err } sm.UseDefaultSignalHandling() defer sm.Release() if err := dep.ValidateProjectRoots(ctx, p.Manifest, sm); err != nil { return err } var buf bytes.Buffer var out outputter switch { case cmd.modified: return errors.Errorf("not implemented") case cmd.unused: return errors.Errorf("not implemented") case cmd.missing: return errors.Errorf("not implemented") case cmd.old: return errors.Errorf("not implemented") case cmd.detailed: return errors.Errorf("not implemented") case cmd.json: out = &jsonOutput{ w: &buf, } case cmd.dot: out = &dotOutput{ p: p, o: cmd.output, w: &buf, } default: out = &tableOutput{ w: tabwriter.NewWriter(&buf, 0, 4, 2, ' ', 0), } } // Check if the lock file exists. if p.Lock == nil { return errors.Errorf("no Gopkg.lock found. Run `dep ensure` to generate lock file") } hasMissingPkgs, errCount, err := runStatusAll(ctx, out, p, sm) if err != nil { switch err { case errFailedUpdate: // Print the results with unknown data ctx.Out.Println(buf.String()) // Print the help when in non-verbose mode if !ctx.Verbose { ctx.Out.Printf("The status of %d projects are unknown due to errors. Rerun with `-v` flag to see details.\n", errCount) } case errInputDigestMismatch: // Tell the user why mismatch happened and how to resolve it. if hasMissingPkgs { ctx.Err.Printf("Lock inputs-digest mismatch due to the following packages missing from the lock:\n\n") ctx.Out.Print(buf.String()) ctx.Err.Printf("\nThis happens when a new import is added. Run `dep ensure` to install the missing packages.\n") } else { ctx.Err.Printf("Lock inputs-digest mismatch. This happens when Gopkg.toml is modified.\n" + "Run `dep ensure` to regenerate the inputs-digest.") } } return err } // Print the status output ctx.Out.Print(buf.String()) return nil } type rawStatus struct { ProjectRoot string Constraint string Version string Revision string Latest string PackageCount int } // BasicStatus contains all the information reported about a single dependency // in the summary/list status output mode. type BasicStatus struct { ProjectRoot string Children []string Constraint gps.Constraint Version gps.UnpairedVersion Revision gps.Revision Latest gps.Version PackageCount int hasOverride bool hasError bool } func (bs *BasicStatus) getConsolidatedConstraint() string { var constraint string if bs.Constraint != nil { if v, ok := bs.Constraint.(gps.Version); ok { constraint = formatVersion(v) } else { constraint = bs.Constraint.String() } } if bs.hasOverride { constraint += " (override)" } return constraint } func (bs *BasicStatus) getConsolidatedVersion() string { version := formatVersion(bs.Revision) if bs.Version != nil { version = formatVersion(bs.Version) } return version } func (bs *BasicStatus) getConsolidatedLatest(revSize uint8) string { latest := "" if bs.Latest != nil { switch revSize { case shortRev: latest = formatVersion(bs.Latest) case longRev: latest = bs.Latest.String() } } if bs.hasError { latest += "unknown" } return latest } func (bs *BasicStatus) marshalJSON() *rawStatus { return &rawStatus{ ProjectRoot: bs.ProjectRoot, Constraint: bs.getConsolidatedConstraint(), Version: formatVersion(bs.Version), Revision: string(bs.Revision), Latest: bs.getConsolidatedLatest(longRev), PackageCount: bs.PackageCount, } } // MissingStatus contains information about all the missing packages in a project. type MissingStatus struct { ProjectRoot string MissingPackages []string } func runStatusAll(ctx *dep.Ctx, out outputter, p *dep.Project, sm gps.SourceManager) (hasMissingPkgs bool, errCount int, err error) { // While the network churns on ListVersions() requests, statically analyze // code from the current project. ptree, err := p.ParseRootPackageTree() if err != nil { return false, 0, err } // Set up a solver in order to check the InputHash. params := gps.SolveParameters{ ProjectAnalyzer: dep.Analyzer{}, RootDir: p.AbsRoot, RootPackageTree: ptree, Manifest: p.Manifest, // Locks aren't a part of the input hash check, so we can omit it. } logger := ctx.Err if ctx.Verbose { params.TraceLogger = ctx.Err } else { logger = log.New(ioutil.Discard, "", 0) } if err := ctx.ValidateParams(sm, params); err != nil { return false, 0, err } s, err := gps.Prepare(params, sm) if err != nil { return false, 0, errors.Wrapf(err, "could not set up solver for input hashing") } cm := collectConstraints(ptree, p, sm) // Get the project list and sort it so that the printed output users see is // deterministically ordered. (This may be superfluous if the lock is always // written in alpha order, but it doesn't hurt to double down.) slp := p.Lock.Projects() sort.Slice(slp, func(i, j int) bool { return slp[i].Ident().Less(slp[j].Ident()) }) if bytes.Equal(s.HashInputs(), p.Lock.SolveMeta.InputsDigest) { // If these are equal, we're guaranteed that the lock is a transitively // complete picture of all deps. That eliminates the need for at least // some checks. out.BasicHeader() logger.Println("Checking upstream projects:") // BasicStatus channel to collect all the BasicStatus. bsCh := make(chan *BasicStatus, len(slp)) // Error channels to collect different errors. errListPkgCh := make(chan error, len(slp)) errListVerCh := make(chan error, len(slp)) var wg sync.WaitGroup for i, proj := range slp { wg.Add(1) logger.Printf("(%d/%d) %s\n", i+1, len(slp), proj.Ident().ProjectRoot) go func(proj gps.LockedProject) { bs := BasicStatus{ ProjectRoot: string(proj.Ident().ProjectRoot), PackageCount: len(proj.Packages()), } // Get children only for specific outputers // in order to avoid slower status process. switch out.(type) { case *dotOutput: ptr, err := sm.ListPackages(proj.Ident(), proj.Version()) if err != nil { bs.hasError = true errListPkgCh <- err } prm, _ := ptr.ToReachMap(true, true, false, p.Manifest.IgnoredPackages()) bs.Children = prm.FlattenFn(paths.IsStandardImportPath) } // Split apart the version from the lock into its constituent parts. switch tv := proj.Version().(type) { case gps.UnpairedVersion: bs.Version = tv case gps.Revision: bs.Revision = tv case gps.PairedVersion: bs.Version = tv.Unpair() bs.Revision = tv.Revision() } // Check if the manifest has an override for this project. If so, // set that as the constraint. if pp, has := p.Manifest.Ovr[proj.Ident().ProjectRoot]; has && pp.Constraint != nil { bs.hasOverride = true bs.Constraint = pp.Constraint } else { bs.Constraint = gps.Any() for _, c := range cm[bs.ProjectRoot] { bs.Constraint = c.Intersect(bs.Constraint) } } // Only if we have a non-rev and non-plain version do/can we display // anything wrt the version's updateability. if bs.Version != nil && bs.Version.Type() != gps.IsVersion { c, has := p.Manifest.Constraints[proj.Ident().ProjectRoot] if !has { c.Constraint = gps.Any() } // TODO: This constraint is only the constraint imposed by the // current project, not by any transitive deps. As a result, // transitive project deps will always show "any" here. bs.Constraint = c.Constraint vl, err := sm.ListVersions(proj.Ident()) if err == nil { gps.SortPairedForUpgrade(vl) for _, v := range vl { // Because we've sorted the version list for // upgrade, the first version we encounter that // matches our constraint will be what we want. if c.Constraint.Matches(v) { bs.Latest = v.Revision() break } } } else { // Failed to fetch version list (could happen due to // network issue). bs.hasError = true errListVerCh <- err } } bsCh <- &bs wg.Done() }(proj) } wg.Wait() close(bsCh) close(errListPkgCh) close(errListVerCh) // Newline after printing the status progress output. logger.Println() // List Packages errors. This would happen only for dot output. if len(errListPkgCh) > 0 { err = errFailedListPkg if ctx.Verbose { for err := range errListPkgCh { ctx.Err.Println(err.Error()) } ctx.Err.Println() } } // List Version errors. if len(errListVerCh) > 0 { if err == nil { err = errFailedUpdate } else { err = errMultipleFailures } // Count ListVersions error because we get partial results when // this happens. errCount = len(errListVerCh) if ctx.Verbose { for err := range errListVerCh { ctx.Err.Println(err.Error()) } ctx.Err.Println() } } // A map of ProjectRoot and *BasicStatus. This is used in maintain the // order of BasicStatus in output by collecting all the BasicStatus and // then using them in order. bsMap := make(map[string]*BasicStatus) for bs := range bsCh { bsMap[bs.ProjectRoot] = bs } // Use the collected BasicStatus in outputter. for _, proj := range slp { out.BasicLine(bsMap[string(proj.Ident().ProjectRoot)]) } out.BasicFooter() return false, errCount, err } // Hash digest mismatch may indicate that some deps are no longer // needed, some are missing, or that some constraints or source // locations have changed. // // It's possible for digests to not match, but still have a correct // lock. rm, _ := ptree.ToReachMap(true, true, false, p.Manifest.IgnoredPackages()) external := rm.FlattenFn(paths.IsStandardImportPath) roots := make(map[gps.ProjectRoot][]string, len(external)) type fail struct { ex string err error } var errs []fail for _, e := range external { root, err := sm.DeduceProjectRoot(e) if err != nil { errs = append(errs, fail{ ex: e, err: err, }) continue } roots[root] = append(roots[root], e) } if len(errs) != 0 { // TODO this is just a fix quick so staticcheck doesn't complain. // Visually reconciling failure to deduce project roots with the rest of // the mismatch output is a larger problem. ctx.Err.Printf("Failed to deduce project roots for import paths:\n") for _, fail := range errs { ctx.Err.Printf("\t%s: %s\n", fail.ex, fail.err.Error()) } return false, 0, errors.New("address issues with undeducible import paths to get more status information") } out.MissingHeader() outer: for root, pkgs := range roots { // TODO also handle the case where the project is present, but there // are items missing from just the package list for _, lp := range slp { if lp.Ident().ProjectRoot == root { continue outer } } hasMissingPkgs = true out.MissingLine(&MissingStatus{ProjectRoot: string(root), MissingPackages: pkgs}) } out.MissingFooter() // We are here because of an input-digest mismatch. Return error. return hasMissingPkgs, 0, errInputDigestMismatch } func formatVersion(v gps.Version) string { if v == nil { return "" } switch v.Type() { case gps.IsBranch: return "branch " + v.String() case gps.IsRevision: r := v.String() if len(r) > 7 { r = r[:7] } return r } return v.String() } func collectConstraints(ptree pkgtree.PackageTree, p *dep.Project, sm gps.SourceManager) map[string][]gps.Constraint { // TODO return map[string][]gps.Constraint{} } dep-0.3.2/cmd/dep/status_test.go000066400000000000000000000167151317166637100165350ustar00rootroot00000000000000// Copyright 2017 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 main import ( "bytes" "testing" "text/tabwriter" "strings" "github.com/golang/dep" "github.com/golang/dep/internal/gps" ) func TestStatusFormatVersion(t *testing.T) { t.Parallel() tests := map[gps.Version]string{ nil: "", gps.NewBranch("master"): "branch master", gps.NewVersion("1.0.0"): "1.0.0", gps.Revision("flooboofoobooo"): "flooboo", } for version, expected := range tests { str := formatVersion(version) if str != expected { t.Fatalf("expected '%v', got '%v'", expected, str) } } } func TestBasicLine(t *testing.T) { project := dep.Project{} aSemverConstraint, _ := gps.NewSemverConstraint("1.2.3") tests := []struct { name string status BasicStatus wantDotStatus []string wantJSONStatus []string wantTableStatus []string }{ { name: "BasicStatus with ProjectRoot only", status: BasicStatus{ ProjectRoot: "github.com/foo/bar", }, wantDotStatus: []string{`[label="github.com/foo/bar"];`}, wantJSONStatus: []string{`"Version":""`, `"Revision":""`}, wantTableStatus: []string{`github.com/foo/bar 0`}, }, { name: "BasicStatus with Revision", status: BasicStatus{ ProjectRoot: "github.com/foo/bar", Revision: gps.Revision("flooboofoobooo"), }, wantDotStatus: []string{`[label="github.com/foo/bar\nflooboo"];`}, wantJSONStatus: []string{`"Version":""`, `"Revision":"flooboofoobooo"`, `"Constraint":""`}, wantTableStatus: []string{`github.com/foo/bar flooboo 0`}, }, { name: "BasicStatus with Version and Revision", status: BasicStatus{ ProjectRoot: "github.com/foo/bar", Version: gps.NewVersion("1.0.0"), Revision: gps.Revision("flooboofoobooo"), }, wantDotStatus: []string{`[label="github.com/foo/bar\n1.0.0"];`}, wantJSONStatus: []string{`"Version":"1.0.0"`, `"Revision":"flooboofoobooo"`, `"Constraint":""`}, wantTableStatus: []string{`github.com/foo/bar 1.0.0 flooboo 0`}, }, { name: "BasicStatus with Constraint, Version and Revision", status: BasicStatus{ ProjectRoot: "github.com/foo/bar", Constraint: aSemverConstraint, Version: gps.NewVersion("1.0.0"), Revision: gps.Revision("revxyz"), }, wantDotStatus: []string{`[label="github.com/foo/bar\n1.0.0"];`}, wantJSONStatus: []string{`"Revision":"revxyz"`, `"Constraint":"1.2.3"`, `"Version":"1.0.0"`}, wantTableStatus: []string{`github.com/foo/bar 1.2.3 1.0.0 revxyz 0`}, }, { name: "BasicStatus with update error", status: BasicStatus{ ProjectRoot: "github.com/foo/bar", hasError: true, }, wantDotStatus: []string{`[label="github.com/foo/bar"];`}, wantJSONStatus: []string{`"Version":""`, `"Revision":""`, `"Latest":"unknown"`}, wantTableStatus: []string{`github.com/foo/bar unknown 0`}, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { var buf bytes.Buffer dotout := &dotOutput{ p: &project, w: &buf, } dotout.BasicHeader() dotout.BasicLine(&test.status) dotout.BasicFooter() for _, wantStatus := range test.wantDotStatus { if ok := strings.Contains(buf.String(), wantStatus); !ok { t.Errorf("Did not find expected node status: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), wantStatus) } } buf.Reset() jsonout := &jsonOutput{w: &buf} jsonout.BasicHeader() jsonout.BasicLine(&test.status) jsonout.BasicFooter() for _, wantStatus := range test.wantJSONStatus { if ok := strings.Contains(buf.String(), wantStatus); !ok { t.Errorf("Did not find expected JSON status: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), wantStatus) } } buf.Reset() tabw := tabwriter.NewWriter(&buf, 0, 4, 2, ' ', 0) tableout := &tableOutput{w: tabw} tableout.BasicHeader() tableout.BasicLine(&test.status) tableout.BasicFooter() for _, wantStatus := range test.wantTableStatus { if ok := strings.Contains(buf.String(), wantStatus); !ok { t.Errorf("Did not find expected Table status: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), wantStatus) } } }) } } func TestBasicStatusGetConsolidatedConstraint(t *testing.T) { aSemverConstraint, _ := gps.NewSemverConstraint("1.2.1") testCases := []struct { name string basicStatus BasicStatus wantConstraint string }{ { name: "empty BasicStatus", basicStatus: BasicStatus{}, wantConstraint: "", }, { name: "BasicStatus with Any Constraint", basicStatus: BasicStatus{ Constraint: gps.Any(), }, wantConstraint: "*", }, { name: "BasicStatus with Semver Constraint", basicStatus: BasicStatus{ Constraint: aSemverConstraint, }, wantConstraint: "1.2.1", }, { name: "BasicStatus with Override", basicStatus: BasicStatus{ Constraint: aSemverConstraint, hasOverride: true, }, wantConstraint: "1.2.1 (override)", }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { if tc.basicStatus.getConsolidatedConstraint() != tc.wantConstraint { t.Errorf("unexpected consolidated constraint: \n\t(GOT) %v \n\t(WNT) %v", tc.basicStatus.getConsolidatedConstraint(), tc.wantConstraint) } }) } } func TestBasicStatusGetConsolidatedVersion(t *testing.T) { testCases := []struct { name string basicStatus BasicStatus wantVersion string }{ { name: "empty BasicStatus", basicStatus: BasicStatus{}, wantVersion: "", }, { name: "BasicStatus with Version and Revision", basicStatus: BasicStatus{ Version: gps.NewVersion("1.0.0"), Revision: gps.Revision("revxyz"), }, wantVersion: "1.0.0", }, { name: "BasicStatus with only Revision", basicStatus: BasicStatus{ Revision: gps.Revision("revxyz"), }, wantVersion: "revxyz", }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { if tc.basicStatus.getConsolidatedVersion() != tc.wantVersion { t.Errorf("unexpected consolidated version: \n\t(GOT) %v \n\t(WNT) %v", tc.basicStatus.getConsolidatedVersion(), tc.wantVersion) } }) } } func TestBasicStatusGetConsolidatedLatest(t *testing.T) { testCases := []struct { name string basicStatus BasicStatus revSize uint8 wantLatest string }{ { name: "empty BasicStatus", basicStatus: BasicStatus{}, revSize: shortRev, wantLatest: "", }, { name: "nil latest", basicStatus: BasicStatus{ Latest: nil, }, revSize: shortRev, wantLatest: "", }, { name: "with error", basicStatus: BasicStatus{ hasError: true, }, revSize: shortRev, wantLatest: "unknown", }, { name: "short latest", basicStatus: BasicStatus{ Latest: gps.Revision("adummylonglongrevision"), }, revSize: shortRev, wantLatest: "adummyl", }, { name: "long latest", basicStatus: BasicStatus{ Latest: gps.Revision("adummylonglongrevision"), }, revSize: longRev, wantLatest: "adummylonglongrevision", }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { gotRev := tc.basicStatus.getConsolidatedLatest(tc.revSize) if gotRev != tc.wantLatest { t.Errorf("unexpected consolidated latest: \n\t(GOT) %v \n\t(WNT) %v", gotRev, tc.wantLatest) } }) } } dep-0.3.2/cmd/dep/testdata/000077500000000000000000000000001317166637100154235ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/graphviz/000077500000000000000000000000001317166637100172555ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/graphviz/case1.dot000066400000000000000000000003211317166637100207550ustar00rootroot00000000000000digraph { node [shape=box]; 4106060478 [label="project"]; 2851307223 [label="foo\nmaster"]; 1991736602 [label="bar\ndev"]; 4106060478 -> 2851307223; 4106060478 -> 1991736602; 2851307223 -> 1991736602; }dep-0.3.2/cmd/dep/testdata/graphviz/case2.dot000066400000000000000000000000751317166637100207640ustar00rootroot00000000000000digraph { node [shape=box]; 4106060478 [label="project"]; }dep-0.3.2/cmd/dep/testdata/graphviz/empty.dot000066400000000000000000000000361317166637100211220ustar00rootroot00000000000000digraph { node [shape=box]; }dep-0.3.2/cmd/dep/testdata/harness_tests/000077500000000000000000000000001317166637100203105ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/README.md000066400000000000000000000072031317166637100215710ustar00rootroot00000000000000# golang/dep Integration Tests The `dep` integration tests use a consistent directory structure under `testdata` to set up the initial project state, run `dep` commands, then check against an expected final state to see if the test passes. The directory structure is as follows: testdata/ harness_tests/ category1/ subcategory1/ case1/ testcase.json stdout.txt initial/ file1.go Gopkg.toml ... final/ Gopkg.toml Gopkg.lock case2/ ... The test code itself simply walks down the directory tree, looking for `testcase.json` files. These files can be as many levels down the tree as desired. The test name will consist of the directory path from `testdata` to the test case directory itself. In the above example, the test name would be `category1/subcategory1/case1`, and could be singled out with the `-run` option of `go test` (i.e. `go test github.com/golang/dep/cmd/dep -run Integration/category1/subcategory1/case1`). New tests can be added simply by adding a new directory with the json file to the `testdata` tree. There is no need for code modification - the new test will be included automatically. The json file needs to be accompanied by `initial` and `final` directories. The `initial` is copied verbatim into the test project before the `dep` commands are run, and the `manifest` and `lock` files in `final`, if present, are used to compare against the test project results after the commands. The `stdout.txt` file is optional, and if present will be compared with command output. The `testcase.json` file has the following format: { "commands": [ ["init"], ["ensure", "github.com/sdboyer/deptesttres"] ], "gopath-initial": { "github.com/sdboyer/deptest": "v0.8.0", "github.com/sdboyer/deptestdos": "a0196baa11ea047dd65037287451d36b861b00ea" }, "vendor-initial": { "github.com/sdboyer/deptesttres": "v2.1.0", "github.com/sdboyer/deptestquatro": "cf596baa11ea047ddf8797287451d36b861bab45" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos", "github.com/sdboyer/deptesttres", "github.com/sdboyer/deptestquatro" ], "error-expected": "something went wrong" } All of the categories are optional - if the `imports` list for a test is empty, for example, it can be completely left out. The test procedure is as follows: 1. Create a unique temporary directory (TMPDIR) as the test run's `GOPATH` 2. Create `$TMPDIR/src/github.com/golang/notexist` as the current project 3. Copy the contents of `initial` input directory to the project 4. Fetch the repos and versions in `gopath-initial` into `$TMPDIR/src` directory 5. Fetch the repos and versions in `vendor-initial` to the project's `vendor` directory 6. Run `commands` on the project, in declaration order 7. Ensure that, if any errors are raised, it is only by the final command and their string output matches `error-expected` 8. Ensure that, if a stdout.txt file is present, the command's output matches (excluding trailing whitespace). 9. Check the resulting files against those in the `final` input directory 10. Check the `vendor` directory for the projects listed under `vendor-final` 11. Check that there were no changes to `src` listings 12. Clean up Note that for the remote fetches, only git repos are currently supported. dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/000077500000000000000000000000001317166637100216115ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/000077500000000000000000000000001317166637100223415ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/000077500000000000000000000000001317166637100261005ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/000077500000000000000000000000001317166637100271715ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.lock000066400000000000000000000011111317166637100311040ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "645b5b52e1bfb9e3db1cefde758485e009edfe5bad611b490582d94467f9c1b0" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.toml000066400000000000000000000002301317166637100311300ustar00rootroot00000000000000 [[constraint]] branch = "master" name = "github.com/sdboyer/deptesttres" [[constraint]] name = "github.com/sdboyer/deptest" version = "0.8.1" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/initial/000077500000000000000000000000001317166637100275315ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/initial/main.go000066400000000000000000000004041317166637100310020ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/sdboyer/deptesttres" ) func main() { type a deptesttres.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/testcase.json000066400000000000000000000003641317166637100306110ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"], ["ensure", "-add", "github.com/sdboyer/deptest", "github.com/sdboyer/deptest@v0.8.1"] ], "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptesttres" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/000077500000000000000000000000001317166637100251505ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/000077500000000000000000000000001317166637100262415ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.lock000066400000000000000000000011201317166637100301540ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = [".","subp"] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "432bc141db9511df4e1b5754c6c4d8cf4dd8b4f8d5a13fd7d189c17c14e000b7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.toml000066400000000000000000000002301317166637100302000ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" [[constraint]] branch = "master" name = "github.com/sdboyer/deptesttres" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/initial/000077500000000000000000000000001317166637100266015ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/initial/main.go000066400000000000000000000003741317166637100300600ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/sdboyer/deptest" ) func main() { type a deptest.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/testcase.json000066400000000000000000000003721317166637100276600ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"], ["ensure", "-add", "github.com/sdboyer/deptesttres", "github.com/sdboyer/deptesttres/subp"] ], "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptesttres" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/000077500000000000000000000000001317166637100246305ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/000077500000000000000000000000001317166637100257215ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.lock000066400000000000000000000011111317166637100276340ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "645b5b52e1bfb9e3db1cefde758485e009edfe5bad611b490582d94467f9c1b0" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.toml000066400000000000000000000002301317166637100276600ustar00rootroot00000000000000 [[constraint]] branch = "master" name = "github.com/sdboyer/deptesttres" [[constraint]] name = "github.com/sdboyer/deptest" version = "0.8.1" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/initial/000077500000000000000000000000001317166637100262615ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/initial/main.go000066400000000000000000000004041317166637100275320ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/sdboyer/deptesttres" ) func main() { type a deptesttres.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/testcase.json000066400000000000000000000003261317166637100273370ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"], ["ensure", "-add", "github.com/sdboyer/deptest@v0.8.1"] ], "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptesttres" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new/000077500000000000000000000000001317166637100237005ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/000077500000000000000000000000001317166637100247715ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.lock000066400000000000000000000011111317166637100267040ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "8f0b74fd1169808bd0e31dd7ad6c601c7b8f7ef25eec9e8a45e72b8a384ebb5c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.toml000066400000000000000000000002301317166637100267300ustar00rootroot00000000000000 [[constraint]] branch = "master" name = "github.com/sdboyer/deptesttres" [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new/initial/000077500000000000000000000000001317166637100253315ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new/initial/main.go000066400000000000000000000004041317166637100266020ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/sdboyer/deptesttres" ) func main() { type a deptesttres.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/all-new/testcase.json000066400000000000000000000003171317166637100264070ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"], ["ensure", "-add", "github.com/sdboyer/deptest"] ], "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptesttres" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/000077500000000000000000000000001317166637100236265ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/final/000077500000000000000000000000001317166637100247175ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/final/Gopkg.lock000066400000000000000000000013401317166637100266360ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "86240895e0ee5788e7e8bb56e0d77afd58009a491b69f6835e546db9e5dacfcd" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/final/Gopkg.toml000066400000000000000000000002271317166637100266640ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0" [[constraint]] branch = "master" name = "github.com/sdboyer/deptesttres" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/final/main.go000066400000000000000000000005361317166637100261760ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/initial/000077500000000000000000000000001317166637100252575ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/initial/Gopkg.lock000066400000000000000000000006651317166637100272070ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "9a7bd6944c26792ab2e97fed1227cc402f0cc00465016836efbf04239596dd9f" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/initial/Gopkg.toml000066400000000000000000000001111317166637100272140ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/initial/main.go000066400000000000000000000006311317166637100265320ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" "github.com/sdboyer/deptesttres" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") type a deptesttres.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/stdout.txt000066400000000000000000000001411317166637100257050ustar00rootroot00000000000000Warning: Gopkg.lock is out of sync with Gopkg.toml or the project's imports. Fetching sources... dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/desync/testcase.json000066400000000000000000000003431317166637100263340ustar00rootroot00000000000000{ "commands": [ ["ensure", "-add", "github.com/sdboyer/deptesttres@master"] ], "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos", "github.com/sdboyer/deptesttres" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/000077500000000000000000000000001317166637100233145ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/000077500000000000000000000000001317166637100264245ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/000077500000000000000000000000001317166637100275155ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.lock000066400000000000000000000006651317166637100314450ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.toml000066400000000000000000000001161317166637100314570ustar00rootroot00000000000000 [[constraint]] branch = "master" name = "github.com/sdboyer/deptesttres" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/initial/000077500000000000000000000000001317166637100300555ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/initial/main.go000066400000000000000000000004041317166637100313260ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/sdboyer/deptesttres" ) func main() { type a deptesttres.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/testcase.json000066400000000000000000000005401317166637100311310ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"], ["ensure", "-add", "github.com/sdboyer/deptest@0.8.1", "github.com/sdboyer/deptest@1.0.0"] ], "vendor-final": [ "github.com/sdboyer/deptesttres" ], "error-expected": "can only specify rules once per project being added; rules were given at least twice for github.com/sdboyer/deptest" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/000077500000000000000000000000001317166637100264375ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/000077500000000000000000000000001317166637100275305ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/Gopkg.lock000066400000000000000000000006651317166637100314600ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/Gopkg.toml000066400000000000000000000002271317166637100314750ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptesttres" branch = "master" [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/000077500000000000000000000000001317166637100300705ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/Gopkg.lock000066400000000000000000000006651317166637100320200ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/Gopkg.toml000066400000000000000000000002271317166637100320350ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptesttres" branch = "master" [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/main.go000066400000000000000000000004041317166637100313410ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/sdboyer/deptesttres" ) func main() { type a deptesttres.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/testcase.json000066400000000000000000000003201317166637100311400ustar00rootroot00000000000000{ "commands": [ ["ensure", "-add", "github.com/sdboyer/deptest@1.0.0"] ], "error-expected": "Gopkg.toml already contains rules for github.com/sdboyer/deptest, cannot specify a version constraint" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/000077500000000000000000000000001317166637100246335ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/final/000077500000000000000000000000001317166637100257245ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/final/Gopkg.lock000066400000000000000000000006621317166637100276510ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/final/Gopkg.toml000066400000000000000000000001111317166637100276610ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/000077500000000000000000000000001317166637100262645ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/Gopkg.lock000066400000000000000000000006621317166637100302110ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/Gopkg.toml000066400000000000000000000001111317166637100302210ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/main.go000066400000000000000000000004041317166637100275350ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" ) func main() { _ := deptest.Map["yo yo!"] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/testcase.json000066400000000000000000000003331317166637100273400ustar00rootroot00000000000000{ "commands": [ ["ensure", "-add", "github.com/sdboyer/deptest"] ], "error-expected": "nothing to -add, github.com/sdboyer/deptest is already in Gopkg.toml and the project's direct imports or required list" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/000077500000000000000000000000001317166637100244225ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/000077500000000000000000000000001317166637100255135ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/Gopkg.lock000066400000000000000000000011111317166637100274260ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" version = "v0.8.0" revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" packages = ["."] [[projects]] name = "github.com/sdboyer/deptestdos" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/Gopkg.toml000066400000000000000000000001111317166637100274500ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/main.go000066400000000000000000000005361317166637100267720ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/000077500000000000000000000000001317166637100260535ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/Gopkg.lock000066400000000000000000000011111317166637100277660ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" version = "v0.8.0" revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" packages = ["."] [[projects]] name = "github.com/sdboyer/deptestdos" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/Gopkg.toml000066400000000000000000000001111317166637100300100ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/main.go000066400000000000000000000005361317166637100273320ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/testcase.json000066400000000000000000000001731317166637100271310ustar00rootroot00000000000000{ "commands": [ ["ensure", "-add"] ], "error-expected": "must specify at least one project or package to -add" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/000077500000000000000000000000001317166637100247735ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/000077500000000000000000000000001317166637100257675ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/final/000077500000000000000000000000001317166637100270605ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/final/Gopkg.lock000066400000000000000000000006621317166637100310050ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/final/Gopkg.toml000066400000000000000000000001111317166637100310150ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/initial/000077500000000000000000000000001317166637100274205ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/initial/Gopkg.lock000066400000000000000000000006621317166637100313450ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/initial/Gopkg.toml000066400000000000000000000001111317166637100313550ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/initial/main.go000066400000000000000000000004041317166637100306710ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" ) func main() { _ := deptest.Map["yo yo!"] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case1/testcase.json000066400000000000000000000002111317166637100304670ustar00rootroot00000000000000{ "commands": [ ["ensure", "-add", "github.com/golang/notexist"] ], "error-expected": "cannot add current project to itself" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/000077500000000000000000000000001317166637100257705ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/final/000077500000000000000000000000001317166637100270615ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/final/Gopkg.lock000066400000000000000000000004361317166637100310050ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/final/Gopkg.toml000066400000000000000000000000001317166637100310130ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/initial/000077500000000000000000000000001317166637100274215ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/initial/main.go000066400000000000000000000002751317166637100307000ustar00rootroot00000000000000// Copyright 2017 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 main func main() {} dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/testcase.json000066400000000000000000000002471317166637100305010ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"], ["ensure", "-add", "github.com/golang/notexist"] ], "error-expected": "cannot add current project to itself" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/000077500000000000000000000000001317166637100253535ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/000077500000000000000000000000001317166637100264445ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.lock000066400000000000000000000006651317166637100303740ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.toml000066400000000000000000000001161317166637100304060ustar00rootroot00000000000000 [[constraint]] branch = "master" name = "github.com/sdboyer/deptesttres" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/initial/000077500000000000000000000000001317166637100270045ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/initial/Gopkg.toml000066400000000000000000000000001317166637100307360ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/initial/main.go000066400000000000000000000004041317166637100302550ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/sdboyer/deptesttres" ) func main() { type a deptesttres.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/testcase.json000066400000000000000000000002301317166637100300540ustar00rootroot00000000000000{ "commands": [ ["ensure", "-add", "github.com/sdboyer/deptesttres@master"] ], "vendor-final": [ "github.com/sdboyer/deptesttres" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/000077500000000000000000000000001317166637100276465ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/000077500000000000000000000000001317166637100307375ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.lock000066400000000000000000000011111317166637100326520ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "d1fe1d4f4dd98b75908b524bd73d43a4b9e3ce0b9522ea6ce9d6c9ea15190c1d" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.toml000066400000000000000000000002271317166637100327040ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptesttres" branch = "master" [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/000077500000000000000000000000001317166637100312775ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/Gopkg.lock000066400000000000000000000006651317166637100332270ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptesttres" packages = ["."] revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/Gopkg.toml000066400000000000000000000002271317166637100332440ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptesttres" branch = "master" [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/main.go000066400000000000000000000004041317166637100325500ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/sdboyer/deptesttres" ) func main() { type a deptesttres.Bar } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/testcase.json000066400000000000000000000002611317166637100323530ustar00rootroot00000000000000{ "commands": [ ["ensure", "-add", "github.com/sdboyer/deptest"] ], "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptesttres" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/000077500000000000000000000000001317166637100232355ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/000077500000000000000000000000001317166637100242105ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/000077500000000000000000000000001317166637100302245ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/000077500000000000000000000000001317166637100313155ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/Gopkg.toml000066400000000000000000000001121317166637100332530ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/main.go000066400000000000000000000003521317166637100325700ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/000077500000000000000000000000001317166637100316555ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/Gopkg.toml000066400000000000000000000001121317166637100336130ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/main.go000066400000000000000000000003521317166637100331300ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/testcase.json000066400000000000000000000002021317166637100327240ustar00rootroot00000000000000{ "commands": [ ["ensure", "-vendor-only"] ], "error-expected": "no Gopkg.lock exists from which to populate vendor/" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/000077500000000000000000000000001317166637100260175ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/000077500000000000000000000000001317166637100271105ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/Gopkg.lock000066400000000000000000000006621317166637100310350ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/Gopkg.toml000066400000000000000000000001121317166637100310460ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/000077500000000000000000000000001317166637100274505ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/Gopkg.lock000066400000000000000000000006621317166637100313750ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/Gopkg.toml000066400000000000000000000001121317166637100314060ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/main.go000066400000000000000000000003521317166637100307230ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/testcase.json000066400000000000000000000002121317166637100305200ustar00rootroot00000000000000{ "commands": [ ["ensure", "foobar.com/baz"] ], "error-expected": "dep ensure only takes spec arguments with -add or -update" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/000077500000000000000000000000001317166637100253025ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/000077500000000000000000000000001317166637100263735ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/Gopkg.lock000066400000000000000000000006621317166637100303200ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/Gopkg.toml000066400000000000000000000001121317166637100303310ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/000077500000000000000000000000001317166637100267335ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/Gopkg.lock000066400000000000000000000006621317166637100306600ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/Gopkg.toml000066400000000000000000000001121317166637100306710ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/main.go000066400000000000000000000003521317166637100302060ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/testcase.json000066400000000000000000000000631317166637100300070ustar00rootroot00000000000000{ "commands": [ ["ensure", "-dry-run"] ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/000077500000000000000000000000001317166637100271325ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/final/000077500000000000000000000000001317166637100302235ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/final/Gopkg.lock000066400000000000000000000006621317166637100321500ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/final/Gopkg.toml000066400000000000000000000001121317166637100321610ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/initial/000077500000000000000000000000001317166637100305635ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/initial/Gopkg.lock000066400000000000000000000006621317166637100325100ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/initial/Gopkg.toml000066400000000000000000000001121317166637100325210ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/initial/main.go000066400000000000000000000003521317166637100320360ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/testcase.json000066400000000000000000000001011317166637100316300ustar00rootroot00000000000000{ "commands": [ ["ensure", "-no-vendor", "-dry-run"] ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/000077500000000000000000000000001317166637100263365ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/000077500000000000000000000000001317166637100274275ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.lock000066400000000000000000000006621317166637100313540ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.toml000066400000000000000000000001121317166637100313650ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/000077500000000000000000000000001317166637100277675ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/Gopkg.lock000066400000000000000000000006621317166637100317140ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/Gopkg.toml000066400000000000000000000001121317166637100317250ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/main.go000066400000000000000000000003521317166637100312420ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/testcase.json000066400000000000000000000000651317166637100310450ustar00rootroot00000000000000{ "commands": [ ["ensure", "-no-vendor"] ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/000077500000000000000000000000001317166637100245065ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/000077500000000000000000000000001317166637100255775ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.lock000066400000000000000000000006621317166637100275240ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.toml000066400000000000000000000001121317166637100275350ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/000077500000000000000000000000001317166637100261375ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/Gopkg.lock000066400000000000000000000006621317166637100300640ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/Gopkg.toml000066400000000000000000000001121317166637100300750ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/main.go000066400000000000000000000003521317166637100274120ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hasheq/testcase.json000066400000000000000000000001411317166637100272100ustar00rootroot00000000000000{ "commands": [ ["ensure"] ], "vendor-final": [ "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/000077500000000000000000000000001317166637100273105ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/final/000077500000000000000000000000001317166637100304015ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/final/Gopkg.lock000066400000000000000000000007701317166637100323260ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 # manually modified hash digest, it will not match any known inputs inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/final/Gopkg.toml000066400000000000000000000001121317166637100323370ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/initial/000077500000000000000000000000001317166637100307415ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/initial/Gopkg.lock000066400000000000000000000007701317166637100326660ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 # manually modified hash digest, it will not match any known inputs inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/initial/Gopkg.toml000066400000000000000000000001121317166637100326770ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/initial/main.go000066400000000000000000000003521317166637100322140ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/testcase.json000066400000000000000000000001661317166637100320210ustar00rootroot00000000000000{ "commands": [ ["ensure", "-no-vendor", "-dry-run"] ], "error-expected": "Gopkg.lock was not up to date" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/000077500000000000000000000000001317166637100270615ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/000077500000000000000000000000001317166637100301525ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/Gopkg.lock000066400000000000000000000007701317166637100320770ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 # manually modified hash digest, it will not match any known inputs inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/Gopkg.toml000066400000000000000000000001121317166637100321100ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/000077500000000000000000000000001317166637100305125ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/Gopkg.lock000066400000000000000000000007701317166637100324370ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 # manually modified hash digest, it will not match any known inputs inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/Gopkg.toml000066400000000000000000000001121317166637100324500ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/main.go000066400000000000000000000003521317166637100317650ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/testcase.json000066400000000000000000000001611317166637100315650ustar00rootroot00000000000000{ "commands": [ ["ensure", "-vendor-only"] ], "vendor-final": [ "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/nocode-vendoronly/000077500000000000000000000000001317166637100267015ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/nocode-vendoronly/final/000077500000000000000000000000001317166637100277725ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/nocode-vendoronly/final/Gopkg.lock000066400000000000000000000007701317166637100317170ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 # manually modified hash digest, it will not match any known inputs inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/nocode-vendoronly/final/Gopkg.toml000066400000000000000000000001121317166637100317300ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/nocode-vendoronly/initial/000077500000000000000000000000001317166637100303325ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/nocode-vendoronly/initial/Gopkg.lock000066400000000000000000000007701317166637100322570ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 # manually modified hash digest, it will not match any known inputs inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/nocode-vendoronly/initial/Gopkg.toml000066400000000000000000000001121317166637100322700ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/default/nocode-vendoronly/testcase.json000066400000000000000000000001611317166637100314050ustar00rootroot00000000000000{ "commands": [ ["ensure", "-vendor-only"] ], "vendor-final": [ "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/000077500000000000000000000000001317166637100227475ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case1/000077500000000000000000000000001317166637100237435ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/000077500000000000000000000000001317166637100250345ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.lock000066400000000000000000000006621317166637100267610ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.toml000066400000000000000000000001121317166637100267720ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case1/initial/000077500000000000000000000000001317166637100253745ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case1/initial/main.go000066400000000000000000000003521317166637100266470ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case1/testcase.json000066400000000000000000000002311317166637100264450ustar00rootroot00000000000000{ "commands": [ ["init", "-skip-tools", "-no-examples"], ["ensure", "-update"] ], "vendor-final": [ "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case2/000077500000000000000000000000001317166637100237445ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case2/final/000077500000000000000000000000001317166637100250355ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case2/final/Gopkg.lock000066400000000000000000000006621317166637100267620ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "e7725ea56516a42a641aaaf5d48754258d9f3c59949cb8a0e8a21b1ab6e07179" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case2/final/Gopkg.toml000066400000000000000000000001111317166637100267720ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case2/initial/000077500000000000000000000000001317166637100253755ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case2/initial/Gopkg.toml000066400000000000000000000001111317166637100273320ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case2/initial/main.go000066400000000000000000000003521317166637100266500ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case2/testcase.json000066400000000000000000000001711317166637100264510ustar00rootroot00000000000000{ "commands": [ ["ensure"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/000077500000000000000000000000001317166637100237455ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/README.md000066400000000000000000000001371317166637100252250ustar00rootroot00000000000000Validate that packages imported in an ignored package are not included in the manifest or lock.dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/final/000077500000000000000000000000001317166637100250365ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/final/Gopkg.lock000066400000000000000000000006611317166637100267620ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "e5c16e09ed6f0a1a2b3cf472c34b7fd50861dd070e81d5e623f72e8173f0c065" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/final/Gopkg.toml000066400000000000000000000001661317166637100270050ustar00rootroot00000000000000ignored = ["github.com/sdboyer/deptestdos"] [[constraint]] branch = "master" name = "github.com/sdboyer/deptest" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/000077500000000000000000000000001317166637100253765ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/Gopkg.lock000066400000000000000000000006611317166637100273220ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "8114537cd7d93f5eacebdea7dfec0c3c10919d7f952d056e2a3142fee1c33aee" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/Gopkg.toml000066400000000000000000000001661317166637100273450ustar00rootroot00000000000000ignored = ["github.com/sdboyer/deptestdos"] [[constraint]] branch = "master" name = "github.com/sdboyer/deptest" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/main.go000066400000000000000000000003521317166637100266510ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/samples/000077500000000000000000000000001317166637100270425ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/samples/samples.go000066400000000000000000000003321317166637100310330ustar00rootroot00000000000000// 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 samples import _ "github.com/sdboyer/deptestdos" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/empty/case3/testcase.json000066400000000000000000000001711317166637100264520ustar00rootroot00000000000000{ "commands": [ ["ensure"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/000077500000000000000000000000001317166637100237045ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/000077500000000000000000000000001317166637100247005ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/final/000077500000000000000000000000001317166637100257715ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/final/Gopkg.lock000066400000000000000000000004361317166637100277150ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/final/Gopkg.toml000066400000000000000000000000001317166637100277230ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/testcase.json000066400000000000000000000002521317166637100274050ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples", "-skip-tools"], ["ensure", "-update"] ], "error-expected": "no dirs contained any Go code", "vendor-final": [] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/000077500000000000000000000000001317166637100247015ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/final/000077500000000000000000000000001317166637100257725ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/final/Gopkg.toml000066400000000000000000000000001317166637100277240ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/initial/000077500000000000000000000000001317166637100263325ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/initial/Gopkg.toml000066400000000000000000000000001317166637100302640ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/initial/bar/000077500000000000000000000000001317166637100270765ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/initial/bar/bar.go000066400000000000000000000002371317166637100301730ustar00rootroot00000000000000// Copyright 2017 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. dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/initial/baz/000077500000000000000000000000001317166637100271065ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/initial/baz/.gitignore000066400000000000000000000000001317166637100310640ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/testcase.json000066400000000000000000000001571317166637100274120ustar00rootroot00000000000000{ "commands": [ ["ensure"] ], "error-expected": "found 1 errors", "vendor-final": [] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/000077500000000000000000000000001317166637100240175ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/000077500000000000000000000000001317166637100270715ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/final/000077500000000000000000000000001317166637100301625ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/final/Gopkg.lock000066400000000000000000000006621317166637100321070ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "5210e61a67f6e64dabb1eb8f28df2dbeeedfca1588c102067a6ec8a35e0b15f9" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/final/Gopkg.toml000066400000000000000000000001741317166637100321300ustar00rootroot00000000000000ignored = ["github.com/golang/notexist/samples*"] [[constraint]] branch = "master" name = "github.com/sdboyer/deptest" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/initial/000077500000000000000000000000001317166637100305225ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/initial/Gopkg.lock000066400000000000000000000004361317166637100324460ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/initial/Gopkg.toml000066400000000000000000000001741317166637100324700ustar00rootroot00000000000000ignored = ["github.com/golang/notexist/samples*"] [[constraint]] branch = "master" name = "github.com/sdboyer/deptest" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/initial/main.go000066400000000000000000000003521317166637100317750ustar00rootroot00000000000000// Copyright 2017 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/initial/samples/000077500000000000000000000000001317166637100321665ustar00rootroot00000000000000samples.go000066400000000000000000000003321317166637100341000ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/initial/samples// Copyright 2017 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 samples import _ "github.com/sdboyer/deptestdos" subsamples/000077500000000000000000000000001317166637100342655ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/initial/samplessubsamples.go000066400000000000000000000003331317166637100367710ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/initial/samples/subsamples// Copyright 2017 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 subsamples import _ "github.com/sdboyer/dep-test" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/stdout.txt000066400000000000000000000002041317166637100311500ustar00rootroot00000000000000-CONSTRAINTS- github.com/sdboyer/deptest b-master -IMPORTS/REQS- github.com/sdboyer/deptest -IGNORES- -OVERRIDES- -ANALYZER- dep 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/testcase.json000066400000000000000000000002161317166637100315760ustar00rootroot00000000000000{ "commands": [ ["ensure"], ["hash-inputs"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/000077500000000000000000000000001317166637100277105ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/final/000077500000000000000000000000001317166637100310015ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/final/Gopkg.lock000066400000000000000000000004361317166637100327250ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "b02b7a80e20404724ba5dbffab28e772017b03800916327f58bff0da86071b6a" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/final/Gopkg.toml000066400000000000000000000001211317166637100327370ustar00rootroot00000000000000ignored = ["github.com/sdboyer/deptest*", "github.com/golang/notexist/samples*"] dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/initial/000077500000000000000000000000001317166637100313415ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/initial/Gopkg.lock000066400000000000000000000004361317166637100332650ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/initial/Gopkg.toml000066400000000000000000000001211317166637100332770ustar00rootroot00000000000000ignored = ["github.com/sdboyer/deptest*", "github.com/golang/notexist/samples*"] dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/initial/main.go000066400000000000000000000003521317166637100326140ustar00rootroot00000000000000// Copyright 2017 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/initial/samples/000077500000000000000000000000001317166637100330055ustar00rootroot00000000000000samples.go000066400000000000000000000003321317166637100347170ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/initial/samples// Copyright 2017 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 samples import _ "github.com/sdboyer/deptestdos" subsamples/000077500000000000000000000000001317166637100351045ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/initial/samplessubsamples.go000066400000000000000000000003331317166637100376100ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/initial/samples/subsamples// Copyright 2017 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 subsamples import _ "github.com/sdboyer/dep-test" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/stdout.txt000066400000000000000000000001411317166637100317670ustar00rootroot00000000000000-CONSTRAINTS- -IMPORTS/REQS- -IGNORES- github.com/sdboyer/deptest* -OVERRIDES- -ANALYZER- dep 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/testcase.json000066400000000000000000000001521317166637100324140ustar00rootroot00000000000000{ "commands": [ ["ensure"], ["hash-inputs"] ], "error-expected": "", "vendor-final": [] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/000077500000000000000000000000001317166637100230735ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/000077500000000000000000000000001317166637100240675ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/final/000077500000000000000000000000001317166637100251605ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/final/Gopkg.lock000066400000000000000000000011111317166637100270730ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/final/Gopkg.toml000066400000000000000000000001111317166637100271150ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/initial/000077500000000000000000000000001317166637100255205ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/initial/Gopkg.lock000066400000000000000000000011111317166637100274330ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" version = "v0.8.0" revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" packages = ["."] [[projects]] name = "github.com/sdboyer/deptestdos" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/initial/Gopkg.toml000066400000000000000000000001111317166637100274550ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/initial/main.go000066400000000000000000000005361317166637100267770ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/case1/testcase.json000066400000000000000000000003071317166637100265750ustar00rootroot00000000000000{ "commands": [ ["ensure", "-update", "github.com/sdboyer/deptest"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/000077500000000000000000000000001317166637100243605ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/final/000077500000000000000000000000001317166637100254515ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/final/Gopkg.lock000066400000000000000000000011111317166637100273640ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/final/Gopkg.toml000066400000000000000000000001111317166637100274060ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/final/main.go000066400000000000000000000005361317166637100267300ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/initial/000077500000000000000000000000001317166637100260115ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/initial/Gopkg.lock000066400000000000000000000011111317166637100277240ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" version = "v0.8.0" revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" packages = ["."] [[projects]] name = "github.com/sdboyer/deptestdos" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/initial/Gopkg.toml000066400000000000000000000001111317166637100277460ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "~0.8.0"dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/initial/main.go000066400000000000000000000005361317166637100272700ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/stdout.txt000066400000000000000000000001151317166637100264400ustar00rootroot00000000000000Warning: Gopkg.lock is out of sync with Gopkg.toml or the project's imports. dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/desync/testcase.json000066400000000000000000000002251317166637100270650ustar00rootroot00000000000000{ "commands": [ ["ensure", "-update"] ], "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/000077500000000000000000000000001317166637100240465ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/000077500000000000000000000000001317166637100256655ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/000077500000000000000000000000001317166637100267565ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/Gopkg.toml000066400000000000000000000001121317166637100307140ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/main.go000066400000000000000000000003521317166637100302310ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/000077500000000000000000000000001317166637100273165ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/Gopkg.toml000066400000000000000000000001121317166637100312540ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/main.go000066400000000000000000000003521317166637100305710ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptest" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/testcase.json000066400000000000000000000002461317166637100303750ustar00rootroot00000000000000{ "commands": [ ["ensure", "-update"] ], "error-expected": "-update works by updating the versions recorded in Gopkg.lock, but Gopkg.lock does not exist" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/000077500000000000000000000000001317166637100263135ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/000077500000000000000000000000001317166637100274045ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/Gopkg.lock000066400000000000000000000006621317166637100313310ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/Gopkg.toml000066400000000000000000000001111317166637100313410ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/000077500000000000000000000000001317166637100277445ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/Gopkg.lock000066400000000000000000000006621317166637100316710ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/Gopkg.toml000066400000000000000000000001111317166637100317010ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/main.go000066400000000000000000000004041317166637100312150ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" ) func main() { _ := deptest.Map["yo yo!"] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/testcase.json000066400000000000000000000003161317166637100310210ustar00rootroot00000000000000{ "commands": [ ["ensure", "-update", "github.com/sdboyer/deptest/subpkg"] ], "error-expected": "github.com/sdboyer/deptest/subpkg is not a project root, try github.com/sdboyer/deptest instead" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/000077500000000000000000000000001317166637100262005ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/000077500000000000000000000000001317166637100272715ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/Gopkg.lock000066400000000000000000000006621317166637100312160ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/Gopkg.toml000066400000000000000000000001111317166637100312260ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/000077500000000000000000000000001317166637100276315ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/Gopkg.lock000066400000000000000000000006621317166637100315560ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/Gopkg.toml000066400000000000000000000001111317166637100315660ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/main.go000066400000000000000000000004041317166637100311020ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" ) func main() { _ := deptest.Map["yo yo!"] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/testcase.json000066400000000000000000000002721317166637100307070ustar00rootroot00000000000000{ "commands": [ ["ensure", "-update", "github.com/sdboyer/deptesttres"] ], "error-expected": "github.com/sdboyer/deptesttres is not present in Gopkg.lock, cannot -update it" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/000077500000000000000000000000001317166637100301335ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/000077500000000000000000000000001317166637100312245ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/Gopkg.lock000066400000000000000000000006621317166637100331510ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/Gopkg.toml000066400000000000000000000001111317166637100331610ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/000077500000000000000000000000001317166637100315645ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/Gopkg.lock000066400000000000000000000006621317166637100335110ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/Gopkg.toml000066400000000000000000000001111317166637100335210ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/main.go000066400000000000000000000004041317166637100330350ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" ) func main() { _ := deptest.Map["yo yo!"] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/testcase.json000066400000000000000000000003071317166637100326410ustar00rootroot00000000000000{ "commands": [ ["ensure", "-update", "github.com/sdboyer/deptest:github.com/other/deptest"] ], "error-expected": "cannot specify alternate sources on -update (github.com/other/deptest)" } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/000077500000000000000000000000001317166637100272475ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/000077500000000000000000000000001317166637100303405ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/Gopkg.lock000066400000000000000000000006621317166637100322650ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/Gopkg.toml000066400000000000000000000001111317166637100322750ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/000077500000000000000000000000001317166637100307005ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/Gopkg.lock000066400000000000000000000006621317166637100326250ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/Gopkg.toml000066400000000000000000000001111317166637100326350ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/main.go000066400000000000000000000004041317166637100321510ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" ) func main() { _ := deptest.Map["yo yo!"] } dep-0.3.2/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/testcase.json000066400000000000000000000003321317166637100317530ustar00rootroot00000000000000{ "commands": [ ["ensure", "-update", "github.com/sdboyer/deptest@1.0.0"] ], "error-expected": "version constraint ^1.0.0 passed for github.com/sdboyer/deptest, but -update follows constraints declared in" } dep-0.3.2/cmd/dep/testdata/harness_tests/init/000077500000000000000000000000001317166637100212535ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/000077500000000000000000000000001317166637100222475ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/final/000077500000000000000000000000001317166637100233405ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/final/Gopkg.lock000066400000000000000000000010641317166637100252620ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v0.8.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "a0196baa11ea047dd65037287451d36b861b00ea" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/final/Gopkg.toml000066400000000000000000000001121317166637100252760ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/initial/000077500000000000000000000000001317166637100237005ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/initial/foo/000077500000000000000000000000001317166637100244635ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/initial/foo/bar.go000066400000000000000000000004131317166637100255540ustar00rootroot00000000000000// Copyright 2017 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 foo import "github.com/sdboyer/deptest" func Foo() deptest.Foo { var y deptest.Foo return y } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/initial/main.go000066400000000000000000000005231317166637100251530ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/golang/notexist/foo" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar y := foo.FooFunc() fmt.Println(x, y) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case1/testcase.json000066400000000000000000000005351317166637100247600ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples", "-skip-tools", "-gopath"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptest": "v0.8.0", "github.com/sdboyer/deptestdos": "a0196baa11ea047dd65037287451d36b861b00ea" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/000077500000000000000000000000001317166637100222505ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/final/000077500000000000000000000000001317166637100233415ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/final/Gopkg.lock000066400000000000000000000011111317166637100252540ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v0.8.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ced51326ad990b11098d8076d0f7d72d89eee1ba6e8dacc7bc73be05cddac438" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/final/Gopkg.toml000066400000000000000000000002271317166637100253060ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "0.8.0" [[constraint]] name = "github.com/sdboyer/deptestdos" version = "2.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/initial/000077500000000000000000000000001317166637100237015ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/initial/foo/000077500000000000000000000000001317166637100244645ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/initial/foo/bar.go000066400000000000000000000004131317166637100255550ustar00rootroot00000000000000// Copyright 2017 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 foo import "github.com/sdboyer/deptest" func Foo() deptest.Foo { var y deptest.Foo return y } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/initial/main.go000066400000000000000000000005231317166637100251540ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/golang/notexist/foo" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar y := foo.FooFunc() fmt.Println(x, y) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case2/testcase.json000066400000000000000000000004141317166637100247550ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples", "-skip-tools", "-gopath"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptest": "v0.8.0" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/000077500000000000000000000000001317166637100222515ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/final/000077500000000000000000000000001317166637100233425ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/final/Gopkg.lock000066400000000000000000000010631317166637100252630ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] branch = "master" name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "a0196baa11ea047dd65037287451d36b861b00ea" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "af9a783a5430dabcaaf44683c09e2b729e1c0d61f13bfdf6677c4fd0b41387ca" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/final/Gopkg.toml000066400000000000000000000001121317166637100253000ustar00rootroot00000000000000 [[constraint]] branch = "master" name = "github.com/sdboyer/deptest" dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/initial/000077500000000000000000000000001317166637100237025ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/initial/foo/000077500000000000000000000000001317166637100244655ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/initial/foo/bar.go000066400000000000000000000004131317166637100255560ustar00rootroot00000000000000// Copyright 2017 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 foo import "github.com/sdboyer/deptest" func Foo() deptest.Foo { var y deptest.Foo return y } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/initial/main.go000066400000000000000000000005231317166637100251550ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/golang/notexist/foo" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar y := foo.FooFunc() fmt.Println(x, y) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case3/testcase.json000066400000000000000000000004611317166637100247600ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples", "-skip-tools", "-gopath"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptestdos": "a0196baa11ea047dd65037287451d36b861b00ea" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/000077500000000000000000000000001317166637100222525ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/final/000077500000000000000000000000001317166637100233435ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/final/Gopkg.lock000066400000000000000000000011111317166637100252560ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "a6ba2237d28d125b55fc6c86e94e33363f1dfd880d471118d36d7587398c30b4" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/final/Gopkg.toml000066400000000000000000000002271317166637100253100ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" [[constraint]] name = "github.com/sdboyer/deptestdos" version = "2.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/initial/000077500000000000000000000000001317166637100237035ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/initial/foo/000077500000000000000000000000001317166637100244665ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/initial/foo/bar.go000066400000000000000000000004131317166637100255570ustar00rootroot00000000000000// Copyright 2017 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 foo import "github.com/sdboyer/deptest" func Foo() deptest.Foo { var y deptest.Foo return y } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/initial/main.go000066400000000000000000000005231317166637100251560ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/golang/notexist/foo" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar y := foo.FooFunc() fmt.Println(x, y) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/case4/testcase.json000066400000000000000000000003771317166637100247670ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"] ], "gopath-initial": { "github.com/sdboyer/deptestdos": "a0196baa11ea047dd65037287451d36b861b00ea" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/000077500000000000000000000000001317166637100223375ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/000077500000000000000000000000001317166637100233335ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/README.md000066400000000000000000000000441317166637100246100ustar00rootroot00000000000000Import glide config at project root.dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/final/000077500000000000000000000000001317166637100244245ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/final/Gopkg.lock000066400000000000000000000013251317166637100263460ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/carolynvs/deptest-subpkg" packages = ["subby"] revision = "6c41d90f78bb1015696a2ad591debfa8971512d5" [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "7efcfca7f138c3579d22b4ef788294649c734ea630124fb8fbb47acf8770b086" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/final/Gopkg.toml000066400000000000000000000003331317166637100263670ustar00rootroot00000000000000ignored = ["github.com/golang/notexist/samples","github.com/sdboyer/dep-test"] [[constraint]] name = "github.com/carolynvs/deptest-subpkg" [[constraint]] name = "github.com/sdboyer/deptestdos" version = "2.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/initial/000077500000000000000000000000001317166637100247645ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/initial/glide.lock000066400000000000000000000010561317166637100267240ustar00rootroot00000000000000hash: 16053c82a71f9bd509b05a4523df6bc418aed2083e4b8bd97a870bbc003256f8 updated: 2017-03-07T17:02:32.214383898-06:00 imports: - name: github.com/sdboyer/deptest repo: https://github.com/sdboyer/deptest.git vcs: git version: ff2948a2ac8f538c4ecd55962e919d1e13e74baf - name: github.com/sdboyer/deptestdos version: 5c607206be5decd28e6263ffffdcee067266015e - name: github.com/carolynvs/deptest-subpkg/subby version: 6c41d90f78bb1015696a2ad591debfa8971512d5 testImports: - name: github.com/golang/lint version: cb00e5669539f047b2f4c53a421a01b0c8e172c6 dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/initial/glide.yaml000066400000000000000000000010471317166637100267360ustar00rootroot00000000000000package: github.com/golang/notexist homepage: http://example.com license: MIT owners: - name: Sam Boyer email: sdboyer@example.com homepage: http://sdboyer.io ignore: - github.com/sdboyer/dep-test excludeDirs: - samples import: - package: github.com/sdboyer/deptest # This is a transitive dep and will be ignored repo: https://github.com/sdboyer/deptest.git vcs: git version: v1.0.0 - package: github.com/sdboyer/deptestdos version: v2.0.0 - package: github.com/carolynvs/deptest-subpkg/subby testImport: - package: github.com/golang/lint dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/initial/main.go000066400000000000000000000005101317166637100262330ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" _ "github.com/carolynvs/deptest-subpkg/subby" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar fmt.Println(x) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/initial/samples/000077500000000000000000000000001317166637100264305ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/initial/samples/samples.go000066400000000000000000000004221317166637100304210ustar00rootroot00000000000000// 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 samples import dt "github.com/carolynvs/go-dep-test" func Sample1() int { var x = dt.Thing return x } dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case1/testcase.json000066400000000000000000000006331317166637100260430ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples", "-gopath"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptest": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", "github.com/sdboyer/deptestdos": "5c607206be5decd28e6263ffffdcee067266015e" }, "vendor-final": [ "github.com/carolynvs/deptest-subpkg", "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/000077500000000000000000000000001317166637100233345ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/README.md000066400000000000000000000000721317166637100246120ustar00rootroot00000000000000Ignore glide config at root when -skip-tools is specified.dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/final/000077500000000000000000000000001317166637100244255ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/final/Gopkg.lock000066400000000000000000000011111317166637100263400ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/final/Gopkg.toml000066400000000000000000000001151317166637100263660ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptestdos" version = "2.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/initial/000077500000000000000000000000001317166637100247655ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/initial/glide.lock000066400000000000000000000007101317166637100267210ustar00rootroot00000000000000hash: 16053c82a71f9bd509b05a4523df6bc418aed2083e4b8bd97a870bbc003256f8 updated: 2017-03-07T17:02:32.214383898-06:00 imports: - name: github.com/sdboyer/deptest repo: https://github.com/sdboyer/deptest.git vcs: git version: ff2948a2ac8f538c4ecd55962e919d1e13e74baf - name: github.com/sdboyer/deptestdos version: 5c607206be5decd28e6263ffffdcee067266015e testImports: - name: github.com/golang/lint version: cb00e5669539f047b2f4c53a421a01b0c8e172c6 dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/initial/glide.yaml000066400000000000000000000007621317166637100267420ustar00rootroot00000000000000package: github.com/golang/notexist homepage: http://example.com license: MIT owners: - name: Sam Boyer email: sdboyer@example.com homepage: http://sdboyer.io ignore: - github.com/sdboyer/dep-test excludeDirs: - samples import: - package: github.com/sdboyer/deptest # This is a transitive dep and will be ignored repo: https://github.com/sdboyer/deptest.git vcs: git version: v1.0.0 - package: github.com/sdboyer/deptestdos version: v2.0.0 testImport: - package: github.com/golang/lint dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/initial/main.go000066400000000000000000000004311317166637100262360ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar fmt.Println(x) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case2/testcase.json000066400000000000000000000005771317166637100260530ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples", "-skip-tools", "-gopath"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptest": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", "github.com/sdboyer/deptestdos": "5c607206be5decd28e6263ffffdcee067266015e" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case3/000077500000000000000000000000001317166637100233355ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case3/README.md000066400000000000000000000000441317166637100246120ustar00rootroot00000000000000Import glide config in dependencies.dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case3/final/000077500000000000000000000000001317166637100244265ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case3/final/Gopkg.lock000066400000000000000000000011241317166637100263450ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/carolynvs/deptestglide" packages = ["."] revision = "aa7fea6e17ca281c6f210afb93fc3c98ef29a695" version = "v0.1.1" [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [solve-meta] analyzer-name = "dep+import" analyzer-version = 1 inputs-digest = "07eddb7ff09071bde95b019911e1fb30d91bddabbb23f4c797c6ce61b58cd7be" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case3/final/Gopkg.toml000066400000000000000000000001211317166637100263640ustar00rootroot00000000000000 [[constraint]] name = "github.com/carolynvs/deptestglide" version = "0.1.1" dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case3/initial/000077500000000000000000000000001317166637100247665ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case3/initial/main.go000066400000000000000000000004431317166637100262420ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/carolynvs/deptestglide" ) func main() { var x = deptestglide.MyFoo fmt.Println(x) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/glide/case3/testcase.json.ignore000066400000000000000000000003101317166637100273170ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"] ], "error-expected": "", "gopath-initial": {}, "vendor-final": [ "github.com/carolynvs/deptestglide", "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/000077500000000000000000000000001317166637100223515ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/000077500000000000000000000000001317166637100233455ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/final/000077500000000000000000000000001317166637100244365ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/final/Gopkg.lock000066400000000000000000000011111317166637100263510ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/final/Gopkg.toml000066400000000000000000000001151317166637100263770ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptestdos" version = "2.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/initial/000077500000000000000000000000001317166637100247765ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/initial/Godeps/000077500000000000000000000000001317166637100262175ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/initial/Godeps/Godeps.json000066400000000000000000000006321317166637100303340ustar00rootroot00000000000000{ "ImportPath": "github.com/golang/notexist", "GoVersion": "go1.8", "GodepVersion": "vXYZ", "Deps": [ { "ImportPath": "github.com/sdboyer/deptest", "Comment": "master", "Rev": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" }, { "ImportPath": "github.com/sdboyer/deptestdos", "Comment": "v2.0.0", "Rev": "5c607206be5decd28e6263ffffdcee067266015e" } ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/initial/main.go000066400000000000000000000004311317166637100262470ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar fmt.Println(x) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/godep/case1/testcase.json000066400000000000000000000004241317166637100260530ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptest": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/000077500000000000000000000000001317166637100225355ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/case1/000077500000000000000000000000001317166637100235315ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/case1/final/000077500000000000000000000000001317166637100246225ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/case1/final/Gopkg.lock000066400000000000000000000011111317166637100265350ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/case1/final/Gopkg.toml000066400000000000000000000001151317166637100265630ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptestdos" version = "2.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/case1/initial/000077500000000000000000000000001317166637100251625ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/case1/initial/main.go000066400000000000000000000004311317166637100264330ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar fmt.Println(x) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/case1/initial/vendor.yml000066400000000000000000000002621317166637100272020ustar00rootroot00000000000000vendors: - path: github.com/sdboyer/deptest rev: 3f4c3bea144e112a69bbe5d8d01c1b09a544253f - path: github.com/sdboyer/deptestdos rev: 5c607206be5decd28e6263ffffdcee067266015e dep-0.3.2/cmd/dep/testdata/harness_tests/init/govend/case1/testcase.json000066400000000000000000000004241317166637100262370ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptest": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/000077500000000000000000000000001317166637100220535ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/000077500000000000000000000000001317166637100230475ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/final/000077500000000000000000000000001317166637100241405ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.lock000066400000000000000000000014001317166637100260540ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" source = "https://github.com/carolynvs/deptest" version = "v0.8.1" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [[projects]] branch = "v2" name = "gopkg.in/yaml.v2" packages = ["."] revision = "f7716cbe52baa25d2e9b0d0da546fcf909fc16b4" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "9ee70d58a0bc986cfb1d57a351786e9cf1bfc2ca763ce17f601a6529aebe65d1" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.toml000066400000000000000000000003351317166637100261050ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" source = "https://github.com/carolynvs/deptest" [[constraint]] name = "github.com/sdboyer/deptestdos" [[constraint]] branch = "v2" name = "gopkg.in/yaml.v2" dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/000077500000000000000000000000001317166637100245005ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/main.go000066400000000000000000000005701317166637100257550ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" "gopkg.in/yaml.v2" ) func main() { var a deptestdos.Bar var b yaml.MapItem var c deptest.Foo fmt.Println(a, b, c) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/vendor/000077500000000000000000000000001317166637100257755ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/vendor/manifest000066400000000000000000000012161317166637100275260ustar00rootroot00000000000000{ "version": "0", "dependencies": [ { "importpath": "github.com/sdboyer/deptest", "repository": "https://github.com/carolynvs/deptest", "revision": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", "branch": "HEAD" }, { "importpath": "github.com/sdboyer/deptestdos", "repository": "https://github.com/sdboyer/deptestdos", "revision": "5c607206be5decd28e6263ffffdcee067266015eXXX", "branch": "master" }, { "importpath": "gopkg.in/yaml.v2", "repository": "https://gopkg.in/yaml.v2", "revision": "f7716cbe52baa25d2e9b0d0da546fcf909fc16b4", "branch": "v2" } ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/gvt/case1/testcase.json000066400000000000000000000004241317166637100255550ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptest": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/manifest-exists/000077500000000000000000000000001317166637100243765ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/manifest-exists/final/000077500000000000000000000000001317166637100254675ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/manifest-exists/final/Gopkg.toml000066400000000000000000000000001317166637100274210ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/manifest-exists/initial/000077500000000000000000000000001317166637100260275ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/manifest-exists/initial/Gopkg.toml000066400000000000000000000000001317166637100277610ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/manifest-exists/testcase.json000066400000000000000000000001531317166637100271030ustar00rootroot00000000000000{ "commands": [ ["init"] ], "error-expected": "manifest already exists:", "vendor-final": [] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/000077500000000000000000000000001317166637100241025ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/final/000077500000000000000000000000001317166637100251735ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/final/project_dir/000077500000000000000000000000001317166637100274775ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/final/project_dir/Gopkg.lock000066400000000000000000000006731317166637100314260ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. memo = "af9a783a5430dabcaaf44683c09e2b729e1c0d61f13bfdf6677c4fd0b41387ca" [[projects]] branch = "master" name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "a0196baa11ea047dd65037287451d36b861b00ea" dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/final/project_dir/Gopkg.toml000066400000000000000000000001121317166637100314350ustar00rootroot00000000000000 [[constraint]] branch = "master" name = "github.com/sdboyer/deptest" dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/initial/000077500000000000000000000000001317166637100255335ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/initial/project_dir/000077500000000000000000000000001317166637100300375ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/initial/project_dir/foo/000077500000000000000000000000001317166637100306225ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/initial/project_dir/foo/bar.go000066400000000000000000000004131317166637100317130ustar00rootroot00000000000000// Copyright 2017 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 foo import "github.com/sdboyer/deptest" func Foo() deptest.Foo { var y deptest.Foo return y } dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/initial/project_dir/main.go000066400000000000000000000004611317166637100313130ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar y := foo.FooFunc() fmt.Println(x, y) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/relative_path/testcase.json000066400000000000000000000001711317166637100266070ustar00rootroot00000000000000{ "commands": [ ["init", "-skip-tools", "project_dir"] ], "error-expected": "", "init-path": "project_dir" } dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/000077500000000000000000000000001317166637100234525ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/final/000077500000000000000000000000001317166637100245435ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/final/Gopkg.lock000066400000000000000000000006621317166637100264700ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/final/Gopkg.toml000066400000000000000000000001121317166637100265010ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/initial/000077500000000000000000000000001317166637100251035ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/initial/.foo/000077500000000000000000000000001317166637100257445ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/initial/.foo/main.go000066400000000000000000000005231317166637100272170ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/golang/notexist/foo" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar y := foo.FooFunc() fmt.Println(x, y) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/initial/_foo/000077500000000000000000000000001317166637100260255ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/initial/_foo/main.go000066400000000000000000000005231317166637100273000ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/golang/notexist/foo" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar y := foo.FooFunc() fmt.Println(x, y) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/initial/lib.go000066400000000000000000000004131317166637100261760ustar00rootroot00000000000000// Copyright 2017 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 foo import "github.com/sdboyer/deptest" func Foo() deptest.Foo { var y deptest.Foo return y } dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/initial/testdata/000077500000000000000000000000001317166637100267145ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/initial/testdata/main.go000066400000000000000000000005231317166637100301670ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/golang/notexist/foo" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar y := foo.FooFunc() fmt.Println(x, y) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/skip-hidden/testcase.json000066400000000000000000000002261317166637100261600ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples", "-skip-tools"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/init/usage/000077500000000000000000000000001317166637100223575ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/usage/with_h_flag/000077500000000000000000000000001317166637100246325ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/usage/with_h_flag/testcase.json000066400000000000000000000001311317166637100273330ustar00rootroot00000000000000{ "commands": [ ["init", "-h"] ], "error-expected": "Usage: dep init [root]" } dep-0.3.2/cmd/dep/testdata/harness_tests/init/usage/with_not_defined_flag/000077500000000000000000000000001317166637100266615ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/usage/with_not_defined_flag/testcase.json000066400000000000000000000002321317166637100313640ustar00rootroot00000000000000{ "commands": [ ["init", "-not-defined-flag"] ], "error-expected": "flag provided but not defined: -not-defined-flag\nUsage: dep init [root]" } dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/000077500000000000000000000000001317166637100222245ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/case1/000077500000000000000000000000001317166637100232205ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/case1/final/000077500000000000000000000000001317166637100243115ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/case1/final/Gopkg.lock000066400000000000000000000011111317166637100262240ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/case1/final/Gopkg.toml000066400000000000000000000001151317166637100262520ustar00rootroot00000000000000 [[constraint]] name = "github.com/sdboyer/deptestdos" version = "2.0.0" dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/case1/initial/000077500000000000000000000000001317166637100246515ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/case1/initial/main.go000066400000000000000000000004311317166637100261220ustar00rootroot00000000000000// Copyright 2017 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 main import ( "fmt" "github.com/sdboyer/deptestdos" ) func main() { var x deptestdos.Bar fmt.Println(x) } dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/case1/initial/vendor.conf000066400000000000000000000002521317166637100270140ustar00rootroot00000000000000# Comment on its own line github.com/sdboyer/deptest 3f4c3bea144e112a69bbe5d8d01c1b09a544253f https://github.com/sdboyer/deptest.git github.com/sdboyer/deptestdos v2.0.0 dep-0.3.2/cmd/dep/testdata/harness_tests/init/vndr/case1/testcase.json000066400000000000000000000004241317166637100257260ustar00rootroot00000000000000{ "commands": [ ["init", "-no-examples"] ], "error-expected": "", "gopath-initial": { "github.com/sdboyer/deptest": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" }, "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/prune/000077500000000000000000000000001317166637100214415ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/prune/without_lock/000077500000000000000000000000001317166637100241545ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/prune/without_lock/final/000077500000000000000000000000001317166637100252455ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/prune/without_lock/final/Gopkg.toml000066400000000000000000000001121317166637100272030ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "^0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/prune/without_lock/initial/000077500000000000000000000000001317166637100256055ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/prune/without_lock/initial/Gopkg.toml000066400000000000000000000001121317166637100275430ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "^0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/prune/without_lock/testcase.json000066400000000000000000000001231317166637100266560ustar00rootroot00000000000000{ "commands": [ ["prune"] ], "error-expected": "Gopkg.lock must exist" } dep-0.3.2/cmd/dep/testdata/harness_tests/status/000077500000000000000000000000001317166637100216335ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/000077500000000000000000000000001317166637100226275ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/000077500000000000000000000000001317166637100234155ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/final/000077500000000000000000000000001317166637100245065ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/final/Gopkg.lock000066400000000000000000000011111317166637100264210ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v0.8.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/final/Gopkg.toml000066400000000000000000000001121317166637100264440ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "^0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/initial/000077500000000000000000000000001317166637100250465ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/initial/Gopkg.lock000066400000000000000000000006011317166637100267640ustar00rootroot00000000000000memo = "9a5243dd3fa20feeaa20398e7283d6c566532e2af1aae279a010df34793761c5" [[projects]] name = "github.com/sdboyer/deptest" version = "v0.8.0" revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" packages = ["."] [[projects]] name = "github.com/sdboyer/deptestdos" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/initial/Gopkg.toml000066400000000000000000000001121317166637100270040ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "^0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/initial/main.go000066400000000000000000000005361317166637100263250ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/stdout.txt000066400000000000000000000004261317166637100255020ustar00rootroot00000000000000digraph { node [shape=box]; 388407825 [label="github.com/golang/notexist"]; 2304687900 [label="github.com/sdboyer/deptest\nv0.8.0"]; 2659405890 [label="github.com/sdboyer/deptestdos\nv2.0.0"]; 388407825 -> 2304687900; 388407825 -> 2659405890; 2659405890 -> 2304687900; } dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/dot/testcase.json000066400000000000000000000002661317166637100261270ustar00rootroot00000000000000{ "commands": [ ["ensure"], ["status", "-dot"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/000077500000000000000000000000001317166637100236005ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/final/000077500000000000000000000000001317166637100246715ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/final/Gopkg.lock000066400000000000000000000011111317166637100266040ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v0.8.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/final/Gopkg.toml000066400000000000000000000001121317166637100266270ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "^0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/initial/000077500000000000000000000000001317166637100252315ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/initial/Gopkg.lock000066400000000000000000000006011317166637100271470ustar00rootroot00000000000000memo = "9a5243dd3fa20feeaa20398e7283d6c566532e2af1aae279a010df34793761c5" [[projects]] name = "github.com/sdboyer/deptest" version = "v0.8.0" revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" packages = ["."] [[projects]] name = "github.com/sdboyer/deptestdos" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/initial/Gopkg.toml000066400000000000000000000001121317166637100271670ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "^0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/initial/main.go000066400000000000000000000005361317166637100265100ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/stdout.txt000066400000000000000000000006421317166637100256650ustar00rootroot00000000000000[{"ProjectRoot":"github.com/sdboyer/deptest","Constraint":"^0.8.0","Version":"v0.8.0","Revision":"ff2948a2ac8f538c4ecd55962e919d1e13e74baf","Latest":"3f4c3bea144e112a69bbe5d8d01c1b09a544253f","PackageCount":1},{"ProjectRoot":"github.com/sdboyer/deptestdos","Constraint":"*","Version":"v2.0.0","Revision":"5c607206be5decd28e6263ffffdcee067266015e","Latest":"5c607206be5decd28e6263ffffdcee067266015e","PackageCount":1}] dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/json/testcase.json000066400000000000000000000002671317166637100263130ustar00rootroot00000000000000{ "commands": [ ["ensure"], ["status", "-json"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/000077500000000000000000000000001317166637100237165ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/final/000077500000000000000000000000001317166637100250075ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/final/Gopkg.lock000066400000000000000000000011111317166637100267220ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v0.8.0" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/final/Gopkg.toml000066400000000000000000000001121317166637100267450ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "^0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/initial/000077500000000000000000000000001317166637100253475ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/initial/Gopkg.lock000066400000000000000000000006011317166637100272650ustar00rootroot00000000000000memo = "9a5243dd3fa20feeaa20398e7283d6c566532e2af1aae279a010df34793761c5" [[projects]] name = "github.com/sdboyer/deptest" version = "v0.8.0" revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" packages = ["."] [[projects]] name = "github.com/sdboyer/deptestdos" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/initial/Gopkg.toml000066400000000000000000000001121317166637100273050ustar00rootroot00000000000000[[constraint]] name = "github.com/sdboyer/deptest" version = "^0.8.0" dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/initial/main.go000066400000000000000000000005361317166637100266260ustar00rootroot00000000000000// 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 main import ( "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" ) func main() { err := nil if err != nil { deptest.Map["yo yo!"] } deptestdos.diMeLo("whatev") } dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/stdout.txt000066400000000000000000000003461317166637100260040ustar00rootroot00000000000000PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED github.com/sdboyer/deptest ^0.8.0 v0.8.0 ff2948a 3f4c3be 1 github.com/sdboyer/deptestdos * v2.0.0 5c60720 5c60720 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/case1/table/testcase.json000066400000000000000000000002561317166637100264270ustar00rootroot00000000000000{ "commands": [ ["ensure"], ["status"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/000077500000000000000000000000001317166637100260135ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/final/000077500000000000000000000000001317166637100271045ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/final/Gopkg.lock000066400000000000000000000004361317166637100310300ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/final/Gopkg.toml000066400000000000000000000000551317166637100310500ustar00rootroot00000000000000ignored = ["github.com/sdboyer/deptestdos"] dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/initial/000077500000000000000000000000001317166637100274445ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/initial/Gopkg.lock000066400000000000000000000004361317166637100313700ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/initial/Gopkg.toml000066400000000000000000000000551317166637100314100ustar00rootroot00000000000000ignored = ["github.com/sdboyer/deptestdos"] dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/initial/main.go000066400000000000000000000003551317166637100307220ustar00rootroot00000000000000// Copyright 2017 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 main import ( _ "github.com/sdboyer/deptestdos" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/status/ignore_lock_mismatch/testcase.json000066400000000000000000000001751317166637100305240ustar00rootroot00000000000000{ "commands": [ ["status"] ], "error-expected": "This happens when Gopkg.toml is modified", "vendor-final": [] } dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/000077500000000000000000000000001317166637100272255ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/final/000077500000000000000000000000001317166637100303165ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/final/Gopkg.lock000066400000000000000000000004361317166637100322420ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/final/Gopkg.toml000066400000000000000000000000001317166637100322500ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/initial/000077500000000000000000000000001317166637100306565ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/initial/Gopkg.lock000066400000000000000000000004361317166637100326020ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/initial/Gopkg.toml000066400000000000000000000000001317166637100326100ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/initial/main.go000066400000000000000000000003551317166637100321340ustar00rootroot00000000000000// Copyright 2017 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 main import ( _ "github.com/sdboyer/deptestdos" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/status/missing_pkgs_lock_mismatch/testcase.json000066400000000000000000000002101317166637100317240ustar00rootroot00000000000000{ "commands": [ ["status"] ], "error-expected": "due to the following packages missing from the lock", "vendor-final": [] } dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/000077500000000000000000000000001317166637100257165ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/final/000077500000000000000000000000001317166637100270075ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/final/Gopkg.lock000066400000000000000000000011111317166637100307220ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1c4444f47ab5d5c484634d1a0c95d99beb879a37337bc0d7aecbd97cf79b6cb1" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/final/Gopkg.toml000066400000000000000000000001101317166637100307430ustar00rootroot00000000000000[[override]] name = "github.com/sdboyer/deptest" version = "=0.8.1" dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/initial/000077500000000000000000000000001317166637100273475ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/initial/Gopkg.lock000066400000000000000000000011111317166637100312620ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" version = "v0.8.1" [[projects]] name = "github.com/sdboyer/deptestdos" packages = ["."] revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "1c4444f47ab5d5c484634d1a0c95d99beb879a37337bc0d7aecbd97cf79b6cb1" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/initial/Gopkg.toml000066400000000000000000000001101317166637100313030ustar00rootroot00000000000000[[override]] name = "github.com/sdboyer/deptest" version = "=0.8.1" dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/initial/main.go000066400000000000000000000003551317166637100306250ustar00rootroot00000000000000// 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 main import ( _ "github.com/sdboyer/deptestdos" ) func main() { } dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/stdout.txt000066400000000000000000000003511317166637100300000ustar00rootroot00000000000000PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED github.com/sdboyer/deptest * (override) v0.8.1 3f4c3be ff2948a 1 github.com/sdboyer/deptestdos * v2.0.0 5c60720 5c60720 1 dep-0.3.2/cmd/dep/testdata/harness_tests/status/override_constraint/testcase.json000066400000000000000000000002561317166637100304270ustar00rootroot00000000000000{ "commands": [ ["ensure"], ["status"] ], "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest", "github.com/sdboyer/deptestdos" ] } dep-0.3.2/cmd/dep/testdata/harness_tests/status/without_lock/000077500000000000000000000000001317166637100243465ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/without_lock/final/000077500000000000000000000000001317166637100254375ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/without_lock/final/Gopkg.toml000066400000000000000000000000001317166637100273710ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/without_lock/initial/000077500000000000000000000000001317166637100257775ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/without_lock/initial/Gopkg.toml000066400000000000000000000000001317166637100277310ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/harness_tests/status/without_lock/testcase.json000066400000000000000000000001721317166637100270540ustar00rootroot00000000000000{ "commands": [ ["status"] ], "error-expected": "no Gopkg.lock found. Run `dep ensure` to generate lock file" } dep-0.3.2/cmd/dep/testdata/init/000077500000000000000000000000001317166637100163665ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/init/directdeps/000077500000000000000000000000001317166637100205145ustar00rootroot00000000000000dep-0.3.2/cmd/dep/testdata/init/directdeps/main.go000066400000000000000000000003631317166637100217710ustar00rootroot00000000000000// 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 main import _ "github.com/carolynvs/deptest-subpkg/subby" func main() {} dep-0.3.2/cmd/dep/version.go000066400000000000000000000020731317166637100156300ustar00rootroot00000000000000// 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 main import ( "flag" "runtime" "github.com/golang/dep" ) var ( version = "devel" buildDate string commitHash string ) const versionHelp = `Show the dep version information` func (cmd *versionCommand) Name() string { return "version" } func (cmd *versionCommand) Args() string { return "" } func (cmd *versionCommand) ShortHelp() string { return versionHelp } func (cmd *versionCommand) LongHelp() string { return versionHelp } func (cmd *versionCommand) Hidden() bool { return false } func (cmd *versionCommand) Register(fs *flag.FlagSet) {} type versionCommand struct{} func (cmd *versionCommand) Run(ctx *dep.Ctx, args []string) error { ctx.Out.Printf(`dep: version : %s build date : %s git hash : %s go version : %s go compiler : %s platform : %s/%s `, version, buildDate, commitHash, runtime.Version(), runtime.Compiler, runtime.GOOS, runtime.GOARCH) return nil } dep-0.3.2/context.go000066400000000000000000000212161317166637100143140ustar00rootroot00000000000000// Copyright 2017 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 dep import ( "log" "os" "path/filepath" "runtime" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps" "github.com/pkg/errors" ) // Ctx defines the supporting context of dep. // // A properly initialized Ctx has a GOPATH containing the project root and non-nil Loggers. // // ctx := &dep.Ctx{ // WorkingDir: GOPATH + "/src/project/root", // GOPATH: GOPATH, // Out: log.New(os.Stdout, "", 0), // Err: log.New(os.Stderr, "", 0), // } // // Ctx.DetectProjectGOPATH() helps with setting the containing GOPATH. // // ctx.GOPATH, err := Ctx.DetectProjectGOPATH(project) // if err != nil { // // Could not determine which GOPATH to use for the project. // } // type Ctx struct { WorkingDir string // Where to execute. GOPATH string // Selected Go path, containing WorkingDir. GOPATHs []string // Other Go paths. Out, Err *log.Logger // Required loggers. Verbose bool // Enables more verbose logging. DisableLocking bool // When set, no lock file will be created to protect against simultaneous dep processes. } // SetPaths sets the WorkingDir and GOPATHs fields. If GOPATHs is empty, then // the GOPATH environment variable (or the default GOPATH) is used instead. func (c *Ctx) SetPaths(wd string, GOPATHs ...string) error { if wd == "" { return errors.New("cannot set Ctx.WorkingDir to an empty path") } c.WorkingDir = wd if len(GOPATHs) == 0 { GOPATH := os.Getenv("GOPATH") if GOPATH == "" { GOPATH = defaultGOPATH() } GOPATHs = filepath.SplitList(GOPATH) } c.GOPATHs = append(c.GOPATHs, GOPATHs...) return nil } // defaultGOPATH gets the default GOPATH that was added in 1.8 // copied from go/build/build.go func defaultGOPATH() string { env := "HOME" if runtime.GOOS == "windows" { env = "USERPROFILE" } else if runtime.GOOS == "plan9" { env = "home" } if home := os.Getenv(env); home != "" { def := filepath.Join(home, "go") if def == runtime.GOROOT() { // Don't set the default GOPATH to GOROOT, // as that will trigger warnings from the go tool. return "" } return def } return "" } // SourceManager produces an instance of gps's built-in SourceManager // initialized to log to the receiver's logger. func (c *Ctx) SourceManager() (*gps.SourceMgr, error) { return gps.NewSourceManager(gps.SourceManagerConfig{ Cachedir: filepath.Join(c.GOPATH, "pkg", "dep"), Logger: c.Out, DisableLocking: c.DisableLocking, }) } // LoadProject starts from the current working directory and searches up the // directory tree for a project root. The search stops when a file with the name // ManifestName (Gopkg.toml, by default) is located. // // The Project contains the parsed manifest as well as a parsed lock file, if // present. The import path is calculated as the remaining path segment // below Ctx.GOPATH/src. func (c *Ctx) LoadProject() (*Project, error) { root, err := findProjectRoot(c.WorkingDir) if err != nil { return nil, err } err = checkGopkgFilenames(root) if err != nil { return nil, err } p := new(Project) if err = p.SetRoot(root); err != nil { return nil, err } c.GOPATH, err = c.DetectProjectGOPATH(p) if err != nil { return nil, err } ip, err := c.ImportForAbs(p.AbsRoot) if err != nil { return nil, errors.Wrap(err, "root project import") } p.ImportRoot = gps.ProjectRoot(ip) mp := filepath.Join(p.AbsRoot, ManifestName) mf, err := os.Open(mp) if err != nil { if os.IsNotExist(err) { // TODO: list possible solutions? (dep init, cd $project) return nil, errors.Errorf("no %v found in project root %v", ManifestName, p.AbsRoot) } // Unable to read the manifest file return nil, err } defer mf.Close() var warns []error p.Manifest, warns, err = readManifest(mf) for _, warn := range warns { c.Err.Printf("dep: WARNING: %v\n", warn) } if err != nil { return nil, errors.Wrapf(err, "error while parsing %s", mp) } lp := filepath.Join(p.AbsRoot, LockName) lf, err := os.Open(lp) if err != nil { if os.IsNotExist(err) { // It's fine for the lock not to exist return p, nil } // But if a lock does exist and we can't open it, that's a problem return nil, errors.Wrapf(err, "could not open %s", lp) } defer lf.Close() p.Lock, err = readLock(lf) if err != nil { return nil, errors.Wrapf(err, "error while parsing %s", lp) } return p, nil } // DetectProjectGOPATH attempt to find the GOPATH containing the project. // // If p.AbsRoot is not a symlink and is within a GOPATH, the GOPATH containing p.AbsRoot is returned. // If p.AbsRoot is a symlink and is not within any known GOPATH, the GOPATH containing p.ResolvedAbsRoot is returned. // // p.AbsRoot is assumed to be a symlink if it is not the same as p.ResolvedAbsRoot. // // DetectProjectGOPATH will return an error in the following cases: // // If p.AbsRoot is not a symlink and is not within any known GOPATH. // If neither p.AbsRoot nor p.ResolvedAbsRoot are within a known GOPATH. // If both p.AbsRoot and p.ResolvedAbsRoot are within the same GOPATH. // If p.AbsRoot and p.ResolvedAbsRoot are each within a different GOPATH. func (c *Ctx) DetectProjectGOPATH(p *Project) (string, error) { if p.AbsRoot == "" || p.ResolvedAbsRoot == "" { return "", errors.New("project AbsRoot and ResolvedAbsRoot must be set to detect GOPATH") } pGOPATH, perr := c.detectGOPATH(p.AbsRoot) // If p.AbsRoot is a not symlink, attempt to detect GOPATH for p.AbsRoot only. if equal, _ := fs.EquivalentPaths(p.AbsRoot, p.ResolvedAbsRoot); equal { return pGOPATH, perr } rGOPATH, rerr := c.detectGOPATH(p.ResolvedAbsRoot) // If detectGOPATH() failed for both p.AbsRoot and p.ResolvedAbsRoot, then both are not within any known GOPATHs. if perr != nil && rerr != nil { return "", errors.Errorf("both %s and %s are not within any known GOPATH", p.AbsRoot, p.ResolvedAbsRoot) } // If pGOPATH equals rGOPATH, then both are within the same GOPATH. if equal, _ := fs.EquivalentPaths(pGOPATH, rGOPATH); equal { return "", errors.Errorf("both %s and %s are in the same GOPATH %s", p.AbsRoot, p.ResolvedAbsRoot, pGOPATH) } if pGOPATH != "" && rGOPATH != "" { return "", errors.Errorf("%s and %s are both in different GOPATHs", p.AbsRoot, p.ResolvedAbsRoot) } // Otherwise, either the p.AbsRoot or p.ResolvedAbsRoot is within a GOPATH. if pGOPATH == "" { return rGOPATH, nil } return pGOPATH, nil } // detectGOPATH detects the GOPATH for a given path from ctx.GOPATHs. func (c *Ctx) detectGOPATH(path string) (string, error) { for _, gp := range c.GOPATHs { isPrefix, err := fs.HasFilepathPrefix(path, gp) if err != nil { return "", errors.Wrap(err, "failed to detect GOPATH") } if isPrefix { return gp, nil } } return "", errors.Errorf("%s is not within a known GOPATH/src", path) } // ImportForAbs returns the import path for an absolute project path by trimming the // `$GOPATH/src/` prefix. Returns an error for paths equal to, or without this prefix. func (c *Ctx) ImportForAbs(path string) (string, error) { srcprefix := filepath.Join(c.GOPATH, "src") + string(filepath.Separator) isPrefix, err := fs.HasFilepathPrefix(path, srcprefix) if err != nil { return "", errors.Wrap(err, "failed to find import path") } if isPrefix { if len(path) <= len(srcprefix) { return "", errors.New("dep does not currently support using GOPATH/src as the project root") } // filepath.ToSlash because we're dealing with an import path now, // not an fs path return filepath.ToSlash(path[len(srcprefix):]), nil } return "", errors.Errorf("%s is not within any GOPATH/src", path) } // AbsForImport returns the absolute path for the project root // including the $GOPATH. This will not work with stdlib packages and the // package directory needs to exist. func (c *Ctx) AbsForImport(path string) (string, error) { posspath := filepath.Join(c.GOPATH, "src", path) dirOK, err := fs.IsDir(posspath) if err != nil { return "", errors.Wrapf(err, "checking if %s is a directory", posspath) } if !dirOK { return "", errors.Errorf("%s does not exist", posspath) } return posspath, nil } // ValidateParams ensure that solving can be completed with the specified params. func (c *Ctx) ValidateParams(sm gps.SourceManager, params gps.SolveParameters) error { err := gps.ValidateParams(params, sm) if err != nil { if deduceErrs, ok := err.(gps.DeductionErrs); ok { c.Err.Println("The following errors occurred while deducing packages:") for ip, dErr := range deduceErrs { c.Err.Printf(" * \"%s\": %s", ip, dErr) } c.Err.Println() } } return errors.Wrap(err, "validateParams") } dep-0.3.2/context_test.go000066400000000000000000000316531317166637100153610ustar00rootroot00000000000000// Copyright 2017 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 dep import ( "fmt" "io/ioutil" "log" "os" "path/filepath" "runtime" "strings" "testing" "unicode" "github.com/golang/dep/internal/test" ) func discardLogger() *log.Logger { return log.New(ioutil.Discard, "", 0) } func TestCtx_ProjectImport(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir("src") h.Setenv("GOPATH", h.Path(".")) depCtx := &Ctx{GOPATH: h.Path(".")} importPaths := []string{ "github.com/pkg/errors", "my/silly/thing", } for _, want := range importPaths { fullpath := filepath.Join(depCtx.GOPATH, "src", want) h.TempDir(filepath.Join("src", want)) got, err := depCtx.ImportForAbs(fullpath) if err != nil { t.Fatal(err) } if got != want { t.Fatalf("expected %s, got %s", want, got) } } // test where it should return an error when directly within $GOPATH/src got, err := depCtx.ImportForAbs(filepath.Join(depCtx.GOPATH, "src")) if err == nil || !strings.Contains(err.Error(), "GOPATH/src") { t.Fatalf("should have gotten an error for use directly in GOPATH/src, but got %s", got) } // test where it should return an error got, err = depCtx.ImportForAbs("tra/la/la/la") if err == nil { t.Fatalf("should have gotten an error but did not for tra/la/la/la: %s", got) } } func TestAbsoluteProjectRoot(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir("src") h.Setenv("GOPATH", h.Path(".")) depCtx := &Ctx{GOPATH: h.Path(".")} importPaths := map[string]bool{ "github.com/pkg/errors": true, "my/silly/thing": false, } for i, create := range importPaths { if create { h.TempDir(filepath.Join("src", i)) } } for i, ok := range importPaths { got, err := depCtx.AbsForImport(i) if ok { h.Must(err) want := h.Path(filepath.Join("src", i)) if got != want { t.Fatalf("expected %s, got %q", want, got) } continue } if err == nil { t.Fatalf("expected %s to fail", i) } } // test that a file fails h.TempFile("src/thing/thing.go", "hello world") _, err := depCtx.AbsForImport("thing/thing.go") if err == nil { t.Fatal("error should not be nil for a file found") } } func TestLoadProject(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir(filepath.Join("src", "test1", "sub")) h.TempFile(filepath.Join("src", "test1", ManifestName), "") h.TempFile(filepath.Join("src", "test1", LockName), `memo = "cdafe8641b28cd16fe025df278b0a49b9416859345d8b6ba0ace0272b74925ee"`) h.TempDir(filepath.Join("src", "test2", "sub")) h.TempFile(filepath.Join("src", "test2", ManifestName), "") var testcases = []struct { name string lock bool wd string }{ {"direct", true, filepath.Join("src", "test1")}, {"ascending", true, filepath.Join("src", "test1", "sub")}, {"without lock", false, filepath.Join("src", "test2")}, {"ascending without lock", false, filepath.Join("src", "test2", "sub")}, } for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { ctx := &Ctx{ Out: discardLogger(), Err: discardLogger(), } err := ctx.SetPaths(h.Path(tc.wd), h.Path(".")) if err != nil { t.Fatalf("%+v", err) } p, err := ctx.LoadProject() switch { case err != nil: t.Fatalf("%s: LoadProject failed: %+v", tc.wd, err) case p.Manifest == nil: t.Fatalf("%s: Manifest file didn't load", tc.wd) case tc.lock && p.Lock == nil: t.Fatalf("%s: Lock file didn't load", tc.wd) case !tc.lock && p.Lock != nil: t.Fatalf("%s: Non-existent Lock file loaded", tc.wd) } }) } } func TestLoadProjectNotFoundErrors(t *testing.T) { tg := test.NewHelper(t) defer tg.Cleanup() tg.TempDir("src") tg.TempDir("src/test1") tg.TempDir("src/test1/sub") tg.Setenv("GOPATH", tg.Path(".")) var testcases = []struct { lock bool start string path string }{ {true, filepath.Join("src", "test1"), ""}, //direct {true, filepath.Join("src", "test1", "sub"), ""}, //ascending } for _, testcase := range testcases { ctx := &Ctx{GOPATHs: []string{tg.Path(".")}, WorkingDir: tg.Path(testcase.start)} _, err := ctx.LoadProject() if err == nil { t.Errorf("%s: should have returned 'No Manifest Found' error", testcase.start) } } } func TestLoadProjectManifestParseError(t *testing.T) { tg := test.NewHelper(t) defer tg.Cleanup() tg.TempDir("src") tg.TempDir("src/test1") tg.TempFile(filepath.Join("src/test1", ManifestName), `[[constraint]]`) tg.TempFile(filepath.Join("src/test1", LockName), `memo = "cdafe8641b28cd16fe025df278b0a49b9416859345d8b6ba0ace0272b74925ee"\n\n[[projects]]`) tg.Setenv("GOPATH", tg.Path(".")) path := filepath.Join("src", "test1") tg.Cd(tg.Path(path)) wd, err := os.Getwd() if err != nil { t.Fatal("failed to get working directory", err) } ctx := &Ctx{ GOPATH: tg.Path("."), WorkingDir: wd, Out: discardLogger(), Err: discardLogger(), } _, err = ctx.LoadProject() if err == nil { t.Fatal("should have returned 'Manifest Syntax' error") } } func TestLoadProjectLockParseError(t *testing.T) { tg := test.NewHelper(t) defer tg.Cleanup() tg.TempDir("src") tg.TempDir("src/test1") tg.TempFile(filepath.Join("src/test1", ManifestName), `[[constraint]]`) tg.TempFile(filepath.Join("src/test1", LockName), `memo = "cdafe8641b28cd16fe025df278b0a49b9416859345d8b6ba0ace0272b74925ee"\n\n[[projects]]`) tg.Setenv("GOPATH", tg.Path(".")) path := filepath.Join("src", "test1") tg.Cd(tg.Path(path)) wd, err := os.Getwd() if err != nil { t.Fatal("failed to get working directory", err) } ctx := &Ctx{ GOPATH: tg.Path("."), WorkingDir: wd, Out: discardLogger(), Err: discardLogger(), } _, err = ctx.LoadProject() if err == nil { t.Fatal("should have returned 'Lock Syntax' error") } } func TestLoadProjectNoSrcDir(t *testing.T) { tg := test.NewHelper(t) defer tg.Cleanup() tg.TempDir("test1") tg.TempFile(filepath.Join("test1", ManifestName), `[[constraint]]`) tg.TempFile(filepath.Join("test1", LockName), `memo = "cdafe8641b28cd16fe025df278b0a49b9416859345d8b6ba0ace0272b74925ee"\n\n[[projects]]`) tg.Setenv("GOPATH", tg.Path(".")) ctx := &Ctx{GOPATH: tg.Path(".")} path := filepath.Join("test1") tg.Cd(tg.Path(path)) f, _ := os.OpenFile(filepath.Join(ctx.GOPATH, "src", "test1", LockName), os.O_WRONLY, os.ModePerm) defer f.Close() _, err := ctx.LoadProject() if err == nil { t.Fatal("should have returned 'Split Absolute Root' error (no 'src' dir present)") } } func TestLoadProjectGopkgFilenames(t *testing.T) { // We are trying to skip this test on file systems which are case-sensiive. We could // have used `fs.IsCaseSensitiveFilesystem` for this check. However, the code we are // testing also relies on `fs.IsCaseSensitiveFilesystem`. So a bug in // `fs.IsCaseSensitiveFilesystem` could prevent this test from being run. This is the // only scenario where we prefer the OS heuristic over doing the actual work of // validating filesystem case sensitivity via `fs.IsCaseSensitiveFilesystem`. if runtime.GOOS != "windows" && runtime.GOOS != "darwin" { t.Skip("skip this test on non-Windows, non-macOS") } // Here we test that a manifest filename with incorrect case throws an error. Similar // error will also be thrown for the lock file as well which has been tested in // `project_test.go#TestCheckGopkgFilenames`. So not repeating here. h := test.NewHelper(t) defer h.Cleanup() invalidMfName := strings.ToLower(ManifestName) wd := filepath.Join("src", "test") h.TempFile(filepath.Join(wd, invalidMfName), "") ctx := &Ctx{ Out: discardLogger(), Err: discardLogger(), } err := ctx.SetPaths(h.Path(wd), h.Path(".")) if err != nil { t.Fatalf("%+v", err) } _, err = ctx.LoadProject() if err == nil { t.Fatal("should have returned 'Manifest Filename' error") } expectedErrMsg := fmt.Sprintf( "manifest filename %q does not match %q", invalidMfName, ManifestName, ) if err.Error() != expectedErrMsg { t.Fatalf("unexpected error: %+v", err) } } // TestCaseInsentitive is test for Windows. This should work even though set // difference letter cases in GOPATH. func TestCaseInsentitiveGOPATH(t *testing.T) { if runtime.GOOS != "windows" { t.Skip("skip this test on non-Windows") } h := test.NewHelper(t) defer h.Cleanup() h.TempDir("src") h.TempDir("src/test1") h.TempFile(filepath.Join("src/test1", ManifestName), `[[constraint]]`) // Shuffle letter case rs := []rune(strings.ToLower(h.Path("."))) for i, r := range rs { if unicode.IsLower(r) { rs[i] = unicode.ToUpper(r) } else { rs[i] = unicode.ToLower(r) } } gopath := string(rs) h.Setenv("GOPATH", gopath) wd := h.Path("src/test1") depCtx := &Ctx{} if err := depCtx.SetPaths(wd, gopath); err != nil { t.Fatal(err) } if _, err := depCtx.LoadProject(); err != nil { t.Fatal(err) } ip := "github.com/pkg/errors" fullpath := filepath.Join(depCtx.GOPATH, "src", ip) h.TempDir(filepath.Join("src", ip)) pr, err := depCtx.ImportForAbs(fullpath) if err != nil { t.Fatal(err) } if pr != ip { t.Fatalf("expected %s, got %s", ip, pr) } } func TestDetectProjectGOPATH(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir(filepath.Join("sym", "symlink")) h.TempDir(filepath.Join("go", "src", "sym", "path")) h.TempDir(filepath.Join("go", "src", "real", "path")) h.TempDir(filepath.Join("go-two", "src", "real", "path")) h.TempDir(filepath.Join("go-two", "src", "sym")) ctx := &Ctx{ GOPATHs: []string{h.Path("go"), h.Path("go-two")}, } testcases := []struct { name string root string resolvedRoot string GOPATH string expectErr bool }{ { name: "project-with-no-AbsRoot", root: "", resolvedRoot: filepath.Join(ctx.GOPATHs[0], "src", "real", "path"), expectErr: true, }, { name: "project-with-no-ResolvedAbsRoot", root: filepath.Join(ctx.GOPATHs[0], "src", "real", "path"), resolvedRoot: "", expectErr: true, }, { name: "AbsRoot-is-not-within-any-GOPATH", root: filepath.Join(h.Path("."), "src", "real", "path"), resolvedRoot: filepath.Join(h.Path("."), "src", "real", "path"), expectErr: true, }, { name: "neither-AbsRoot-nor-ResolvedAbsRoot-are-in-any-GOPATH", root: filepath.Join(h.Path("."), "src", "sym", "path"), resolvedRoot: filepath.Join(h.Path("."), "src", "real", "path"), expectErr: true, }, { name: "both-AbsRoot-and-ResolvedAbsRoot-are-in-the-same-GOPATH", root: filepath.Join(ctx.GOPATHs[0], "src", "sym", "path"), resolvedRoot: filepath.Join(ctx.GOPATHs[0], "src", "real", "path"), expectErr: true, }, { name: "AbsRoot-and-ResolvedAbsRoot-are-each-within-a-different-GOPATH", root: filepath.Join(ctx.GOPATHs[0], "src", "sym", "path"), resolvedRoot: filepath.Join(ctx.GOPATHs[1], "src", "real", "path"), expectErr: true, }, { name: "AbsRoot-is-not-a-symlink", root: filepath.Join(ctx.GOPATHs[0], "src", "real", "path"), resolvedRoot: filepath.Join(ctx.GOPATHs[0], "src", "real", "path"), GOPATH: ctx.GOPATHs[0], }, { name: "AbsRoot-is-a-symlink-to-ResolvedAbsRoot", root: filepath.Join(h.Path("."), "sym", "symlink"), resolvedRoot: filepath.Join(ctx.GOPATHs[0], "src", "real", "path"), GOPATH: ctx.GOPATHs[0], }, } for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { project := &Project{ AbsRoot: tc.root, ResolvedAbsRoot: tc.resolvedRoot, } GOPATH, err := ctx.DetectProjectGOPATH(project) if !tc.expectErr && err != nil { t.Fatalf("%+v", err) } else if tc.expectErr && err == nil { t.Fatalf("expected an error, got nil and gopath %s", GOPATH) } if GOPATH != tc.GOPATH { t.Errorf("expected GOPATH %s, got %s", tc.GOPATH, GOPATH) } }) } } func TestDetectGOPATH(t *testing.T) { th := test.NewHelper(t) defer th.Cleanup() th.TempDir(filepath.Join("code", "src", "github.com", "username", "package")) th.TempDir(filepath.Join("go", "src", "github.com", "username", "package")) th.TempDir(filepath.Join("gotwo", "src", "github.com", "username", "package")) ctx := &Ctx{GOPATHs: []string{ th.Path("go"), th.Path("gotwo"), }} testcases := []struct { GOPATH string path string err bool }{ {th.Path("go"), th.Path(filepath.Join("go", "src", "github.com", "username", "package")), false}, {th.Path("go"), th.Path(filepath.Join("go", "src", "github.com", "username", "package")), false}, {th.Path("gotwo"), th.Path(filepath.Join("gotwo", "src", "github.com", "username", "package")), false}, {"", th.Path(filepath.Join("code", "src", "github.com", "username", "package")), true}, } for _, tc := range testcases { GOPATH, err := ctx.detectGOPATH(tc.path) if tc.err && err == nil { t.Error("expected error but got none") } if GOPATH != tc.GOPATH { t.Errorf("expected GOPATH to be %s, got %s", GOPATH, tc.GOPATH) } } } dep-0.3.2/doc.go000066400000000000000000000003511317166637100133720ustar00rootroot00000000000000// Copyright 2017 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 dep is a prototype dependency management library. package dep dep-0.3.2/docs/000077500000000000000000000000001317166637100132275ustar00rootroot00000000000000dep-0.3.2/docs/FAQ.md000066400000000000000000000623071317166637100141700ustar00rootroot00000000000000# FAQ _The first rule of FAQ is don't bikeshed the FAQ, leave that for [Create structure for managing docs](https://github.com/golang/dep/issues/331)._ Please contribute to the FAQ! Found an explanation in an issue or pull request helpful? Summarize the question and quote the reply, linking back to the original comment. ## Concepts * [Does `dep` replace `go get`?](#does-dep-replace-go-get) * [Why is it `dep ensure` instead of `dep install`?](#why-is-it-dep-ensure-instead-of-dep-install) * [What is a direct or transitive dependency?](#what-is-a-direct-or-transitive-dependency) ## Configuration * [What is the difference between Gopkg.toml (the "manifest") and Gopkg.lock (the "lock")?](#what-is-the-difference-between-gopkgtoml-the-manifest-and-gopkglock-the-lock) * [How do I constrain a transitive dependency's version?](#how-do-i-constrain-a-transitive-dependencys-version) * [Can I put the manifest and lock in the vendor directory?](#can-i-put-the-manifest-and-lock-in-the-vendor-directory) * [How do I get `dep` to authenticate to a `git` repo?](#how-do-i-get-dep-to-authenticate-to-a-git-repo) * [How do I get `dep` to consume private `git` repos using a Github Token?](#how-do-i-get-dep-to-consume-private-git-repos-using-a-github-token) ## Behavior * [How does `dep` decide what version of a dependency to use?](#how-does-dep-decide-what-version-of-a-dependency-to-use) * [What external tools are supported?](#what-external-tools-are-supported) * [Why is `dep` ignoring a version constraint in the manifest?](#why-is-dep-ignoring-a-version-constraint-in-the-manifest) * [Why did `dep` use a different revision for package X instead of the revision in the lock file?](#why-did-dep-use-a-different-revision-for-package-x-instead-of-the-revision-in-the-lock-file) * [Why is `dep` slow?](#why-is-dep-slow) * [How does `dep` handle symbolic links?](#how-does-dep-handle-symbolic-links) * [Does `dep` support relative imports?](#does-dep-support-relative-imports) * [How do I make `dep` resolve dependencies from my `GOPATH`?](#how-do-i-make-dep-resolve-dependencies-from-my-gopath) * [Will `dep` let me use git submodules to store dependencies in `vendor`?](#will-dep-let-me-use-git-submodules-to-store-dependencies-in-vendor) ## Best Practices * [Should I commit my vendor directory?](#should-i-commit-my-vendor-directory) * [How do I roll releases that `dep` will be able to use?](#how-do-i-roll-releases-that-dep-will-be-able-to-use) * [What semver version should I use?](#what-semver-version-should-i-use) * [Is it OK to make backwards-incompatible changes now?](#is-it-ok-to-make-backwards-incompatible-changes-now) * [My dependers don't use `dep` yet. What should I do?](#my-dependers-dont-use-dep-yet-what-should-i-do) * [How do I configure a dependency that doesn't tag its releases?](#how-do-i-configure-a-dependency-that-doesnt-tag-its-releases) * [How do I use `dep` with Docker?](#how-do-i-use-dep-with-docker) ## Concepts ### Does `dep` replace `go get`? No. `dep` and `go get` serve mostly different purposes. Here are some suggestions for when you could use `dep` or `go get`: > I would say that dep doesn't replace go get, but they both can do similar things. Here's how I use them: > > `go get`: I want to download the source code for a go project so that I can work on it myself, or to install a tool. This clones the repo under GOPATH for all to use. > > `dep ensure`: I have imported a new dependency in my code and want to download the dependency so I can start using it. My workflow is "add the import to the code, and then run dep ensure so that the manifest/lock/vendor are updated". This clones the repo under my project's vendor directory, and remembers the revision used so that everyone who works on my project is guaranteed to be using the same version of dependencies. > > [@carolynvs in #376](https://github.com/golang/dep/issues/376#issuecomment-293964655) > The long term vision is a sane, overall-consistent go tool. My general take is that `go get` > is for people consuming Go code, and dep-family commands are for people developing it. > > [@sdboyer in #376](https://github.com/golang/dep/issues/376#issuecomment-294045873) ### Why is it `dep ensure` instead of `dep install`? > Yeah, we went round and round on names. [A lot](https://gist.github.com/jessfraz/315db91b272441f510e81e449f675a8b). > > The idea of "ensure" is roughly, "ensure that all my local states - code tree, manifest, lock, and vendor - are in sync with each other." When arguments are passed, it becomes "ensure this argument is satisfied, along with synchronization between all my local states." > > We opted for this approach because we came to the conclusion that allowing the tool to perform partial work/exit in intermediate states ended up creating a tool that had more commands, had far more possible valid exit and input states, and was generally full of footguns. In this approach, the user has most of the same ultimate control, but exercises it differently (by modifying the code/manifest and re-running dep ensure). > > [@sdboyer in #371](https://github.com/golang/dep/issues/371#issuecomment-293246832) ### What is a direct or transitive dependency? * Direct dependencies are dependencies that are imported directly by your project: they appear in at least one import statement from your project. * Transitive dependencies are the dependencies of your dependencies. Necessary to compile but are not directly used by your code. ## Configuration ### What is the difference between `Gopkg.toml` (the "manifest") and `Gopkg.lock` (the "lock")? > The manifest describes user intent, and the lock describes computed outputs. There's flexibility in manifests that isn't present in locks..., as the "branch": "master" constraint will match whatever revision master HAPPENS to be at right now, whereas the lock is nailed down to a specific revision. > > This flexibility is important because it allows us to provide easy commands (e.g. `dep ensure -update`) that can manage an update process for you, within the constraints you specify, AND because it allows your project, when imported by someone else, to collaboratively specify the constraints for your own dependencies. > > [@sdboyer in #281](https://github.com/golang/dep/issues/281#issuecomment-284118314) ## How do I constrain a transitive dependency's version? First, if you're wondering about this because you're trying to keep the version of the transitive dependency from changing, then you're working against `dep`'s design. The lock file, `Gopkg.lock`, will keep the selected version of the transitive dependency stable, unless you explicitly request an upgrade or it's impossible to find a solution without changing that version. If that isn't your use case and you still need to constrain a transitive dependency, you have a couple of options: 1. Make the transitive dependency a direct one, either with a dummy import or an entry in the `required` list in `Gopkg.toml`. 2. Use an override. Overrides are a sledgehammer, and should only be used as a last resort. While constraints and overrides are declared in the same way in `Gopkg.toml`, they behave differently: * Constraints: 1. Can be declared by any project's manifest, yours or a dependency 2. Apply only to direct dependencies of the project declaring the constraint 3. Must not conflict with the `constraint` entries declared in any other project's manifest * Overrides: 1. Are only utilized from the current/your project's manifest 2. Apply globally, to direct and transitive dependencies 3. Supersede constraints declared in all manifests, yours or a dependency's Overrides are also discussed with some visuals in [the gps docs](https://github.com/sdboyer/gps/wiki/gps-for-Implementors#overrides). ## Can I put the manifest and lock in the vendor directory? No. > Placing these files inside `vendor/` would concretely bind us to `vendor/` in the long term. > We prefer to treat the `vendor/` as an implementation detail. > > [@sdboyer on go package management list](https://groups.google.com/d/msg/go-package-management/et1qFUjrkP4/LQFCHP4WBQAJ) ## How do I get dep to authenticate to a git repo? `dep` currently uses the `git` command under the hood, so configuring the credentials for each repository you wish to authenticate to will allow `dep` to use an authenticated repository. First, configure `git` to use the credentials option for the specific repository. For example, if you use gitlab, and you wish to access `https://gitlab.example.com/example/package.git`, then you would want to use the following configuration: ``` $ git config --global credential.https://gitlab.example.com.example yourusername ``` In the example the hostname `gitlab.example.com.username` string seems incorrect, but it's actually the hostname plus the name of the repo you are accessing which is `username`. The trailing 'yourusername' is the username you would use for the actual authentication. You also need to configure `git` with the authentication provider you wish to use. You can get a list of providers, with the command: ``` $ git help -a | grep credential- credential-cache remote-fd credential-cache--daemon remote-ftp credential-osxkeychain remote-ftps credential-store remote-http ``` You would then choose an appropriate provider. For example, to use the osxkeychain, you would use the following: ``` git config --global credential.helper osxkeychain ``` If you need to do this for a CI system, then you may want to use the "store" provider. Please see the documentation on how to configure that: https://git-scm.com/docs/git-credential-store After configuring `git`, you may need to use `git` manually once to have it store the credentials. Once you've checked out the repo manually, it will then use the stored credentials. This at least appears to be the behavior for the osxkeychain provider. ### How do I get dep to consume private git repos using a Github Token? Another alternative to make `dep` work with private repos is to use a [Personal Github Token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) and configure it inside the [`.netrc` file](https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html) as the following example: ``` machine github.com login [YOUR_GITHUB_TOKEN] ``` Once you have set that up, dep will automatically use that Token to authenticate to the repositories. ## Behavior ### How does `dep` decide what version of a dependency to use? The full algorithm is complex, but the most important thing to understand is that `dep` tries versions in a [certain order](https://godoc.org/github.com/golang/dep/internal/gps#SortForUpgrade), checking to see a version is acceptable according to specified constraints. - All semver versions come first, and sort mostly according to the semver 2.0 spec, with one exception: - Semver versions with a prerelease are sorted after *all* non-prerelease semver. Within this subset they are sorted first by their numerical component, then lexicographically by their prerelease version. - The default branch(es) are next; the semantics of what "default branch" means are specific to the underlying source type, but this is generally what you'd get from a `go get`. - All other branches come next, sorted lexicographically. - All non-semver versions (tags) are next, sorted lexicographically. - Revisions, if any, are last, sorted lexicographically. Revisions do not typically appear in version lists, so the only invariant we maintain is determinism - deeper semantics, like chronology or topology, do not matter. So, given a slice of the following versions: - Branch: `master` `devel` - Semver tags: `v1.0.0` `v1.1.0` `v1.1.0-alpha1` - Non-semver tags: `footag` - Revision: `f6e74e8d` Sorting for upgrade will result in the following slice. `[v1.1.0 v1.0.0 v1.1.0-alpha1 footag devel master f6e74e8d]` There are a number of factors that can eliminate a version from consideration, the simplest of which is that it doesn't match a constraint. But if you're trying to figure out why `dep` is doing what it does, understanding that its basic action is to attempt versions in this order should help you to reason about what's going on. ## What external tools are supported? During `dep init` configuration from other dependency managers is detected and imported, unless `-skip-tools` is specified. The following tools are supported: `glide`, `godep`, `vndr`, `govend`, `gb` and `gvt`. See [#186](https://github.com/golang/dep/issues/186#issuecomment-306363441) for how to add support for another tool. ## Why is `dep` ignoring a version constraint in the manifest? Only your project's directly imported dependencies are affected by a `constraint` entry in the manifest. Transitive dependencies are unaffected. See [How do I constrain a transitive dependency's version](#how-do-i-constrain-a-transitive-dependencys-version)? ## Why did `dep` use a different revision for package X instead of the revision in the lock file? Sometimes the revision specified in the lock file is no longer valid. There are a few ways this can occur: * When you generated the lock file, you had an unpushed commit in your local copy of package X's repository in your `GOPATH`. (This case will be going away soon) * After generating the lock file, new commits were force pushed to package X's repository, causing the commit revision in your lock file to no longer exist. To troubleshoot, you can revert dep's changes to your lock, and then run `dep ensure -v -n`. This retries the command in dry-run mode with verbose logs enabled. Check the output for a warning like the one below, indicating that a commit in the lock is no longer valid. ``` Unable to update checked out version: fatal: reference is not a tree: 4dfc6a8a7e15229398c0a018b6d7a078cccae9c8 ``` > The lock file represents a set of precise, typically immutable versions for the entire transitive closure of dependencies for a project. But "the project" can be, and is, decomposed into just a bunch of arguments to an algorithm. When those inputs change, the lock may need to change as well. > > Under most circumstances, if those arguments don't change, then the lock remains fine and correct. You've hit one one of the few cases where that guarantee doesn't apply. The fact that you ran dep ensure and it DID a solve is a product of some arguments changing; that solving failed because this particular commit had become stale is a separate problem. > > [@sdboyer in #405](https://github.com/golang/dep/issues/405#issuecomment-295998489) ## Why is `dep` slow? There are two things that really slow `dep` down. One is unavoidable; for the other, we have a plan. The unavoidable part is the initial clone. `dep` relies on a cache of local repositories (stored under `$GOPATH/pkg/dep`), which is populated on demand. Unfortunately, the first `dep` run, especially for a large project, may take a while, as all dependencies are cloned into the cache. Fortunately, this is just an _initial_ clone - pay it once, and you're done. The problem repeats itself a bit when you're running `dep` for the first time in a while and there's new changesets to fetch, but even then, these costs are only paid once per changeset. The other part is the work of retrieving information about dependencies. There are three parts to this: 1. Getting an up-to-date list of versions from the upstream source 2. Reading the `Gopkg.toml` for a particular version out of the local cache 3. Parsing the tree of packages for import statements at a particular version The first requires one or more network calls; the second two usually mean something like a `git checkout`, and the third is a filesystem walk, plus loading and parsing `.go` files. All of these are expensive operations. Fortunately, we can cache the second and third. And that cache can be permanent when keyed on an immutable identifier for the version - like a git commit SHA1 hash. The first is a bit trickier, but there are reasonable staleness tradeoffs we can consider to avoid the network entirely. There's an issue to [implement persistent caching](https://github.com/golang/dep/issues/431) that's the gateway to all of these improvements. There's another major performance issue that's much harder - the process of picking versions itself is an NP-complete problem in `dep`'s current design. This is a much trickier problem 😜 ## How does `dep` handle symbolic links? > because we're not crazy people who delight in inviting chaos into our lives, we need to work within one `GOPATH` at a time. -[@sdboyer in #247](https://github.com/golang/dep/pull/247#issuecomment-284181879) Out of convenience, one might create a symlink to a directory within their `GOPATH/src`, e.g. `ln -s ~/go/src/github.com/user/awesome-project ~/Code/awesome-project`. When `dep` is invoked with a project root that is a symlink, it will be resolved according to the following rules: - If the symlink is outside `GOPATH` and links to a directory within a `GOPATH`, or vice versa, then `dep` will choose whichever path is within `GOPATH`. - If the symlink is within a `GOPATH` and the resolved path is within a *different* `GOPATH`, then an error is thrown. - If both the symlink and the resolved path are in the same `GOPATH`, then an error is thrown. - If neither the symlink nor the resolved path are in a `GOPATH`, then an error is thrown. This is the only symbolic link support that `dep` really intends to provide. In keeping with the general practices of the `go` tool, `dep` tends to either ignore symlinks (when walking) or copy the symlink itself, depending on the filesystem operation being performed. ## Does `dep` support relative imports? No. > dep simply doesn't allow relative imports. this is one of the few places where we restrict a case that the toolchain itself allows. we disallow them only because: > > * the toolchain already frowns heavily on them
> * it's worse for our case, as we start venturing into [dot dot hell](http://doc.cat-v.org/plan_9/4th_edition/papers/lexnames) territory when trying to prove that the import does not escape the tree of the project > > [@sdboyer in #899](https://github.com/golang/dep/issues/899#issuecomment-317904001) For a refresher on Go's recommended workspace organization, see the ["How To Write Go Code"](https://golang.org/doc/code.html) article in the Go docs. Organizing your code this way gives you a unique import path for every package. ## How do I make `dep` resolve dependencies from my `GOPATH`? `dep init` provides an option to scan the `GOPATH` for dependencies by doing `dep init -gopath`, which falls back to network mode when the packages are not found in `GOPATH`. `dep ensure` doesn't work with projects in `GOPATH`. ## Will `dep` let me use git submodules to store dependencies in `vendor`? No, with just one tiny exception: `dep` preserves `/vendor/.git`, if it exists. This was added at [cockroachdb](https://github.com/cockroachdb/cockroach)'s request, who rely on it to keep `vendor` from bloating their primary repository. The reasons why git submodules will not be a part of dep are best expressed as a pro/con list: **Pros** * git submodules provide a well-structured way of nesting repositories within repositories. **Cons** * The nesting that git submodules perform is no more powerful or expressive than what dep already does, but dep does it both more generally (for bzr and hg) and more domain-specifically (e.g. elimination of nested vendor directories). * Incorporating git submodules in any way would new fork new paths in the logic to handle the submodule cases, meaning nontrivial complexity increases. * dep does not currently know or care if the project it operates on is under version control. Relying on submodules would entail that dep start paying attention to that. That it would only be conditionally does not make it better - again, more forking paths in the logic, more complexity. * Incorporating submodules in a way that is at all visible to the user (and why else would you do it?) makes dep's workflows both more complicated and less predictable: _sometimes_ submodule-related actions are expected; _sometimes_ submodule-derived workflows are sufficient. * Nesting one repository within another implies that changes could, potentially, be made directly in that subrepository. This is directly contrary to dep's foundational principle that `vendor` is dead code, and directly modifying anything in there is an error. ## Best Practices ### Should I commit my vendor directory? It's up to you: **Pros** - It's the only way to get truly reproducible builds, as it guards against upstream renames, deletes and commit history overwrites. - You don't need an extra `dep ensure` step to sync `vendor/` with Gopkg.lock after most operations, such as `go get`, cloning, getting latest, merging, etc. **Cons** - Your repo will be bigger, potentially a lot bigger, though `dep prune` can help minimize this problem. - PR diffs will include changes for files under `vendor/` when Gopkg.lock is modified, however files in `vendor/` are [hidden by default](https://github.com/github/linguist/blob/v5.2.0/lib/linguist/generated.rb#L328) on Github. ## How do I roll releases that `dep` will be able to use? In short: make sure you've committed your `Gopkg.toml` and `Gopkg.lock`, then just create a tag in your version control system and push it to the canonical location. `dep` is designed to work automatically with this sort of metadata from `git`, `bzr`, and `hg`. It's strongly preferred that you use [semver](http://semver.org)-compliant tag names. We hope to develop documentation soon that describes this more precisely, but in the meantime, the [npm](https://docs.npmjs.com/misc/semver) docs match our patterns pretty well. ## What semver version should I use? This can be a nuanced question, and the community is going to have to work out some accepted standards for how semver should be applied to Go projects. At the highest level, though, these are the rules: * Below `v1.0.0`, anything goes. Use these releases to figure out what you want your API to be. * Above `v1.0.0`, the general Go best practices continue to apply - don't make backwards-incompatible changes - exported identifiers can be added to, but not changed or removed. * If you must make a backwards-incompatible change, then bump the major version. It's important to note that having a `v1.0.0` does not preclude you from having alpha/beta/etc releases. The semver spec allows for [prerelease versions](http://semver.org/#spec-item-9), and `dep` is careful to _not_ allow such versions unless `Gopkg.toml` contains a range constraint that explicitly includes prereleases: if there exists a version `v1.0.1-alpha4`, then the constraint `>=1.0.0` will not match it, but `>=1.0.1-alpha1` will. Some work has been done towards [a tool to](https://github.com/bradleyfalzon/apicompat) that will analyze and compare your code with the last release, and suggest the next version you should use. ## Is it OK to make backwards-incompatible changes now? Yes. But. `dep` will make it possible for the Go ecosystem to handle backwards-incompatible changes more gracefully. However, `dep` is not some magical panacea. Version and dependency management is hard, and dependency hell is real. The longstanding community wisdom about avoiding breaking changes remains important. Any `v1.0.0` release should be accompanied by a plan for how to avoid future breaking API changes. One good strategy may be to add to your API instead of changing it, deprecating old versions as you progress. Then, when the time is right, you can roll a new major version and clean out a bunch of deprecated symbols all at once. Note that providing an incremental migration path across breaking changes (i.e., shims) is tricky, and something we [don't have a good answer for yet](https://groups.google.com/forum/#!topic/go-package-management/fp2uBMf6kq4). ## My dependers don't use `dep` yet. What should I do? For the most part, you needn't do anything differently. The only possible issue is if your project is ever consumed as a library. If so, then you may want to be wary about committing your `vendor/` directory, as it can [cause problems](https://groups.google.com/d/msg/golang-nuts/AnMr9NL6dtc/UnyUUKcMCAAJ). If your dependers are using `dep`, this is not a concern, as `dep` takes care of stripping out nested `vendor` directories. ## How do I configure a dependency that doesn't tag its releases? Add a constraint to `Gopkg.toml` that specifies `branch: "master"` (or whichever branch you need) in the `[[constraint]]` for that dependency. `dep ensure` will determine the current revision of your dependency's master branch, and place it in `Gopkg.lock` for you. See also: [What is the difference between Gopkg.toml and Gopkg.lock?](#what-is-the-difference-between-gopkgtoml-the-manifest-and-gopkglock-the-lock) ## How do I use `dep` with Docker? `dep ensure -vendor-only` creates the vendor folder from a valid `Gopkg.toml` and `Gopkg.lock` without checking for Go code. This is especially useful for builds inside docker utilizing cache layers. Sample dockerfile: FROM golang:1.9 AS builder RUN curl -fsSL -o /usr/local/bin/dep https://github.com/golang/dep/releases/download/vX.X.X/dep-linux-amd64 && chmod +x /usr/local/bin/dep RUN mkdir -p /go/src/github.com/*** WORKDIR /go/src/github.com/*** COPY Gopkg.toml Gopkg.lock ./ # copies the Gopkg.toml and Gopkg.lock to WORKDIR RUN dep ensure -vendor-only # install the dependencies without checking for go code ... dep-0.3.2/docs/Gopkg.toml.md000066400000000000000000000152141317166637100155750ustar00rootroot00000000000000# Gopkg.toml ## `required` `required` lists a set of packages (not projects) that must be included in Gopkg.lock. This list is merged with the set of packages imported by the current project. ```toml required = ["github.com/user/thing/cmd/thing"] ``` **Use this for:** linters, generators, and other development tools that * Are needed by your project * Aren't `import`ed by your project, [directly or transitively](FAQ.md#what-is-a-direct-or-transitive-dependency) * You don't want put in your `GOPATH`, and/or you want to lock the version Please note that this only pulls in the sources of these dependencies. It does not install or compile them. So, if you need the tool to be installed you should still run the following (manually or from a `Makefile`) after each `dep ensure`: ```bash cd vendor/pkg/to/install go install . ``` This only works reliably if this is the only project to install these executables. This is not enough if you want to be able to run a different version of the same executable depending on the project you're working. In that case you have to use a different `GOBIN` for each project, by doing something like this before running the above commands: ```bash export GOBIN=$PWD/bin export PATH=$GOBIN:$PATH ``` You might also try [virtualgo](https://github.com/GetStream/vg), which installs dependencies in the `required` list automatically in a project specific `GOBIN`. ## `ignored` `ignored` lists a set of packages (not projects) that are ignored when dep statically analyzes source code. Ignored packages can be in this project, or in a dependency. ```toml ignored = ["github.com/user/project/badpkg"] ``` Use wildcard character (*) to define a package prefix to be ignored. Use this to ignore any package and their subpackages. ```toml ignored = ["github.com/user/project/badpkg*"] ``` **Use this for:** preventing a package and any of that package's unique dependencies from being installed. ## `metadata` `metadata` can exist at the root as well as under `constraint` and `override` declarations. `metadata` declarations are ignored by dep and are meant for usage by other independent systems. A `metadata` declaration at the root defines metadata about the project itself. While a `metadata` declaration under a `constraint` or an `override` defines metadata about that `constraint` or `override`. ```toml [metadata] key1 = "value that convey data to other systems" system1-data = "value that is used by a system" system2-data = "value that is used by another system" ``` ## `constraint` A `constraint` provides rules for how a [direct dependency](FAQ.md#what-is-a-direct-or-transitive-dependency) may be incorporated into the dependency graph. They are respected by dep whether coming from the Gopkg.toml of the current project or a dependency. ```toml [[constraint]] # Required: the root import path of the project being constrained. name = "github.com/user/project" # Recommended: the version constraint to enforce for the project. # Only one of "branch", "version" or "revision" can be specified. version = "1.0.0" branch = "master" revision = "abc123" # Optional: an alternate location (URL or import path) for the project's source. source = "https://github.com/myfork/package.git" # Optional: metadata about the constraint or override that could be used by other independent systems [metadata] key1 = "value that convey data to other systems" system1-data = "value that is used by a system" system2-data = "value that is used by another system" ``` **Use this for:** having a [direct dependency](FAQ.md#what-is-a-direct-or-transitive-dependency) use a specific branch, version range, revision, or alternate source (such as a fork). ## `override` An `override` has the same structure as a `constraint` declaration, but supersede all `constraint` declarations from all projects. Only `override` declarations from the current project's `Gopkg.toml` are applied. ```toml [[override]] # Required: the root import path of the project being constrained. name = "github.com/user/project" # Optional: specifying a version constraint override will cause all other constraints on this project to be ignored; only the overridden constraint needs to be satisfied. Again, only one of "branch", "version" or "revision" can be specified. version = "1.0.0" branch = "master" revision = "abc123" # Optional: specifying an alternate source location as an override will enforce that the alternate location is used for that project, regardless of what source location any dependent projects specify. source = "https://github.com/myfork/package.git" # Optional: metadata about the constraint or override that could be used by other independent systems [metadata] key1 = "value that convey data to other systems" system1-data = "value that is used by a system" system2-data = "value that is used by another system" ``` **Use this for:** all the same things as a [`constraint`](#constraint), but for [transitive dependencies](FAQ.md#what-is-a-direct-or-transitive-dependency). See [How do I constrain a transitive dependency's version?](FAQ.md#how-do-i-constrain-a-transitive-dependencys-version) for more details on how overrides differ from `constraint`s. _Overrides should be used cautiously, sparingly, and temporarily._ ## `version` `version` is a property of `constraint`s and `override`s. It is used to specify version constraint of a specific dependency. Internally, dep uses [Masterminds/semver](https://github.com/Masterminds/semver) to work with semver versioning. `~` and `=` operators can be used with the versions. When a version is specified without any operator, `dep` automatically adds a caret operator, `^`. The caret operator pins the left-most non-zero digit in the version. For example: ``` ^1.2.3 means 1.2.3 <= X < 2.0.0 ^0.2.3 means 0.2.3 <= X < 0.3.0 ^0.0.3 means 0.0.3 <= X < 0.1.0 ``` To pin a version of direct dependency in manifest, prefix the version with `=`. For example: ```toml [[constraint]] name = "github.com/pkg/errors" version = "=0.8.0" ``` [Why is dep ignoring a version constraint in the manifest?](FAQ.md#why-is-dep-ignoring-a-version-constraint-in-the-manifest) # Example Here's an example of a sample Gopkg.toml with most of the elements ```toml required = ["github.com/user/thing/cmd/thing"] ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] [metadata] codename = "foo" [[constraint]] name = "github.com/user/project" version = "1.0.0" [metadata] property1 = "value1" property2 = 10 [[constraint]] name = "github.com/user/project2" branch = "dev" source = "github.com/myfork/project2" [[override]] name = "github.com/x/y" version = "2.4.0" [metadata] propertyX = "valueX" ``` dep-0.3.2/docs/img/000077500000000000000000000000001317166637100140035ustar00rootroot00000000000000dep-0.3.2/docs/img/DigbyFlat.png000066400000000000000000014011041317166637100163570ustar00rootroot00000000000000PNG  IHDR j pHYs.#.#x?v IDATxt}'O{zF_زG%K>{b"ABn)7-7 .ͯ6l6N]ҴIw6 I6Bom8K)Id1sC,clFvC#idkxyy~__*QdXZ1/"Z"bk#l$W-J3]÷|""=W./%w*$j>bWidFDODl=3$(%wJLKDL<ӵj."_xvQrjZdhI|2Zp!}tڎȗ#b{6{d@$0;$)fZH_%z5ѓ9#tJ #"f%Yܮ8G$0=%w@I)fmtaN{#"`$I%"ZX9TW#_x3b)P$ FK) + ̱]1#j;%$)fZH_% Ԁq~{O6{d@$T+%wVt1ӵ.̹"_x"Z($tt6_UoWK1:G$T"%w$-S,tMRx5.(3b)%I2 b$>Bk-QRԀb"(EKLK3-/秽dGzDU@<"bk]j=Fg@(@ $I3FOJक़8}H+JԤ$ɴDD3]S:jɎȗ#b{6{d@$%wBdhI|2Zp!}tJGO6{XTJL)I2S,ʹ "Kf슉{Dt\Zyq";+ݸ(:ֶ:gFX٣1pJ+.iEIy)؞."P%$Pp ]mJkSէ.C!ɊhMV͛6۳/͗{c9AqGDlO{{N{@QrIY0U<"cm=Yڶ ˯b>!qoɯ~FLM:PZGnҵ֤ڊ=ZqQ:gƞ}}џ=٣1pJg~Dt又HK1qv1%w-dH7.tmS:՚d׹#g tV;""$+O{f Qr-"Z}ݼ  5Y>Zyq";@!Xk J~UZGDD$I8?}{ψ 4,Y6BѵS]qQܼiQDl?wa}Ͼ8y괠Jg~DtIy)&N{.&@DL]: ӆ߸>P맽FΎ #g tVFĽ#$#؞@TKHM֚Z[1PRuo(x}Ͼ8|LP56=""$j '=rFLF"-Y0ҍ&]K7.tk?Ob͛EsGӂ*q9""I2b1Tyњt-U_I ӍSM{-o7GΞTFD$I&"bGޓyJfMۤ Gצ*O]d7t:gFx}1AشED$I|ZUnyשg<&+l=bϾSU:#9""I2bbGL@Prki^IZBk+f<ѱm_dz RiFD$I&"bGޓPyK/tIҍ"ݸp5s9hQ\c\hgŞ}}џ= GDD$I#b{6{dj@٩ɊI NJXM]d&+5Y7o8~nϾس7_~U:+9?}WK1:GL@Qr`ZJhMXyS @Xkƿz{X'Z?H̫qA=F'PΔg>o'bt7t=?{,Gc1A$bbʉ;0Z~On?~>ORiwDD$I&"bWޓp(%mѱ-Sr/GDD$I8?}{ψ (%w^o~DtIy)&N{.&`.(p1VFĽ#$#؞P,%w8{(v슃RZc#""I2F?z#g\ %w[&|gw8bĐJg~/oḪ8GL@!J@Uй.6tֿ׆c @ox~8TFD$I&"bGޓ0FjW64D׍7D׍7;ŁCgW=$$ɼ{/&%wnomϿk?xbHP3?"#"$+&{A "6t ƿ>>x"?/v쎝=TZǽI'dGG`M˖FӲu Ʀz`!AVW$ɼ{DlflT>%w-VeΞ F';s9AqGDlO{{N{T%w"l\:׍}|D8쎃S)ވ$ɼct1@RrEM˖FӲu ?/]#""$RL]LP>Xfr!㎈$DD{#=bC`ڰIy5O{3b0G.r#gY:#+lHK-"eGDsCݷ5bϾس/Gc9-oŅ# >%w9v|D{"U_kۢcm_/ 46'I;"f%w96%dŤӍM"b K٣qiantEķ#[0{شwֈȍ}C}9A͎$|*=)QPrcǎGqጟ7t:gFx}1j6'If[6{d@P<%w96xb=ҍf=&+5Y{O:]"Sb)kۢcmC/2a}B}B`J͵+U_kۢcm_O{?cw)̡׆sEҍM"b K{STPp|ubtoxo뒼⧑&+j~{nx}'@uQrOΞ_/lr6<^UT}C/2^x߳/T0%wjPpc{H7.7-.,gSBZ;_=p.;{vdžus+z sumwֈȍ}C}9A@Rrkׯn_u}_㈈xFӲS>g8s!@.o興OW~}'*z}ӼNj;{vک:9&0<+z'"%waW+l,Rr(i&o\7gsP޾)R)׎,[.Ps 8ppۦ\;>xBx30׆c8riR!2%w)=Tp]`)L~9}d%w)-2n\E%C*e;@)P$wFĻ#"߹0;g?Qt]G\#n޴QEXxa# *By^*@ {/{O&+0CEӲCqux^)y. P(;I錈Ph('߹Tw"^T>?.3xO@e<1_܏shZT(F$ɌٻC,eDsh}ͪfv,T-_:ˍćdo$@)o$8_fxUѼ|о5TeK+3 8YgޢhnJq6Vf{ߊ/l47Om#>G$@ )@%S>^_ho^yW(Nj/s7Rx;WTu=|_džuUpSO?"B$IfAL,wB{YwE47-5iؾxUs,zU~F\_^}'f{@57TpߏM7D׍7JMRh) @y5=x[~SYKMK@U<14KJ%U"I2q eguk&Ѽ|Ю4TSQ뮩3Ɖsם1j^[}(;T;#bTʋB;@{g mѐJgϋޣyy/~9n!lhxΞ|>AI\d.,wFDTKiI47/Y,*?RZ*wڂ}]׽~n~\.;,Qr2^/*V(PO>o\oleK{SpxǾ]DӲA-YIdZ|;|ɔ͝5Ӧ5E4"><;?P׬iusֿO[V`(@ (WKǻfA5o칢X2 }kUt^{=w_ua%weIYR2T~YgL@">KhnJ戒;)I2ݡ@;|d{t^Q֟q8-l-J><p.7T>fH{,^xSrj$IfA/wB{IG'_ۡ@Yqbdwj8sqXJT&L>:%-M ?t=Z[s7ɧ}wq{]CEﱺ5^~E@Rr"$I;&LC>k}p.~˴{w,N:-f)Pv.(Rѩ3(zT>ӶGC' >7-:"YX*7?;UdƊݡ^PN.޾l>Oϋ{|cR+ Gn~\-@Srd.(]R.'bҴ ([ù\|3q}>}[cm[| )0g$ ";C,^pU4/_MXݚmO|7N)nRI%w*h_Ro\7U5yqO{n͸s~CG=1p@*;s"I2͒(/7/OG+&>fUE{GL~81t2""x7154\x;YǤRG,{bۣGXN0CocG>1r`*;*?}{DQ7hnZkV5Gsh}«}ޚUqHQ=x䴏y'?t¹`{m3 :ܥClq}\.>?0~nW7-6M%{_~˄\n$|ekQ~ZJ17+[~CG|6&T%wfӷC}NnDsS:g|6{]Bm>>o\ncZ[{.{S\8f&+bpO?|;@Pr`V$IΈBd/zJOY4Fo?UҒ!?t=Z[.jZ7=KOo9ۿŽE10׬i=w3""P-eDs2U%^5+U-So7w}'NumTO)ɘ֖f:'~uJ@eI7.}wxߍJ닎m.0Ps "WE [3Ѽ<]֓Q^Utɽg)ח-Mǽsw=>cq=wDzi7ev J{h XO4MM#bt_#8y괋0 `]MKbͪhnԾxUf3 M_roH;nv︩Tx˧_-zeKr_p~)<5>߽7z=/)z%n~b͋T}]I_cmνw1`(EXݚBd/(sw3ƉS>fۣ߈x݀ѩӿ(zeKs>s7O[pxlZ<S>o뎻l{]4umx~{Y|7mϊ,RrYݚt4/-$ŗ/\8{~/\ϣŽ0-_}>߽7==̳ύikmY{ᑢJMO~痋=Oy=7+A@M4-%)UhL,Mmbo)=xi~KVf_Y(XݚGcx8wя}yyb ȕ3d@21)VHPR u+CM+wxsN\t@vMlR\7]-]Xi4zqq;iYR  SHIҐBum!_$g8?3}~ /-\o~a15Y^]ő/=k Gݤ4'_)|+>4/|ZhGgN!M5%w6-QR ͮVZp֟|%SQVVo\_>gx=ObUӓ9{=KK8lZJB{&v5EjGM&JFUweƅUOqp֋^hk|ޖ' ےiWfgW\p?m2 %w ??y%&n,WWV/DYirU'/zO{v\EYi2_Xչ _F@QI&J'+Tmuk\Hvok}qrXjg/WSocRWfg|mE+Wf?x_ t ".@7˿&ԗ&OW6%w ֵTI&&LvߪyO޲侭w<_Xx\LP?n[Y*C>n{xƔ7?P=E:jqB}DxwjlzJ]qCybەUo??zkk7:>M :܏|)o,M C##=y)""nQV$%O{[WuO>M^+ؚgc-j >r_N C/ ܚ;pTmuh ,GDPV])7(Md pO7YpNSn4y~ﵫ.5Lr(~S3z108OӘ|ٹe8HO^=w(+M )7(M&2^#dȯY(oYCtk$%>>goxl뿊o\Tm@Qrn W<[/3+*|:} ~}:&xt͏^'P`R %w"55m5_~ث~E'/w.V>-HTeE%hUEhr7}[q_?FQ{75R>;gcx@6(%wচSqfh,5\$Esϯ}/| 14Y%(>JM%z> e<""TCw<@CqKO~/\LLrZ'pT:5.\$@B}[qJcv ҙܳ`Fww>ޓH2^bZ߽>C>"$5HO^Z.~g &sz{R;(+M!Hʊ308M/fm='xǶTS}2츿{>*ƛȺٹBw^4==@v"R]mug6NE۽B(ؾ (+}108z#p4QdRݧs^j,(.J-ev1=-^9Z|ޖ8ŧxO/\C Iw Nj?=6\^SMn04rnUǗ&B%wSqfh,kv_|76$\b7(+d\HOdFZBbyR;4]w~aU7-4ⵏ>|bvv.+{708}5;79C#^jxdZ;&RjGͺ}#_1sqKOmx&NWnΕ+`JO^˓ڇGm/r=QS ؄[*M>^9ZDDSqb:>|n:x"2;+`Ŗ&/'{R;Jmj3Ccy+_8;4{ eg>_7ltOjGٽs^Vt;p[ɒً;޵SڇF喙bоgΨFp[Jmjk 63 x E&=yi^(S#"Jس)hߣ(&35yee̡ٹר($9X:7P{[*/Mjo  #Jm%%BvevV>4r.& fJ7%wකSBd3^c6 $W3^cWC  O Q]Yq]jRr((EAlؾF\d?9s {R;'+JjИ eFeE  ˖JKוJn yQeEyĐ F?pDDlVM xֻ2*rc`٧chouer}F#7et|"5m{\g~lůnxOƃ PzR';䥂ξyg4=~GTmu3(xJj&2(,{ث~\LOğ|뿋]ő/={>Rnkh\-]=2ҴvJO^@Qr4J zk*g*(qtNsbh|'/]}о4Bzrz@(wVV{ҶS\g~{kѴ8#+D66k9s E:J wGCa)+R<.l fmJK^x1;;s> %x'?{bz"khݬȞSEz@XʊYrL|5;;; IDATz#?瞏{B`IO^_b^ՕEvv-%w`ER5qfhLBk~m5wV%b~3k*bheIo %w`E*+ʅ dv4562"2^qbz 7 u3;7C##";14rNjM&Pwٽ3j.OiVNX)t% 2"z75㭷uI%w;g#"4VZwFCwwYHU]B`Mzm{{MulVu/\LDžm^ٹugƛeK%:yi웥^WTUĞMQSU5U[a`(+RYQ^s2Q͍)7` .\L瞏 Em5šUO}2;/W5%ß|(T KOv޵CMȁ⑯žG SЯWܗGG?nmyZ7t\H!o?rlV|^|n*o~,,(M&&+ƠXg{ktTN/MNVGǤj5t[~nWC]4E֘_g_xo؉_*>ԗoO~~Ӊ+x&~x ?y|}qu*d\2 {scʛ ғWygDDٽKXÇG짲t`ߝٞ6|;19^vuDG{ˆzWC]47{G}8arKyV ~ E@}馏?yᨪ+^:~'%#](Męu}O<>S7=}17gbWC]&Kiy@Pr jo;I`WGtƱ?4cjZN=MhOshDD뮙MTm-/MDg{KOz8Wk/,鵾w<FvUWWV ȩL('yhEtꈃ]3^ *ұS1uy&%v UYQO:UwuǼ jH;Y*z_`WG4834s:[:o*_(}ݽqfp|v5EN[loݽqD +G׾[ZqWVt|2Q_㷝$@Mɽe lIVǗ?xO7{ct<}]rKyTVG[KS|hnLEscjElZz[XQbͮcWC]~HuS<:[@Q)+M  uYs;:JDL&Jk_pUQr`]A@֙;Yg;VJdUrS5Sr 0X3%wMp4kkUn)Vk@>t@ #%wM4:ꢹ1%P;@~)lrꬬ䡇 dLhkٙ:\@Ɣ5[<  %w1tC4Q"D +QW[s:͍)Y@DD&J˟yGp41uyf-ѹ5GiD`@)pT47[XTj('Pd'Dbs)8ܘTmPPGujQ(PTPO@;}C}ə8O=*,6s:Bh@3wdj;@Qr.ddyj{scJJȋu@uήm-MQ(<@Srr&W-ѹ5:[\EDXW*'%ֲ3:[1%x"d]m-;):[DDwή(J@VODhNu{[4Q"| c5UB(JO7{o .Ϭ*GloʊrlPJ@NjkتƔ DXΊm-Mѹ5R;!@[X3뾁; zd$ZvFg{PlDP}}ݿ] ;pwmᖦhkir(v,"==22vT:J@DDODO@o 'zzIO^ஈxpD<=22#X%wĖJgb̺_Oȅ; ?] ܞ;l"S3WKCw6'TlZD{zdd'[Sr jo '#>Gᑑa`vZ{X/,井[cWcb;G#{##c_\ObZhj7VZ}}:5UJPF'p4zXN]W[ܘRl ܼ(&W~O] ;ZjŜ^eg4EsC**+ _9 ;GaDgbLNLD[pKSjLEiM6Ҥ(wEiju#ذH،-,ƙj!{[#U[@|4"ldd`Qr<(R{DD[Ր4EeEkLuMlJRjRm-MXm-Mn Fīu?GF.NL^j06?;*62%wȂwKqfp,.m/uܐ2شzϮ Q,gGᑑa)ƙi yK2Q\honHJ5U[@hD}odd`Qr;Y.XR{c*Rnl>wEGF^ ;ǵSGO噼﩮:Rֲ3SnCj}}ݿ] NMmt|)1:>cR{sc]jLEinEcuOD3%w6B_ *ǮƺhnLE[KR;]__bD6bTȅK (w;gW}NMV<Nu?*;Ep4.l=":RXS& !S݇E@Prh-,%DO^w5\ҞVjS__b@AZ>5=1:> d$"U[\n( wEwGFzDGYYyLlD~+>|<-F$TrvNAc =[7#mLKbK/6 嘝naM0G9 Hs)p(~$? :#xUP(gJLoCS)]0/^0ohR{C,`7D)erxdoDwce}lX!} TCS_ш IDATט@9Rr`?NMe?Sf?~򝲟^՘ Ng_0/.m\sf *yG-j%>%ʅ;%?n>SSSvXxRдvj;5ncDI)[w@88>ߍ7z8""sWwž&v.=)e[#ASjJ5wNc=8~rOSO`TEDL5%w*8|'"~=y=?բnG~]f_0/<_`lLu`)To1pzOGDTB Y矝ξ3|? 0eؙzį'N]^4g1gD97t取OcZ 887SJqh~X ~wp{J.2evENPL*%w?z-zOo0 Y *L%w7bן pf* #[Y̝5#:_8Tw&;?NMUd /-0FGQqXxACMH,`";+ML%wK6-UtIoL TwƝ;MH>93Ϗ9Ώ_^0/}$ΚqvLS7J#%_8N;i]0/gpA0Lu`\(МYg~gyF>g1w֌xqu*;RvqDE&|cť /^y-/.L!@83|AqP %wJR&"D5Vђi;[p06EĚ|{8H)[Rv("v;Ua,!kS#@Q)eSnH"Ɣ)eKD@1JR%"r;5"+ QrRʖ폈u`͈R],~;R`DS4bt叔ONp0u)emCS2:B ?P>BԚϦ=kS"$w"ވ L"PJrQPRfuDc18%ʌؓR%l8j;@J)kC18ź؟RDI MoφT!@("^O){PG-ZTђiL mcJEP;jД=18\}F5 MJ4#"vEĚ|HIU,ވ \N릈8R\K L)눈bpcKIxX:aL'l(;@Zq(X@x̓%~ޜYBcb݆Ga~@&ֺ)eKDP]д=az; al!0aZZǖ'U0&VkDM)WC -I)Prsqǖ'EcS@&Όx,loJLqT>%w 74bo N467Ŗb\N 皈8R& ʦPRfuDc182v-muhY|0&Όx6l(*;@J)["&iPN+`D:,y\}t ǦqφLuXR-@Qr0CS'TjJLƴ@LkW^;y:U˜87^QT%w R$lD@M=_zS'Όx,#l8*;@H)[{cpUʫ<7&sSDJ)[. PRfuD2@Mŝw}$7db̈=)e)%?JEt叔ONpű'LuXS], PGI?P>BQLu?e<H&G_@tN8'G8}7zzOƯ~\|.qL=t|o@ߌx6鈸7>%P&DL?ݿމN[H7 yD3Nz'nXIL[=us{t#bIJٚ|{8;@H)$@%ٶ__ճ+*wWr(Me6S'NkDM){0"0R.G3(WPWB8}ݸ<͙%8 ?ώO~8OXJXw Pr")em+ *?rE灃x]#8='Ą?NWH.O\n/y9P_wJј.T wSDO)k`)L%"VKN/dth?瑫?]xɚ>&x`ۿ|%/9AꚈ8R֖wSr`)e3cܾZTb}?uXl%0AR4̝-vg+ 3oάWqts[ѿ)q &Ꚉ8R֖w&`(18&iPG@.^ ru@ˢK&1rb͟_?.w}N9!S'̌ؓRP>8Ɨ;8J)[q4f n1婧Dmkoks|԰dP+̲%@1}BmL)[m|)q%wqR&"Z}1Sر' nSpm2u3ah; lt8X>[=.o][=#sMDJ)k`(lf WKZЕ?Zp D-.חy|-8Rޕ?‧"4&߷PZZǖ'ox'|Aq;-]* 0bޜYq>>+@>=w}W\yU)e#->%F'lMD wjL J2S|>;`jbu_DġY;@Rf튈1 Ԕ0@PH灃ML\۰>Q d̈S@J04maoDXF!.q1vJ)) -0UDQ_7-tϿЕ?a'kqpN0wqLoi[ӟ d|%)ek %wsH){0"6JWy?p:Ɵ<1O/?p:"߯v75D>M_oϊ<ϛ3lY_!*X/jZtNuZ{M@nFDuXlҺ8n->|8[5+ඩ}J@Sr^JٚS_+nM5MDZgIE3F2ͽ':]IL>\;Ή.m/X`릍>\PX J} T\o35q(ly>߽_@5jR+"v565Ŗ')PPOD}[o+t_zy_;^_AU n"W>x`սŦZMԚњ:oi7GcS0nFD>4 j)U)lfJX-[Ծ9#iw *z}.ϿxNoN**K/o(vP;bmq*C;PuRʖDġhruGnzN 5͙UϻĘkye_t|wwPtpF[/7ʦVbZ̤eQ>̓ b,w}Wlz8XR?l(jTe^eŗʫj;lSznLE{u1'\/}f'eX1]8iϣ0s{ˢKSuqx~5Z#PJrQDCحgcSh?_TW_댟9.ƛWH|q/D_7x?t_+V(7=?@]݌ؓRv(jT)e#b4Ʀa~ClzۅTZ  q/DWH<rǭ0?j/\Pp[WF 7oƦ&ac)eRftdCut_6t28bEEWV}[Ee6Ggwu灃[`|J~>y[M/c ?y3^zy_XtJ*VIҎ񐫯0NbS7ج%)em|!qJX)ek"b$Ʀ>[=nMTƴ zz -eQs4 nGt?-i,j>}iј.E0wv|sOe/~ws[W7 `k)3 F*W?MpPfrsqwEKF^qHH)ebp c~o}46[sO +?ympuKokol7Q^qLxqoNJeKa?rS ʫKW-ћ{R~7"(%lfDŝ_#rfuWzk;`yVK.wWH<}Kus/}}ݴc]Q2v?7}]vi>{3ϏMx&v26-׈$J@H)[\.mXW^}0(Iif/^&3BK/_AIK?p:/챰bҸc-eOa,'} Mcob?Ty@eűiWO zgS*DT5z(IcSSlݾMyୂ&YM88@{|ݓZ2>th鷟6lw쎞Udk>\A9Q uqx~5FqhPR+"vJbln-l K9VKvʮ|VGG {^w^i9\3ǎ,],40鹸bׇ̈D7 0J\۰v̔ԱeԲz uŊiAY=׮;K.DN=W_[㊏8[Ƈoz2z;SʖkD+4LPpƦغ};X) ܝVӥG n׍Ǻxz}q?S K߼9?B[<&@hln-O>W|ϿhuJޡce$w -%cn-ےP+4[y$z|ʾ7gV\hYtI4}ѕ?]#ѕ?U;Ͻ=';WU|<r@M=D) IDATo<}}Bk"bJY[>߽_@9QrJJكQWź Mo)Е/VP@SԂ^7DY.Z5oey`Zgtx+N~zRH ̊{uRhX4V,[S(8=싖EgKE Ε? FnJ-cۣO(qgݧLJ)e#b(Z}.}D {.mАbӹM\O}cD-WOJZ5c_Ys'ן]l>UJ^9_pu _ʵ+7GcS0FouD*L%w`ʤ=1[o27SkK/}37/aimmŵWh*3Kugc[csSlj+V^'k)eKDL%w`J튈nn-۷E.]ݺGOv_\*V},eK-w쎾o$|(*h>6/7=6{6@FgFD>4 `)*lfJ\QK>w}0`ek;UpT1eK*˖gnZY6u(@uvphljL)"`)fh9q4F)nW^}0tVΚ{}qѢ)ǂ>sʾxΊxMAcsSlj+V^'[R֑R6SdQr&EJY[ [1:7[of,'C灃5 +&/;l ga/x[Q )eQsM~(=)`ǧb݆qφ1z7EޡfNp)eFij1C ŝw% L灷 nk;kb^?+$/\tX{[[EwM+xcO/Y4ИFD8ߠv]h irQ<)lWD465ź[M ͝Uu.Tp|\}&7̝U:KW[)݌ؓR|{8L7gV.¿0 sf_> &O7ׅ?pD.ƴ .h7gWE;"s'hY<+3` <鹸|#)e5&;0RʖDĮPp{6׮^P%yBp'x8vd;>x・bJ)wxkKg2pSG.)v^4>7.^ tOOJJ)[1L%j?1Dn|ݲI{])P_l2smx sgk{Ί=~KȤ9thIrb3Oοk؛R֖w0^>$`=>*W| 0pٸ"7=' BWe6 ¹6"MjSouciU7*խw}$s~f7 3"hcIJ̔X-rG;nT n35v_\*͙Uq5({a|~w.:}Ų (#-cmdQڙR:Oh]1%jlj@4̟/ rȓkŲbтޓƛ+u=vko)GEoƛ 37V~rSo={^Wv77FfXǖbB 8{SFC%7D+V^6jLFcpT8y୳R◿<>Ӧ}$N~wR^ۧ^j8#ie|w{1q.V~?;^(:"~[a}.Ol>fuD,I)[;P5%KVŝw׮^0E;%߽_@)=%Q qCI0>ZpLNc-šܹ*r{8oypĥ>歑>TrM'bX ("]>*-/-O>eNjkWE}ݴ /]#Yz`0=?@gQghpQrR63lDFV}}sU@PV,[}e}\vi=׮˖ kHW(;nM>9?CR$"FD4JSŗ| nva@ 8thm-a߿;vƯ3knZ PZZۢ*Σ:#l(bG)nW^}0X4/^_7->sG" ǖbQ"b;Py"%lMDDUnMD!@֕?\V,[+-ox.8oQ!Sn݆Һ8 4?-/7)RvoD<&ҭ]q-mRiAsnPUVF0w`s LkW^Mqߋ>E18ѽ-+>$Rv{s# PV}:V,[Z nRbjScsSxhY|0J3#" 4p;)e3SFji)n-UX{ޜY"7=7 75 ;Sʶ8C#boD\#ҬXy]lj *@O S+D@Y E}.'ҬZy@j]Jْ(/6t8dmB@8]/Yhvph ҬN)۟R6SP۔\.6=Hxeskln-O>-/FiZ#bЊ@RrR&" 465ۢu0jPu (Ynz.6on6@Dher)@ J);%Q+M훣a|aPs{;΅Pv]#,j`Vm=',L Pig}Q cfDwW@ RrR+"I4>Xa}G'jSb/&qI1)zzK?j\x}s4o͈gV*j;Ԉ)e#b4F>/=@zƤ)w?%w(s)e3#bK(XcSSlj9azБ{81` ap K7s[OɢEta}GSD,w%sbx}E ?},۷ETy; VrG;?v<=2)eOP}oDJcdV.mX/`o:_? ~ "~TcOžz3.T x8t%= _n7gVٗ]P]y}457O}dv-׈ʗ;)ҭ]q-mIylCjOzw/~w19=@kY\p۱'TንG ^\uyݰv>֚>Q<ָ~MuxDO*FP -Hëb݆qW &;5=w7ފt;q;{OlRbsL|/ƃ93wTƴ ~z9ݷeQssn)+-/O]tL\ۺGݿъȀBF c 2:w0~lj[skSef7"fHcx\<ܾ9ݟB5bҾ-=~<3j>ķ0F͛3`A*5\ɽVsy.^ vSEb_⥗E_@t8xߘDDĩ﷧Dh;;XKUM.vlz v<=C û)"-WteD4MM}sP&] a~؈cG/~8/~3ϟ7z 5aQOB\{phYwQ#iB"3'T"*< K,,\moZS ƷqFInýIƂ׉ 4 1R23DBþH93g漞u~̙Ϝsy?_}_v]Nj*윪|gb߹f3\+~J[^k/˷ԯom) /ɽ\$Ik ۪߻ﮂ{3=y{^9T6cxdTmş>^% R@Up;寯۟R bm/ !wll>m}ϭv%"s|0t!-{^?Ӂ{/׷^;NV|4HUj5O®w|Si?[?=[Kt{ OltfpkKeVt%;>0Ì Ws{= >:t gI!ȣ1NɮҒy^Q\r>z5E{=ٕbg՛]*KӸ:ԧS#tS®nW6~FZ?~jCj@"7N\_׳{OtOBBaxIL%sgbm<5pw6­V]Yym/wË_Ws,<>}Sg5UIuM&3n1v࿖t[?=oknd7!Q~{F>g]tjr>qyq g /dʽ^}v}q bm&'` ?'ܓWVO)_bXhptYUTWfr1D޺?΢yse˝:7N{?4 щIJK(oxd4l6z ?v_f<v@U`* 6|T_\ez[Tϸ>v%LOUVS._}KZAw;y@=y>ynML5> -¡jn8Er0 ^M+L.4>n܉:[T0ߐj6g?PWns^t%@՟%3vͺӟr>un;_On%E\ '!TJ:)iSJ IDAT%HGHR]I3i.o]\e~G#^(ЇߧN{rU;y?~WYeX;Yㅧq MrU )N|Ӂ3 _-w__?E=5 !wrl>m}"ԈT0f<J孫qŴ37W/_sDl{D]쯕}kCxS n&׵~;}-qͧ~jUپY ^@ȊKކ4`wz}۹[oPk #!w0<$\nخk)@bDc*Nϟ 큐*"Y;2VG+ј~"n\~sUGI4j ^2f & L:P z}|80<'`xr=ȢII|×s{S l?d+:1I"[>K{?]u xAWIg}].ќ<˗T[^ǞZ7Ol"axR&UNnW| τkU>(ϸE  rylovaN|{&3@{[xbX[)$Aw;Y@=y+n޽;bd,B0o Wi E,1 g3X߱;9ة$馛nTmun9^u(C ]%䎌K4J<>LiiSz=)E\ E0<,pOڶc;ܗ `"dŽ;?޲Iek;4~uONf 5{ ? w\Nsveu` __ϵk  N9Bdt HH!@ޝDR40f e޺ șE7gtW1 ̓Saw.3 /XζEujonO(a 7|~=۾G_Awk+%~r{bG@-wR P_tY!vd>xMuuJeotbR~\t&&)v%g&/L%[?}ooZ0>㏷l?g,&N@nY 1S@.p=;NAUh;Aw2;@=9.[_VbP #'%Wݰ4щI}SaIRhpXO>V ʹ@,4}-Ŀo:)4=NW5zSVJ'z@Q3 ޴"}|?}hk6E4mIjdB=}mU?~ <.pkێDAw2;i2 .I;5ۭWhtdNL9?{'8}5.Ia~K޳αMu%!wO(+~grs`8WSua4t>l۱]+VަoD9H pO׳{H IRD ׏wߘɽ'No5» ɿcݼ?˜?fQ_멿|w@Xzmh wdֿջ@ީvS saJ@jɹu^xo^xd LȽb bv\gd,PJ>e]ݽ ҩ{]^^_' EnWE,\.EH!w所{rh]m;Sr [2O18=}2LUW;7|C@yoC'w.mߣ4S k)RII+'vz'%R^NVlb2uOwhCKr_$?~/'q-F~n$)61yuK>p+7G@6%̽w??߮;NA4 ϭ`x 1A qz}|LE@ zjmщIG'㧺ղ). ϟ8]t!pܿJxeev*-ujXj~_Hy @ttEbێ]XS s;S rpdO] 8՝|g{kd4yZ RV_HʵMj@*x>6Q ?):+E/}QYo ?Irx׼eݶLxu5q<򦺺{Yi|lU;cM)XKrϷ+z ; @ {r|~mC .{`AtI]G#:qz^F u/K;UHpٿpuwmsB6=rf GpOklw948<'<Ou+j}8s;QOܟE s9izkߣŵAwLrܓsGz= }lbR'N)﷫ײ: S46QT*"g(.fK̿=74Hz^!wg ߧm;S*L5H]١#G3b`v::t/S]Uph|bozajq%6+>^O z}Awk!wt5~RR0Ď>e H&k#y~K#cyn =[13Za/V]xO+$.uq/p녗Fw6 8!wpO;jiBqț}n Ot)48;hu.v2ɲs.Օ;J;^NJI'  H NF=1ۭ~F+VF1pHAF޺ ѸnW?48hlBIgut޲X%G'&VlbR/~;zM(:N ~8k(ж嫯ׁ}b7t_ ({b.[ϵO1pKM-ylw޺Z575(61e>u5{_4 W5u(|MgҒ*Og{~w?}ܯ -qsæFF#Wt ȭE7S>;(F|GH# F[6mc2sm?By2ҹМ lⷾ#o]<.- @;(\E;hpF`J4f"PyHz};F[6ޝt{iUC^w-k#ojƻ9ـyzDN8sB1<')FpBw×Fz,ivqj/Ni[_} ν`)~X)/l"(:E5 ]¦U'$LUWS `U zxr{rWO>I{_ vu[Wn2s%:1/w*lq@!Ր~Z~? 깮)mNڏ,C+V #-w^?߮+d6BP[]\w$w5F#o&`޺oFޜRQw(|tWik#0֪yEcr=A1:71(5 [FF3.۹,ERsy`+˯>WYuW]ȯHM~|2whƻ=o;⟇潌N !w@A n;ȦKM}xUP0.ʹ~Efu?{d&ϲyjZ[Wr}!.]ϙK[^ XHU|H"(0GwlYPoDdݼXĬ+TNw.p@t([#Lв"d,v Y br GwLнR쌐;[{bG;<,_WWSy6zzjƻxQ2hd4bYBV]UnA=<8/wZ YR"0操WPўRSy l; szbG@-wRy Zuv壞kV5}}IjǸ~m㧺S~=:q| zYiC`W7RLOE~-o]⽊NL*tqHaYvSA~W=BkuT3<&&I}[ZMzOu󍓖lXE |l)nle:~RSSc:)dO(*-r7fILU媮,IPSW,/rlxܙpʹ2Gk>٨U K2X~m?՝\,ךF^Aw-rwkܹ645jCuWఢqu5Zհ(Cu5zMIg^|El7N*<8UUq>4(IrY|6hD#c^Lhax~ wQ @r ">wu5ˢI TDUhpXOH]ݽ)﫹AoYr [`UUhK!ACy1=f*1wdś`+Pu5ڲn=xgձ恵њFvRߓF'& y#c4BC)5-NLf|G@s#P$ |tF575H{b}/ΔxÒE"_|Y=)=v0ŋ9I!t !w@Np;`t<߹kNuyQڵ{ϻRzHz{{M(ґ#9᲏; r{|vq Q =tBwuJ;޲I޳nBrb ȩ(  óK !48llQUE!(hK^G>xϜJ{9?6b ó2r; 󰤝T7@P8U*`յi||rGy4n텂{\Nt!w@VMRB5]62Fadfbd… sGcǎZs-:t; '{|xE31D%\cˋkVDt; {|.1m\GUsstL'LVJB; M4fq D.KKP;;zM;vrڵu"W SI)FQod0;[Wc,QPjDyX$"뵷X"nb:td!w@p;/c)/@-ik іuI{yO=.#pcTWwQ hd,Ls*?zM;vrl[Dl/*lDQi~BF/S 8FuU9EPz_FcBh D%\}/ Wi|lAVJz22; ->J5y3K@9|e! g@[.mmtOUWWWH7N=͆9D"H5T76u:v: jk 8]]] ڴiF8_:ܻJK2st; 'E}W˻"\':1i|QUsa G&GCCCV-)hK^{zta9sFwRssI$#B=͆y2REܯ}Jref^2'=V_X\I |^>c -48>˳b ЦqujllL1{9?;3\?g;3AJ>76_\jXU K9!=7&&*E{OwБ~vWmݪT)K;}8@Q,͙mi||rS~G+\VU:t g) 7P@2G%>@8U7QW]i>cF_re>qscƫ;篟8]}-.c63ۣ]8_gΜ\Amm#(hKΝ3=d,Zge|V6BIdr$4p?H%>@8 rklnMg{STdM8RGG: .T{{z=n}$aGy4ӕF A4BKo,_;\V/LC}G=x,gZpa% ؘcב-xlJ{ tBkᩤ+'@DS+ʬ:{ReaE~mkdMScA!jҙZՕ:7ĪY_- _ W֣nM1}Su$\c57 (QMut'0E5 1;plOيZ.{jMŒBD_|}G'&uQ|Ҿ!w6DHMpJ~'`wpH,\PR~m kk 9̙;[5sAwB9@&%`)Zaf2tǻ#o{[Z.l(X@]7G"mhhhhP[[ iêGtcC!w, "0c:tqK󲭝jXjld,ݛ[810sܜFw̙3^Z>5G"mڴQ.X?ׅ jYsooO 0<(zW]p_I5>p]UgHֶ-Tk>٘P-k%|X=Vm >(+})׮M)>P(Օ| GpD}'vbm@,+PTBi֯mJy{O]6o.굘!Hfu^Х >tܹK ,Qdxu >fVnW֣nMi7n| HFWWWFcf{_s) ã`0|RdD}si2E(`V]ٶqחOe%zMi;Ӣ)f\NLj˝ '1lpϵuߟ\]zx]Z{hP?yܬH_p::}: 744h׮Y}~p {\ԨhlRoVP0~RsrW;@*@oxg/l>;7( %9'?GhӦOj|%) EԌ`&&m6 srxAܯ"Ϯ^EU5/?BV|wIƾ5ݖ3UVj̎ȅL|>~pviNm^o[6-Iݧl6 `0|R@#`C6S)+nw_ۤSާ㞷~mSetνD!L+U]U_cιpʯ{Nجf?kT zKF/1m:rpR.\PGؘ=sLgK@}Q (ng_ _BV?խҒ抌?Flb2#S^/Thp(ܝ,52Xrȯ˭tԷ#NXu߿VYiIp UhuaիsrpH[>Bvdd?* ">A g)/BP $|~m#7ȀlW5,-Lj?Ll%F ݺ<~ a~3- =~&s=WW\ՕCRyj䭫1Mp`Swj׮Ojk]z{A@6taxtEaxI:H%p@>,{Z/QC7E'&8kXdNGk;Ohb_uM7+>/}5m:zQur_RKltF?N@}oFݘp/=ڻ{=N<y7G&GcccVK.$… y$kǒso]mќsgYiC`aFP<@q9G@Ѿ)- [-O>48~z}3DY7ݘGؤBCYotb/3nGsXzE;ޞQVZ̄d&= fv,l`0'ܑ8r"aC"~wHOS_]Y/}13ofd,__pTg'W|(ɼOyMV-Ν[m[Ltr_wmGwf`w%(|L7S)OpMmd4K. 4^`d4bٝnA H2}mZzΜ93gYCC:>uE{yjtG׸3@a#0<UON uM6 ohiNj?¯操rPldY;_Ѯ];uaISd32A2 Ϻ`0|.BP sTb wcޢz 8VrutSGǾmWWWFc2[W-ҋ/ I' ó* ;(&tJLp}yN{2L=u5תzx]8SA SI)0rd[%h]Br.S])f/yU5MݧTP@aK o۱B"tq(}444P8.\~jQ>HZiC !w(<'55n_LW#cA2]uMjnb͆y2@a!dzd)wI>; FF744R82r,Wuslx7A) 0eA axvIL%϶{bQQQA!8zʹq| _u0<(BPGRZL'wxYRLIYyj(axVQ?B`sXӻwpF&Btrޙ3]r!wIr6t*4t{#66p?I%ϵO112~ЦMkNPTIG>rL̜0V,69lJd^KKV+` 4M"9u( 8^7IIR5)J>O?5鯫/<Ky鯦+Ylae%'BT׿1rjZ"I:?1eX֖f+`h  4M[^̿:>E@/Z}޾SZ2[}O|<&VS/ҮmǏHFaజaZ]lݾ[)bjR,_rM4JtW}0tP&"bC0c_uk,ap{w_ln**>xjEŻG 9g7NM6L&?aؘ8~mBTv.ߛIv{ _ G}N(++\<\GdLk!|0qzg_l޲=%4zԊz, ׮ȱo32Ts2jNc-:&_5ۢ3˻F0O<( 4ijiimG`4y,"f߸ Ȭނ ="b=qSɴ7oly#?O&1aؘ8LIN]}AwKKĜ%ƃ?8,|3qZܴ`^\Z/'Nwc%ZydL̬O--V  B&#buuwŌY3-JOĎ߿:|8>__SwD{v̄1aߟjRv'm?}mCwq_YɘXla<Ƣ焊qӂiqW+ؼe{_~0}"X&[[ZZZ#0@i4DYU?kAЫނu[o;;:c= ǺuرOu _UetPq<P|-]]5)nܼx׊-D Ɗ%M &vKkjEX &^ŸؔICKKQ+ Mx-uU[xG/"zg8٩@Q: 뾾yTM:ccqu _P[ ?>rlH7q9,{cغ}w1^V2&Gôz UWMK^j .M1j?!wy-N}2jjk֕wX C\:qAE]ENGoL3;WWMҮ0|YiN%0 `{~Kj Ԛ$Ѣʀ9c_lj iҺj!w~JӤ)"fe5G\эg[wΎػg<ǺA׮:WUFY0|iɘna3C@; %U}YɘXla<ƢcixȎ믚sl޲=%%MZZZr4M"b}kP׌HxG/"xg @83 `|R5)NwUu _Pyz?Ȳsyuդs⹗^+:Xr=dЊ%ƾCݟ-Oiu7BX oΎZY0>yLo᫫&E|I U'Ғ10]}EcػO竫4h<\irqKKQ܄(M17uu{߭3|Ue |rȱ8q!9לd|ɵ6F O&M YLVV2&V,6y!T`ũdLZ0||`jM.Nܥ]fkoqTpErwB@iR"g٭&7LJѫ#O>PelVƏ9&ōϽڈ+\}ӂyݞJUWMK^j nIdkKKcV@τ܁Jh[T N|ȮwyHs՜!9W4ƎI̙IwK~kuդ^>{*%ĥibsVK+pvB@&i("#bjmB! {/:LO8P166~lxc[u퓪I1qza_5;=ؼe{VK)M?X %dN&#ibлCzMe%cbm7?n!jENoߞs9cNt [vh>ũ֣V@wS K4@?TWM%caZ_AK5YiVOtFn c:YUQ:IED4 cB8|؀8=J Q=N(+۽3䭲1jxX[4*p!w KGE@>~;iۿ[L8"Jƌ#n?()c)>C/>dL\Kk} 3&ŪGz>%tj8EȒ;4a|TN<*'ǟu[4j {0ޭ '>s*+s:YCQ]5$3jnxq"NdkKKV*!ws~$^9[0THDm:|DO|غ 8p nߘ--G K{F^98re}ꎾxŚ!>wө|gwN}#:a; PdƞWjR,_rM4J?."6E<+"!wȰҒBx{Vd(np]1:lra3C{[ @ ?i9xcK?7MZZZ.= Tƕ7tYMza/w^ ᡾ODa?޶<~~Qd2?8ilmiim,r\R_畗u[ՔQ5eYW^S/9{A]ו7͋1AEr>tysst }(2dXiɘ~P\Z[xKG|.ZequݷZ @VP4>wg<뿚1هÑ9f\Vo\Yi̸}* 2" Aá'N*4I>RV2&Vt3>EDs&ZZZZ @0 /9HW^]xm?6 m+]=_?pp稜8`j oSa#~myC(2âjRZx8Y =+'c(:WVۙJz6zۆ<ϷQ'>sysst ?V%D dq 41+(vBCxiԤx{[wbۻ~mw u|++՝qӷa'#??~BdМ}y,C&[[ZZ_b&0@/o*v|? -* $={kߛOAo~?03f*{A g60|8tB@JK}̾ G^[v(Zeq4+]9s$Ȫʉw pՊʐo[L1GPܗ9՛-cxO{ko18|Xֆ>."^(VS #ʕѶs:wn k(F4Qe%cbղQZ2&ßcVP܁IE&(n\_c{GǠϑ++5!yj0|&Ŋ%du4YnH(Zi[TM.q=>GMz2jdEa@kV_5;,M(6B@ZDlq*:P>Ȳ (۱k1:co;E?-[ W.l]U)gk#Z/"1+(&B@Hd^DStq Y>X{QV2&n~?Hܒr(B@Q;yꝶ>p#},ej:rTO(x]7fmArx8Kk7iRaN(h]7dBw!eA&@!@>rL(XW_eqED:!w5wݘq幼^^h(8REfV>My+P(4i *AwtijϿ[nWΉoX0dƄٶ)M[ZZ*P܁IEDlR #V^;w9-[O_~53 N+$qq*5O)B1% DsD\ ׳Ͽ-ijϿX0I/4(!w(:s4iRy/M;#bJ0[nq/_cDa(A0֧i2O|'4M"bJ0l:Bw+$'S(N4P yFjJ0~C,88sTN<_! OT_PcT8(NB. sB@>k놙nB<+?O>1xx鍞 1in&M䫏+43"Ԝ^畗+@zI]юmǮݱk뢣Ϟ}Ÿ缟.>Ǥ -\o4y5N@IӤ!"6Q5er>}^}g?W@FE{GGCuܵg稜x )M e;Wn6uAՔͽqG-[)0ƅ܁|)Ciuw^?‹0L:P^S& IDATQw>GMz<3& COӤA|!䅮 *p {ݾe붢 0gرkwlxKrFʦ4M*B1jV SՔ+g~XVk뢣.V,S0`$]r\@rc1Kn_ n`< h舕p/o5굶?0sԤt(< 4S&4MG-*Hhl 3{ɧ7F{Gb0ܵ>2yTw(BRiC& &!w`Ԥirq#zܿ83F)dSs&!w`4mqHjl7Oj^]m =/sk?7߰hƝ++1g*}̾w*dӬEBH䱮!qX\lxc`9׀%q=kwpMzyt"qK& BY)zݧ3xhP0_'p^]GgI""4X&4M*"Y%m7߰8.u=XK{GG\O\.VSW^p@>iBHu{Fy.>z};}~}=ܷ<'~pTM\tu(+-xJӤI$*AZ_Xv^z/*ڱkw,~ܧ89j -(.4 HrFD& ^%.q7߰8>}s?0~W߈_[<p;JK}mxߦ4M* B뺱٤ qgm\R_{ΣWMlؓOoy}=I>x߸hV`$#᱈HW畗}\ぇS{GGFSwedínڬ {C& fNBI8 WӾ[n_^;vk;t O>1}eU?pO_R_}qX}QևƊE9M  !w`8mq@!Yp_ӧ}8˾*|zd]cWVSO_9;q^y@<9V[aϊ& !w`Xiu#?A_Y%@{{]{|MKjp ŋ6i,2pr\&"bJP\7?QGIܵ'}eU<#ѡEbm^?wdnϷx M?ǼgAݺڰ40PrT KJP ~jN<txǢ?٫~0SA HCս}xǂKӄcٽeȚqCMjq2P,Ŧ9.l;:;<Cz-{[hBY{GGy~ɋjp!MZZZZPrD&Gc*@TN< {+=ҧӖL.@L="afwڨ2yȮ?{5Σ~?~s~>=ݶػgOݜɼ֣V0XS`lq@J="bĦ9>}s{I}SmēOoE7~)j~f`Ҁ]?p=R0͕Xdd޽e\<+"<0܁AKӤ2x[Mo)+{%O}I}䁶⁇E7 ,+g3D|!vʯq{Ggg<-&b *'Odmث4gr%MXF5~jNu{Ӓű?|}L4 wt_[/?erey~ {S&f+0P]7"T|0!S]o[,n[,vQ5e򐇞~`+m+ u5^EcL ʄcc} UǛ{ʐEDsD,2@ cq2)S뢱a;@o[/MWcWV׿zIuEY.!/LN3 ;0 i,[TrEe0llpp˵wtĺo4Ńy׳& Tɱzݚ )M>0B@iR'K}QHA8WH<,M?_X7i]ٸS W̎/ҐE&3 ǕM]7 :`flϻ|Xp-[œOo-[B GDԤZlЃ/~iimwϞ yV&M--Mf!w_43"CrxE(b}=kcu7]DDL39p{``s5qxggV>MM--[܁>KӤ!"TV9|E(bٻaf46ٲu[c>v: 𫩫[W?x{Y4MZZZZ@_|L ~hq@>zm^_P' P v+WP~ͨl1o٧p0Į4BU܁>IӤ)"fj Bs P }~sI}ml?Ƃ+ 0lJ([W+4i,2@_甦ɼX}Ӷ@ix:ȕ3jNӤ"놢Y%(TeqkbǮݣr-幜 56̌?Ǹwy&26, y\ȣ} KSD\ -[`ں~w S/|W΃sמ޹Wuɕo/5,翰(f, ya&<!wGi,*Hz0|֟wtvOjAG,qӒyc7ǿ<1~jNQ=WVj@?{(44=gIEx, #h(0q^yw[nSt]_#x߈)c%uQ5er^_s{{Q+7/ʐũ|<N@On$`̫ܵ+/ϙ$29naqԜGDصۤ(1kf\xQ<7M;!w ""48"TB.o%myDiu׭ɕYrs&frθAq@Vlٺ \^&KC]܁HӤ)"ŦafP$ѡ@̘53n^Y4My@2.MX\Y鐟j^ع{Dxw;wQ0zE!/-, 9M 3&4+&ppg on1E}o-,p/&&ISDR ŇC 3{8i}mFYq۳4i3]BQi4Dzt߹kGP&cxO \5qYrs&fIY ȂsusoG{yv[nMTNp/&$ISDҘL|I/9;:>򳹟1Ͼ∎s%u>wddP<׭ҐWi2CCƤi4ɕM~߀;wϦ=}=Ѷ@AG,̸N ]܌Y3ŋ4MiTy!wȐ_YukȰsus鍊ѩPn]u{fe"7:!wȖ_xQ̘5g7,uK/<;: 淿S.^e\V0MEfC2"My:Kc[Wn  g OK{O?3"cD0h5u/-Ґ40 B]؛4\.V߽\Yϱsמ%ws /F>7b >E1c_fe"c982!wȆ(K◖FM]͏s<{?P{_e\V0MEf;4ME,y̿} u ws㗿~C(j*k}m X<׭Ґ40P܄ܡu"oҘr&@͸nxmnaqL\/^:|O 1c̸~qf&IP&MqQƼzݚȕL~{_{N[/=~~Ѽ ܺpWi2ϬCr"ICDҘ_(f̚iV,ƆsAw diiTu(.BP4ؚ◖uZs?<O>Qs^#6n^YEd֡CIӤ)"fei̫^/3.9l}+/'~p}Xh[@FJ}w+$@}KKc̿pWi2ϬCr"ICDҘo^QSWku߷3ͱ+cǮ݃z=f^e4elNӤ¬Cqr"Ԭ3$\7AƲUm_ۡ/6#aS9yrrVEDYq%—ISDxrL|~i]AcǮwaԜ8|k G[ފ7~V>=_lK9 v{QV2F!} NdSKKkf NP48"gi_Ҩ<ӣןsמyI E 3|/V<ƸNum?z/;#~ GY.>fơ Ck`gu͂w>ʳsS0bj Ɩ#_x%Z[a+uk2Yi4u(lBP43"fee\{/r3.9~ OḤεe6E lݾ+~Xlߺ}wϱMw\'ϙOӤC@aJhҘo]u{TNlS?a?/ `?mLߛص;:::`k;oغ}W>zl0~0V[.%wvfa!J  95댨{Ƃk~#v:u%c((XwoStMKk2s>bg+goB46̴h#! j`szݚx, wV&M--Mf ;4MGܬ,wƊlqY}_^9l60S8`J}ܵ'ǧݳ;ص;tp~%㮯1W9qGo7m5f7N9+fsfcs{g&--0PXܡiRei̫׭\y@I/75~Xz]<'5vQ^u#Zvʯ1a?~Y;bX9|g~{̙AҪ,`I\B:p sr݋\6LL&'$mܛε{̉M?O8=Ȭ # ߾^OpŮVG}{73cׯtL{s=18C#bCqr$X2n[?ꕒLEٸ'~ JkG{㋏~eD '~F=/r|oM}et|hˤ[g˾UVmv/P*^^6#-nUozTfOe9W{(lK~%7|=|!]{2~b̯uc# O[ 5*lqS,[0V-PZO¸=I۟y(BP$$7;"Jd]{D2cދ//r,_o??~!uskG{㋏~%]7߸a;n_˗FPx[֏=& WϞ~X(hLt?R$ɵO<>!w(I[]2oEf+;qޱ;""/k5Ɇ0ySSxO_{_핯g>~瞏;n_q}jql=+//[0V-Q_W(*-K[cxV*< IDAT~O܂|Car"yb-aLe֙;߈?W|O @ '㡇?5%}O\is#^wH_;WC2/0N^=?{fIJM cֱ}[p`c P=mP؄ܡ%I'"ʼ+VVrsSr؄~WBD˗Z @{DkG^{&_kىpcH|%^zh>{nRKR6ϳTfkx¸]I{2Cr$eR7[{,IZ߱K~%~$ogwGj$d*Jf_z9=6D:?0__#G荟r[) -[/Uoq¢ܨs;]ظ=zRwD,u(\BPҰ]{D2cDvMWb߫`<ϿkKw{ }|;-M~IԐ+y{`oA\{_m?ym4ٯ5xRxգq?.\4y9ؾl¨(a ⅃'>$=I T#bM̻hYjDc }CԈs:w{toO)z x-_e9}\l8~x<`;.S{?V ~2Ir_<!w(@I[=2oE&x??u鬒G>Q>[X5~q8rX??¦X_zP'3"v}'NJ>'NMc ZO¸#bCr´/"fʰ]{D2cB)yG>Xi _|xxA/=ͱC trM=yHopcpҔ<`;⅃bRhM}E L#RwŪqϴxhovw\7?|`<ןt[D$GLE3CG)ylqS47 d*3ѵwOs. /M/[/eFE )ԵwOtn'_$=d0a%InA $X2n[yOZ oLx|Z ^zhĩ)}3cQc.?lO2]{gz)qEZ[%oD*A+2C/tr,pip/T\ XVV Ok$םu>B0$kJe;#SxF&Br(/˗OjV;}q?.\4_^6#sl8^Q6Ruړ$|Y[!$IrcŽ$.m,&@!%ZΎX%{-PN9?{贅#"g7Esc@TfccQgPaz~"LL&cڂK!~-SS]N?[""ǃ 4'1@:}\>7ϞcXP_0fZ M[ㅟC/<ޕ$|l;L$-RcZ<(w)[1wAG׼fw'>7Ө!@8}'NN{=WW ܘeZ LC{kGcp` 6SO$.M[|b cӐ̍WsWYP/<mwijtLmtn͐ ɼx#>viC0]N ýqi9f\ 77kkFm6O\O>c0a%I;"ʼ]tL3?=gn_W,owlG-779"C GD,jEsc},[0j,HEy٨:8dzO㽽iI۟aJ܂)yZ꣺j%hhjw$ߧ}5IkuB0E$6"*ycE@uV,oq@ꬻ+-~qkq/D g7N}I[u|B0Op2ֻ? M6θMD{Eyل7xN[!H Lg*ccf7EMܰIW[";+_vGXx93cjt:(rsS_~aZ^ \ni{T>7--jEsc?Ƣkx}Y6O@z"b~)̚Ʀ-- sKs5͛[!7BwsS<йuM8o"SQwm|m‹kZEyYܼ0~ ?'SQt?*v|sSp]P?7C/^OƑq/N˄в56nnx2v%In>rI$RkTf, by˸B+/>~Z&Q||t97]<xW*rsS|䛿xW7z][/]~<ý}qx8}g&L/"8L.!w|KeumwFVgb,/\}oin*MMuUQ{$??k09a$Inv },IIڻ'2gRX~ݾ,>ݑsӔ47e=>h`BϿ5;*snof!Ѷ@!x)^?GG߉sh=35梾.͍CvBӹ{g^49+8L!w<1mi]^iLu ?sr ookٳ~/vAOY ^?/};㖩(zvMQS]Nkt(FϜ~/N9Ϟ+ȟ5WW <li@Fm63[' Ir"ⓥ0kE&]tDC2/>qٿw]+&mc_c-Mѐsý}wԕ`͸f_Ԑz ֦-OơQE2'U:olm3ySYw[C86s!+_߶~9>{}L[S]Ixu((}'NE߉q̹ogrK{ܡ?iӹ{Wth\$|r ${#bM)[:by˨/?ٿS`xs?[0mZ{%sTճgF-@Iihjw$ߧ}Ԟ$:L!w@I%KTǗ_'_xh0%FIDe@gǨ cu/.\TtaQ_W͍Q_7lM[6dzoLb(7xr3z7GCS{X|I|ߊSv 1z ɼ#{~O=5U[cc(w`LwT\x)3sE5Ǣ\e4X.Le&XGgC&HEDW)̚Fm#rsS"^xP8o^WGC27y0vn5~kDD*/FC2WqV E`Zƺ;gQE2!ULeaV,of(!F g~Ϝ^fD}]@;oWO44Ir|>r ${#bM)̺bhYjPBN9oz7_z̨͍WU3-`e*3ѹ{g|s_L=I۟u!w$͎iqdkKb?}|fO=9su5o7DlT 0ַmg>^yǜCy{mGƯg):oLe틈=m!~jVEfwE}{`0vB0I[]0kKش ^}##"^'Nzo7ϭCv SCScl#7>e6c'"* w6Lgśg~o^j`k0{u̡~Y̦-g7Ny̥I8;Q#bM)̺DCS8ϗ[ׯz)4\]MT͈ 2ڻ'~ci'Ir'c$Q"-llڲ)ze1xo<+[# yq̹Z˭U3cNլXԐ򲨯q8%eikX2^8|ǜ=m0zB061q߮Tflא̋WGG߉SC#BϞsx4^uY\sik%rQJ܂d)̺bʸmJK>s.ku&6Dy AvF$[[۷۴/"8;R";mvWb?= &ɢ\DD47_ WE}]`6mig>{{<$ݛq9!w$ɭ5![[kg ۡQ_kC0:wXIܓ|Yr_ C646Fm @A;+]\e|FTW͌3cNլ(-K[cx'<莈rJ\MuiPru5QQ6(/!@Qؾ-́HL|6MF Irc]ThYj0gϼNܼv{EyY8(R)S;˟bG6MF2+CVd2y.(,[0]n[sf]Cavm٧ġ1J|6NCF=0kX:E&;?uzĵaˏ_>d״׹{Wth lޝ;RuIo`;W/c¥wM}]6*g\/knw0cx'<$ulnLE50k]@QjnPؾ-́H=I۟qxg;K(wJm MTfk9+"zlnLn{$*2ؾͶ(^-K>fW63!wxI[,Y;wLe(])143!w('%mmPP}5Ikm;$ɭJaݻ,if>6wxBPO[H4456%#SQ>|7I2;K}$6\K$X9شeSR788 ޾8/9 n[2ZZ}$Ͷmxۿw0d fݺ}[d*3P$őW+c Hݻ{G<⬈6 r ?QZKX߶ X߉SÁxczۧ| ^Hظ=z4yO/8CDD$InADt¬wY8@:~?.\4qQ]5aԱ}[|1801EZ!w!6nnFfϜqq7VHLe&:w/isM'mR'NKڈ+sVd2ѱ}LHo_գj(56ijOC/gEf;}\գjonŢhnJަ-xookml ŵ IDATR$N)!;oLeƶF XԐe ;?$Inm>ۦSr$6"I iKK78rZQC. {kY+V>1E2ۦSzJa;m`4hnjl`l:w180&I|mSJ))Ik5isŪѲ*Q䛿&P'_j_Xe3:Ʀ-7>c$I|S*)5>`E&AC2o P .\4߯zXԘhnꪙ`lڲ9}@|dZGc۔ !wJFz/)nlmLܘe LLe&n_^yZG"^ۦS*z/]6(0DžnxE hne ݻ{G<=Iiۤ;$ѕ9[ZmWZ8TW͌0KQ_W͍WXvg<͍(j6DK4&Irkmr'/w}l2i! shi]^i0-K[c]۝iqMi@ȝ$X9;wkqAȝ4ؗ׵ M6 㐭w$#NSԆ/~q@ܽ+Nr` _@yumwjq)(w{jhjumwy[ :@aJyO;MȝT -7Gֲekkc4c*!w\8AE& \mQɤuIe ;gM[#Sl(`Llڒ6$Ͷi ;eBٝ+2شee@شesgEs'!w M3:wE"S;<6w ;ZܳX߶olZNr}m E(@m!w B).Eh`Cb}ۆhhlLx)(BԷwhqiא}H7v(/spѹ{gNrgڕJ{Vˆi(wg΍>u5 "ZFK뒴͝!N!gSܙV⾮N-a 3zB;PDړ3ܙ6I[]iq]۝lHlmmk3isg 3z>wHg3ܙ-yƍ۵@J@{-3]ܙ.Ud2Z R.5)'Δ+M[#SlHlmml#iǖBML&6mlP/(T>~q7iȤmL!ww`:e Ħ-iǖjBM -#Gu\]Cx%>ۖJBLRhqܽS;RQ6!hse;S'ekm-@ Jy{6w;SZܷnfPR>+3ܙ*=iN;if:6w;N;P 24g 3eܙ =iN;p aܙTToEC ^phsrgBҺ$n[Җ,;u6w!w&,! R+SQINȝ=|!K%ѲՖ({F}ꪙ` 3)@:̩H;;E;PҴ3ᴸ 'dos׆ BL(-Jq$kL4!w&wͽdžhBL4-@Aιi9cm0rBL weT9`isrjP}f:8 FFȝ 1|aPg Lm02B0w`"} 37-#ޛ;.HA;0RF;AȝqI\{hq1m4 Ƅ КΧҩ!7QLkÌ;ѓᴸC:e*%QߧLߓ$6X 3&Z ^488I6f{<w`*hs 3j{:w`ͽۆ !wƢ'iqRMlf-+mB;c hB6unm;#6|7iqng06mLG)Ο29 M*iqrsӨs88RQݾzL0E2ش=u0!Έ W]%0R>?Ir0#%HG[U{lr/,lor_0#!{xiom m N_Pf6۸F;#fB(x~q,}윛";i-SQ 8F Nvt(ruLsRVP\N׵bQv*ph}8M뤶nK+H !w,‰C9Lqw"٩X !w,KՅ1"P)-)p` Os_Z'NEom@rf#Q@M|" J YlҦ:..G{\ٓ{fq{뤡.ﭧh>pbHffg9Yu=;{O[eߥCݞT]ئx0Cɏ>׈욌؇)Nn 'qL$=&/|QoKr%B6ZEIwݳ&XV&CEuJb>\ɩi۶C^ՖZ׵:l/+(t7(nS%LLM9 ٶc8].IwI c;@^W)/M 2.27/c3Yn:1uvי٨O+VH}Mܳ,WK[7Տz}r]:DdkR&ۉ_찜*wVB""#!a1 ڿeuNC""]Dw[!n/].lmtb§NSR4yfZ5<#- `Ȧ*uGtVP{umlT6 `1HKsI6 Kpp둏OMP1)줻$wx\ՅmݱHӑ/\܏0 EO]u句ܼ295 %:7c)>Hiq!@߻ϣp`A뤶n;;Ֆ% aq)B6Zt6wIH t*O9zYN_)g"_=) .\S8M[T 9:CGDHŅEKffg)`Y"Jt_20p68 ~TbD0%+G%D%|frjZ&L+< ||mݱ]~U[z]n CF]quj׶}= `r#'  [.|/}!ʹ42&6__(]~6_"nd̴< Ba*_9H&?>wNy:U]ض.@ˮX$:s[_TrD&]ONMSLO%oh?w? ~qRS#WKZ{u]{|t4]V J.]Edk['MEHLL )-.G0>yĩ)\4womCեu]1]m].l+S'L*4=JbhK>#Ku Fd.мLc:lah*~8ge=zYFB)'1R~ME,|,#7oRmi]"8V!wEV,"yuKcKM*xPB"H"9)B3'(&`Cm*܋t] j"䮮NUv=;.`8vXMPVdg+y۷ɩi d"L/-)"91eծںurT[Zj"䮮.t@ifg_J8E1e#` 20U%ʯe5|%ύAB˦-m*V?:! ]:DdkkmoW&ۋS,}lpMBŒ.vZJiq!Eɋ?'cT[ZtaJRuan렻P^A=F [@6eb,E. IDATĭ;fS{˺W׵bBumlTYM0!C*SGl̙Gl tARL ^pm;Rqi]tW= kU "26 E` A; pם ؓ%-M*.B.nCŵ֭u4@+U&B~C!ԧ~L!@Q\m>o91.#J(9|٩VAwB]-"۲kJ&|Kqb`cF©s%`y[wlWqYu][CwA] "U\&ȱޣ="'973lKy#<!+NLMTʑ>oPq޾A eb%睎4y󖋈HYIR8 [wl=CՖթ㣣3t+Uqm7E3C{4{)clb?/g{Ky뾔=""}ߨ 'nkGB1!(> =N7d|[pΨyZ?'YU$""[!w5tIwd˙sFFOR8X]vR~/vʕyݪOWO8P?3Wsrڔ:r׎ɶf|mþJr /@@J~?HsZi~Γ9P%-MT[ZrW JNU[N~ڄ3R8X]VçN2| o`dQHȷ:ws|w2Cj&ΚeBq %xG *'.):xk7]#nquj׶uv sfLvkӕik{W> @]F!%&/]a&LKwOrAw>ӆYޗkFs==ZN?9} =[:rh[[.Lzz.;37!!'9AಏIfԴa[D{=yiI!L, 4@{u]+Ft][#"9irS;d]p06G~eϔPظIN7 :kX¢} [Ɩ&q{*.Z!wkRqQNKZ.rWޣ3> \.H[n?AvDѹy%îE ̤\as-} r7&$5RפʯHhH4v_K {I,e%ElB]tڮt6 *I\ř| )UX6lO]v ʁG~lwqٺ)jwq<KsZܪ^,ϡpoyRIugEg -FB`9pn;kmoxDfgUZj]n CuuKuN +VGq?xExW1CXf=cS@1FAM+z .֦e{Б?\695- /sB'-yldb^`Gf29ۣŦu]렻Cz:DHŅm۱lùyg}W\]P`rApP=WL}~))j_mFx;28St`q'B'JT*HH9#S8Pw6|LC}rS;Bdza=}p Jo_w Sަ8ߊ Houm ݵB ""__sf#s/ޔ7eK{a0e2->"gӺHdn^v1<OڱIL.S]o3V WK6oVqitZ|r"@wUC䷞]q_}]`Kp,?,ʯItn>fꎛo- ?\?D\S*ND/ G<a4hr1?Hh:Gv@Mɜߪ> 6&oyHeut:[k"rkz[ @VȲwk[nj`B'ǥR|ʥҒBٽ`̐%Ņ[U.>[q\rV֦+ K$:'y% ea4?bPHYIQN׶B] slFdn^ KpP&eL|8|DJK u[d yi1!z˝=mՖ)"-ut(r:,x918 r^zya>6Ht.6;xyܰ6v;NV؈Ko %%yRФT2!`+QHBcsDc1꺶ft46?B "ZŵmH"@=3YqפaFǝ&)27/Cd$޾!xGJ R_"*N{A̟ lUƖ&yC-SDG:(lhnCw_6猌~,j)I<剧7nMnFaTN+Lc<3-{pwT5i~;@\3<.qa @D{vrGάZܫ6`9r:(DOWG`2 `7&d0Էm=0FZ}^s8(O~o8|$!Ky⹽?8!w`1#uT[j]:r7N5O|niliȸD `jFLc1 e;3w[bҒ䧩^G}SM^^G٧ |N@mڢ@N:k~ ,2.ހ{%=\]P@ȒHt.6<k[61 %>ߐA;Ѕwޚt0C8`Xk{x5Ֆ)"]"nn]*.jSfq.|)+.tçNˮ{Wo[+= <34 G[фV3 JkK4_69:oky}20ػtW31u6tOΣSYB:B&Zt60 wYI9Erߜ+nOG}`pH#ߒ_[^{ruAAJk8>AQ9Ӧe\PF9'pwoA֦yR_S)5""?ro̴9^[ML%`>Ns盧t%--M*p]d-7-7xWzꂂHhI*-N>[rxJ0Ze}={Dpwx{Yno#>oyNj ֺM^Ֆ%"ߥ$wsTqQvlȉʊoXm>oiw$:s& Joߐcp_||3~.y }&b_ltsY{lhnRmYu]Cdt]"_L$h`CM?<wGh VVbbEa@^zf _}o1|Ltn^gdz3_Hɱ$) MJŴΚ!wTqQ[o렳L]v Ezoʓz6ǚ1`V2.[Eʪ{y _T_S)w|cFB7eoZ],d(d[Q]׊鮹r7]ֈF~u(ȯRz}MyVJ:B 8 ~=~ij1|r%hpAHuAFV#%TI Ns/9UT:U\TcK \t@A.Cٵa!2d SӦy/ñdkr\,[6M137(5|d4U5g?S`= [Ž?QmY]"!wsTqQvlܹӽ'3@Yax2&Vײ^t!R4oB|^%}rYΞ]sYIx|Sbԯ3g3@6#7GTZz]֌>@$t]ժ"@l|iw2hC ]861vq hw<tŜ|]Z\(g>f{}`mŹ0H4'cqχL=`~T EẃytuY.F'>*((;a4y-@V_S!GzL L`=:7/yK%SzFB295A`m| xN:[sD׵bU[ ~>j؀Q)ַtR 2(-);/U ;|ɩiȚu"]:lrϝN%ORLqȺӫ43NFo*67[ZZ[_S|.:iln˥ڲ:lrO6: @y(Eu_m8߅_&׾ypw$UƖ&Ֆukt77٧ZWm]7EX__sFFOR8@ k)$,:O&ekz#?Ok*35R_SI! kmo<ڲ:Et7WΆf: r\NE$s0333ecny)%]< IDATJ@ W5P|^77yf"v}=n;=Ҳ:{N9;UA#?"Q$:ܚJbn i.i~lmm憵@D&sj-ikt6gk"Rں6\$dEXBOєQ{]@Սhr(-)-:7ccŅRT):0f!whB9uz"K%N `nG64+t盧G=t]+[U[Wm:q{<4mM|B>u:}8`;M<73 T 6+78H׵:]ܳK|SXn>>9E_Bl(U(|<6.K%s`uG)kli˥ڲg!RmANKZ @EY">o9` fKuf!,umWm]-M4H?m($&M5\jݢeg!RqQvl6tSr9(0 Xu ((n`$$_ ڲ:lrp{YR4 :>4oym{a'Fm,AX1@2jz7꺶f!,uYں2"e$cQ8@Ƥ#&g~Eަ:lvrώNN>`^9{",rnf"1czɩi9WK647.:ܳC6647Eg 818>jl%3|:s|^7&*uf! uSD8S >:+.>HӑGi$NrC;lr<妸;].ili@c* 2 -MS e7Xf! uXDnd"LtPP뎹 4袀^2LrdFrEu"YJ l\u ?; S)]v ZkziqT|I( QD/nq:cnKՖE=gVr'@@: UPqP57Kϓ5.ES-(p %3d&,wVLg3*Jd$h`;ˑsraWes7(%R_S)Nţ:۷K# *&_O-h@z0% u"M%דpqsZinX+8󤴤R s 3^#"}Cm\PTwrS8@Ƹ \I~}DerϠ cT[І&q{u"\I%`{>oHLw5ؽsPT(Ŋ>=.d-ߪZ1 BZ֐?pL~e;Qd@#UHKnu]̔_G_b WZrN:9`tP0))2*wm*t0Nn_םsUk{ߒ)+)m`$y|@Q|Xw@47pf! QΥ>ɝ@mNGJ3 /7( ϰVO(#=}1Pcڵdr .um M?BiZVm]vl@ B`o{7xɟw?h-SP$?'?ɱa ,v}=nՖAg*J-UO4B 61uϊ:ka0?SbNg?p|R>iϔF `4?7'syqO#q{<⯨+*Uh rTZR|Φ!S.I[C|D~ . >k)$Ubn[.fҎD畬Wu3G~!lmm2Z5oKn 3 nY'X3q+`g];=&cDn@@\.]_'""׉amur_Zh!4uCDT[WBׯ>@<:>>\N18RԮkMj ?cHa9v!x@E`!^Ϣ ς":Dw !Rn?#2(ESRއ__E!@qLeVӑsH(cL|dsK8|$;o1̤_dVdvv!+ֽ8_Q߂ESشM~UZRrO+BiZܫںAs,J~r2<#U֖oPBIx RZRhu9r$d8ʯ695m7x]r.y ӅW7 wrjZ&J0<.NGT}yy1?xJ;e.u>` O\mݺ)𮂂K}]j]GGCt7=if: dlX[]A!Rtܼ8 9/Lcf ;o" k-β"eʑ j̮%7<x'ĪQ$:lj@Z~`-FS=qYq*uZ§N/ٻғ~>MUՉ!B@׵bUumjolï~lb;ɩcž}|}Y.(kMyqrbpm ȝo[njښdĐOJT}B*cOZ?I~}؀Dx'ÚT^Z;:\{n9.}<9~I-k*ҲS >^zs=ekkǾӑgpl+{q c@.N?w\,LwgTx UeIEu^#]yt &q-կ=L8|F)=Gc>c ?WK*pɺ /N*8U}C*-CD!J!x^W}_y$f̌1u]t94Ϸ98`c}MeNOF 9#^t)""uUP . {ܬbi@=E[U[Wk{)ݗ /ڽOfff䍃oO~Y=*=973#|%ⰽ,9=Q~} DNB1мK[Zbſɩry[w5yMyKk縄Y{ͦatwlme`Gr1#Wls{xB )X4jkli%8~t] 1=ESn[@f#QYTнGK_M9o|K떜˸<yчe`p(-ur9,Dn*AO;KI'pc-=}D%xK0<>k9Z)Fw`_5.`Mcdȅ j֝)C mrU2"B=ESשڂ647UׯM9#ˆZY23;+_~]ˮ{d{4q-%>{[[]A6RXSSf>9{pc ?ZZ\h8a:NG8,Gsˮ-spDsژk* ?(mǞ818!%?C\l@E`a {G<3:Zruxt4t&{ t][#"U̜lH?g™tD;&P[>fgχcL*p-׭Sa=P$秹#䞚NEs[*RKC]I}U`#~ܿwŰ)Zf2v:/>ӯ1Dc?&SϓU>&?Oǧ' ^ %yO?Ņ1'%.#G~ޒD&R!H1;=\mݺ]_0Tx$?Xِ`I3!Y<$qY氲ǁalNP8pJ`8dye;rl?d)I3w^d޹s|nr/Kf*$ium޷G.Y6N>կTѶW|"jɬÜ.l``\|ᅈXwxW=p8T /L|hϙ\w>f._⩞1B]3k&]; y$^!?OJ;_WUR|A4a<A;?"Τn|E?W x\@a&]#NEk{[DDlsJ}玤fW;Q?!9f7DD{;5e)0mLS1:v(:s\:N=?ۍ^OϦKJ3p9E(AG]{/'դRt:Z'OtOL]]457O'!ts#!pҙP v}i=m O "~m?q|_K/ _xQTX`%O?WQWd~Lߟ~kg2aHS˺—#i܅H}nOڀ:w<TM",[yߐg =/S5UU+͸U++Az>F/\eTt+}Jgt,/N0];#.޾12:<ۣP<98ZkmJ _pgBf+V6nk{.grfUm^ߪRѺe"$WX:]*gsv/&X@MuѺ~9 <6~^~ |fmd7nt$?NEgnuؗ1@}nZtv̓bʬ^EeVHs s|_S1:vae ȟz> WW-w:H?P&ZY6x<=ts]{OyStojnT:mR7߹S!?i;*ꕊ%l})ڡ?ng^KSڶ[*PWԨhP"2W^zo.?'#GO(E{u)أ9&{fm]]rTJ{o6۸YG !mISM*w0P6oPpAb4~;yGSg _z}C}TUWG}CCTUWE}CC4[v>JSљͽ %;к%yG!.@Dęs*US})~.}cd¥c]ὧK1?z_O'9}gRfΝBN=?'m@Y$ze'\P:63 )."bʌ=+./~83#>fu\|&>Rܛ6;vQ1;B6n$&2յ@%L;^ls1xzD ~t1k/'_#/f\?NEgN7J&߁(*A8s"EY22WN~g!#GO(?~Og\s{%r6\άPr_o,MPY r__FဂL?y)'B;~NxpOOx1}\|>1:2ߛ6;vQ03!Yf7DD{TJ@Y6:Ffum}JAfQ/ZIT_ _QGopdWgQ Cx>KB?EZs:Qֈhʮ~oV"캈 Wtwd>n{r6\ά\E0`~k'}߮boG'^M g} J]_nr+#cތ!;wDM*##If~vg6n$)S*׬3yk|o_S]o]Ѻ"Ū;Pj(P2WFf+?0p,",ք IDAT"zNᑸpSsr``Vm߹#Qܳ]}}Ǿv%m@Pl[nxR55}Ny_ڸoםYrJp5Nnc{D'O1?rl gv0E2k .9;[_;Lkʮl!޾Q5jRT3g 7֯Q4`Q\R<\D\ى U~BwT*FGF2]ffBfWDD{ƔDSKs'^S CMuմ! uEnm& Uo<`j(PT'  ?l"qWY}$us_6;4ܧoJtrf` w o/<6&oםZ](klXADDęs̋NC@wD\ۉԙ!bNnzC\Be!i|%ì0/n?~?mXPԐ\xſsHr}DQ5U>w9I63 D;T:5u5T$erB6۸""MҘ2uhji6̛O٬?ljrsa}CD#bxۯhʮ/7ffUm"w4o]EPj($!޾1xzh}ӹ4lٲ߾sG/fw} BSK7$:s9 Pds O$Y:>ߊǾ_+=_#zoY2>1~ =oo2>--7v{~v֬o}mG:Z|}7ӆ׬7x㝯Eopfip=c.}k!&wb'bIҮwfܧvoDSKY˽b뗿>o]q߮bkׯw|`TW-Q(C}#b=ˉ3(3#~ l^3{-!fw%A3$ćEȬvy떖hҢ@:?H> ),Ν GD_ Jp] Uo.tXżosKz"p=yMwɽT*aV"zB|mXߠp>c.Sqz83tNq !RTtlqC_߱#fJBWfwE$I`Zo;@ <$$B:"bG'9+iͪHTǑ'Jb:w&*1ޜiWrVWԙK356MY7vb^onjT4腋qĥs':^|yUMuU4eExCڈhʮTMuj^^@O|YI\.>JtBr֮D= R:P7L.\'C؁a}åzdMY*\gqL2lcGDܜ1 P)O?m&:N=?l%rK^ySdVp0FJ=[Hkx饗%/g^/b EDęsq9EyfU5!D'WΝ G72BW?q\άa.R;Z(";mtrg*Oxj)$_?EKU!QMue!MY.ث=\|&>!uܯ=@J''idt,F.u5tq6zCDLدNaRT457GIҽl㊾cg8!K ў1 P)zN}Jt+sfU5!D'Z9/#'iH"KfvFtrf0xoӺETMdҴ}玤ܻB} J0)q!mf`)"K`--e SWMI.2#"m\%iLJL.@ yߦ,6@yX[icK,Mbi:7_~m]ԯ=񖷽z-ZNn$us_6; 3+>!q|ܹì́.~i.WʬU8EN GDlK#N·GlmoKڐ"B='$.=3Tg6+Z6dct,]4nٴ)"C/wboBQM-͑ iWD;3+>+IT:eVsa}65ct,[<6o7X~d'rAJo7g}}VV|=m˓4]zWE}]v"ۤj OmQ۟mdVך2HR=bC;Y]#"aV [ZEXDs޺EDڰ!R5ՑU-3Wa9zm(;92u<9!튈+}^>|*r8i2(ImKpڳ }}ǎTVt=m숈43eP޷dp`QMue!s5e] Wbgメᑂԙ%)_9N6;wx ~.E'K7w+%a;7DDN uƂG;?<\ҵ?]] ܛ6;vRbClㆈhOҘ:s9PE@y9uf(׬/uW|_Tf겐HTX׭%k5mNP燇ci:tܑ{DDWD|R糒;w%m@oPT]ܙй5~ykoS1*܆wZo'^֬ͻqumm%9ouKQڞgSIҮrH4T*Z=CPQOa{rW޾q H5j ':zo2Wr??P!&ҩ%{W%g%M` `w-Ny=ZKTMu|/7ut(5UWNwה]w)r)( ?,^:F;O|I*#cq艢nkPI.\=Gmmѱ8졂a]9ˎŅ/K/4y.ʛnKSnP$r ~,]7tp޾1:v|ۯ--[bjr??<\6^uceꢩ9zNʐvEă8rOT'Μ;ink4e ]OaпPq޳?>/M?yH1o?Ox`VN~>lr$۳ }}ǎTPV@TSA!ا>H|k_=Jßy(6o,"\GSdܙ~[ sNl㊈hOԃ,LsД]@D,@떍o#`ᑑx{IeZ[d:mܕ9!Kn߹3 @ҩ`~#fUBA>o}{12OId54G.!u%}ΒrOvJ/42:p d/=R8(sgVTH6prpe燇љ%i8:$ 5aJԔ]єm(xI &pof7$yrf;"$iN\' \ 4ꂷq۳w߼࡞ -9DwsOr'$ &SL]g6x9EX }ZJ N*@lXUәKTн+sd=rY؆]ԙ!EX cZ)NJҥiE`%i8]I$o.A< 0U,Lz}g:/f:W g< FF*Rϡ33S~/CVL]]d2IҮUR;w%i09wr!h0zN}l0/Z(Q2s~st?pm2d4Γ{hmoK qhSG1BTr۳Iąܳ ў1mߩ;b‰EX@0.zMۚӻ8OIޕD2 ~NH]'FG2k 3g>Ŧ^Sڶ5ICJ< \γ \f.!-E(϶uNGTM ;J%1䞨ɻ$@٘%V8y2<2e7eי 5YܛƎQB&hyƴ}$d.!w`v^le4Q:'j:sp1EdhS۟T(YޕIZ}$[o߉oӔmP8E1BG<-\w[$'a9{6?I ߖlrXTo@kjEdBٰ`&,D}st*eXTsD'mJxn01%G]&Z=,:Ep|ۻs_|4&S)mR2XdVT:M͉v%i07&h,410΃1<2N:?|bi:@Lk rYںBt4EIήx0)!AYW4 "P2R5Ue燇Oسw_|\ gi+>tܑg+2D/MH{:ޘ~EgGk  yӔ]W6/ʾ?' Ox;5D_vEbѵEM*!u%e 7t*("1 JT+%PE߃tT7 ]IHRBttu&CݮP o S*ZrOLZ'oP:tT+Vvof7$a er47'ȪI6޾ dͪڲ=1<22M,s?p7 &54G.!u%a7Ң;@vd@ɬ^Y6N.>ɾiolb麸GD4[HX$ B݃X`COi&9;={7a`BGȽl߹3QZ2燇cީ;D};kPy;ߌ֡!0e{.ܜ6n(Au=m숈rDe2F@)K%:xhN66+%'NESs]>rޕ)a:H캼o32:pPA e}.\b8`wO L|[/UR*{pP\j'd_NơS.ORqr?r`M="bs vrϬ^ir/1B%d{.T r?.OrgioRr,ND;4lcG9lC <)GRSss)%&USmztJx;ߝv& N,J QtmkU;—ȃ"Y8H캼o32:p@y_vںLGT1prp^]S4 v {Pp'g [ߢPd.hW$JV!!^"fw~mݜ`wϔOɸu9 P&Y8{gֱb3L]]d21xr0f;- =dHSgԙ?_+34?p2tʇ[yܯ(u~x8]`wϼ B8%e8]!>O#\='cxddV}p7"ySISubI`eg  G>Ꮯm GD|̪c|wq/zLENDޖt @u'fݽ=8Ǿx;ߝ}կ3QedsocFW!2uu$ gy6wlo9lYܳ C <|SWpg'~d|Oq_'w`M L-{INWD@ ?p2uպT*Cw<'g\ogJ`aG89ut;?<Xp~1<} M- IEE.'0lcG_߱7f"fHٻowBMjd"\YRQkwNC'. `> +:GD4eE:2k}@ɻou/=Ƕ\7>}}~=wiRHZE`FmKp"KrЀmnjT9p1FF /^n|ET/tMup e^GclbXVS$ҩXʛ L]|8w~dsHT9"~:J!(RG|Mu <%e{>G3[wk<W>TD]尓:CB=kjIDMX_<-Q(G#"hp1N=g SXL66/}wY?Eնسw/MZ~mSZ&ё$ lqC_߱#%rfWDDD`"~evy]Vo[_zI"AxtzQp7T*؃Ŷ@: ~mݔ_XLRsC= ˂O?TR_* kVe)ǰ&C_jŲXURx5QS]( &O|ġ3>&@ *xs9?|΃1prpoT*CsBaɂiMVȽwF\87^w"~0F.N~ sq칈w~r}<1"-S(}w;zzoŶ6HyfƖ_<O8KHHz]U;_nqѱ |{f2, 'q|ĵk ZEJ5 |Dīn7\ ꕑy9$W{GOƧrGs @,McRZ&ё$ =m\wl`oKʁ}u=Ls؞=}xK OZc?~<vy]MJ&)='g\oWr-(@o񂷱icBRqO>tE7JuJ66v%頞ֹZUl@腋q`]x+8?[7U~ՊeD}ՊeBd6A+M4x?eױPp~x8>O e?y(u;[Z@P6 IijiNRȽ#\ԸYSdCێLt0a19{.Μ={Uǻg.jNWM y])OR T|qSxLthidtT,B0w[G2)*坻Q|tr/~M|v\|Cۉx.\ :Œc`ds_|4~;u9H޾oc[GBRZuV;'{L|h;U0lO=g}9f,T̥k;7djPAx* <@ַwϸ; ` m[c%b,lcW_߱X˓r0'sLNǻv83f|cZ2_U,VXkǪe @dc_Qds2(@k{[bB?(+N]I:˹{V. wÍ,p1 GD<{hD5%U+M߫kw_5U )lSJicGs><}eQ$ܽHceR\;&7d~o_t*}XNWLq!$f%I*+Ր{GRf~@kPS׏@(c.FXdGo?z'ʛnL?]yrVIQĻ;㞻q~x86olQ<%%1KSɽ#I-͍e_3bxd$hQHѱ4~o[Q~m]ԇhsE9Jִ9I)7K1ޕY__H.uqueCG""bglDDgpEħy4V.D;ufmS鶶%i8]SBhՊevGrKRѱU?# x}|pȨ"@/">_/Ǐ*fo[G"'EL]&O&a8SrO̵`777zWkCW>|R}<?pr0c89xJD_ǿy?S `O ~B0zMKf!w /S2̳=T oci:mO%e8]RڡRޑںLDL$>{qe0/FFԙXV1*燇c}1]J-I*QGuՒX_#HR]o?_+ ̣?7z QzC݇㝿T*6ojmmWǶ6"44'i8%ר\'y"ྰTX)v_x1 DpXPky72:VmĞb}/}9ҩT\vk.n{]NIֶϒ0lcG_߱C%rfWDD{R[{.JRjŲx|;3t.N=gΞ{C>s rIEfg{ ކ;I1<2wk2qw}o~S,Mgu={E:Ȕ#ƛ OQ˼(F'Uˮ}D}8*F.p121$JZH>/}97aWkqۭ;M%%I),w)ܻ42epoYޟ/xs!.!g`TM"8}'~GF&};&Cgᑑ?~*~|7~8?GwݚO#ݞ?{e}{}Mf& CfL2LlI,QR.bxvϮնYn-ڞh=JӭVj1ɚ4?00&dfr>H I5G%s]\!gpvCھi=_%Me˰[P63,,&C'E}ݞ={F?|Wpd$> (?@9NkcϝG!T# ILu?QD$ ӄVtttNJKm:^VKqCI7b kPo@N+? )p;QIY~sYBDȬ*iy Ǜ{~j||_K[{cz]I~{vٙ> )p\^G@J )`L)O̢ ƲMElXӢè.ͼ?i#]ˋyLS[@99^c\G!'(`0@VMA3,gEL \<[`(x'1ܹ!_ry]:hF?a |:v2qwtt$J:lT#>h͡0@WBሂ}Rܥˏ$fSY v}'{ =7bDUQo rgeʞIO3T_cst:sFhisFM |<0gVHzn'tW {v! *_0!v<1,iYXGjʥ` m's꽨ǘ;/&s{ھ2l6]wMne*K $PF@XTVj$D\93FGw!`N:sF[MZ71goڷEUK?73^ 3-gCRFr:x&3gB ;Qa"$3ڱk^~VTQ>.-zWQa%I=xߘԙ)ȷ$zI¯WkH6 S3*+$ \0 wnPDKqCw1&MwsďԹ'~dQgg~Iup#~Go?6f}>H,9lݾvtURVjx#RF)xv'ڦDx`P$?[+} w_Ǿ냓:n*~}dvոݿďt=Q-ǞqlCݤǷޫ%)HY%̲!w!z?`Xv#ƙ  4 '{t=k뷶Og}ڦcݷ~k s>kW*n٨/ܱb#%y}>Ӭq_6 ϒgK6=;7}+iƻaޝjcܮoZw۝uW;wkؙ`3G_A" -,iú.ꑿ,%"!xi93T]<#}1_{C? FӫCQ^(oٙA}HW֘v@_G=cھtE>6HI6Ű>^rO>#,*+5rR6,wО){v&Lh7q[ۏGOgswjvůպcWl`l%Wf||=K潞+/nHp:e̲3yq:=ى’Da/Lk̖S: gg?7vuEIcL6>6Ϧ |fYJʚr7;32֢ IDATaEAhBN i<"{I1w_xO5>OݒpXZ6 WRVjX{FB+_RY^3W]?UFtr H:_iu0_i܇}JwW={ǧw !`8g嬘 Ϛ떛=Qس3hikW:wO'?3UaJɝO5 S$̧ e٬mٴA?NL׮ֆu7}WWhú4 Ĩ5c_zjIזM fZNjurBYxF&ٳ̙дͰtŗ4ɞCv:AnQzУl֭7^3q |7# _\߅-6L{=[>18N9iNM;>v˦ ab=54]|^=[7,_5M9ϧ3,%qeutt3r7M'wwgb)1IMy~|cۧ838hH] l@i0բ/ub*}`C>}17[sو@֙e9+_l5:c,}bziR㴴z.tq\"p'pG-*+5rVE/k!;X-Qq71n^ul6븏wN*~ҀgrvV3rg3r_a;,L0Ft5d.: P Nl69oH}V,4c"7Z|ϸ}Q-mǵ cZڣՒ`߀]= t*գPxH^#CcoIO;7GVKܹz]rwȚk9DДܭt‘%Wb󩧻 Kx\Y(!(QgWt/>yNnZBj{Ls/聿{ F]BM-zEm LpdHi=Gbٙr c>ϱg~J' eǘ +ufYNeʒgE'dDK#tO^ÒΦ@WvV=[EO~^u)'ի:=Ӫ7(4N7xϱwnjaQl;otlV}` eӆmt i9+}|r3-#0E OxC/unj ڶ}yiC𼳫WPuMawTrqAt%]>Y6Es;$#%#s_lqسoֆu77vݽ+3$Ǟ=Z)3rw}[VTz# gOLuoQ_۞Ɇ0PS[@[xZsF ~.aT^wQzk{#%7Ǟ-65բ-6葿

v'u9zpF=Qꭖt=elV˘\ӏ}C|e_[}mІu7;nݍ1Q7x_pVG)i[yߥcD'wwDk~U)J؎_hee֬Z*kz7 6[^ϟ(>%o_wZw׃[6Nc%DwQȹOw̼^kOix\+:::zvEz]QQsZcvs٬gn3wrZ8LW(2v՞}6>ZM_i<9ѭ7^3s'pfZe=hr!s%]]Ƿ;+TrOkV_ nRUiw@t߾vuԝ/4X[TVjĵy:{<lU M;PͦE ܦy:G}]#(իޫ`@R;?m[Wb!7 ƾu Eԡ|J6{zL{ IrznZ^]_SWt8hm?H%pNNk1aMabU|EiPnB7,_gjt|˦ 5t  >YBe!wg߼I s苟^G!bX׮dKz3nG^!y}zkx\+:::Zq]elS`r6D=FE!&ɌauFM@۰&G5%`9fOP!-*+5ru=]Wܜ838H!R@(2kʀ:}07Io˦ >jI SDq̴e/3ۂIE=FKK[{cslIx ~5~Hj^ku?N6"+[MV,1]=- Lޙ3ǰZ($%zͯΔYﮪ tr֬V/ZG-;S+0Rׅr_&dwOcس3)$}Kuo۾GIm˦ keOxՒ/ܱV[6mhfLIYiqYqZO9u$uGΓ=ܳLdg~S0 驧/&@R[Z]]Q߼{?۽+tuEnXX6bQ^L)t<y\Z6dE=F/ZH1L%NUiʥl)իP8`}#_oj L|wc߰,ir|i$9ڰ&mXw i9咞E= LMK(*pSHq<ᔯAuMʋł}:wZ:wZz 4KՒ&wCٳg}@қΧzO!9N3-gE<.2, dp0Dbߠ`j(4ީ@W: Opz]gsTu˞ɍ4+|ِ;JJؑfXJ~<.{9/{O^ϒ6KEyvz̔ۙ)k咤NjVgO|]ӚKU}cH=4w7W{V \**pz y}><WVGGg,/{>fG7W}Aֽ!IZtn^u2lͽhCcLq^k5ĭ}EkR ϶(Ϯ5\@q\uGSeB^CR[-olNF ߨ:$ɕ{{God :fZNñ@ڨ/ct@lzעitvfjRU^g_ϸuvY_}66lHgW:zUS=+S N!wǵ-dUƛ:u򢯷Ws$nȝ\ 7vHw92ug5)ʳM싍צSMm(tLlOjjW-\%efZNy/NlI$fZFBGjI\.ric b‘gW}뫛(S|?_]cсBK]ʊ8 Kɏ~\gaQ $QfB.Ga.Iy=?Za7@R ET_^lhnTs{}*+8qs%~]/pY_vD]"j ;w~) p@W1ے6K}οԥ->T@@ hg~=#>EȐjjz;j LUcr/g;"YedX'|Hl:z {!wbغbY/*K]Zs͕1F@507n ߨvB۶! fS>;Lɏ1 {<,IَHV6l.6[)>jybg*K]q[ǚkTy38DB!UԍaNbfP4<37ۘW/Z8c!ZHpȐ:zc2%޸>;v MDN~gk(FvxSV,!L=;Ӑq/]2r7*`1 eg[<y[ceՇGS[`$ Qx" |fYJLⳒu@<,_DK̐Q!3hjɸ+OP}=U;ޓ$Yfi\s)ʳk|xLPA @г^R}c+HaJ i|:vc=mda+ v=6G?R4olH]CPo0\s,i{r l9_[x{7jON!:0e.ǵ"Vc2~fp?(::z Ȕ}eJ7wg`>9X/7Ǭnjj qж{ga P'pdH5uzO0NLɏ1 {<| UO:38HPB)q }0yTT#Im(PRVjjXurg ,2l6- 1;\ya⼫z5Wl:BtX(2v{{:b0\ϩ(Lte)Ir_,_dǫۗ0s-azb2ۙ9sB|NommG<蘢<{lI7w@4wvb$pdH{;KZX>|fY ܁teY}H49@y{aP}m5wTwS[wvqbͽc;~Av;e)=WV,&LO}/Q$7hQ1Gڶuu\<ƜS`3  {U]SG1LLDܥusU:f['|@aP "VXɥ o^S}ն{TJ1RpW(yN3-'9B+3ZPEg{ƙA `@WoLu;3c2nNm;>Eyv[}cB!6 *Mmm۾G1 kg~^OpW`b˒e@"y>ވ*v"$7`Y/7|ܾ?E# /]UKbX82DV@Tj zl/&䜲ڶ}Oވ@))]d$G'wI+vieͫӑ3ッ!U= { 3V]{B:Β6Kq,uɒ6+&s$::@!ή^m۾GHyyN,%iBl;̴P8ׯĄW}!n0F,:*>.G^/l˄Ubr֘`n;B`D82]U ) 9 x\YFJW]/:tsH ~ W˚~%]yE7wگ:#jjڶ}B!2s;H`:Jʹû"~fai['<'?ߣ= `zc2Od2,]zd6B!={/w\Rs{1{ 1y=|`(B`:yN3-'C+-T~'&.I~B̐P86M'{۪k㚩swv*7=82mb`R H-BFxYOHD~ZڎOi<ntq@ᖴYZ;kUdIھE 0{']1EȐ<H9%̲.i faMd?i509ȐcFrY}Dݓ:֒6K}Qwc//>;vVgn rg,L53f?sۄǼ}QD1,cngkz7:CF[$6?uv*7&gg~0DQ;+7-hNӄg{<,#$S 闪*#gcNQ(l|(ʚ~kxoRg[tgchngac]=&Y_uF m[TVj}D/FãvlƸ'@4U`|X> ?=:UϵE xaW:E#}LH|f>r?Lն{tߗn5=L1iK:l`܍n1$KlQ>:/tw/]EpNǜn}O se+F!V"C R.nZUX>ok#璟7ڲlǺ{zuWomTkjm?S)dž,wnO:8 9jHUݺ '<{R;ܦ Rq\=<6ng\K^{:*/^ UoЮꏩx$+s?w>zb}tGw98Ι9TU>S*)]cGa)f ̙±?M?qծ_HqPQ}٫z31Snp̯>P@_\~YL^z]S:ޞٳ@JtzWLˮ*?X6i$I:npd;`" }NsJ/bd=mDzyNǔ_%u{/dȽlQ>Mkބ[ IDATSxU^_?֘ǼѶݿ;ktx7Ω9rsdMOVKܹaIO(77{ٙ`3*7m(2ڜԚh}">o|<}ꓷWj^߼ te)N0P8hͰݭ}Mx\/ZӹzeHׂ=z{@^3yԧNo?3 |Q:1/ Hct`Ȑe^KK>;X⤚ӑ;X;X5`:WL hQYygXZy؈|BO{{̂?UbHU_H(]'ё~t}t(Dx{&|NY}õr:?,]VRbyzyY5 Aw22̴|226dl:Mֽ{3ߧ8 O?+<Wk)-z]_h>:Xsʔ+0rȐZC" Ul3l6=o<ݗ}|Wo60`߀NV824򚯩-00HF?p(N95g_G7O7ݩb߳ U-'ogLv'0oA̰F dT',L뙝?Tц?Oރ}@r t*]= |@(LsggʞIx I"CzjIz-)yWN_{oZi 驧|'+ 99r7,SnTȽX" )pG&իή^7u{Vg߁{{tiɇ{ӑڝ3lAOW~UkӬ-?m(/. HZ^_^3Rʌ;L'd/^g_Ti61zS[@Ȑ:z)?T ۳2垟#wCܜf֡c~ZC2HɰYyӝiuzjOtb]]J#$ )qϋyNӬqwttG;Q!,EDOc4Q`#kj tdt(J 5~ݒ&wn ߁՞}roC:XS BI>7Hs|`(L`jNL1$WnT:̤N_K[ڎպ7֮3ph/_?dszIGtρE%Zt!%Lj )pGޑ0{lb)9ƙo0^X5=b1jRܢ͛&NשP`i9+$vC.H(aރ!r>r>O/o TwOy_[:P#ˏw馕+tlT&Iz =#IomO~GegW/LYS[0{אV`{Y*,pɝ Nժ͛☪ U^wCStu 9ta)F bD'rI_r>iЎ'|mϏ%=PsX ooUs/@KFC z)wZ^5 ToTTץjjI5gժ!y(,T 0CN'!Q~\OxI܇ 9Nugnށ E@R͹Ǿ2lVnOW]#ϧcGa)dˍgHNɸܻO7^OxgR!b3b큮zi'@/^^@ S}.>ݥzkpO}-*wCKAyޯm`(DADjIW(=ޣh0=hQ=W>[ HLH5FtiqawWn*+-wni^z͟s%>|<[cjksZ'}|o!5jok3Rʣ Nl'$"CQJS[@5uҥHgW;,Igex*?;ΪIz{bp:r7wCվ99rϊvhCl'$||I*QQB0;js ֯Z?w$d$oaݫ~:W( zmr]Drb;!(`F wjolI%m1϶jneLYҦcaQ=qo EޟaO/y\(nxHZ$ yzq%#GO?KAYцWH}5jS;&cP񱎱_>n=%zM& @CpÓ ]ʊgFbK7۬V=͇arԝwX(:{x~PuMkQeBU~ti3*ҡ =Gժ{2X짍t z^LɏhCel'$:XolQS[ &veL:/M(0}Eٖ)P|(g<ի=kϾ*/bʋP̈Cu F͛ϛJAvT`l63-'?rx\l%$Bkj hʥ) tޢN ,iFBng闟YVg[0aj#ω c7U4UV,Ԫegw#7Wkn M#y^y|k[ E:vRtrg! uP&Eo5I`tX}8vfʒ6k$>YeMGu#p7@Nߛ ֯Z\9ZB dMO8kjz~%Mwrϛ!DadEsr4!r ]/f`o5=V `Ng[5729V7#ax\ZgWvU%ʋ}J#& ;?ժv7*t0^|54MwiUU>??|z K{ gHN`B^վ٠:z) +̑5ng&!v E ~pdHuFUu UY;'ʰYQ&{?~1`L6+4Z<WVGGgt΍&侂mD v 7֩`?oX3S)"闫(~Q}t}tީN=aZVʊikj 3aWknQYI17D}cw#8N3-\H'wF82D.uP@ ETآ7wd'`w:G~{s{/yN5uZZQʊ**p0%5H$+7gLS n Kڬp8>Ba}E.U8*^|2%:#Cӡ*/++eS8 =_Ss3RܥwnR?fWk̰wrg ;mXK+UYPǑ&7o Toz|~Ml @ҫol[RRnP奄kGToTQK+ `Dj-yI)o>{5)Mr31i̞a 흆5(*p+70屋 **p˝PuMݸ3-'k:'M7^}reeTz]ٚʊ#XӴjYy_ggjWՁ)]ەtiH@ ETآ7 T3^虣<;Eg[jWx{o>Z+arEiɇzu Xo/~<8ꃯhkie̴rIMg}`6vqoj \CϾpxR^YYo]M$j 7R1g[T豟ש?UYReKR꛻VSSCkՋ?k/IJOK<ܑf2?K!W^5o^Iy>]]Q"94@x fħ㢋;΅ԧ.vVT6lM Uuq>0-7ZjlPrdڋ϶PH N:%*=#oVtvd0olI]NSﴼwZ޽9vYӔ&>'o>sZU[ ;P8^=e#7 PX_c:8E>ݰ|nXS`nʞO{-{V{awI tٙڸf~ QWȐ .; @WBE_Z͡@0TA-ol ڋ*̑5rI7nPGhuF7jղ \VϚ&p(A{78ﴴ_x{fg~HY?|r:*=/IjCoӱwZUr{z湃zG54UiՖM(0I%e:v?r;eڳν$SnDGXTTc;I (u1Mm"Cw\9#ssu\F `w5j T϶IL(Ϯ`AZ֯@e<|=i\4-$IgN JVBmNJNOGo ƿK0""""4E3]2?ps]DDDDDG;;Feh]-o2iwdR C]MX:lhzU {19 JW㉜JOeuO&T_md* )4jJHTR]VHpT"?g!r9y3)&&)))AwUx]IAB'`+/Fk?>W^xًfhFeћjr'""""yz>(Ѩuv?M}- -pةT=곩' QT67̆kh5ͨmd ?g!-၈bp\TҌSU\(Z$(֫QW550[DpYij֯b&tvk0,X<邩K]iЦ`~H`v|g xCm4Ubݪ$K#"""4Tۈ58? 1Igmf/vg%D%㙒1kpjQ],n v5(^+M*Æڐ`!DdkB("":B4BuCZ?w'iǻ+żk) CU}^XmE7ha OǨ-=^ ?x,""""*ne0Uz?ah2M} ]%(^\C#p +!;=Yŝ58Փԅյe)Rnu7xXIbUNڕ )'XVlnbԵ:P~ {_佗6+~l>\kN[h*3!͒<>^,]Vr'mҤVr'k#'G|u(] +x`#Dum/FlPg&$DDR2I,J PZV/w;r*v? IDAT+x\#|3+O'R?Sw-LC4.YDxH(&nr {p 5v^&6.>T> 7YPd.ud#/w'seipGl5+/<ÃEDDDD`2x$\[UՐ˸j*ѣJ/|;l~L*ѬY:l8xhƮﰾx + 8.#8QQvx>v"$cޖ.#[&E*+ɉgzJ zlݰf+/w1{9عe}嗮 4hfj+X[$3!{*ZQ] K ly3&U5͢R!U>okװCp{ZF$J HTIU%@& 2$LJ2Q` a]܎?aX+@˪ja匊>+JH$/09yNAαo^ZBavQob{>v"{x{`2~UvAgO<禪&YD߃XF^;/[Cv3ly>{dipGlߑeXyHpFhN`6 MA&"""" dB3o=ӅĎU܉(T}:5rhaMfs}"Dxv"ht&wn`kTUJId=&.Umiӎ~q+~Eba$P(De).+v|g .K;q~+1tE*$v^O2)ÙDykh$Ǣ~ul CAP]cy(ڊjۉ(\X\t %@?& )4J1~GU"[냱Vu5mUܧ2vk`m]Wyuۂl۹KfF}([a,kgrd].rB,YbA45ST̪{2fvˉ}::sXɞm!;=b XeiQW#?KŪDrZ?w\KbU"K#o WCťZ_5]*oB0KD672R$R58&RÁ ia$qqPlAY݂kQ=0UE3\6F 2Ւ 4Yg} o#$)2gcub%w nl*'qpNk9~[](-Ա/wl2|mrZ{|Y`|,opH OTu[kQrYdFMm3'Xڭ?T-9 /?|λlQ(tvXVsۧL*AѲqHb֟Yɝ>[}OD4~Ů-8!p{~ Y* ?\\ }0@Նw׿gcI6"ʧ>w1omNDDDDtg/v0IʹX!g/Zmd[B:Nn/+Q`)8~m4d8}nW*(֫QWZ/Haof+ )T(-L{ M@V`MaN;!lݼ˖zs ҜlRHaN:C&pd÷Q5^cw_|d,{ a5',䇯c ȶ;Ҩۃ0U ~u `ظVpND܁ ]ĕ"E* ݃U܉(;%؀:92I \AV`ľ_cE Z;B:(\T7Q`{y7#8Z~Y*Rq`P:Pa }uxagv+jnSqҀ`~5[18C98?~}3ODr='^|O1JNDDDDug/di>eR -͘DDDDDL&=:*x&rrzf V&mBMmsۡTHQ"[TURU nkrq[Pn9nđ">ΪD.*VԵ:8"W@]Ҹ(-LR!LVrPZzv}`X+B~ o,Ū904lI\,$h_ wٝ8'NN³=Ɖ5r?\X͝1XVp$\6ƺU""""HƆbJ`+k49 <́#&OUB֣Ձk tw DE n-B:94$Pq{PꀱUۣ*VT$0^wStpd^3Ɗ\k7=܄>Æ#*L 'E?vo艸JV[/_6u' l\?EGgf,Mg/q9]u nU&zD6/Vr'/>8vjV7<*B CI&TIbj"K,Ũ0[Q`k)nja>di'DD˝Y«{P*X_C^#1*Or'Umz o9/aזg09AqR˅uSD}MQ1X:z`iEg>ߘ9rkĚbRfbϫ;/\^4aL""""QF*atO,ac 4)h"""""Ӌ}M%$M2ׄ4.i0de2I, %0dXwA"s0?k>[ɪDRaNT溝AΑ7`jC^4WM0 z5!הN`}2lݼ60Epc, }X-!o`iEKGZ:zxP}>{v$qq=@^nTp ]nƲJ3cUZ84k5nG&Ldk_V~u/wXU|g[8][A~¨NN@igLqD "^U>42JS3[):.xgM]4rT*8AE3GDDDDQ`2t tO,U v($ϛA B:^frR4rTA#"sl)Rٲ W~ŌՍ5y (֧P*p{pd`ڷP u7N q1tE7frrj}]vz*(ʹG&ӊj2=J{ș!{i\=VJ t(֫n'( cU[W!=}+}&VRATuw `߯b(^u7q>Q0mFs%J+ 9#zT,bbb`Aહ_ֈ$KA""""`}0UTIʹ0l\u DDDDDu*XBsfCCzEHKDq:ϡNN|}L]=dWZн GNI@P*0d>r(Q0Y\ @u;ja(&*OXcU[pi|r38#+?K5|դYYy! f\05Ƞ\{}(hًf4Y'rnUrbJL6 ԎQVD,U ػ(fpdCHH}<'u^8v*bnb~:3ͨkup0HUm( CI&J 8 i06"| ,M"J Ӑ©.IKsp8E:d}jB~ rE˪`}ˤɪ\퇈f*-#ꚨo 98K@D~ vwi\ :ea߯b_KXQKQ=KCI&J(l& wGolz#U~u` ՊjꐪJ>l!Uq_1coֆv~1>5!Vsw{06bݪ """"u{&[m [UkB"""""vkf+=TQr{}Agr(]ݭXF*>,dpm8p췜?& X\8xa"k؃w?4!?Kr"Z- %$}Kxnuf@报%~-{}c8zgT5ݿN܍e 4 g/qZc-JnU Wj;=yz>aw&!9 l"KAݿBȩTȃ_`;d=냱յ? c0Vl`PDkuBia %JVu'vB[{qYۧ  ֋Ɩv."""" ˪`j;QpYlH 4u~wA$PR4x}~mQu`"MA۷:9Atap]C#݃ttpiF= Pz;3Umncf=kIbuCJ0ևO(nC8לDYySLu75ȠW@Tp]g/r'""" ja,5ŬNDDDE qx_AѲ\E QnEأ&>g\ rӔfS=H,wpGJvBr⋖ŠI\ t0dB&R7 ku O~r yK |r37YK]E<h d<2)Q=v7(DDDDD x{1r`{_2f\8(U]* tHU%vt?xl{ ە ) %(֫b%cv&f+eMfw$سe9/wh Q1 6m9oV2]kծbܾ}ׯ_s?unx1DJ%(""" ;{ Sm#._k sQ,Uۉ(Us+m01<>A U%w)+EWCI/Av8v l>50Vv\q1غ!v"#gYw]E~ ;7Y4dk8`loD}$Pl2$gsg܄rp-Z۶@NNԩOqСԹKP%'a~.%%Ep!wcY%CDDDDA`m DXEr9DDDDDr*XB5r9g6MǓ8pDQa9c&J Ӣ&J-=gMm3trS↨PŠ0 t  # F]s~mE8rj#J;7Cn s*)$aT'9#'1|-!Iċ/ߴY,^-ݡ[91~n$>P(L^tv M7 """G`{r. WcݪeR:ѣ[ rh:!EAJXɝ(z*sO69kjx2JW.ja ڍ j}LۉH08r9d+u DUKغa1߯$e#[q犉UJ Bܖ.`!oBAt 5G/_;v`޼"hZ??[Y|/c研Bp.CDDDD\`L*AѲ0l,͉DDDDD$yz46\>N, O IDATM䠒\WD7W#BN[PMUUW@HG?94˖LcvSãRa(CDE|uf`nGk+,տ| JU}ck#Щ^N1W0c"I{kxɂl+__PUU6:.>{ Ϭ[R8 |>`4ro DDDD3`;>eXNDDDDD^>} }YV1bTors؃w?4P CI&@*{ ,M"nA*m_o~‘xlڴ /2̯ǽk8tPjmN셺>hZZ{F-Ѵײ R`ݪ[UfH226xX}XFbܹ4-א_+0NZ;S=?Kj#0[CFH}wƪ6\8ƷsE2I,v& \"k/!3t)ay^ӵ68̛7wYcӦg!{Z2$|#j;J111sG8.g/r'"""Ǩ3lol`{rd4M "?ЄNQMcqfӔܳ*D*Y*.r i%}:2I~UL/A&$!"A]AC[qq!#>>rsڃ6[{07ޯ.C*֫JcW*Yir, sz}c8qƌ^VokO}/pӳر=@RG87o]ֈQB(Lۛ,A}.TeKnUrep(ԝ|B:1L.符izȤq8(d b%wˠ=^ |_|!$b!U^HXΎT^Fucw?C( C#@Lx/9Х Cz촣&X} ;*uC@*U*Z֎[wG0!wװG03tlsGNVc[D^Z?[! [mPmƚ₨=,X";jnU"""N-0^GcK;ZxvCDDDX]ZFz5*BQt@)4RO E`Tr$B}v9F` MJcR! 9Cu =!;7G*\9s@TB7 Og"/GIܗ.D߁?zP Ut o/mdXiF6LT߻)¿[[0gaZJȞ\LY}*Z+^ʨZ;,;Qq | 2Om"uaJCI&x ˅ꆞbbb&J11=|ۍU8]UZ/ANvr)Vz67 ._ge)LlYl`pLsX{|wtgU7ӕu%>zTBt?ivQ{Q *n&@DDDSm#L!0NDDDDD!-=bA?|7kDq0328)RO E|-B4^3zYD2䱂+;VUmp 3JΪCVr9f8Ǝ;V}*Zws9.\6cMqtVWThǝ;w&Sm# W "Z_JhljDDDDD}g &E;K@D5Uf:'o/[Wg(HbuCjp" +װ;Q`9>83>/7cQ)[%سE[{p{-6nX̕]0~C_}oAp^¸3=VPL&ݯ'~޽^ПB.œoD9FRG09{̐;EQ+vk0d`;E3y|XA?6Ѩ`0"zdY.C0J{=}|&劥j؈(,].T7溝1`J`<76Y]5E9ЪU.{v=^D}SΛpu{v#x˹ &Vy  a9Wy|wpd%. OWTwS\x1|G!>ի EħgcQy~Y EP!w}HpMV[oHv"""""qi0U׈/Ngz}g5MvA ƪJ;Qݕ )vnֳ?}cU[X*# ]\* * 'k_.% y9Z-qPvބLhhhaﶧJˠG6q2pj WkסQ }vl`k|UU=ozQ؂EQw^H$P(LLNDDD?Ɩvtv%.JPl)"wQDDDDDD{c8><^_۫OQ@̛_T* yjDc}LVo'nXװqB5Jބ'=Nkʙq6-ƵEp8(;oعY BTWC&c}Xߡ[\% ۷^|\n7i:Zk~'nܸ9u3!{,+*|A^43NDDDa5fEcM8]!oCrPB-A!"""""BZFX/hr׉e竀zNj:נ~$q8(U4[56Ե~@J(R"*h~ ;7VQz;STh$÷8~ʬD"zeMD<װLNׄ{=Ǯ6?9pױ+`J %%cd]e7??CОXS\uRܹ#U^ y^"ݽ&K{ڢK]u (i"""""GE?#RqFӔԔx2( C8=xTl'diBV0Q$Y‰i>` & £݁/7G?ECͨ?cU)PL&Ûo?[pqU WsuJC0m26;ܨ3Y}"*׹R -E -˅\ƕoFM3~OQ54JRVr'VDeW=0Q*R0 Jp\W5쁱MǗۉ(,].9s#,O!.yb7Gv$4~{?PvrԌ]u;\nٲ7Ibw[l@]kéctݣWQ;qj|Vo%E|jx-8tPP%3v]ԝOT*Bg/r'""Gr'R ۉhrDUk/r_+_Lr QMQ@+vqT0[ID^ꔳe(D5lߊjlݰ4" 9K ƪ6AUP\-L*h7~ tNT.v8E} ~G>.% kr>Dm7*=}w[3^Oٲ a. vƍJXQL͂˦M}a ՊQtuu!''g|dhtشY477իAkO}M]Ub$h֋QL?ƖD_,i_r.r-dv""""""zY܉D܉lntލUm0d 20~GҸ2!?Kj؃m'\2)^ZI_~.=8}sQ8=NX`#)#jnUn:{fJ&C2I#"""ѥ.;x=Lar9ܣbJ>CxdV'(zGT{ʀUu {pdUmغ!Gp]=iRYDٲUU(1T( /% !xo =N8Cu^tbMQ3!4a}n{AJ NC)XAw1h݉ßT V7K k;8v#TUU7nܘ2hV[/lQW]R1NDDDa3Q}_nWm_q7>n'"""" C4;hl.>>(F LHLJ}<@Df(5Uw {UdiːB014dPGD!U` aɟl*)1!V.S/Y]6Cbߏ7ov{|wtO^ BǮ1WtХ:`jD7mڄw3ۍ>:SNEι8 񈋓FFԉD`"=u}߄bCDDDDDD~ñhi (P`k񪯁=ޯ$iak؃_*zB=[3XFD!esșfT UR"^"VEǯߋsNt8E3WP܅&;PԆk(D}ϖ*y"F{=}|AwKK0c/h;o GOV {e2)v~ O>J]]]]G(www =F-剝(=0U}pE/T2f]4M 6$W䮛S5QDJSs(b_ ظ=9F`r1-VGت#a .+?KIb9و($1T0Vq0oE<24ENX{h9}8E h $q-{?(;o'& ;7EYE|6RU  L*[{qY7h0o^xW⫬{/b{4Vsgȝfc_~Xm]0{ $K&"""""dUrKU*ij[NEB B,nȁk؃kQaxʡB\8(X\8xaV7'>g!~'۠J◮&*)ʁ7KG,h/Mu7Qw / ;cvU7-Bq<SQ{1E*4}`o$⎅Pro:]YSMAwӦMؾ}Gw :K$r =-7ADDD;$\.Z4͂P;QA dž1'sP )J PZK =n'**4.{=TU_DkVl@]qL/WoIbXWՖ'Xm(UUxYYY|AݿJ&mEtJAU?wxYFdR| mC}B4Vs3g`BN :{I ׹KfQ:dOe}&7eet?.>52i( $*Uՙ8QWh ˠZpW''`"$|QQHԵ:pX֕+>c3y|xQ}hEx nq DyZ_n 3Zo#̛tuuСߊ8[m9 ߈sJBOO`ΐ;T4MduyNDDDDD$brq{X:(Hm\V%=P*W-EbAVg‱3zD(>ApW,U5ODt/VoDt gD=U`"_~juQ_ݿj"s>J@6Lj .oIWÉ3ft }%%cdxn8s?.z7񈋓 =-0l\9}3=ayguv""""""T:^wph(Z=>Ð;N[!sB۞p0ܬg@BۧK[?>$.yu[(Lumhimr)~;_%bϖ8`lkŢGݙUvٝ8I dRl߾W:)Eکou {,j)SF8wk޻AyH7ieRVf'"""""Iy*9gg;4-ۭ>#J8pDQJ9'{~ 4: 3.UM"p{`jCo?/?ˁo xfuxu^_=PUWꑷ$StUlL,']רtɉpSMAI`סj3NN|G}ݘcMqAԜ'T*`Bx5wو{}=[H:^y}".IDDDDDDD4}=CCu'qrnC*#2I,n{ ƪ6} w[dXN~" :c p0!Iӟ%0XS3Z:zQy:-og†hճ&֪q> 06{Blcxfu˗^L&ԜOEjCTxacΐ;dR[?/WaIӌ>^v""""u{&Hc8.Z;" +w,l(D* \#[b g=?K QH_s?>TI x7f+>kL~÷/`MQz?UoF1*o>0(ੜ<{ 0|ܾ};6mnDz@}c rE9BTp--"9{$&L 9sB!7|rA v]r%*^+V[/FnG͹AP=NDDDDDDwMw?e-ɵ ldJ)`\H!M$=)NmfVusz̴mӳJ2mL$@CBjc&`YD-Ygz  <֖ޯb~ږn`q3 t)HcF!QdhxܻCQwV0PvR?ݼCc\FI)=Wް64h/Jf$>;՜?rssJ=S".Izbi;xrM/]='5FT7QH4cAȀ{?9un7~Րu'Q#mI~PGza};~Tezd* aAՕ%Oꮺjes~5uJ-+oT%i6mmc^f<$O3Zb{oeSfi7Oͱ:4ϝ܌*;X:^ZV 1v[ҜӀ;:w?OqK7_E9zxUs XM>}'o(ydej?Z>I-5OGXlX?}dLd;lz_ђ)=GۛLE|7/_rחvϏM ; H+W [f Sl@gv(H؈ܟy~2/~.T-I=k 6mmK9.%ޣm#_ВZ&2'hAW_ypJ=;[<#WK9ڸ5)^dݣ=nCѴ Ϟ=[?z,~3m1;t?X]Trn,HGtRcB.FzaӅdv靣mhܟp amhl53a?U# 8f}~~n}[?k i%z[]{%~e*ZPI^46O#n2vW_eSv}s!Bۏrb\jK/X6^:m cT@j)q;1l#ClpO̊B5ԕ\f=Ǐ?m~KH掀;d gh.{YTӽq\M.,0s; }\)6 v0`?=+SES\ $t\#;;Y0?צ_Ukxn?|N^wJֆ1;.9A j>f~u!=w8e%Sc]'Rn^|a=>=c,KLëjij{v,[Ϻ;f͚n%9yGZ묙UL/O[XH{(ECF P܏)R@>p%|hlD-~C7?צ5%W? ̢/|\_\*VJ@2zܯ;e+OkV,]uߟձذ~5 ilMO~+_3#%m{2;[v顇T~333 i~gUN'wXc:pJMʡ|IMVɅ\\Qt(hv[& I>ؐqrW ue-3C uۿW|=cZw c wp>PpǍhE*8tkLd;l_Ԓ)9ۛca^{6J=?hΜK6{ 7>wb ϚYe}w9=6vr/($+91,BΙ^jLݨN5ԕ멯/??S__򄅿gV0UgKէ WzMqq{,6n}sAwIzd oڦ?w=ki/4+VVN˲hyt: ciL.Bs1WoN.p{5e.U; wB[)0ž`Q%NyV/^4E|L1]nFȽ;J6Tp`(ϩr CdeNׂ Ϧ{}VEYW0H kJӹ{V^c}mZ3Ɛmgu7=.){Dw0@42M<&NZiY+{V&!Fusuаy~_Ҷ=UYQȢ`kI}-z 9a\A`(yV.jތ;t~9ǣ+Vb_>tсnٳ ^bg4 :I<ˆfs7m|Q!wIjHnY3L/OX!zJ\xJE!LsאƝGR.;xrn>oFY C#WQ$]^C_^Jϸl?m;ExK+SC_mݩի\߯~+ Ym-s(L.̱E~Ӌts*@$Q܃ڻ)W`E9ZP"`9m26mZTWYtUW=.OVEYW`ϚWʖac/_D_oz챿KzнN=C7:wAgl&Z,rjW"  K殔EdhX9sn3ct S?LhWwݦ+VA^7 8ӽֿeVy w'@T:mUMV,Gv6+ ?0%kT"[V!ct6}ps%e[,̊BCDij{~sڔǒZ~w=9A_^?.AM/6i(6m_~pLMzCQm»UE7BBWzJK.ugwө+V詧~W";\`qvA7 ur'8ϑqY2^Z6+Q gT7hlDۛL{ܑamhLNiތ"-[b`[Z 'uIzxUmiL+/?ʜ/}v+=Iݮ?O78WR&O}Rچ*.NKWѿOo>+VRN*ٳb }멧UVz 9w;-?e;wI>ϣ$*J1Kۛ2dm{;D ;ƝG-*ŕ,4ؚEZP%\>1m}v]J)5M nmvG/=?50Ux*=잤_LszzZ<y<9N%tܮi1wL~`A%ry'j dȟcE1fL~23لէ]{AwA^vR4p{$CzmOۘ)tMғv_\hV5س&he̠0 wA}*SG BHnʡ\MV1S (2mmo"Cæ9аy~_RZt``҃%iCђZR_bAʺwqzCe%SnsK_A5𪏥>bX%Cܑv[&EpCϺMy9q-F NC]fV31z]sV|Pk  RނZ]<'Ͷf y%Z}-0ӌ s=E#1i6gN!{5XDY˺rw(clY8#ooR04nov*ܓPW΢`а64&炝.GMuӕ|/*4` Օ%I bڴICky.V<~ ?Lj\x"a e1  o6 a6niMjy.^/SYT ,%AوҔYJR9K=0:6T=B`UVz>f,g-_Ʌ؏޾~2@3r(?ɊU`[xy` ]X0{$5my;ViB#raf).^ qc>?g}$a׸!2,渾`QX]wCV;mܷ7w;y6ni5-3C`gߗ3+ p^7o{Bdcamz)!cy`؈6m="󫊴B`ܸ݉_]='-_i vEƠJ3nw8XH).`T. ';fK_-~÷Z ,hyD$e[E9z+܃vNU,{רdjr!zKB_4/{w%TrWnsEa,4dӽ~O\h}ҝ#ۚi˅ܧ̣'.0VFwsڸmDqZXS,hqgrUWh]W߿LI,BWnR]u4aӷkK75߅ ==>&<CZwqf `U7QH4FS (QKF74l[Zz E9j+g05аgg_5n.JjX0H[Y=)M<շk~zÆ^MUPTA5Ըw3S?馛!<!Zv&i2q%V-O-]oRqa{:n{wP-~kꪁP[Z efUf^3wq_r ^Vg~5@XlXmiҚ <֚ͭ:e.;h~UQZk*^8|=qJ:;/t|ݲMr'YkCC{ S 9-mYM5,4>'ldu>n+Wqa !Z:IXGV.^|f.K6HdW>sI IDATlD@{N/yrmk46ƝG,~za5UmҪƝGqL%qrHFtsYU:$rt(l h&NXhq8E9j#T PT'e[,k~Y;6},""]<')ڱM1S蚤uk}G])Ϛm{;'_w6niծ>zBY $}g(,rw60Sgej=o'ӿڧΗ7w 6a64W46bv(ҢаZ:NNkXl\DՕ÷ 녭o&d%_3uݴ-FK_OoDc#zݣ m)_opOnc`(ƝG ;Rس&\5谶4e=\+3sٱM13uMqN64O[Zگ%s2HN3c Xff_9|E i*r!~q=)UNG5w V<ť󒲭hlDObO\а#[f6TfC7H7e(r~ UV΂#+s>|ۉņ72s?Yoښv?cnPT]؞q2H.+cZf4MV;UTYEp mmij Ei+P(FK_rMc+X0t{mO^Ӧc'5)_uhۉ9gy`vڸT7~Uۛ#myބ |&b?zΰA `u~n YZ^}?O6;7~U uZXS"{ք}O{wP-~C=I斲"24 N{nzK.2J%sUĢA8P,6ذN Hƒ #S} vmSDY4NæGN=USO.5Ly6]vi޼yW~}B~r@M޾3*pOCq?xJ`).5,ƝGmoWiK:MӖ L>CqFw޵efh}o4]v ]a  ņ}=;XlX/lmXw̭jj>`x܃^xZ:NӱI@bo޷߉1}k;A$E%ݖIa<QG/ۍFKۛTTI  ^yy;]og}x7+q|4]lcߕݾ$su^7c' SX_U뾥:'p>`{7AAːqb)+?YnfVAQo_?܌*翰¡\z{ MԖE޷T}azÆo G uL8lzm4ԕk'.ai,Ё?7tqO;ݾb:7 `@CauTu"T]Y2汖W]gۻڸtwϰ6BX"QT݊W!`l"C! @B}4P-_ឤEsK~\Kt5 ņ t`@C +ݖ$y`MwPTЦmHp8LҀ) RedPXY޸?17t/*U0nTSkGm{LW>QˢIaA hN (8i&t6=oQG\ŔɅ`!%!wX\poR=+SWk/i[my3y.65ԍK򶽝ך>ɢ1XlX{ZhAwc&i_ބ kVtY B$ji=`C)>3`!). 4޷TS ܋;L 0Tdh.S5ǚ-|Y彅.0;jg'DMu;U33'9?vi޼y` f;ijT'Ҳ2fcfʤLeT<ťg}Aѡ\ Llo248pwh.zMfG%{æwכ*.-L|=[ޢM}%t?YS<,rwd\XO܏۲(ә>X?m|%5~hR&a"CڶӰݍbѦWk[Iذ hN (8HDwsegLuۛh:x:X1dך hq7=67/[oۗ3o^N?j tVQs&h„ Nĩ=UZ&F1ogOqQdԺU]mxeStu_`_4T1iSՋ.G >]_g !wXT ˡhR=+S+ע;fMV[Ro^&Z} PW.{CoMU%s4pvPሺ}:0H2MOɅϝNFFk.CnvY|=***w?v?lܶrmZXSB.+W-~Ec#Wko+  ̎Q8 ; Ans!:C]Lk2F鮻R /`o^_OS ueX`McFqA_(O)pR=+SGOrٳ&Pljj6v{{4~SkaN (扁Hpxpk^*++ cw[BtsǍڵI__SeN5,SIpMݖIm|KdQឤUEڻ8n\вn[:NfKkSnO׻N4T(Q׉O| v\Gv#:ᡇWUC=wGO+!75:EJd( F"p=M' ;]{aEc#vL;ݾj ?0NS.KNK.t`O1TWwv|ݐ_Ӧ5E 2֒Z=a#Q'ٳzTTTL1;Rur.RQJwbkRt(ff9  Eq+&bVs]Lyܪq߇+ue?wkH_;v\ Ҧݷ°\^#!-^?YIkS~MŅ9gMy:P3+ :=ksmjL6 gNWW1  ۛ bY(45 ;]%a鎹:Z tnRAKn[.W<IW{HBIZR?Wˤ#+.1De9.UVVjΜ9g>B2@ @4wF+EC۲T;k+F!wXR)(ڏgIYQH$ES13[fFHa.gᤉJ9.t뭕r8x<&͙S#ө}IVVfb^?xL?K-šum'©St)8ЪۤG}DSLQ]ݝZfYd&aĹ K?6 }#Ò"ѡS<H)w:~: *?_ڏC^44acs<Rp.9. c1˖- UW$d%zff Fi;Wf gϚz)_SN66iĉ/|Q'O$1N; `eW _FI;BL e}fE{PښZ}jyD\7>FYXS;xɿCK?24GL$wpRav _?'rw;rMnXq5B??_'Zhv _l[rRTB]4;,T"4\Ȱаy~:пCQmҪV7t6GK߰Ւue駻[:~[HDt:/%ݮٳks c'5T^#!㭸>B3+ r״wx).vfGFFK/i۶mZhI%>D M@+(,r%Ebq?R](2mаxvu;v?[Z`Fܭ*??_3髯/7|So~@nҫӧZI~$ 2$SR]mԝgw+JK_ASݬ{rs(8xr:]*))U CaP[[^zڷo_\Dڷo_܏z+a!wI7ԕμmG^}LNY$ѣ>?a;]ݓ/!ww͚~˴q?:;⿻.YF_wb?qCH}gӄ MR =u.;Wf]yN s|ZD\fo_)z'Q5)XU3M\~'mY@Jߌhn)]aIE@P(&FW~3CCc4T^#!-36k0|hmC sLmj^z%跿mɓ9FFLO|4^{feecm뿽Ш?\~k*9|Ԑg>}L엿y9_~)p+vI΃L{+L. kJ(2,gwI S@~")33KYY\(NS0;n믿g@ػɄvsc cۃy~zax;uk^~y+Awtw.+u8mYVf` }+ IDATK ;!wXRd(FXN2۳&PhXXq E4Ы)BNnN\.y^9N9>nԏ~#zoᮄܗ ˄mZwlީ6niȿĻL?Aw:fȸr)nm =nNÒ|q}~^E`ztq3ր; EP8Qk #Z]ƒq$d*tM?U'i}M{a^<7JYir?u"HGI 07!n~/.E\:JRIIn\y< Kŀ׏GO&{q攝˅5%Zؼ|wp __H#:<0mw"aHga9E`9Fvqϵ"2(p(ax9ed[J9.#6ou%pWBCw̭JِTi~Ui(^Gh]O<$>nYRRoIe)fFИ" r?0E'wfftwа>) '.LW^^%n)ЭV%Ťcܴ׿uJ?PlXY[OkLձ)S[f^1=W|-yfUUUS1pDM' Wrho_1B0z$$N@ +!HrN̥L.fj #24'#_ob\K"Bnnj=NJJJt:tzX?ӏ,qN$a㭸^?x)qp? >###={)2dܛE{EC1 Tʟ@ \U3N+ !wXOp`렋;pc Fn/t:r\x:oiLȽ8mjxO,$/?^?|n˴,-lBҹ*0ݹl[mOwXASOۛ(D8~"Bnnn\t:r.vn؁k 厫j7^æi%Sui\cFx ?_(ƍחq'ɅiS?O؏RT5}/F~߬RTF%${V&E`*tqï[Z)D jRxߴed(++׮wa$+IrݲtbƠ͒u"1絛?nlc\w씸Jw"_͐qӪ3~865$`$Jg>}>(D3N`&]܁k񇵡q?HѹmOo~1{l}Z'O7VPqgQRq?I `7QXMp {Be2ll#Eij J(Β%wp f{&iZT~ā. Eo٬A]jzҪo?`(uOeap FiϞIFd(m~~ gpOaPQzHϙȠeH^l6ϗN$پg*A0 LB&$H&7.IHbM( Xj^UjZ]v]-jU+j݊b($!r̄0I&723DAÂrL3sΙR|sf&sg#EM6)0X=J3qSZJƶč; m{}e)i@l6o%Jaa &ղnksNs˴Ǧu'w]|;JX;~]#w7Sh 5Yscu 7`Ja*`Mɠpt/ /8ð6~(eGu;Q*?kl\OhUVnǏF.YwAtIZj\237Mwuo0BeƍpBqdT-qB!wtbjuRm#MaH5^yuxTD{j.Yxz]\a׿K4l,eBRbLճ^s2'srLi4%[)ڨ5~,E>۽›F4 &Kl %{BSɸs[^^r"eƌ>^Ŧ\>.ˍjz}6 (zBa~nP_HZ8@CzyRd?<7ADxݨCwUf ]/߹_>#BhDE'ٴ_^-##&Zۻ59>O[.!$i4^uecΈ*]#'3 ;#'^4P4 e.stq!}kf8)P(R>T强Z7u;s( 53mbML1oWt_OP9s"¦MHGG/Y$ix0.B0wkE`8^t+9F)~(}Rz%54!$BDQ@V6)2 vMUh?K^Po8JC9~xq8ܬv룓;]܁ȲZrUtrP?7U=9$\m]~.(y?PׁKƿhfqLU/!<̋;LN֊j (;73.0ߪ_O[qwd5#Z4SeG]U]tE>V!q   {`F׿+W:'&cn]#5%Q@jP47AD_P6tqlHeM/RVܳ<.1,Fj\YZ:W|n.ꖑA ._ϡq$."f.N:#::wQ63K'Ԕ p9CކG!wY'n5!GM ao?m _j:'kXFU@ٜ[ZrWyN35{RO!z饗vq1[[s29,<4|]lQlgS`ʓUHp`0mǍ/?Zl}οfw7MLML=urGL3O+Ǖϋ5f.tr!w4%"[v(;7? {nM^ yl:k;%%%1Q;s,G}mV2 b b.)IV.(YpaL믯eOΔ)ٙ1[փ^]#;c2;4|tk`[wl#Ma/Yf̐zm4֣}`U]EDN}tr/8 `dɒ;.]J;5[?7Zvtt1 hp:~z.""5䞚 ]-@4|]3ΛHDP2IbKao~X+nR7~:*3sӸd*;D|?c긟~Pʋ.""u^?`jaE{v+;730;v+e_[=a"i`Oɸꂔee[uQBN @G,J~+>$++S~dgg+ٗ[1%X$mb.֫[7''qD<_]ׯW***~?ɟ]k\RS&pL;L6) 6nQ:Xxq1ֶG~6[:Os@Ճzwuw:/+TSWyX-񒚒05Bi 6 bRTDM0upX6jg {GyyXF>dp:dZk'xB,Y"Vk)))ruO?g̘qtgj~ޣU|u\4:acTy%Ʉ$E7b9\P[GEЁ1ftY'AEUMak+dvII:Cކ6]3P,l6BdLo|em}{\M:vYY2cF̘1C.hΰ{JrA4y5}'(iѹ}U^|J~Ţ3re ~*7eO ի)@P~d9DdGn]̣(* 3::)rixZCz=."kƞ[н>) kIr=+Cޮ㑾CB./΂i@E݂B @W.hIf'&5uL klж#GI-=O:zwR"g@@{իy֛kbsO'w";b}!w f*=!懵aoGV8[tqwA+Ú F>." VwΡ%Gto7%̑?M4iO޽{gJv\4|NQYdNfA7. /Φнo]Mo6]Rֶ{!odatP%W7iqcgh>fkGNGwa_O bzKe U-W^OˇnȾ_yNI ̂t[}[OW̌;La;m rV2#&i!kwݤtawGyypMi'P6j @L8l]~ͻrʰ߿Wb /lLI2N:d"%>7Z(DA8"!wĬR)tI@tql'ֶ߹_e:Z:C-f7)UAz ]NRxյtc$'ʢqb]__vڭOeA D$~PLUwKKW=ߛֆݬKJdo)}XRRB8j*Ӯdܩ0٧dmVѯW~ j2wWŋttd]DX qtq; vr)[)] H^3s'5~,E,m6+ mRǷ*ϽS9bTWW̝["7nϔ^ˈܗ-Y('qCI?[OȝNXAy֊jec/8Cy}V[yGYYkd̥թxCw788(yysJv/?[T< @utR(#B[w ;Rmq?.Əo]1 {^V2 c%%%J/HZ4లNN7n 288(?CFer=,ͮ3>.Nnu,Jm}.BwON䐷ipQFC莻] 7rXXOQYOcA :~ r)zC&cr*֊jec-vP`fxB|.76.;mC]Cno/E͖HMs,ۜ;Y~zY d_/c\dLdOaM[u1<I?QEte[|jKa) yI/i2/mfrm]Ao0?_OP;N"_!1M*˯ZƦtq3HMIyFW XnxŚS]'ZX<@w+9Ύ@ȟ?O8It,>n ||XF>oNS~-_~I'w%Nu IDATXMU:$?dP`蚯'(5ΐ2ΦMhtr@8LN᥷wK{WBبQ"EDΟ>-`TNtݻ75;oLw3k>>Jw< Hl4%opB*t)בj4 k/\%M wPeY<44%;]mVٲ܍KI=II߿̝]%g}䡇졨EDn܇ f.tqIM6 䎘q^*EL^ɸs).xCf+'p~\&mKvd™4|ݽnt)wfnXR`+лg^zbM wPXl}ܠ99[`yGw<.")S ʨQ"k3&͞$/n;+?*so<3M-^?(hQF =qD @Jgq >ѕ2fdo ŷ"QD~e-O=(j('p&u˨Q8288pݦ _1o Θ}] #&Y(U:$?{VB07./)d߭|{!oSPcA:n9Ozz#ZE͓j#u3Kfςbh 02wk;Eu5 %ʣ; y#`K菎L{":JJJ)W>FM'څ/#ɉL.Ź߿5U,Dd?qqr_EM䠷M7;D?Q4!>7Ah.nC2123;;6l7.s>`D; oRxv=I^y{rK9G˝7.GFDw۵ x}D}Lo]2%;}ޠ.VK 'X-u5ޭ{r8YuϪ[W^ yzze}TĮ~{]͇.p57XHB>Fh+V5L ^g {+}%n ]#$ȉ?w}LN*gb_Gy#~Li$yo-kR>9rD'va4;ţI=>.N]>˦eDBN7ˡTrGIHhFUiau)73Yj\!m5➕m-s=J/,,bƤI1wu.  *%$ٓd-e-hz=Z eʭpn'꼯2qOɟ.˯Z(^y / ESC SbL7!wFRQgʙ9z42?ghIKI.RUӤ yɓReU eJv&"o_Wb!CsSQUW2.!wQ^V-w?z֠{)?wGPJ"{Cq:HjC]Pw!X.[wzA kz?wI`T|N\:x_r]LJt|!~BM]6_.u>Bo_zt3ɒNutR("C MnЄ.TA\R^=|j^Pplzo?+ClQ8x4ӞhQmnC'Z#73ZG]0Mz{{8ަdX…S(B H'ɹcYAa;*dӖr͋.YX-h*X_ϊ2KF.ͤ;LfW̓ltJ#Ux<9?^s:@@s\8Ja5p"#R&h]OH{պSaT)ʟA%E20<A.! RSE!)y^SFn ]#{i-bOD)noMx0v'(cč4,3s?ͦ]aaކ׮q.LN@EeR{gt9YutJj OpB[GY&nt=ꇵϢr"Lg畃ò'r>_W{5773:@ayZ˶Ͼ_&ZE237r2' xTت:t'Ú;ib־ܵ[wh W̛@$Ki"DQE\y 8B}OIaTR?} BaV2n^V$Xvо'(OΐFFS]ȽP7+++SvIɸiĀںygu97@tL V>@CT^)WrautP>Юd\U3yOƽf="cVWW+oF~,E;Ttr+qc).&`@>Z;ӱtLU|Ͼu@Yv_j@}d=+P e{C}]P̪_WodLNp¦="DKd?{mM~r0"i6CNÑy<N F.kYD"O># 6 r2CXF)mgx ut:otH O[(EE) {D$cEqF8 lV;fF>f#*is}O]@XE3|p;Wﯧiz? ^Ȟ]U:{\pjJHݡwv{{`ujRZZdlUtrbl&MLZZJߩ+\A@qh=^k8AhNcYV}Й@_y,r!y䕗O!pJc(KDLMa[K䞝>1&kiQri">BR8-푟f?w  u;g502'vG?7zh9rȰ=$kEk|`&"& y,+@s1vO$0bi6C""eeeJz WWWs1Y'tJ#!&.ꙗe:O9rTq5x8YO-;IUM퐁c$ ى=ZVII:vY""lu#Ͽ!U5MjMZQY%c㊯| 5Z?)~bw @Lڳ;1W !Xnm"sMɸLJy擛d2etD?trb.""R"z}nj7  j:fWo'ƾu>x;P |r""ˁcO ?v$XEDdj$)$8icW׹di} Qy8kA]E%5%m{䣝{(ƞ}|B"r)QțAQMQUtC!o33.ee[eUJK U|;rHIS1`tNQL^_M퓣G3 PnWҫF{L_Z/vVKtb F`Ͼzsv_zPȽRpjV;-bBFU(@lr֫[Z:W(+Sױ8*qФ\LOhry1r?1NffXs̡#dȊ\# V amּB!`~iIBLe %:z53#b+/+Y󐻈Ȇ e%[PPڕrbAsst@ώpw9ZUǶ7xnu.zG<uձJ\DFh(^[ߠyM+qC ?FٳNDD]䣝{( hϾzb!w$BnmyK|O9gxR{"h+/.֤eeeJBGnjW]] ĀJƍt}Wunjd{EF%Gh>zTdo,nYn%h"Q""+E gC IDATΠP{4Z}F"l DLrozYy&R8!V2nn;ir` 6Tq uS;B@lؾ}qcDw4 iB*'tT W//9,`Ͼzٳx@.n`.& M{NmHdiiVyDˣ^;@4747qUl =]u%~핗iWrڅ%>ȋIZT{MdD,y<̾g_=] S2}uirčkX &e%kr9}Ŋ5P!w2җf{#]A]KΛ&wyJhؐ#/!"Th΅%?w@wo$Xy*j=}]̓PȽRHܭwZ)o>Cwlfne[ګJBݱ DIm߾]ɸS"MמhK h<+]7#/JUMbE* ںkHo^hOe?sILݟo^_ӧ⋀d=Bh2yՆ OOY0Nٳ[}5xƖ2!m~ P C>$K`yukr'no/'%fIeWq7lXys#CƏ/zTD۔61QFxr) =*_~sm{Y'GrEœ g% )D־<䳆ݷY 8¼?''sg3u6iui:FW \.O CRtA1+  j0 f&Kk 'eGjB4Jyy.j" o߮d)4g}~1=733IO߀{Z~;uye\p%z! ><3ΆՋKQTut7(x%^r2p$Kjʙ`92P1r&S wS =[(Մ_솩AXr2t*k'=`fnd;RfMW7|۠yi\݄&B)#~<|..3hHe-uu}Gm\p:Vգ?!k^- wvd, ChtȞ}ǃZw`>HNL?k:53i܏FL0FDTff: #iy)zCpDHF-N"B'/U%Ik%73Yn\T@=q֫دXqcveee@l߾Mɸ2ibRďGOOY}rQeꖮ-wi"(wη)gɳYrw~2?<f߳.L6EƏwK_,TO;r2'=Fs@8#PNڦGkR<9;73Pa[<[UW$80(O_|rb)FtjlRPP NS۰aA~.JNO1lEmrenn"ǂU5MK=]Wϲa9z,vM־鿭7xS'1d.uYC{G;h9QGa`irŕ(? 쪒=Up(C0]Ƚ^J>Wjbv "jBiG5~ܺyjكTT,?}D Gvju򍫋5 VsskR4- j>k&+Wt̒R݄&{\XɋR'|ΜI$hoW_R]X|^_|ߞA791~uȂyUJm}aa}}M"7Hz*;{W&'3} Ghdg˸3Hr2'kr3(0iiBh/,!NLH" #Iޔ @Qmfn|3~6.V-Qro?,<*k#yȽT~.VV0w}WɸSpU]ڞH亹|r{oF e*O"[wҹv]eRZt5t"7.z+?lRnc[M}C]dϾ:iuQh?utOխ|Hux]ag˦e@_]-W?M='151rKYfD7ꘒd-vH^]Vj\]s3enC`'Rpk CUHp`0)^ޏT[Z+Ͻ{Y0Tn>m鎳W Mq<&Bd4ُ[jegBt(Taׁp]83EDdQ}Ͼ:dvbHAsbg(yܺX; 5N kXNhfGR:f{6Zڰa!w&t:uQ r NU75:[ts6 /Α 7ѹh딟=Ny qȲ. 9^] [*rAX/l(l(ӧNKʂϕy }\f \9rż9Fx}Ͼzir(P79CtI7zCϾzYvΘgB4Ӆn'uR4z4ӑj9;7?037MI7u^lڽ(Axড়@Aئd)v\M]7f7Oqly2FJUMT4N25c̝kZ@[ttJGW!sv2etvvJMӾV|s7,mmm""R^^.===rPn㏥|]nk'ǟ|Vf]p,]Pf,6T}2y7dݦZr7 d']-( +E'~C?wTpس6tC),jB +{y)3!-}ǿ;(b-v( Y\JJKKn--BN"o&@P3gdGW9>1A.Mʚ>Q_j}&s9pdҥK替. qܹɩnZl?Xq)|`vux}AL6Ewsk7/l.6ӭDywIv…s"Ǩɦf*MN`4ZLp.`t'DRJ3Q!|X -!o rA7pBFGMWW+//#믿dVrD&]yJ߻BWN0deeBpdHAAi[]viC'."2.!Af<_f,j?X徻og4Zu@쫗=E{Q} r0U:Đ=UMwLEb)4N}s'' 4[U`˫xdÆxMƳlRRR"庨kzζtJGGNq7\[9):,FK.){g/ ?r}ɒ8iKlrȸ>m̞Y,SyҔwTVIm}쨬zwm7fSht8C}}2~8a?-rm`ES}v]1o`Xcv@>?jr nm|X䞗ey]{6~S hV$yu^%cYf!wcrw:$ wQQwi3 ̌3 _4JIh]QۓB瓴144=OvMhrbv(I5V Ic(ѨHD`*`;9=׼3uuDwan꜍KΝ܁E?$E||q FT5V6njG)w2^/sgؙ__JԮ܉ddhh'Oe)q1gc{'w(HYdm݆~?~md iwVTTFG`fmfK s}jcp"#]=}p܈PX pAP3?/q{Vw9.I;iL] bcX"k\;F,:tws?= H~{DW?c!djeF}T L̛7O2uۻw'־.ھs2ٸG?8"koo{;L7ѣ~'{|رc,6͹܉rSfz_<lOsfEMeV(XBrsf} !sb-R """" VޕADDD@O߀(NBCbtq2kJ:Y[u-.[2uzKD2xrp Q%sױLto= Ũ9i ɷ>f{'䞑SG7D c#'կb_7/⵷K7,|rG|Y<QendiZ}.~ y^|z&wY^oα1E+/-TaNW$DevqW;,NP۷d_Ũ+ףHr%I I)䞶XN?1xsnæM3lEEE7o iux9;r,0uj냹.8 )$dn^4m V ;E7V1 HDDDDD4(2qg>ӌl saЧX4":` mk 9x|ep"\],r߻w**!*֯EE+%U{0N$* Q-NgZsw0ݿկ7().*Zis8hiiAfx Dw" ,a/PԪ0{VѧYF?m| Nz]RЌ5?/f^̉!9,]F6; KDDDDDb6M7;ǯ|mbFD^ghfE8IO43N>a]9bU5%][55غg Zkk+z{{h9$J.)q1gcAdj-ҟ?|=){T?@r8ᘢ"| >tkp'Ev 6;/(M^t[ uI]q L=+B91"ƺ,7cCn<>8|G"""" ߯̿e]rLDD$huP;/-7u#mq,'5)=ne!) _@YY@܋$r[5o D$*d,iLM:q`Ȇex9kff&mŊ";vw(aHڜ.Tf܉nC6[oN+MDDAop*(ko] s}3BA"6Z+w<{qq1v.3N$QbvqFҔ9Bb~~|4h;_AypLcG}w#d܉jj w(3f IKm|Ap]s 9X(qPiFVN6_]4"52E)MFlErNKo7ok4ZdddU5{q1qIJ.)s>"zkDAF"$s'ӯ̟N8hwDq8Fj_ 6U A5s/pYI&Х=}#*h_`qaD0_ (BDT̿3v얱J6 dz]Yќ l!wbȝc.PԪ뺴nyuɂ9h:Br3[3߹!w9J7OHDDDDD>WnwX̗D chsX߰7'yphVjwV|~ ]/sŒ ;nK= C.K:ct"(Wqr=~J#:l#PJԩS9NFF[[[Q\|7/$$gLU8#(6;m`{tYؘ0^$^VA'0J#~Ⴀ .AK=}%yoga"""""!.( srڭ,Vfkމ.aw\0B( RD ;TVVhVԭ9$@.0c MZ+nTGmmm qfȱcG Ѥm-PH.TfaL3|h$Qkr2 cf}cl "#e?Ycn䤐9>Zm}:: ݎdBBL3G&I$C#0YnGWO q1Sa+1CD7.Ǜ׺2gccxuѩ޽ݳޯ-koz|p}:;)T並 @?;{IMl =/kFyd2IHz6~(wxuu ҍ^__~K4GxC]ǜn=djXM 2Q콄gzq6+nɆm'#]GZ[ ߼ RIx-vL$seK%%@bcn^nF1upPXk271v]TSx17{XjcǙdQ2_ΝaDMpMp:umBVfkX$hsw e{kk+jjQVV>%rw8ػw-s8{hOIb߭LKꞶ8VèQ3+n>w?Es>S@)oj?.y^v ſ]tԻE= զc, .T}"n=Hf@Dvv$Qkry4{1nv3owz;ϋĢx\pޅGOG܉9.M#//ɉ}E "R/tq78Q# (Sbws||h~}1%Sj܉˅ݻ_RGO4KYΙhZ]~m5Ǐ;[+fOcn v $#q1x d`hd*nn}E uɼ> ~~stN焷};,wf>GdU/F3YP~ LDDDD0VrrsȽ/7IY߻siY8"S0)ꪾp$E3|Wn(EGk+ (cbwsw8ؾITVVbi^סnN yZ\n/.O$Sw܅!w; bŊCvrokkG6k.B2pߺ@1;"7m@)ڤ (^[mv6j!?I.ul/B +(tW~^HnnN]VgWchNi${n]rc ˤ[M2$}|=nkM[P*ȷu#mq, /bws݋ҍ(**kҍؾI8Ԭ!wF]]X&Gcm8"}ewz},n:~5?3r";R?2[\S;хw[v vo`tV[!8Z>fJ7BKB[nfArjCKfl߃Ĺcl ӏyޯS}1ξƻw((%8]nou]փ(8yhm?9ܗ$Fy+ Qy,wbws;D]]ߍڽYcc#ZZZ D$ݻ_u9KcQ|I͒}^ڢ c|Û܋Vvw)Pdu*^°l=6?PBPPn)xkY\lT}[; GzZm}|Hsا7;7Kk;рȈm>07,(bbbv]ovr'"";UPMbGwsM_7o`dӺhj(ZUUغ¯%r&WVVqΞ=+1fHbcN7D2V!6tQSS9۱c&Kң]>]|UUURh4ZDrv{djV[~f744_F̏xV\S'!{WqL(~饗D gd?=QvcEv)$}т>Dsm`hd*nnE ϙ뺴yfaa7A1I}w- ?7c}U UZ#IR6p _-nkX4"4|"qEYx%9 zA聲سǿjyy9v.UWWcxѺ?q56CQQѴ&1"|zl Vfkp{"a0NJtoc@L3|hV(%_sD:|8Dug nM`/+݀͂fKDDDDDg(Bg}` Z@DDD -JNFjFP+5xxzFE;Fe(..QQQذ{%S/ÁjlZC$AzLjB鼗I"N|\a~/Mfw*ػw('kűH[+nm^vwVV[m:٥=א0{V=Dٯ!Cw ͥ#GyKn^qɴǞ;J'H _V2(X?+~}[96IצuKt8(//C]]ۖnT_@YY9 dΝp ޽&WRcn8({^Z'Mƨ1x%ʾ~g{,lj|碌 Bv*NET{܊=Bf%נ0? ٙ OvkwY^;& X뒡V c1LfCc"4HWjs"?7ݳ^p!)./^; KHrnBkBrsamԪ0H 7GWQ87Z[[QUUs"$'k`J^N$8{VjJr IǛ?8"Q ĐXpZ}(.^Uce(Hl..D GazSIܲE5]ڍ l*^s6qЄwzwd\2sxGK& ޕRuɝǟxH=H[BP`6.]D憯E{"mZsp_LcTUUbbdff]EEmV܉n]ww7v-qkԺq2N #/݌O?(V^Ç88ƨ,gUID3K&AKFVDv.EQt!Kb p94t*n̦ 3˟^,x]-X2ך00L ""Iuz,kSB})$bUk^㔗+.͓T&K.vz^-ɌpGOHw,yi>Lq݅}<`9v صkhDN"hoޏ]<܉K2 tz[oFShfܹ ne 1>TSl21h 8m DDD4Q6vk r|g|ddu*6b[c؊BiFw5_FwMcDS07UR_Z]Ua!51>o{;~ҋxs?3 ˿?Sm#Mt \+gjU8ҍ(̟VLui;z86; X M~cLq6yO;e7Pjy߽\r!n[VpСp!яs\Jj r5-ℜ&FPt0Fs2 _V  RIS.AKVZ _tTxOY< >osߗؼhUǢv }+qv؎+ݵVhhT͝7ؽeя$ i$IGV4vq͖o5꫿իQR Ǵo^Meic_tM 004C#gf^.yd s]= q$.z!e'g9܃7ݮ/\WܸW<>w443s[' KDDDDDNJ_@&ƱDD]|w!w sp_֬/fԦuK~ѯy27x/++\pYl߾h. v=-qBu A!F[ z7woǵkCCDټjJ֯F00t NV]ЍsS8&30^ |v%I0Y`nj|G0KN,tJ7p 2. (5sS"Գ߅T!T xGJ>>8<7;DDDDD$]-4—H\*m;_qhs/VfkZ}qR$j8?:<[Jr\IQcb+kz~QQ222*zw5(//F!_FwMܱ<a4J?z/Pܯ]&j}xxX;fwN@L :v$EX.Xi/vHHbm܃}Cy"#(!|H>Zm} ){MroRʀ[#+'&vwCYDչn{o LgaDDDDD$i_ lu:ePI++:|ō};i]HFۭY9nwX`}x}3QSUU =sKK7v{jU[QTTĉCtV޽[ㄅ&qISl ڄ(NNsяu5ЀSM͸pq0 H\ ڸMFc{??X%?wY-23}1/1EυQY8"ImЌnBTvs'ќyEH Xij$՞X[g^fJ7+I^$N{.ߤ3{EQBӏpK_?t^&x1]RqRgO,($:E@DDDDDfL!3r>bP .U&ƱpDD3XkicYD?/W5U)NNr104»dr)h7b)z;$şNk֭g߹/?9"xfv{/6n܀={jg UUQTr' Ϣ&qBu;\S$?Kc?=[݅Ǽyj1o{cttt $BDt6 Xf@Dvv&Dٯ! k)W9sƜN?6>(SK9s8+a~[ "\-sCDDDDDru^9b_b""" ]vI2{ LzGN7S;eHcb'QYYyee娮~Ar^Tc N j;wٳgr*@xXj0tK22[ z(_6ǾvFGG"rSav-"PԪ0{Vz]" )^$xtìS-1׬*¡#f}}myaf%\s|Yk/e&𵫲I?tHlF~ylZDO'5Y8TYqBضf K{CC=;"N |v ȱBq] d-`]h߾vw]N0f&QMvh`n3fNlҍxknU +7 .\4^Çqt3<4`۴A$..U&R$8H~ccJNt_)ޤQ4#+'mB}gf B$ڄ(D?s9r9ӬtMccNd""Z&>udu¦uش)uM~ i]uw@ε7n=ݥͽO{DJ{B\4J#x%w^(-#h!_cNǀy@](EtCݛD4AKٱ[ ;Ix]=}SIA~# F h>mf뽬i8H2z|F_q5 K4 kfux({h~Vs$ t^ WrujmmEMM59iH1p*eG;hVfRDj<>sōm2.V'u_t ntIj)GŠ Ovk'"uI]7ittG~nm2 yJ7wp}䝢jQ33=q39HUa,E.ß.Q09=6y+X86! ߹//y WTT`۶ I֩YCrҐExu Is/.b=bUxQ\]Jw8xM# OvkwY ?l+e!~HDb-akΟI'OQ\sqiyu{@[5:r'""""ryn18|E*%`,Qe rˍV0oB(-iQ¬ϱrш" """""PPfz@!DDDD7| U"/yd2ꕏ;0Mݫ9\TT+VQ5ڱc;V(!O$sp ?vH=?(͎X;~+[&\Sٰ/"ɂ!.tmi͈$.JSK +BB6IϝODDDD$cA;(BDDDRߧk3h=>o4m,6y2[w5Eee**aǎ풭QywqG]Hzv܉ÇF,M|}Ɯn)cwi{d2 _q>%ל*,%Sqrj(6W]JIOtjj~h%#+.(uI8~,>]q!N ~s{0Dž?|(wLEkDDmb`h:/Ih}ަŦY\}Ekk Euu5^Ipb+k8YH2\.v|'O s.F\Y?8"scwyV߁Kxq ]r{\lbsYk , X6 YS5/MV ~>܃@f{wGǧS+ͥ~ nPko"iQԶ.N5haw,J}ǫ{ߜ<;:Gml.}TvgqȘ^?~\DDDDDDfv{R ,9*@D eW \ۤfdIҶd;Vظq}Ϗ$[zT *+Ew-Y+E,]v{@.b߁+n?҉mZ0nǽ9*6Z+nN"Bw$ga,QJ7_V8.ij?vRND{O< _p߫m߮kH\@Kx|ΘӉ؉},Yin=oq\DDDDD$ i=cf뽬i8Hz. 6)#"u bȝ-J->oe\ݟ~)|kώ۱bE2339Yhtww駟hB\lo_칱|F{oǷ}*~6ˎڧ*, 竑eÚ<!w.Z/X,0u~lj`e!hV)$1ҍxk|;8y p=iAoj[obcsw" """""SP3 |Y9ٜAF-Rf"5V"mq, Lt/5Z3p|UX_ $= q>qtCVeo@Tx@wصkל;!.wwȦV/9]vɞ+dz'Z/8m#p:v1HDJ|51,.vTj뛵+ '2"Ts,//\.D4t!wީ#8uIb~g_<+ _F,3 gډ;]9ǜJeOΖZN"" F&Va;D_OO>oM`p*į^(AwދbϞZN ;wCsrɀ{x& r" """""LwRrK!wE8o9NDDؘ(*>}XMD_6Ϗz{|FbstFTUUb D744gm-IS0~$=f7Yإ=s'F1/2ҫ"#"0tDXݸ6;A +݈,4mH<=8[Ƚ /ɉ c'CD7:=6|we'wUUU"##w$?>]v嚛18%[New"8]{,_tjd-J)Հe90SYT"HK͂kX`ϟ$g<ŻȝXAt. """"6|Ќ՛"̖K QiߧgpD 5#mN56 wt==؊={d1Hpw9;.;v= S)|?cr-wNuk:H~3.A~nL%XE ;f @D&Bߥטnko5H<ժp}Xmv|tʌaC# 2p(x("""""is)i8] %D˾Lz FD,VND7ű,0Qu~ `ȝn mۊ={j chhϢ6g ǀӍ'yAxr=}RPR XFV[FYdDTwey9ԥݫEFx|hRVAKA,?~-pڵY(Yj},ӑxnԪpuSǘnfnan|Iw*9\~ 'pQZ1Ltr4?4q0(>.YX:NDM3 YNcc#** \.l[wf#hlec^djn%"7ט,8/!߰?9} |:x-;WUGӑ63m;|}" """""{㳅ܻROg""˜(C=KH4rO[_ޓgPl)oR[(++g1'|vt1.nߐ9t kJdeR8042f7Y|"#"e90-q8]\AD@ZqslR&_Ke Oɿ?=~Շ9q/\k:O~sS $_w(" """""2iz l]:Fu:DD3mbgw%J7v."""""" !R L|ELzq{f(^{ƿ};dC0{=b\g'Lf$PkD\Y^.)&DqSS}3ŌrO٭>(2"b;`^d"j#"݊P\)p.*M='~9H<\DDDDD\2ٞMk9-h 61#"A,?ʐ;.⏯&> P|rr=xf 7n= ӗ bΝ8{VC_5,Me- KUa!(YʉO@vۈlCs["if,/&y0'-;Qf98x.YƋ|,sU_E@DDDDDd@)C<BUa, "6& 0n?ꍞ~K&?1X16ie6iOshs'աV8QQLxu8GIto krdp?ҁ_zCi])Z.v;\q<@sj4`Yn6ۥ=?7/6yM;cx U(b?FVϟ׈E@DDDDD9Tpf{B;a'w"" Z8[{gO( KN;k:E|aoicC+\I _aI{:3Z[[kN I|B˲#xjɟI+5 0͂>%@"#"e902|=,W\UjuI>{p.W'X&\DDDDD$%V%M2%ZCpʎD~8xkO?׾sM hӲU+wp3khh;wٳg%sN qtJ̏eMǜn< pfӺV IDAT ~96"s>n18 qd/AŃuIܻz@j-&_ hbMyAUx"3/DDDDDD";CDDԴq췧icY` z&>vjlD_zU}._/H BPUxq_3}˂A`r뵨y/I7 % ZM<c㢶Ev0^Q^JקN :Ήz $W_U}|чB>|188(튏uȜ[w$Ķ2I*Vѭj;%J*P`1cIy ̘i`4zii5_@&!" r%(wNW/CDDDDD2tW̾\==&.F9Sr'"qOhM(v,qtPhLEUyIqc+ڇ_?#p;ғK>/Iocb[^QBwls 1!a:ŋPQ^NAŌƦfvZlA)mZ;رTSObElɘ-$ [kWd7:e%w""0-=nr COBw80k۰~M EeoX ^@tW9`<ܳخ(?sWG!"(,@Ō2,YU%271ax""Պc<אq-8Ίq)NW/;HFQbq&&Sd3xS"d-`:ux!,x+bS4ƥ!E$`"""""=pC84Hr2$ie&v0l 6K6s I^یψ⣏>DOO7n}IIp"g~~{~*dϋ>KQ盅bB!f,)_v{"d̒][k*+` sfG4ƈ6.G>!ktv dzKrp=OI΃r'"" N0 jm]^v.}wܖgz9Ix%|5$lX#S}? >b]GW_5:ផ~%Q_ d-'a?;aX|vL̝;}XQt$͚ cRج'ic qո K[s믿%>Ơ;v'\z!&0xq@DPd=nr =M~ƯJZ9bf;fN3ה(O2媥Aw|8w5>~֭^"s"~?5}?Uxvˋ!կM ٗ,^2vJszY]n`2fr?`ǒ Ef]r'i$Hק`{_ l.܉0J<({QE rqD$ܬtIm2N הO%}I xo? vאj!tߺurrxO?pa:t1x`_b^R"A0~7fzE|v#tXbFŵ*3;%ƎP&c][CJȤ ko_r)h"""RX%pn 9DH͊L҄!^fb*A[N鑤;n5 p'Yi`۱މ#҂{Y>Qr!|ꫯbfXV9pHBHucW&`;EOEyDbF2MLdİp_,nBD!Ueȝf2fG4ƈ>?֟#;NDh4xHѵ1V[>@`f/w/c|Q,΃Xɝ(L$%{I%ۺ\l.Q*v0e&,.Ӫ ]|ZEqwpPHW_5c1Cz2z)2)xb]yx L ںhxF)Qi@aKbqN D.Ʉ>$@#}J缶|~$D_ w.+R#""RflјBDDW '[Dm30~Dl.CQ^*vkQ5km|V/3N1EU}U˗/c_?"ꚬ>88sۯſ^L'׋Of0)X=X]+6N~UD$Higĭjk`RtZf tq ǖ='q* YMex`eNOVp!א4BO<Mv7מVe%ٷކ@R'Mgpp---/q\ 1 \E wb5kF1@e]-IZX-a2fk?!wɓɘ-IMBX,Z@RQ΍ANV乂"=B9ekcG*&,_V ""Er}a@㵚xvIF$x/ڮ5sz%kz Z7Ev|Щr[nCNN.MϝkAWK1haYYM7~swm|6Ubdu./GYiZ=bmXvPXۃCGcՊ*v D$ɘ%IMRCV%E2"071+!Ĝ9¾{m7I>8CDD d;ݬ9;Ph z|tvIpAN4ޮ5BKDDSi`T`ǾZZZp=ku۸;T;~?ZZܹs¹sd|oE9rIocr7U/B+*|yhkb;%J)ae?e v2p}&Je"]EQemd̆N?0&yNWdI5 e=0,i\Ah_6_̉c'b ^т\IB QXr IؼvoAvxSXa<裏b[ZZru ε`pP?TV.¢׷<~|ޯuyoNܬ_v!Ʀf\w 565i"P`YHL p"o1E;]XZl~fVC$Q1mESVT&Z-FNs^[s 3 DD tq^Ir'""3۵\"",|ЉNU~c?'B~ yyy1O]]]rr昮,Aey4sx;X_hL5%<Ҭ] :f2n-45ee?܉{G<<:W=; 3O{6rEd.#0*$8:Pv%;$SZd6qWvcenZ/<;IŮ\aa*hDDU\  #g~:z. ڮw8nr Id""p]*ę{}}=~EEEHHHDZZӑFt HGZZoGgg'~\.|>ߵ`Og<,{`[8!Z<p)#awyUrlKקZlMv)U]-jB>f:#PN]|S>-obՊ*ML̚ɃED[cw:]} +R"|Ó2MoTq'e+W /&chZ版Hޜ>K&DDDLː;EDŦ2<kOCss3,fppΝ .%%7V ֯2CmgcUe r^9U+x`p-oyǎ|h82YCUH:/LIq82Rف$ NWd,V"yC^V[b^O 80e;"Td4p(/1㍢{DD1}7ގ./j"~UmzQXX?^8g|v%978aS"N$Ixa!xF)Qj&&c,~0NiQYqkO>c}GG㣝13 zGG1719lyn&&&3ND3a-6r=R>1Kpځ +;$t} EmbWW" """Sʮt yА{U.-?'w~;hAZ2ˋ2BDD"]TvCss3466{-Z xpLKNFxh 2彡R{`*;%JRPq[1[a2f).XNȽ<.1?ӠԌ_w{"z~bB6< lq5z"R71:*bkuzJv0%#-UbIZlukku Q^ x/fۣ;<܉"OIBt\mVs'"" ,z'7(6ȪҋYXUYyI cx*GDm|6odKw80foBg%s!C,X![6yqlxAUˣxe˛龈ۨ(/sng<1єLlNW/;[p|I1)ؚ8?.eP"Zbgp(yb~߶ yp$܉%IBm]C QT蓵X+ dwH;ʫꞝ 1qqq<"HXTMѣヽǃ؟ dB{D͂ɘ kb⪴b'֩2^N]|=?Ӑ{XJEZl=>j$ɘDŽ=I\$PH8]gkuځ/9WB :-;(Fv{Xɝ:%~~BvDD5:T堪,m]^oʼn3=^ za6y#T Ȭ P϶~ "'p5$qpd kEEkv L,b˶Џi8ˣZM465G6ʺ -f>zo"ɘ-INWHfsQ쐻8ڀ-ju3OvNlܵ|)Z':o HKaI,nN^ʎrt ;7*KDD;?yI^U4(/4((c_CKY$''  G\Kha%/_{(j6U/b]%#CE0,YO tZ,[<}5CG{*/.Ý{QQ^<#Z̊"Hw*+` ɘ Ve1^Hc / av~x'f}5>Îu *=lgXa*+UvБ͖7DĄ<lxṗ %Hק`{Qvmv. b2f rt1GIiVᳵ:f؋/CUWS p`25\鴚몴[$$&Vl1P_7ή IDATw7[ޘ5ɓ? +4.'|X-W+V&iHtf|?09fg3zOv5X%6(X;]S'^gpIE9\3{8''ީ=ɀ'{ʖ71ELC+NWDRiYjNW/;#w0N*jk(Z[w$ƣ?X'|ch&/ByE?wdD  ɖ!wXɝK̒TsgȝjSut8|Щ}{~v:r'KSSK`]NÁ0{[GN [-*+Viژ'{lyM1!pɃɘ%zȽ>A0WLD.RFZ*tZ 1Qۍdl<c8ڀ nx^!w[׮ܬ0'elW5nFKNۂne]^xЌt}dd1Zl6!ˣp'^mXg7Т e3@D$9p#|=9Vlik]HpV 38~yb&n?TF3_R 5nW.ӭx,2U _OuH6tuu`0 ;;qqqf\R̴y0'c^R`F}| >sPUU`p.tG`w kEEklXͬ1:uZԌ_LjĄ<lxAՏ V$"1v0 HaHKE>ދǙ$c2fr=CNbYͮ nzlF d >VCoKO9@!""Yr:+iw.EHC$S:M<;fMyYjǛ{r'""y_ ؼv?&cpr}vOHHQ0!=& ZvM~o3\I4tnpN:{{m]^UMmY7ڕDYC܁j߻VV]N]|=?Ӑ᧨(/S(/CcS3>͈ɘ=C([k;mkuzJvItn̒][k-+&j| O[OSխ5jP+!tX氪NJP!wBMn""8sZQߕF;ݤ&q_5%d""5f6oĎ}pL*yΟwrmE "Vc`cgT[&'# pw80fvbDZL٭0rTwgƦffh6=Íx|#E(p&HEC59=N''n\խϰ]eTsU>So4"lN#""`;U/# _!""RIBnn"" kH}UU@z!=J-ZZ;qD lIe_0ǮLVgoJ{'w&MEÁ?S|=?1!=VTx/Y[yf$ Rv&ABr'Ώ߮;de?0*cɿgc kҘ_A,ԊR]f*T_s%A""}ިO1ryNDD$K҈mjcȝb캘sk~;`=X}Qi!1Aϩ>ێcgpܽ4+L;V}m]C<ENJ{vhvSqџv. b-4侔GI)ZSR_Z`LdTVk!V]xOs(?nBOODDS+eW#}bD!wјDDD4 >?(z'B'}7VbǾs8qr+łl,*)R꫼ۛqlGȊTjPUhn +}5hͺ!О*4sb3k{cVB{(^`Y݌B B1|@DgPBDTu85&>ߞlM(ԫ[+|n> 3kf{̱e2N ጵW]ɕnގHM{~[V^џ:LlNҟl ?uFĸxQ"""5Z"M殦p)N3˰ȀZ?pğ{0 %&w;}d6>ה(~Ep`25y^j& Ͷi+N^wc~!UQ^{>wEԌ{COb*X<=t"*It+bj#IǤĜ2gj ͆Mןr|qApf}Ác; kLMh5n1 B_+N7+iw:#}"CDDDiQ^bFS_H7[f;bZy=kOb)4t\/"Vd$aSu"W !tGGI~n vV# '1!wx͘i'{ ӐU+}AѶV=Ác=]X終c2fr^ 7$h %%:: ]B{UT{38]u8xFq lx]˗D={c-`:r>V4EĸxQ"""($&[o:z\!Y~MEIklǙ$4K҅gpH`L ^Tŕl} xgx8րpذUM`HJڝC3yr _4ERDDDS(Eo35$H1r IxNVhLŦE'֏jm]^tGʃ%Ek`;$% g\w8b~?# *$?71aV$tV;1" W]#IJR$Y< J*~~n춷fgd|q>s2:訒vL7/NDDUK 7UHqX՝(,&c!wKD(8#iύ^TVXzlJ۩dr&FC?`lFu<ܵ|ȉ+WUiEt4'4~*)l@D;?9sa@{?c aG򮡬N*Me]g">Q=0,ٰa-6J;t~'+[ޜQp߽kq - x"=` !ޗQ"5qFWyP,Td̎1^9if: >gpNW/lAe[ |@̯!*/㞁{""BVs&Of%w>?J`,|ƯFUY;zEr4!v)r˵zig=J~.kDZlY.1?cpO`isMLTq;w`¿v[w-gOws3!wxXm RJ@ŋn{RE>݃ kD߉Lg3N6`kud㙰n$贊~+rI E$!$r8;3yLCMN$':m<;d RQ{!w""R<}7ގ=رyrfxFx$OJͶX pՋ +<MK@Ջ`x(&c;tL8&q϶[i5<8Z;ٞ(tg/V\=T O'm;9y˶Pl]mXHbyy%Όr EN3N4޶w8./h""RP{7tC(&iPd}?q2snΪD„SјٟƦ戞i}p߽knI D[`bW紵:ر$>}G8H6dtM۶?RY{m?_V}b+zlCTBȕVTVXakuխO[a~˶dJ*)/g\=fʱDDDX}IByC'CDD:_SkB1ЀkJOg :Wi5avkˢEÁU+d݂iU1 'H1[aɊTQmYzjbH>=|~ȥ{_>mۍB>W ܃d""RyC';%Ya2SLܧuGdw󠅩|->lGD }fplxAl})]LCz"T^IkE [kIz~; .l5>v\!~p}xx'xEjdq""R/O~kiq"m9W^bVsq_dȝTK{i>v;gz)4-,vwM!]2fۉHFG}1ozہ hLl> IDATckkuzJv0 Y8pL8#(@0 Q!^B'gp;vׅ|A϶9P3lXwO  DDfNy%,BVDDDiQ^bƉ_T尣H9T]VvYQhLEcj./5YYaHFJ̢WM=~,Ye B]*jR$19t!sukT=C?epz'~)w3O8]}!,;1ODDy^9]3m#N0#"" >% ؝W`d-6om]^ig؝$g+ bza[zS&&c"D q.hljĄ{2ND@eLƢ NW?cwsgױ,V&Sl 㛠٧6g/>mZ,cBsADD$ H!Fb$;?GD1jI$!w!w""QG[7tfЌ)!ܮEkjI2REPo >K JHNW/C$x, :p<͘LVg*@jP)?e^)ذ)S[wGbgp""_Qa7HCfVN PUQ'4" pd~'""Y0qL;Sb])$)aHY2R 1Б!+MZQŎ""Q%Hק`{QvCU#&k;v g8VuNд c}<<><+W LY3 .W])'ԟEi5tZe""3; w!w"""AT]N&"">YMex`e;q )'# +r>Y p 9?7@;""?{G@χ=cGLlC\],ϙIUle %_*$Ū_o~YZ4ӌ>I ,x/Q2Pa">ϦP""k[Q/ш!w""";+$ 7[f;(}הzE7Θ {ibz?y봚0*DD2epБ㘛e(HsvZ@DXͨ?e]WA3ON,tv 9d&eht1]p uyJI@?lXwh yUҽ'6OBh$NčyC(|:M<(_ ^Q&"" <z Mv7;aw cTLL<du0PոOקLM,(lMͨ(f3qytap%r ,fden^<:_x{kܳ'w>iQool+tm""I^:D `:D2)cǑGWƸ҅ =&Onb!wز>kWuސSYqɂoϧqzh'N1s8ʈʝBS_TMDD }ה`oVwW;nAUY675$E&*$gZ |a?xרh'2}8t8VVH1GDljDVF&))eP(Hi/GP3WTkiFzlCDۧ"""9p:X ʼnQ8ԈZR*Ij3NDD$,Ue9&;&d$a|TWV fh珀DDqP|Vqy/FD™YYHKE>EpaTjbRټ(zZw-_ <aky_XԣjPYaG/m B?O5׮DڕaWwz֚t} DD$畴;b5'F1NDD$PUE)j҈m{hQ^h`G@ET(@{Ǜ{dw3cǰЀL'k!7HBG޹O=KD$O֡AbBw-ߴsSNQDDr&UEa)(4trdsDck jԈ]׏!^|Ȕ/-u v|M|9~7^7١DRm X&p9Pv%;$boWȯfKC_x扰ڽz|8^dʀzla)",zȝcDihkug$>*Gk ))Aڕw%YRgGDD}CQ"wX!GDD$>% wTHtvl.cG͢B ]Ch=k4Bc*5$И f;E{R&E:]Huj>9=9^7~Q5+a=UtsS򝰪SPYa]˗gۺ{P(H@Xe@aGHNlݽdt[޶q'ܛu齉iq2S:gM3"g'C,[nh>+0EG O"THꉄx#ޯL9_p}O(X/'4qyjŧ.dii\-T:#K:#HIeP5/ ;av.rAD> /n=gNۛY P^})ɛ/*S3s{G"{vgl!wվ]YPB` ׅEd)~nrnRIw{oUH_!%௠S:j VYb:pb-n1ᑸ;{V/r^9tL~ihoT:pr2Qi) zBts{o s/g.f$skcBB]m ௰<䞜N_\,gGvйc[X>iӪʏW$?;2*"<*>IgT3ʡcʡc~};Hii?Sok>O]0{Ed$g%9}^(XG @A%[uyVN"s1EX[bgo-g9b|;?Xg{ɽ׎^U.O|ѥ|UPBz˯Q~ wa;6sVUWrjV:yⓏ.X (6Q';5mR!3.)1 @so|bF/ED /ᯕO!5fTo~qhVZ?M @1g\N7 /J-˗E$ +_dkNO@%=GK. /X\4~]Bלtf~3\ x @~|ՕPFNV  @)>|JRr +&x7[A~C?(^gAw{c~CymӾY>wW *w$">DZ_<Ȟ5#{];hJf\0 tmv_Ggli٦drUKyv#@nWF%c4|LB˵!׏%^eAޒ/^s|2)/pV3}\uL7ݮr{e2 aʩ9I3*f1F%µrQƬbHJ|nW6>әy?,q>)_sYKEΎ-a?GO۩o g+/IG{dUWɳ<%Lzv};_U݊uc”|\rJ[/؈8frGgKNQ.vx OrX$6R.Ifc/vs JՍ e]\_抈\NY}77J{ED];D7EE%9=+c~vK(X/* 뤣="U?J'RM_u8&(i*:dv_aFe{+bCR+. 3>\ٜR;N&#PdI!wK~UpwFF9wFOҳc7Pl,Qr'`B:9wgy]=\7KKwu5>J[)S3v6=̜$gM-׎|\?wTa$.X=mV~X BR6b7wF >.VӡʀU.|q[>]fru0o{scsWPulTs ;JVL @)VVHg?|JI냘n+ *t>(ypWs݋uZlA|Ts 5ܮ%'ɝ;Ju7 λܚyܮһޥ}ɽgoQ_"6Cq syT\o}e_굞FrzؘnIm`LŠPTws?p,EuUJƥ+tGv˧?gѸ]4ߦbЅ}iڷ+;s9rz"`IS/tkcKHKܿktG$Hv(QtYgPW]%nWf).`5jmo^,8?t(k~c`p@B ?|J""WX>frzD17z=7QխX7).L_0`91Y1<yq[*&: }iNڝ7RөllZz5`>~o{sPZBz%݊鰍"-+;nW<^XQ(X/km(1k.wkmoA_XZ  FZ_|qɾ!Ige{sXi1̲5pnW|HTu^R Ve[lAuV ʼn]_] _ZvkjŹ7O;3 ٷ w :iwS9xUa5M IDAT6$֣;փwKf.Z(aV _hƸ$U"gL^Әsζ+0#oq&\s9N\{bqb#rO9Nڝ~ !wX>'.=;|(۽2lXyX;dHK"W(b7wU%=>(aqK/U7b vY<#ky?yuϹ];t&Cw)~5J?]*NcLIDc> $~Yy;)4@RrSlCen0#I5*mon|\9VA<։[7O ]һ^k݊?y\!w?_uՊ;& "_͍Ɲ1ĘTo|0ĺp6R%iP2cx7(6@jUH"y1;QSŋK,֟Jj9+5C\!|3䯣="nW!}j=m?}INϊ/G^DGur]愝t*o%z_%g),lek1V|;btU{--VkݻrP|R錜{Y~|/o_Np/2:~3-Pk*'2s1CJT_a.v 6݊^s0ؘ#[>'gV~E%W]q?kBPls+1.U_~K>G_|;ʡcNjhQܕa'Ƙ)ϽexoB`qӳ9֓nŪB`.^gڠJܮr;V+rr~ӏ'H짓iy<] ֙S$bz_utGbaF%ӳ FMHthN)99)TI䈐;Xt)'(PBv߽UIO[quc;lCebBP=әyCP;8u+X7s}U+>=nLkO1#һ^GZ?,:=?w1gyQAw8kh9٧l]%#N%T?a$r8`}<ܣoߡ3y7/`'݊[1l>ؽReH̥'ʧ?-5J>Ut\"׹$9] erzvw(cמƸ|WK-}I+l=mPctqGg{0T?I:̀q@-oenƬތ4%)X%Æ_> nŰHK鹨r 6ٷrra-2ȼ^z+!?yƄƸ͍⫮HNvԮ'<+ZvअpYbq9٧tf?5|KjA'Nzz[13uMH*!<y.VZzݸ V𛯺J|Օmm\ϻѹL*=ɩ5͍HKc*=}7Щ=kpοђ$'N%G܏ȟ`}O%$P2kp#U݊؈UPv@1{,(i&?]ۿPUl[okKs -۩?c~!C*yⓏʷn, ] ku_S>';;Kn@8*>{"yILHWbU!|XMUb dBzU-6Bcv:/7ϵVwob8ƬHK%Z]MߵC:#JgV mƸI3Kۜ]Zmkn5ii%Ɯp,AxBtFX|!>bŒ =g$k040ݹhxu Fb,l("y>{>?%8v;@ qof\ӭ֛nܲFs0+v32v.g<W*}ޜxlgPv\>nXT59B-vi?٧qg|~Dڢiή _K:iwy>.(JƟ;@Qr'QխX7 \4Pia3؊^ʮUc_r Z8R~Yk[5|l=uԞ 3ŤNE-*03ν Bv9|Oi7.@J@^6*ȩaJ(X/nW *J(053sq5?o9ܪ_~Uɹw9ek];wn%Έ/G~XACpS{w6܎rJI'c;u܏{%[3JgldU!*0/ҲtHPw|Srl~qnTMܟluR9ϓ3+j^Kssu࿖*"<59MXX:Y>M,'h6%Mk׸:2>T`~.=;JՍ n{[Qѭ!`]^!=R<(j{}PtfU -_[Ba;@Pr'[Qѭxw1im;*Z*!9=lG=O$gBx䑯J2gy<9D-1sdC+]gsQRhB}DfpX:;z7>X'+[{]D>ʔ`}n#d%%8vV ̗3NૐDtSSerr#̜$gW]EaP^ܮr˻:e_*(wI~:3˖˖y_\lYYv;лS^|Uex/8z;`7kB0m{sPnLrc!g>`?zvҙ55AX3~ߏj_[9=„ɷeWG(J;V,ui)>ι䤣9>-}ţ}8|BY7C y;pOZ:&_n|Uʺfu7ihP@@Qy졏ɷw<ߢT 09=KAJez[tL#߹ʡc  +WY1/dbje}ѳ<%?;_})[TCs*TPD>EKZۢ(4401|u޹`1+W]wnP %OʻH^ P[JՍ BP{:3O52 0CUl'`w7\ L-Va~@f x^'4bqb#$dzԥ}gw~b#z|I3OXV|]D>ꄿVz @@^;KtylMeqX\E竮o.Z,,q򚏫jnqfr;/zo~saktFX|!> s)㎺_',D}LrK:2sǸ7R8Xp@i7acnac1($݊EvP`M=Fr`a/W6lK>s$.img<1>. ׈6lO )IN&g){Z/"3s[YQb3sC CW_|ePGQh +,6z<O#׎{ JQNY:f:3/1.`=tc|!؞ 3dzԥ}gwON&envVuw{ ;ƹIB;D%\[ 6PlnvY>&[`G`תKٕPylTA7&PR錜ӖBV$a\ *c=KO$&݇1G9 soO]wn (:t) 8vVj|p_͂-疼HKv4׾(P^ܮrS0 F 3vP`ɾ!bqI-*]]&EecMM& rלr(ēpgۜW{wtrdoenGNI=wPlQrONϊAG(Xd\'?M!;눐(Z=tKfҥgV8|x7dbq!w>TX\zKaJt]]tƆhuȝK*}B}Df(ttw.qk%cmPRrrRҩ4%r]Ν@m G@qor %g| b8;`GۛoE7),Ll}|5B᠄E@bq97$Z,<>EKZۢ(&5˻?Y2VWuڟBq|;ht}ʺ9=&wb8H^6NvO[T:#7bB:z>B_Sok$dzԥ}gw~F$'kN ڊ;a$y `cxQjPSGE~Yy.8E< ؎n U]5Pg&s tl :R*}B}Df(IhDڢKvX#21>. ͑6l 5~_A""$ztz}YP[# $P[#G@Q.G̅KJ?1wob8k;ݘclEn>53]X#_Sok$#mQֶ~sv$C0Y ~vm9o%]mվ])5DcV}oFoRlhUH"i݀_BzC1NaaZ>!U.oJgdlKI\gG[%]j Shqp@َؿ<OQey=9=Ka`;F; 3Bp&_uU^wbqBð\(Xd\-6|`w'DecL_W}%EųCQ`s`Qczt0lelP|.HJ5j.$VI$/[ r OZ:&`G*rG>l]7 r.-g,w=|n)p{<Nim(Pzu  G7_3q?s͛wKjzW.@\SJɸYUWQ`؆pvP`fMZ,.{x\>.nE7),9٧-G,?ߖusU"mQ%0Gr/䓗` ̅K2su fi(`M5~;|v1#GNI=wPl"Wŭd\ݘ s_ytb#cdәyJɾ!bq{']]iJk[T<<:t.|k8?%SrB 7PSRr9|J[P伛]JՍqhP`J ;"4 uqqw`M7:-_4V ESZۢ) ny!|RyZ.jv{x++]էd̕wRl"ac1u'٫yQڶ77;M5BðWN;(0QӳKv-6"S3sGU"mQ%0QGa$Ja$Ƃ"ְa=q{++(`INy_Q2cX!, rjBk>r'4 m Y~g d&ZlDX;9IGWDڢ&EvBo@ /"ejb^WF Hs8 Peww8rBsxob1v䫮\ҙyK%ȉ|sglgl@|E؅n>YESZۢ) FrrRI'R7!B2WnR!l) :7R,(=Oߑ b(!]ziKTf [T!x|~i܄*?g-_Y($%i. 5)Ȩv\$3.I|o(8|_zUs8v;@SrONϊ_d^"-ܧf$9=+* U]5Pg{nLB:%8`K'4b#ܙ4>O:$ֶx6y( At.-Ql IDAT\𽡶F{;8HWv9pnƬO]Mb 7wKf.f,7r%ҲM?h1ACUZl0Et tc|SfRx-*ݝ|z;p0cވ #q!lxODng)Irfgp`)(N~l}r(b*BZ/ `?khP`ii׎la{wЍq (hB}HҙybZ5*Pc$hCNڝ~;lDAa}WMl཮;p@B 2'?s1#O(۽2lXy/`GKj253g/݊a^>.< 5vnBRx. Pd&ZlDXr  %H[TZۢ(()v6Fxi|z⦀dSa{6P`C=t|*mw Pd9lReٷB*7YT7%ʡciiNyp{.tc0,ϝNiFDewC2^&H[T"mQIA+WGFKܗqIߌ)h=mpWq-߯j @^z{:孟#3.)ؘwߛ۽H4|L6QerD^QYtF=B`\T M7:k4FɃ㑝ݝiJk[T|~?E^uX'wH˶٨(c`E?Դ7zh<.#.a=!zb]%P[#jwoezwwʋ/l_}HToq+nm#ANB0+EZqdk򮺺A^(%Yb`3aU:-*0sXu;mL͊/"uv2)ɥOưҳ火 h|Tx{e 7$PwF ڷ[?}cf.ftE(6@nv)W7UWUny1CPE^pT:j-:%o8,Dڢi]% ܏CB""#9oxbq ~ON&9 rw e;|ޞNy(rW_(6@h Vɰ1ktk]EZɩ5),L]R㭔9Sbq˅uqՍq )08n>MXLyp{y0cv [ #q!l6'Q5|!8?%SߛB 뮆 ~;d̕dߡQ `sqXPNɸ1.";(0L=Sv(k" +c"㑝ݝiJk[T|~?ElNw^j5*/iڜ®rw=>*] ԰a=qϮ 7⭬Pc'g⒙PB%A`U!rx.Ct+F>Bzq%_cҙyэqeQ;wz8Q$*]PcEfhq ymlZu$^oٓߞ?2]UmscUQ5H6;b.(ʞ;Il}]A]2s1ct]/ܡd.pWP(PpX"mQEkf 8i }2(7lh| d,|og;7$PwFvz孟#3.)ؘwߛ۽Ԅ{4kO[>K|4rbqa\Tq?߷jom(qg-R7QmS 4 6\NkCp"]=_ '' $3EĥwKjwF)/wg'wQlk+Ƭcf; )W7 ôH6ٷh *tfbJNGWRf#99\vܨ2먈<┿-gAIR d%p{Cmj@m4 j.IK`B ]K*E`+`qX\zKaJ> #fxeGw(yDڢgt.F5/  Ivze4>J$q~JNș]|o$P[C(ؿ<Y/  %,`Kۛ-rr7#kkNMzKG{RFBG}K9]](@ ҜrFٹ;i2?ۏ:/;;~v{_ q4+Ml]J4dXO(bF{6*FT9鮍G!BP0ɾ):][ۢE5QQ;n-C8 68/KϞD\bhU6SJ7wjUH"y1s +X bEy,vjΆZ)Gr0ae6."Q'өђ]j g60(l]u ,ߏ'""p@5;D%g| L$Uoq)RXؒ nri;""Kj25âu>E.lP+r`v0;!!wx[\cZߵAIN&)TdݻBu{SAu>qoXVpOKfO %{fn `7OZ:& ؕJISq Z,W@%ҲM^;~Bl+ۥ-JOM͋N={՝ ~'^83.̅K7ߛ 1Bvwˁ#'=w ?bLSJɸ1.`=턂ucbnrX'lΛ urgR0&Obt*E d{Cmj@m wt}ʺ{3|bHqs`KF9f< =nQťwϽ($߷=%M`RS:i.FY 6'";a$'ϫ| '''et${%OI3K?[ 7Kw]Q{cK*{}~&_~rfquc\:#*ȩDaZ>ٵ-"kѕPc}z<]:j++SfyW|~~ýdTFqC}WMl཮;p]2sᒚcL5h` *ȩ"Ô|F3󒜞_u[JB|`_`ABO h6ΝB;uI8,ݝKv(F̄}mr7D0pQD6;aF裣*\]h<.b{A-߯j 릧]SͽxR}oFoRlk+ƬcrNIrzV|UkOz# 녂JH[T:-JV@s`H\FI1ENC7-u\b]̆GG)T K*(inwGY=*9 g}P~YB6|tf^Rx. ۉl}Z>nLrG|Gvm.sP\>ɝrwWOQ8ʐBGa#ˊ kKbg͉x;_) ܀ `B  %_B:E0W]%nW3a%%5Jv\'tԯ~+07')կ~%|~]>Ip= h!(3TDڢ7͓A$~0!wSrb#`KZOez[3=j`xPNr.-,a$ 飣&|{rg۾;ϿfGފFD,Jj {brov\mkwdsl^n;۝t6RnE%c)el!/x?DPJw{@I%/DR_Wh|S.P̊iWP ]nwLg,3=HaP=GtacN\&ܟ>(Ń{cwknr٬`+65 Z-{jߓSVBǶ5k#N.tz)|5|Gz(ХK|@y;uaqF([<_Zٿb(!wjy!jrr;:ѱn-ѱBymַկ,.fv9#SQB([\_TznAZ) vu-nG|:&;Zk!v ˟eFx4X4x;wuCcAڛ).מP],Pl r .b1K;Lڽ́#T-ja^1+$J+Ju.ܢmhL㷺ǧcb cǸ~㳧(.8F[M-r@ժ$T|7q#IaQAK{-`'^Ty0̙ZaXqG%wJd(oېcw3_+:zam- 7.P* LbV\^M e -1( {=GF<~r 또{;Luo׳G:TBIo#B`~)΃4{ƍY UIxn 2cknۀTh;l!侫j1*M ;Y}h,fTFKy%R]2D*G7m^q#IP rF lM :ض_W\oQ,r#26) t*t*vԌTJBwٟ=OS $Ru}h,/7jlث\~q*9 z Uݚlm(`iSbL-5r7 t)+f|tLO~5C =[\:hP3uꘛbؕ=ZRn훡 Y.x¢">o. ~o>NUӾ& ރ;bʁZh;I@NQXۧW?F UoO|C{ɭ(ueW"Tϛ[D<˯(=eḑpaoex4n"j5*O}x]=2:XzO([?^ӟ8um~);KC!p U)sDo|TT?ByذWʶ˯(n$m %^b-㎏re׳N2"t*x4Vu(xlX|)JS(Ÿx@ݸ|eP{5?1@ղ+ŞK IDAT|Mvir]a:ض_W-Ҹ/9Sk?tͅ üG%wғ;{zVhTc |p/ԛ~>MG,Ky]CcATFs2ηSScy:5L.D=e w X<rpXǁQ}IOg{]DӾ {=R,7̣W[K5'rԑءCc_Q6WS#tN>o!rC@Q<_c"S6썝~dJRjg#CCN@-еr)+gfekפý =[\:Rl:FynRoK FaD*G7)-qcVn օKrc/rq1lX_pcz$J)J;mZCػ/*}jX|GcEc @tʼF1_kZ0{"Sӄ{P|N[ƍI΃QCβ. Ńeڿ14q`+a^!w0yQIǝ6u.<2cm=2:x,F:ֻ?"v+tbϭЇEv2nܘH4!wX .7F,⼐@{j}rP݁O jm|HRZ\Xԍ;I}k~wtp2O]['>L'>sܻʍR7BwrteQzPG5qedj¢"\xEk-Zr伒{SEm<)xcýB?_m7MrV^ _2/Itd%V{__T6WScF]xaFFJ(W<S:vڴjِa^Q7[l,xL:`]}m؝'n$+FU#SQ<(KVlۯeJ{c-Ƣ1rظ_1 sV=5^Iz)+ix0̛-6lͽq}:@7vgI-r@ղ+7Q*;7a:eorT.⼐@-{Pxr|zO|wl?M}Ҍ)60ܵ\v8 TJ;gMd '*#eO?J`nM\v/O(,*N};!NYIXLY5kb`/eq=!Pn]k~icԗ1KP*}$EE*pao>NٖIEt04<4'N?n;:s?s[tSo#~ .#Ďr@s+I]ed+J-@+{}]O*x@Y}0k<=8ߓSVTdt;[x湟umWN~Ҍ~!Z(66"+Y]A1K .vd*!+N[# 6ZB}rXli_^xE}}ݶH}_~p/r+7HeVLEJvj FEk; i?ЪƆW1 dg9w-ܺv Br= әeܸ1KGAT5K ^rW#TOV_7ZrA'2:)qD8 HE4ԗ=~t;zmbq}tc{p>ԧbuiz"Q ;Y@@v:4gdj;ZE~,Z+@H۩ ֏>Lqu2BU*){=}M /h[nN|{[K|<ԦD* ?YNuTbwvǣPW@@.W\599iE<Z>:F[S.uڴ2'$}IlxhHO~]h?ݼx3x{V:.ȭ(vX|e^ jv{ڹB\hv2nH FEkӧxpsD<`iSZ2 L1!w0yQIǝ2!w~V}5uuVxwPBN]Q{j5̾@ 9qy ؠmuuڻE8Fe*@HR8X{ݖO(,~?=:)9i2{vp䠐`X~Mhפg{*WLgd3ԺϷ4AGo[wzs_IZ߉UPHnGak˸q#i[8 #0x1su~Qhi}=F^:qIqbUL&*}mx湟ǿG}9}xm:7\G=r\=%%?@ U75xܶ[$v r'*UI1K ޵|蘂ǏQ`axhȉpdr7 u;I48D289ྕ{[K|Aq}tX,lHe[!I:M(R y{(J+Jdxpȉpڄr7 ׽$)s"Vaxi5ҨkXy[?nﺞ[D*sV577 nw1^﷧#>A T;˖q,¨H. ^*4 7[>nl:F 6yi'2; l5{= k5nmg>Lmo£]%yIRntBwA\.J&MKǍIIR`Tjlث\~sYTrqD`lۯ󋖎KcA5<4i9qRN-'Mh|t; K$ ?g]8(GnB(=~:P.<7!:r'9G,325MaQ /rō|. K ),Vwa8X92n5=*St9=ܳ.۰6sԸpJ\ 7؞R@sKRznk @e~\.n<nz{Oixx1&ō:<˯(=.M\r{A1 @4<vڔz8xA!x,5XdmEAOK{kjh֛_kZnn?~kŏݤx BBPY*Wwv-3_Q6WScaFދѧ̓/P{=G~ǍQ.;Gx]MĢQBP<S.uڴzr&4<4'N?.K_Am-v[u=4C`jVnƺnEtRv]].Bx=P XYKqcή8}g7 }]es+z)ji˸i<([%^D),^8/dž zKZ2'tԮ|8vfvI@1v]0&Cdsy}om]%=}SuؠCN$f-7nR\TPW]*p׽q:FaӦ4jSIqdzl2l&xE@R($~_[8@H+KW>^;jey`(K%^D=ևc]z։N>fkH.U<0 ԡ.<$$v. r_Ըџ| 0h(w6BE=ܧ ў"c4LcCCNVC}'!wvX$ S嚛Ku?u\.ctLWP^~Ȯ zHrGE*K,CM`iSZ2 s!w0g^I;IK/^{ ]9L(0e %MNN(XޅP 2nHvDzŲwIa$W RVk?ЪƆW1 PGǜ6=u.$c1S)wtvSiۿ푴q /! ~N=u}Aw\`kۖqs!o՛g~!OkYݖ#Si?Ъm˾(2erA@):mZN?nrBRj'N?ɮ;:v$~7|1k/}:OLLhyyhmu#X/vv\q#IGWj@znA_y[Iy?W^~"{__T6WScF|ޮCq#IU7Siegմԙa}^Qs rvrfY7oްfs]ᰥyoe2MLLHJ&M܃P($IrZքTsuxx1,ʽ;\~Ag݇,cT$ӭGzLd*O?JP{B@z324)]1 smO3>Ɍ;捛h {;;\.n=42M;@ El'),U*=׿FEZׯYoNy;m725MdD)v}nw(!w:NN6z8vrBlVÃax6E-//[>~p>cs XݭظUo~d499 fB,5齽$. !vg5y<W),U^?ɠ^yy556PH8FVlokd*JqQJ."W[PV K456س7T 8z8v5'M(-[&܋n޸dRCSlbM,3Z,&ŮO=>o %ZZZ _l72{%U^KgG)$<ɝp/Gޯ#SQ=!wT(,@rܜ ä"1iґ!_flm BkMLL(ɬ g2:ض.<$rO-H"n{L@zVqML=uV$ɤSixaLQ5*6 g2[!R1gknn.~@---PW\.PgܖoW`D_i&1[OgRScń{37f "jXFZԉ!'Nk^_=䠐$ Ie;ttXr.~꩟p@kr&1l.υIq:& 2:i񫛐a}^Qs:yYv!ߺ_ ܬ.:]k9 ȾpXd %MNNH)&PV]=nPsz{OY~~@'Av[荾W*zC ꕗ'$sY]6RXT57fm &ѲљA'l`x0)9S/oO3>c1egմO8S?Ԭi/MO8=Ȁ ||bbb]۷߼[i&HdJ] £tuo=wNI*a/?@@  !}ގzoWk(25MU7c1 P"ceN@=zKXA!wId7 ۣhϏky9cɘ @]e2k#S:S?-ήd2tGYu)u/Ё}/WznA3~1vLE9FE=ݺ0x8:c][ȽOל40!w=J!dѢ IDATVaNu/㗔HJ&M {6.v\P>].w{zG6}gw+*ӖqFaTu3q;jcoEcndhiSZ2 sa] Üzݣ;IXpaE-4 Gׂ:o~m>HܺAHKr WKk `\|}Jzn`l.[(_xO?~>CvK {yTTO~lZ+Zq#i[m7Z7瞥NN6z;{pA!wpKtND"8 VaxId2(}<9Y;R^N'r_X/鍾:_Ed땗_4Nq#IaQ`]|?Rc"SQB1]lxБ 8cȽOҫN!w?fC'wBrw\k%>]׺=(_t{`~Z. zo ?{0})cZ?GVӏg&=ݖ^_TznAZ)0vVr1J+{=}MΟ=irw:0^)2:Ǝ ""w6k-0_p8l<\.`PȞFNTp$=ɠ~>C Y,?T$sDo/P{c4ca׳bN֨aX5'2t*x4&_av'$uu$:je"!w`U`~ tST`zčNR`Ți˸chxhȉct 8mBu>n-i `3c˸t`{ɯ|YoSa~3%@tmF -i?j8:Fqhd0ir#;ؼ`%);NBIesy%vI'??/g@=G,s2!wT.ڑi סwgEcFrbx,2n5IsҜⱘҩl>99Aqv|L:p܂;+_֟|=dP_/³jjl@* sN ;Urw@-썹l ;@ϿWk''I kdD¤`Wd2MLL>9GI4k6L6[DPpUw69ض_?aYFݖ]R7 хKe=&25M:.h8D<S.uڴ1SkOҫNА8$S?ܑZTZɤ:8|<$ꦙi5 ח [!Rفĭnviy}&1l. _ka!8p=i1%`-TzWIA?ep8^ zz1H\l˸L3D,u`O$2̈́2&'')P"`p߿"~qGGuD";̮ zdj;*varm?&_QHvqv2n,#Pخ5FѨa3|\'4!Kjhث|d}dz ac1K,vdVĞ,irrb {mW@15/n$Vyovvg" ewpw#Thk;\WE :{_WBV GFK/7C*;b}=SXZXj87f ju,Y~u~?zj?J*9b"S&Gz),8Z::5ndБyB,mI&4<֫_vVV5w##/Z%}1ISԀbx42MS2&'')NLMr {G#niy=_Qzn;*97 vZrO^Ϫi_AT&Uaa׼^$=9Y z7hkm>.; @9}ؖq?$@5 d499IGvl)=HU`$tS%1Q,jjleW4c ݱ侺s҄Fեή. uȮ_FB?GaP"ajrrBD֟I`s P"SQ7nk]>z P|Ni<!Ofe(kU7rQϞs8܋$}I /r`>l-R_K\. &&&d MNN*H4teu[Pl."p{.b:ضԵN@hjl(P|7qcb B\XhUc^ϝAT\PX2 N".I2 suJ:9YEdN~tS  afBi*R&$FҶۛ"덾:Kpj?*SM QS^/"SQE5^F> ?qk`\Xk{K5ȡqo!j@ Kn.xIS_W}U =%-ۣ^L& MNN(HT2iR"]Խ;nWuu~7v{'8 l%n$o v;tӏ ]y;uaq#SQ^QJ V{.U:R{G!#a'Nk#[@}՟JzQOޡ!_;p򲆇5<9wϞ;|Ԯܷ+4L ćB!y<BxVX)42MS2&'') !n$)ZznaG_1Q`jo}čR;"Xl?y"]I:8mX[ߏzhjl!Of^F).f=ҩ=DB#>]Eᨐ!w@ =ܫo;b.Nwv-\.%L(0599D" MLLhyy88M{W¹=/nt NLMAWy=Ek\\X]ܫa=˙{ ݼqSCɇ(׳rdȽay%I-NS:V<0P;:;|XX̱s,R轥PveP&t_hE ArVwC+ ~mIKFrן䉠A]$ٵčYΉck2_Qzns4X;uaІ|M:lXexhȉ5 s$&ݳ{Oj]yyyY=B^\. ԰Bx=L3AWv` IzP˿9}&[[a9r0{ܘUzn"p['O&`k"SӄqO[a 2pkصr#q!!B:uJhr,j~݅ス D8 %IeIIR-K_{*WU J)|u$3M1/e~gs+LM+˗W端K QnojlPVlo^R\T,Siȝa=-QF}gX{#k1'Nk#{s8SiS)wtptui_B|w(&''599>|+^rfB)L4M:6Ojl0d[(u\!Z6׆ !T_{'Aecq}ƍ[&k}ЩnvYr/\ T&YsmQt:Fa:]]NO捛{7<vb+a~]m üHӞ<,P^xEBZ^^޴f@ EL& IDLfn]]ny<;>_| [8켶p1ډ};GoڏpW,ݕ׶T׵Dܑahy=SzVM(0T=\xOAv j!'N#lXr?!w@k?sa $In}{cpbui5B;V|m]*In[njX.8{Wؿ/|< M M"SR==X j@^$Vq{3[>6pwϽuAVV;ofmH}s>5A]=GQ1Kt;َTT'O) ,>{c4c4l27nֶVom ;qZʑ!I&ŔNԵgY?t*M1v?oW z.K@QkKuIJ$2ĭ\k"qqo9A1tVܘݰyI >o'!zԝbwRQ At[y 6{qW|N{ ؑXωUv=n$ 5i˸cܷGCS]6<V.uڴGw%a׼^$='7i_~_~ ܉'yrT :;֮V\ ̒&''K.IZ^^hEsss颭kX1u|u.:~D3 >.dt4^d:y"O?z׀ogO.TP *}7ŠrSVVxu PNVGvcܷ^4_s҄ⱘҩ;:8GݹISɤY]`<wLLL(Hz"i&[ZB ľ n!{.Go{Wk#>^DiōYō.tj?Ъ`ONG]jjl2/vLMKR)[E;CNP*隽(*Ri,bo:NVT3>Kar!M9G%wړn(֓`|sspPKK$RdԼL&[_ /--irrb=Q{z_jGuzv3Y}H_IGoe(0xIҧ~P?{mBz aw吧tDScC)ECji˸q#IpvDߏT;,]o|t;@roT~9BѡVA}tuǶ-// n7ػk>_\DxbZ@-XۑxA"sαI+뎎ua. ^洞)ZKl+v/$᳹f;읥 {\Q|ޮfMd*O?JQ(ΚkhT@5 ;qZܷ@Q!x,m /'zRACA`ۻƗ = _8PZm4J$ klu8Iq=Uxΰ5 g5^Dg qZ o6+nk ߻m8xBS^;>o%kō$=;E5+556`~Udx0ƕKar!-9G%wړnܩC~ zݳtҩ4Aո= /a=uǿۨ[.!ѝ6.KR2C] B}~n8w7LbV˿9kjlv (n$ͭvߍLMz|Qznn:)tY/*v]/ֳ^{-_/\ŅtM. ^t8#+ݸqSWU544hoC` 9qZBϞ#;:K/ꅗ^`X#CCN"uhmPn(8_Q~͐}&6҆5. |MWu`s tewP_(_ї~5h%00Z }~9{ X%n̲ob_|GXsjoԅAhLAn޸-g2|.2CPDv`؉nIm'M()J ]U^/3GwBlGW[[vv{fBgϞٳP oV\. ?_-W׿uIL[+ j5^čNR`T,;7xh sP,%˙e&Z_;3W$;)~vjx+wړn}Xåt*tLhThL׹}%[r=ݩ2?S IDAT7-oyyaP(ccw9PDE7|b8TScEK.!{s氋kО "cz2sEWS)+k\ F83a^nIzIz;C =>΅ [PHnGGP|""dsrgd·)<;$|؀p\(X!cԲI:=6FcכvE5. @ ~UF}/g].EYҼ ID"a æPq:푆n+{ )*!wu]m'SEܼĵIq) ۇ_դ)ZrK.+Vz]V|ob2V1Mӯ<_yź0{ P鴄a._D"*A (*Db: G ؗCQ~fa]"LIjFl(p씙ˋ-:iln-b\efdį俽=+Sɔģ1qwcu0CDN:ܜzBwXݺ':]jdxnoxv0ܻ4D_ 䎢e`~=7:&=| XBϭJ*k\zilnvS$DWuj9˧iYqQD֨4A`u&]@Kn\ OxXN:ث[:=KPqBV@E-jlnq ޮNy@?\p0psN<%^EV\! ijZPF~L+nv o}X7Bͻi)ayʘ!YD" ] PY{CN \?N҅]}v{E@16nW{QBƗg$͉j(j͍rizc(T2)#~%Ctq!b!l&#W`0u 3xݾ~ߵ#w}L mNDBt=A@Ÿm]"q;#'45ax=ۗeUFA:d"BQٺK`{,%T!rϓg].EYҼF~Bi|=H:^ >^ful}1{pv]= '#P?NSܮ6vuJ˪FBK vu  7Mq"eG! a|͐cf3GcXGJT:iV7? 'us`$wG4|p8|`J<:ߠ I$o ŋ777ĝ![;|m .Buڵ#R__E=ie.|eVxsVx3ZjoW]vd2nW)8Fq=ĵ) EJ LPBŽ +ܳts@6m4e`0P3!|8:0߿]C0(v8Mḽ{:!uT}>'>{BT9A'?s%|>*хY-u\`3T0"kmyw^ c#n(\ֱBLd'0[p8{4M?r9.5r@ub$:n _4OoV"]O Er`7gtw߼VݻO^|Ee:2'/̜yym:ձzY-l vr'pbj͍riz&ƣ\h ØqPhtAuL+nO~j}6VX'sIpvmyo}oggg%O$t‘(7:e:?'O< R("__ZN$d"1%.""[7{ &7MNQl/ ~; 0.0Y<S."^^Q,."ѝĻi!w@ @5> ÒN럟];!y,m_0_|{[z1gsWw%K3rz>#޷nyJ̬Pph+^owN|ȻeU df9 \|@`౱͔qc!w*N똦WXr/N(}Ռ_vew w'$xotz&W|n|̭[9ws )?'pX{Q q8r~SְGJo7 ~~l[ `" :&cln^Ro_bY:=6G? I*Rqjtq/!b!wA~0޹&+SNm6:@n sD$N/p8kG(.y#wKǭfgg%pqQ|> K/s^;wɯdEDzs.xsŸb%0ˆMq!w`ߵ# A`/(ᰤӳ N_?p,vQr:{<{~;F5&;o۷%@nW)/rG2 Z$CYi4*M)0f2*N.E"ZCX]DdP>auܜh>f3>77'޹v` Y= `/;駿N@ź3(N׃?~I$t+vwvw/f5G&Sϔq cN$^1v3o~ ]&^j2|}͹0@*!w!n^&d$U2UE|6G[^6lhsss).@H|ww7E*B|t!N vk-jy(]t!Fq p>A)iOwrXija<=,kLN&r觸_NG?/rQ9K@DܮvǜHLQXN\\#qP<0©A5i:!wr7"rLI\ͰeVg?*6H\kH}}a[,ui󇤱bzL43Kud]O,n fg/}(ifu,&pb]m9yPh(R<xL;YA '"SmRA_[!ZZ[EDDsM2wyGf.\6I.7NE,bZ.z %9JKk)CǍD"N jc&//S>#{?GnRP /G\4-@y:cy9=!>nht̴;Ԃ!5r7!wcUԩAB^BUĻi8i_v5t>r򜞞Y\oųCIiYK@mqj-MS` $.MH˜àc9Ţ1BEUEMϲy%0WDj T2`>hʸ,Q_/}9wߙ3k_3!|>*oPsܮvǤ6Y=4p㢈H<(Tp8 dJũ"&]AoI]=Wp= t`x䤾P̓NWB8o[)4> /#?"/nY+t5)&QO_'@aVbΧP oW'{eރƇSɔdf(.@2W36]4,+l,BP{*x4`| ԦruGؽ;]sEǺK/BwUBܼ<ϛ(ό ]Q}9p0Yţ\/ٌ #n>'ungۃrnkĒTE=ot{3hW>y؀|?L6Ǜ(fFǥ6ʱ/w0fʸF(.@N:>VxMiz̪6/Eo@ɹ;։f3|܁:SK"/ۍWmCŷ!fHKlZ,3:6Fq]y?'4~-j3|x4FqJ&%4vNũj> yzUP6AVlشєqPHx~ֺF|vFS;nG.)g$Mq]QH'm:ccc ?Cvq?ꚃyzU0mAq N/ݮܼvc}DUx+>A-$3:ĵ)r0fLFR$XS6YcuA$k @ rA@9%xAsE>{!Hsb^@Ufur6vR9;0iʸ 1 hLRɔS;iVի⤆ԽiimuDEZQShn> #{oC,_Qq_'Aw*z3Xe+`k3eXG:5zUԩ~BkR7_P\D"8[DßnG>@Ef9'SE).q}cجY4r!r*NkV^V6QX% J6Qqjtq7!wRC7wֳgʸ@)O"/~ֺf7:~byMg+>o(B:f/cz_^bTƌ\M02l5!w)y!wݸ1''eu1"Q֭}@G*">+jqEQ:sŬ ΍Q\EI+ri/Yasr7WDjf2K,ںASƥ;@%c)=TRe7!T=1b2fߡ""(b,f_نt)Bl悝;E۰i)S\";pxN.íawGپd9T53:gsz2E sɳccB,Bi/k>B%iz̪6@R$ @j>n ৸Ep:Nk|ZR>{AWS_?~UiʸQܾ?`>Olj3Ij!4:&dJũj~6!Q{p8P$3-( |vvgz/(kfHF~b@2#)"@qQUM}G0({NCtqG!'uQV"m3e`*En꾇Jx IDATL6dZdӄtrGܮ0nsй1 pՌM{Y ^"ޚjJ%SX``F'w@; H`8܍`/}Gv?􁒽91+V!a%ρӭvu.QZV5Rg&n%ɨ8c_aK{i8ts(-b \ NWk;@9'(.E᠓֯i{H-v_+;Z#4N+$`K{lL%SJ&).I Sqj¥CȽ4MQd$H \nSP47XKZ;@2[H\(g}!ܹvu2nBWmvN#^zT·$6rJK>P(XV$oBTBK _(J! (nW)ƣQu&EȽ#4v[oPViim1|H$LqD^+U(6Jf9/Mp/@\p0j͍JTEM !4HŹ)| JkB7H$"tzbneRn-_akL$4eܸ6EqQľ̿Db+P9 jީAU!P2 -&( wG)t0RZv{~ zн83T3:/P\fZg[.JPx4Fq@J%2:^VVP4r\5jRH6 @6]D$ g|,innbUg]ߚ2oB{(4%e93yڤdsU9_NܮTWr1ݮ6Y-l6XB˪&Z Cre"ڤlx0d!c5)8l5M'X#^>}"E&uj`;rw&LqP>>߃>[ξˆ}izFRo_UMtg_{K|~a|\[V5I˪|yu()o2t̸6IaQ-+`3ChtLp\NrܒH*VVX's),PZ0,z*cy pCg~6b# âRo_{Y,pXcK=x:f^.~Pܮ6C<(ͺHɳ=@[ kd.~s;Lbhφ ,T2fzSk!24}r&G?m(wFCsss q8@^_^sk~M68$p5 G N EPХ4=sn뗽#;oP*sYrnc;!weUX-u6y׻rڌvgH=I.{Ww޹U5)}JVX)bTAU֧iV<!j:q(!w aFy'?3|DB'c8L>ZSBqmBt5ܼ6Frk565cE̷X-bX |-b~f2*NmV^VWM'\.k"'mh`;yjimfHDvJIW+`jgZh;y_L6'6:}a煫?7Q\@+VwIx,dؘb\.+Vv'^Suj}nP+ O }Wb u$4v1a,ȱ lܮvS G jS!x `ر{,b6qQ._,+W[BwvOe!zmv@qјcʞb+߹+G߻o&640(V<;: ӳ`w%>{pSLE.MrG{SN9 ðco 3H<w: nP!9.j~ A+-N{04fN@EO|>_wX_}.L2jY6EqQR8Œnzј9pe{eIUqbCяaUhtL%$ŀil'[ѝ5f3N:uag&}ⴜ}˜̺=@)u.ʎ[(0ڛֹF1wJ9~䨪Siz+\YWMӯ\c"1vQB&s5#Kh@Ir>=UpWu ߳8@)ssswoMw& cqm¢(ޮNy@^ _p0ezh;PFjFU WQ,J$4:( ?wQrXLS'$w&NlHpQ^J2YJɌnF\K3( Yj3|\2@%A_e+! -.8A@?rT@Yd3#(Kp8e{IB2tf´nRdP̺p/4(J!wNbߡ(+}N5M'XCȽr8S'%s5(G(*4vn&EmξWgFSR3&4~{}J>6)2@ 1•;o;~( 'X &U0\"AX&'FM}>¦UeUX-uצ(.RH'mʹG040f5Me+! 8SXTwr߰i#(zPc:&?\3uvlB2sƵI I;|1:.2.@\ȩN\+[J%Sbハ: plB0W nn(0R.MHkY$~^h;ʷܟ@R!Vrr`aVŹ@;:(*]cMZLT4eܸ6EqQB2@PX4Fa@U;q䨪S4}\+_$LLg&;v~B7c0X0H47X7_=.Y-u{l(͔q Xe+Pl&C>T蘤)UG Gȝ7QPjQf}WeZ}z6'iP^<[Z^w·fRlVnn4|\(V!!w.qϜ\*?lsVDV8B[!܆Y`%a&l_*]HwlYEdߑNvQܳEJ2#>(՞ yI}b)/(.:dRFUO+re#^zUT6!d uO$M)Ifgg lI,]xwey/v2n\(g}!ܹX4?@W:y|+(A4rvP $l#(K֭گ?ˉ'ӳ} Cufƣunݛ 4۷P<jĔűsTGTڨgYG'ѫBc$\fpګο#'^|}u͍]l"4qm{;(]4:Fq@l&^%*G"(BL';-'^p_ӗYY-,PgaN(V!!Ĕd9]m "UڬՁ{4}BD^SqndfXd`0Hٷ;-szEED'Mj Pis6FlVu7CQ&"!Ih윪4 \W^'ddh`e5=#g/oyK\Q_ߟ>ؾ5iʸqm(b].BcTGI^|>_^;+[ٜ|#.x3ӵVl"{?7)ftr _(}Glo-%Lq{P2W3:QMϲc%:"E&J$8m>Vk:Voٜy=m[ jN˪&Z$7t\(V!!yQȝ#wF *d3^G*CȽ:d_Tqb Tj @:oWf1$EQ #MPF0.FvQU6+"}pu!^e4Mpȟ6@RɤHht1}),"zzzi9VRξ\Ո;0!ln^Ro_UM+x;f].+8T24M*WQԫυ2`i`",nӳ9|yg#2tf*Nr=Hlx(tfߡLhp`S*OiVɽ ir9HjsOgvԼ9t8yreyK0:=c@D]&Es.7;c;x""I+`5M'XCȽz6l&#A_+ p8)."=A jus| ZgL$ 3MQX 0.MHҲE#*WT^/+\Wk*N;.L餓;PC86|̆e"%S2~>/{RlV o";]톇E{/ƣc;!w{\l3elQ`P12W3240f5Me!*i8&"SmndJBcݴԬxԜ;PE:=ܜiz6'dz!v&R'{?Gvl›`ޮ9=|qCтq7]myڤpجsr PY~d3U W/B;~;F ܃qyEp8ǟϸksss>#oiԞܺ>!Ǥe]Ŭqm;W_9qB0h].Bc(,(*O+\W1M\.EYFI%BjR,3|L~K/SO#Ayx\|bt쵷jv=:¾O^672]S`$%mrzqј;Q`Pv1I%SN5M'X>JPzUWX]@MGc$ KZ@M/ҋ,Hvʿ~+Yo|6IaQ"~aDq΄;stqryVA\Ͱ2nO`;!?]bZ(@s^L6GqQ9 E3.(aK%2:iʭM+.G"-HGw>Bj#}O~fK:@`phۥ۳v60Xl7ΗPyr.: œ(wA{MN~ 7v?/(,((e!wuތĞO jw8i% i9xy˚B<0,kaeyU\$䎒͸6I`{,&g,2W3240{YG]r&J$4:&MYh?8׾.sFOdIH$b7 }!{OO|> @a|+w>L`6EV77ʥCǥ6vR'K\4ޮNyuuǍGd!@~f2NGOՏ:U#}`P?w{[R|ƔLN29/t{PP 5j7ȓ{vJ˪& `d IDAT;a̷vhtZ~^׹9ן@UHg)"V77_¾' ̌ zoƵ) jqeH*Ruz5M%B4(|վjP?48itwwn/ɜE__@+p#۶?+j(%`Vk(3/P8T1RXP'UyzO 䮖CN,8 + PFjFgJZv}dpO |T"ZgO}L~/{RnR3Hh0'J7/MH&xcc*RɤΩ:YcձC jsf2240(GJ6S vUӵ%aPeᰤi.\j5ܽmusl۷5Yl$EYfh<(S^86` 1iimd~㟪<^Mӯ 䮞C`]-2Tqj`$(iWV1@KED$ H ~====eTM?v0J`g=.dN <=+oV%CsݱUT%y^ٿ|//t~q:vU$7t`@DDᰤӳu}晃܃'$,GFiBcTb/&B4xMDD ʧ3,4*j}__|"kۗ4w8{N ]OH8H$|N===SXD:^zQ>Lz_Y(nW;v >n\""fA CxPBS?ti~UV!w!GvUT܍$ K/(?r\niwxpn ݳCܮ`;#v2nhl(bom67]`ر{;0O*@)bE]a\Edjsf2e*y7m,}J>dHp Ph,..2Ycco7۶p@A +a0sujZ4E}Wa=jǔQQGa@Y=m{g?C9| -,,Ho9BXF@hcBP0MFi͍9,P{cb&!IByI$Ń̲rUir~ysIw^Bwn{P·E0gT3&L(^:z{AUc3G>Xc^ 3 (K?{oqAXl90Я{UR]UɄ@F:5-TEAM%w(">>ۄƎ{Vߋ>u껫k|A]vp3Q=jU8N3(pmr!bR6nս]J@'Sg.V>+vlrT],jO,εs`@v9t9 Lrod"PJx"2N*+$^jaolkums22(??_G hdRQ+w*6B^ECdRΞ:-? (Kf _蒧-O`"퍏rXlC^{MI<ӽ5|Pz{Zw~F G :=wk/T2)ȤeH$?u* _uieV{;,GP"u7g.@yZ~篤O&yˉǙ,t29_g 3̻+LP=r@-/+{P۽JЛӪ{Jx)(֞1%&#O*dxݲK2<1@Hž׭E !w YcdR.ge@sqqQ~[XL>Uʇ[W׮?Y/|Kv){*@{LRK%,s#8܆dpPtggBf^یƮțVKG1~;vbf(>459C:;wo_>!;wv^{t{ ;_f@wFTr6Xt<,RGX"Jް|3{[:("b3 oJ\r!UaٵktuuP}Z|!@Azp#>Ona9yWr/g?+EèJrŒL_,c?+ezT6nepLdD%wՊ[`ķ-c?mu  Դ$@~Ξ:-d] 1C݆T5vr'"b^=u;5lT2%Ɂ=r@tv% J0#c @ O=[{)Zw;:k>ϐ{ rϳ _p7Q648%Y7,tU}1X&͍9ikq5rY{M _EK@ih*j*l?+$"[c(`^땧^ *P./ T>5t:lf Ng459%Çd=O?JUUVP%Y k "=8Mj=k0X*+}(|_4)I2<t];/xY'BufU7m~|j]d9@ TyQPEw+Ng|[Y!C+w!'N_RU㢄#28j/D=/;P7r;#Dk3Wz؀=BR%}e2װA|G? Oeۏ~.i%쥣ǬܽT5lOmJUc\΃"ϊ<Ұi (;HyU񵰜'@@^7a~ wȁd n759u=\!!E+6? Pjv?q5Qj; R]U)7ʵ9,ؤS)߉YcS44lŅCMC"@)o*!fپh]Dţ+4 (;ɲfW|u8)ɐv266&266&ؔ8)@@K0ðze׮b^ $fn 4*mW!FU*jp~OkOPܡsrO$$y#)wW3+wIm]0:m}#̲ }j|ADhQPXc5?'seY;ʑgtv׽CjⓟKuU%E2%!Pz;ÜJxEZ\rrkjct(3 =(#VAfX4."r<2D'EIV?S>m*666&3(w<eXȽ\l߶ jW#ruʼJxX|$Sim൙g`btx;3V"!w#ns{r)"&xFFR;:wo8q\B}YCb||<땾^y gPRSSc{\mPK PޡB?cTb%ͪ I4L*$Q5nغ=TWU ?Dap@Fo.i{#j I9{4@ÍG~I% H65HgҰiS^mD##] ÇɡCߵmlsfٽ{ 2յK{-Nw%!PG?~?:5-9icLj4lrG)K GCw}22^ogmqK{_wրt{?k{Rw=hJ/ITf]d*a}id|mHZ{{!wP.bVt_F&%1` JbfF6m<'F|_ `p,,,ȉĉ2>>dZ.A kVCJxBpDNMY|[i+▱EeԸGiܘ#zb$9{괤I+w1,c!wX4."rHD{ݨ937WwŦWz{ J]n g mss-B=Q&1b 0 ^'`-&CF<䍤=u]|OUcGi"5r9_/ZIQGL6H (@A?t6J1K}ggE8Ͳwo8c>VUVȗ_4=nt%nvիaq3B]H,ry13`@D>A(1Wuoڞ`p;DD$~~/qBseyoŗ<. uL46U+ڗ+K|j~{WTUVd*,S-;ۃ}f<4hq5dd;XV"rY+OY('`}EFUq?Y_djjJdllLKr~jjjd߾,T,gg>cٷ/$,ӧ|h<0 $SiR*'?_nTP/~[C}PIX̜BٔGȝu2QE@y1w1,v!{r'"bQIHæML6{N4E˽O> %1c%~~5??XlJt6KssttL9k=266&'O(}1y#)I?Qc`p 袧bS200PBqio3Pbj}ssZ-"9{jE9'8/!`lz0X!wKUcG\.gH,ZbOPd9g! \hW-rƁ+W <T*9t9ٵk-O){31j\QSC7J{R{uUeٍӚd%z;0b󒘝:ywTz^!rƔC '7U53rG&EU;G5w 2 ^7ݛ+ؙOU_|7GeFhVm IDATnj|ZrLǍqCZq["5'6?+}| `-Pپ5 r*# .6cVbYƝrG&GV6{9JŨA9<p8r\tw'OܸVqZZ}phԴP{UeZoP{"%̓)bT6?B[<76rL2ؔ2<"ȨUܑ !wܑwEdUH5w.K*Խݎq8 0mzzC%{_"P@ J28Uj;O~¿Vdoq5IUeEƃQ5"5IuU19\@ט)$J%6Dw!wdsD,r/{~/)wW3S`p pwٳ[XI|gTD$S@թi>o{%j'=ÂDո-B:?.kV_W%JKuU%ŗ_ӽɉIB،Ma !wd.J&O0S ^bH '} !~%S? @Dո )#V޸VkکaZpD|2QAt.@k= Ⱥ6#<;I~+w9L#Bj+"Vf{ސv*y'ĉ#x̔U W/WlOL7Ԯ419Y") $FzKg0Abs;䮌2ȋGYU5>3lC" P`+W i7 2y%]]8qBz9&J8RݼP{Ue=+ Ք~*$9$-nݟU , ! 3+]eۍF&}/ %ffbVfZr&{r)"b(hdR3 Cw0O;daaAp#>O" 9{w7d5ԾZyS>j}R{сߓ=D#}!w3u_d*-U 0P_I뉪qo|2!wlU_PUfZrG.EC"TsׅIw8u,p$Jڕpb-P{+q=+}Yo`4?Kv4)>~W2B(Q'IXMihEj|OD>nIw^>Gl\1`;@1|>Cڍq<܁Ш͍>Eej2IѠ1> ?0`[\D'&X,*#W!yު{iBE#IzUF?!555k97Wj;$PjJ&‚W%J3?&h Itm7N3('A|xqhkq5r$OlR3\rGNT5vrĢ3 w^~L60gO6Π8H|> &AEJ}9ܮw`Vj~[똜%,#gL\-;%ϐv4a;i^ )RWlH~W[ti?._¤JUSXR6nkc*4< v^kO\0XLFRΞ:cndB(dC;9bbvQ s .hpD !z˟5ڽ.W zW/(~[T=JKTd*--&iof=r;_SqQ]U)ԴFi:_^˰W!T2)iش"Ξ:-d]|OUcGi䃐;B5wr7`Pw`p `еM*U+p{*?Tz^;y~~W+WWU<%f^CQ5t%!ES}=}kڵ@㖆ժٹyJ9}֟Y~=k *<0_~'[|4>5'X{(Hѐvt<`rGT5vr "_jKbfF `|>L$1;Wa=VҫsZUyWG?*? UJ{B!yQkU٣j<wx#)gν!_,A 9?98Ac>= vkU\(# ,`*f 䎂Pm\1ݝ;p0&1r֥#284jhvCh *  D!\]>ܾ> y H;e&U2(!wl")jB\;oH555(sgdqqCzgV)z} ,XTۗT5Gոן-XbpuAwn?r ׭2 )}!NBVj5wr~CPeǎNٿ?n]Dd||\v)ccc X3 jJ=$fޑ?_KyWw T)y\C}mהuW%p/dIuUlܐyM iCЃӚ( щI2e*"TqN]j az;$E򳰰 >9y/..ʞ=+a^1tW'1;wKkMUfUk%\ڡ?~^xR5dʍ*.uMq/U| uqCZ(#=aruU%u?$@9IrB"rɪ[N= R19tw~'xLN8^Re`$xPm֨'LJ8"Wͻnmq^ lsscv$f4oRƕ+lP+ uRZ\Mj\ WgQTKߩW\̽TO!w*C/ٮGQio3x(h_42<"g(#6bB ~I$ i*s $FI\>$==|(_SS#{|I;ijr4뉪|) j(muC{Y?"t>V1$ pZH G,r^^<-Fy]E6S%[@qCau+(+6~ن^Co!;"b\wB1ٿ V,6ezɓ'E9pGСöog@ȝjPNn>icss-ڳovv'KU1~b{C}Z>n߶5];yQ9tVlL&{ZWto7NrGQP:TzI}12PF䎐;tR=UH5woH;wv`(Qؔ1^N8?}}r@-+|>յRh vU+sqCZ͟SvZ%roW[7:ڤdXWS֐թiIڒĵRd_>Fק`-&R4\P!w!$"[sTshq׸*`-,,ÇС⢮m֯1 i~CߕݻP^GGvpİ 79R*]S iooZ[P'?O$sQ5^׽Wc8?V mɥd|"۷Y; J8"m~60lnnЦ&̉5 r<[9ߟ$$13# 618!ݩj 6vϘ{SS 0%CLؘڵ3~-..Jݳ47; i71;'") ٹJJx"0^*+*={Y++HΟVu4ioUl!w%|] B{ܺy?rOrGbJNNLr٤+Tq(!;.LwPbv)Sl.zeϞ .t6KMMj\DE"Hk!ŴPoroxvZ|CJ˵T`m\yIR]Uiho˷gQyY-k1j6?*ka_l4h$"`Jءm;Tq?Laby6+X_(ЀΝ] /zz|>A 0"JxBp ͿVL-&Tz鎯L\ʕECU ʬTzaJٸ6ご|*K sqBe?Urʇ2<P33ruwMUlaP`_PQC R/;lHMMN BE/g@AC@_ڕp=vss=PѕsfpO:[?ͬJx(65<84j0*.5Q5^'"@ہ|\$䳟.^윦'֞;IcvfQ0v~HǃJL8_P@i5ݧ-O(b_Ɂ=EDjjj$g.,(l]GqCZ_r=n !*uOKeb=E+akq5ʥǁ{)IEQ5Bٞqd6B0+WdRIiqPb; WsO%riy'i \7ݦ&g+̦tmCzz-{:mׄQs'9R*]AX iooZ쪾/^C}] මdڌ`NM[갖RX/;~<մa\oe`u+!wJU܁rP3jw^Rɤ!mڵ,,,NSSB)B};;{ۮ gHQ5.m~tZv%<1kʊJ~' j $u/[ebp2fpHG:@c ÔɓPV^ĤH' @);B(P`Uqb(1ͅU={$wQMs֭=+==l.:::d``@6 VLCivߖ@{{ߒO{Zwר\Z-ƬIΗd[Ӛ5䮄#~ΈAǪ; y#)W %Ng3 @ ʁ=y_CW8_9t谩)^O;"JxBpD@P.677J{b=!i,s%>.+}Yǥ\-mըR6n@@'l#@XzF''XJUrT5<("G\1] 0%IggPz5LGG۷_|>響_9~$VZ=jv%\5F{kvZT VuwiF_'?dR,V~s;ij9l̓Ǻ3zxDP臐;堈P`Q@ PzzȮ];e||<^۷rՀ{)KkXP}Eո( )7nuZZ\MRUY!_'rn.<.-oo#^jt٘kQAQ؇ qdd;%@;#B( n1!np8 퓓'O|Ͻ^޽$̲\y} zrIq8,ud5ԾZ=SHjnicrnf PK9Mk5>jrO$1;W5iC}]I0p)#ZTqGQrGءiL8#;PFfq:ZW.x |$SiQRL O=OZ,׃XZ*/K*/ҧڽHǝ1.arcā :q{_L$$y#)wW3*,_bOPlĨ{W.СòkNY\\ڧ-OsOf43 ٬ڕ(Hְ|[+[ l'ZP OԦP),۷mο5*9{qB<Wbj}Z{ZOHw992 &-O-q½koO.]~'kپmu4Ƞy0e}s YuUeCy=yd6pUSfFEgj|u2`q!U@;$@pHSSFi@ѬW+gmPrv7a2=+}_'͟CكW\]rWK[\U.khaldr_B[M'# ,&8߾mni;bjWE3`aFU `P|>!8 0ٹ[BfUҮ%^0՘5J8` TǥIӸ+ToQy̲kiο~ym* ]r /~CAN}1LJbf'PDKb&anR!SإGמfDU  P|>)*UO2%!Pr6?U]U)3^rFi zYKbP2ODոegZ$Џ!a$fxt?a?.r1:<"i"y1;t00 !wܕQ%ff$Ln `pʜ5]+}iFu]۾v}^޸JT73kJVMTqg]3J8y>Kpo;cbɪUqCmC;Vj1aΨ:M\r!d4"/`*oj ff!PP?1]9Ϙ{:M%׿?(j'YuUeڂO͍ګ*2ڣ'r ke #'f`\~r ͟5D#HÖ]~O\N nA OSPa?QzF8@1$o$г߱CWC6DfE5 }y$X!R9RSS#U"j}&$^k޳{_Q<7Ԋ*m~BaDar%UE @"ޢ',V܋9'Jcœ*մz{* v/*# ,EpiI%V&Ua:B0]t!w az ,E|>еMB<@yIjϵ:zѢWCP_[LC}iǝ zTLT.Քq\S%IY{eN^;G0O*h9$~{iZ#~$o$3vjنX{b&A5w #XzX%SiQR GaU'Sb-'n~Or?Or kY7glŮ@bv!wٗ4ʥ#Tӆ.PN$!w Dwxt+C"r;XObfF6X?h@Y + QݫӊP}'kK9t 㴸3Erqio~KPL(i_%n \B^{`=Zv-p㖱E~ϴm2WQ0C==E%/TZ^ }39N3ֹv`.(ЅIءlrGIK5= &ʐ2< @Y;T]TTk_؞6n] =n͡=)%91g -T%4ה1kh UqCm kyRK==%)Z}<7Ƅ94!w.~m+#(#P/=fngQd*#Ts|>&Za7ٹPШiʊP{{_נh{?kO G·ܙ,JȠprzk&N|0Ք1Y*hMc=@!{Bȗ'/Fxx1Tq1(UQT5|SD>e~7{ d,ØiT %SiR*2'?_nd8Ք5zv3UVAVbS\{p$K=½kipHѴ'Vs_ЗaNzwd( @7r;tU]eQԅ3 w^~6؜ X3ݨ'Hkv%1i-P{kѿc~Ol.k=JKuU%qKgzվ:ظV{4(۷Q!X${85ﰖy=!uP)q*թiIΕq~iGs}J O0p(HQ.]6"⾗ GgOT2im2B(ivcR}w5UTTҒm&fXPbj(mssZJZ*/:AwNz 2S V+dǵݣj:ku6BfxZfP5#QbfF^CW⎒G $6~iy'm,Jo9"QuepH%ZUH7J{R{)U/lQ¹BٹABT.2Z\Mkimɥd|s/"TZ{4'_Vk~Vy[YUf#ӎwWy틑 @^㟧K28^lZ{ im!w_铋?xG{4Xpz'܉ov_m&J%1i .;f|Wd'd`}ۡr@E]+w0LʋGɞ]f2{Nl]TV Ubvn->84jZb-/PzVy]%kp$ъHC}]pj.a+Û/7ʵY_{|KkOho/];ҙ^MJ墺R677թs+d{Cǀ^dZ߾ب89)Iѡgmn~ "mB( {|||T6mb(Q 7i%Nri )ks Z퓟Uj/r=-xLYԢШ^ο%K*+մԉN OHTӿa*7龎Bc17z99s9թiIR]U"}U^;w`PGDCWj}f倐;IH,r9wG7uyNұ$/ȵ%ra7x1&5eg^ĝ&Tnu(f2՛NWHTW4 䅐9g&ySk,r-/t2b_sr‹^=Ssqp(kx2.L W.)Ҟt;KRs9z,)RO;©aF[_ý77z?h]*d/db`[BSc,ƴ<Đ;-I@ Y2r˗zr'""Vh&0N!ˡ+VQ'$~$"^\~]՟9w3 fmhX7Xf7pPpWkD8NЕHr^*Kþ`=2?ʷSc)_ÐTѷu|T0NxWG Swx˴ A9|ZTv+ZR\ ӾjbET1E^+  4gIRcIWswm&m9O~U63=m]UDv]%ƦRuXI.7?6L{,EdxRv,z/_ +DD:sQTq&aȝh ȶr'""K CC+PSS]k*ODDDBs C $V܅<+Q_c}"*t*&ʅFXXщ s/).1'xPq+%@"aa׮7۳V{|ؾmNHևu|MWj]%֑2>gdV槅snSG ,PxJ@CL}1_s?p:9DD:#Vh꧲z#NFÐ;,{`jNg@ګXYH0( 9|^>7u0j] /Lg+C|Fs}Fͷ.>uxa|l<_Ydt*ޗ{q2*vxl~O8DDD8wΝ;yyyPSSNDDD s*~\2CU[J5_V9 .).L}^v2,aLqdd דwtnc8uo{DkH "!2yaS !8gIRputA9VfJ_ȤtNes]rfe:j!;++DD:9Tq&#cȝ MC;aj]uBߚt"""!Wj+W$555("" ~z2z{{Y= A9DF rj૮D}Q T=AuS!wZR\8jt= ){ IDAT:OpaIq!+\7U\$!K&嚬{QVK=м|wށ߫CF(,*D./fػ'XXŝ . xi7uK/8DDDY0;;V^JFXDTLJ=@'t=欒b[:ցn ?]m8Ѻ]r'-Si[i%S[¦,rn|cI+Jŵ*T瀴v,wyjVBͪU ""ތuKVi8y]@F'ˡ|  ݎYMDE 3W}ʕX. k6@EEDDtK(4^tvv{)ijkX<hV Wҩ$pblUW2{DFOvcGTy96,s\Ԭsw_{C;KUڭ^0uUd6ŐU6RC fs *?3-`ef\fȝ,CViVq'`ȝdLrGڱ၍prĉr]g;T C`" ڵkg<OHTMDDMza}1 Pq??kg.).L}^L@$P&.2',$^SŦ۰lj^wU+Cx?/!c,ee+C߸h*ԯ `3;+<\WgeM'+k*]CDD_0{:;?b=CgMJrզj7/ *Sdd,uC9y96l҂:kmKM/Awjb?!KTU =́sJO[b8Zg327vd}F#Zȼ+^ فbUܯq,r' @yмLj؃!iG,egaL$?lW\9~s_chf{{{q vLܽ4_|"k"eG_2Un˛Q.gghM5Ecq|+K }#K{x'J($rXhUW*D.y?P/>5 sō T[U[ͽhgwױpaODDnIH=Oe9#Nf;ʭj{x?۽NDCE; JS__ߜN~z`u_QSSÎ'"K~:z{{q\'z{{۫nzݞwg׫krgǼj>dRچg/{|l TWG}VrW[a떇rZ}.[v~e ݕ!x[U{S܁ "MjF݌~ 9ak}!wώ|OXbS eL.{WxX`ȝ,#z36Tq'aȝh0y5w28 9DD9l/_bgXH~ڵ74KxzxV'"#]}p0@{w ϧ 3JV \Ȼ X[pITU{[瀲\7`} `""G"2BS/rU8 Cd:vWv֮["(|E{?3 fzx/NV/Qx"ʕ^B@{oo/nܸɢ g~2*3S+22 No)e2PުJ]4ljfZ,>OGS'DUAyH8.r=#U aŊ v[a6@86П9f;9~آ2y t!~e2>֩3u w{ZWAMY.s"8~*'3bȝLIC{F#GȷA'"ʱ jj>x:~!27nwtgす+* x\:;;׋A m!%W--+JaϻS52ra8H:»T1isޓ3O Oҥ5nUK_;:ȵ}M~ct" C4?k׮Mxv8~*8_yCC;(BA p\' :NT8qOU)VT=*<< %Gcxa86`uzO228}mvEF4SpǏ/=BZC >[f40NDDv!45Y#NfŐ;NSƆY'"").`J+n?yOG?&NJ+rU$re O?#NW`ϻ3+IZ'YR'D %~lny@)E ':>K+9+捰if_ky_!~*ޏ<ߟ2ܭt/elcI*b(U\2eX|UE6NI׸\ijS TwuKغϐ;itS*'P?4Ȝ8 U#NfƐ;,s+އɫS~{nތj~ g~N42jSu"92(!%&|x \.״W˟\3Nd&~}}}} T.BJ3*QSMY];22f:saFO~3O[q)if_amH;'/J!<$rr]2$fT_S|>_eykč t7bp eJ80%""S:~("+4u8CdzvW;fokCXnx""|OT|Du|(}A%2UUP ʕ+_0B !D(JVdg8lwݑ JujK3_k'Næ@m!xo۬Qkg> Ú^OfN ,OTgCaIJt]UW*%?k}BT=WU,hjd]:9}fvԊ'4}.SrfdgtHz[LDDFoX;e9tNfǐ;Y- }xC\폹*Nē?tLAy<TTrf\y.]~*`*SUڋ SU;THJmH(6[>{wق/GFTv.Ty5,R>2ڕ&gK=xv0t]uZ;9d (foh'""!FtD߿`[G<Ɖ@D1wh8w܂=UM\gu>`_ AB#*|CB3TBE[#0r셊6|+xF^Hs_a)||NSDDd{m/ˡW9d eܪ+fokG.h1R$]r,Zw9;h"WrB}6pRl 'co>xb,:NJlw݁p曢JLr!w [\X(8Gۿ\OW,>'ݏaFZ}=2a]m8}V9侹%쑑z"FMwY2خ砭R10,B"K|y j,) UwuK DCrCzܼEƥYp5!wJ9@gpћQ89DDdhǏ#2JswrJr'KЫnwkֽ9n#GqH;bѨUkp ޱh3OdfY7We;,ƍN'V|gϻ6N5h2O)!&>_plj^r/v,>{~}Օ?"6b#%_,!M6Dd2W. ECL8Y Cd9zx7aCF/FIӆIQiw8-x?Zc S\`Cq UKgzls _Dq _O#dOTkƺU--|ӜGS<2`&+͓As-F {e8}VoD"h'C:sA1k{e`ګem&s ngIiWM92a{7T:s[0]9<7)Ic{&K癓k4->ֺxKDD Tǯܧe9tNVÐ;Yգfod,E/_~8G ]I :ס@N?av->]" _d%xp<p%C|ԦCV ј ⓪J!Dt:TmhfԞ" 5UvWix䇊ESInFW$U3N0St.>JڤSKFS&ECH#""jU:`G!w$Y]q+^Tǯy#|kVs-ݎʙ'?Ş~Xor7ᵻW(o䏧V'"lHTfis<Đ-rTAǮ a_k~)_-e{28?=gxLKR8f;h5B^KXuZ_ _C P֧X=<ĩ36h!㬤M> ٟ=4Ff*""2w;NZNY]㨓1NV@ 7C]qc8r-80w;NbCFvUg7ukN1r-E'+DD3d_ Wi~SK(}6CjSAcrMFn%%kmmS|~Ϳ%Ņp.CWprMUП]g[<$*^.R[2}Xl@:ŹƐ{vdJڤ嚬k4i;*ֱͯ{R %z3/YrUɲr'˒5bV2D Z7+E (.@?sUnZϊDD@{nJ5(f഑)Ujg/YR- 侤Jxe˅Bz"RV4 J IDAT' ˦Z^>|,'_{kj AZbۮn l?z,)’B\5WXzU){?,2)sT sNuhfq?rh*'+cȝ,MC;G,5{[[(ǢE9 ED)JC#`/Z*hQ{wy0.A92Я[:,)RnP w*i?Xtڀ߼NuT5}^8K?N8u^8Ж]Ó\mTBMX|?`+-[Ay?Ș{6<ى7uIg =$CR:)'a"Gdxma/ˡv:YCDNh¶ǾQ';Lgz0S$|FDDF@1']3XiKOYXR'gcF[BP/8سwyP(lj♘U_S]ݗ-r*ܕ6[DFp!86hj3uD=mxjNv56i&WEu ICuQ;TݵJewh,n He[5>^*:6p@n<-ԙ _gxAwsNt| tWU #\)WsT\&N6.f5;tN+mzMCᨓ1N4e'Vhhݻ8??~F1"2 GW&,fVE(ujiq2О4eGBU\)K+ֱű2CL x_}c`7æ- W]n ye8}}0`".8u$yUgI|^>M]ÓɹBI\qǕ!ӟdۄ6[DFno]ݒ8\7%7Edd,h0bIL"Skkd98Z+uw<""ҵ(E4wN!w",s+^U까w;NbCFy˱_`xk$@7rAy(Y])؟Mrʋޏ-\Q+l"cҥv,Vdxma~ `Gh CDr]Sfok,Ⴧq-YZjjRf 0͛¯|}f 5'~y!QɟO _Y=H |\ѩ[WGԉe<36soIH%nlhSٯ:DctVAh_LsAf?ӕsp%Knם|e*7wye=m kQ=CFz> z3ByDDK{wRsw;їr'iG,5{COmdž6]Q'Sk[m~.TWb} DD:*͟TaF'K|p:}1̊ l(.ji1lwWi>\!5YnZ(e*UEh#ѹ*YN9Pf]Su\U{CSZ^ĪnýpxZcV-Ag<>׺-gq#/wX7Y&+9i\PO~zm] ,ZEDDsl'VizN%܉5b'W/gwq BM)<@& !kqN|M~P:;t™{ wywf,Lv%g:wP Өc՝mpQ8ksU)ԭ E"zrK}/Pz_\)jWU\S%Cܣ83rnm*풿AyHUkBΒ"yZCLFXMևX (snojN~a* /OΒ"myG2CƤ}nIq굎 h,dttNDDrQD#VikzN4CDs ں%]E: "2H0~_ZWObϹn~;-b'=pkrav3U/fWN75WԲΒ"gPH(J4'z2S}O1d-18;6tu_Β"MF xXNC}Mu '0;Cqk>$?;4|.T<g9ff}t#2<߰Js'*Dsbȝhzx wX4acYP/ DD<^e+ȫy-)pÞwnj1hgaMW$ e]5񐻱T UӯJctut1Z:֑5]6<\%l"ʛ .><j({|U{Q_Ke`ު/).Vv3!ZWbIH9>`"#cB큜Wc("pr`(m:r'N- G۱၍xsԉt5"Q ȋTOcZ_żsU>AUWg (mm3 ِ@T5;0QCMuBU%Eh,|̾`f[" <0-wf f#&|DF2d[* _u%|^s1'?*v[^2]I+}ϕ1xJ)>܉(Νs*TC;9DscȝhvWۺEl.</hv{Wh{H+m% ᙾH1i !Y7&R5T ]ߏZWd- mZ>bmj^/4_EBA9,46YRgIaځ݉05U^xe`;֑NXk-ݖX|R⓺O=~ۺxkkQDoFq/Z;8Dcȝ(Yt+mz.ݎмODd1: DDtLm(5{ޝu}u5:*f/RU VT  CsTkYE}!wRԙ B!D\o=܋PSUgI<[U/O;5L[ReX?j'rmX*|ksY/$!w򾪿{p(9p*}_Cu1NlVhhv:898DDDDDDD9*'twAԆs~Y*ڋU @4jnK_H[ɜb_/lJ($rXODf>q@-ݦX;dx{K Om\oD[;up*[j:\eBebL2>uFqJ'\pF!So{vF9DD3{wTse9:Qj zh;ߚu""W#tU2{bͽ!AJxPk%1˦L14_^P lOS_SL}}6 'Tԙ غE@ݶ+p6M\pEzⳔ$ɔ9zut\ʍD]odA'"xtlN:2܉r7nw^?B{[=/ODCE DDDD&;:Tq̕܁jBf!lW%? ft}F}/H%ᵠN1--8@GCwA9JNdM>vDcڭx*E(QJM)ˡky"e x@#x:xQQl\""""(.L? L.Or7{%GъZUjU %"v[^ʰ>Jk ,Wp=Us?Dϡ*@TՈ)M/z$}.Srg]WP=vfT:N ""ʺ!ZrhGH CDd9t y<uxUsZPcL/ aӆܝ%g!S}ʕmEC־jbYn֧rWڶBp k_CMu!w^!]n+q4N}X=hM2XWMͿgi);uKVj1YQ'ǐ;z;BC>t59DD:'lY4_kⓦXmdb!1(èoŪB"!?|S~v- ޣ]5wK SbItuKy'BwJdο'-oZJ~I $~=ig+A-ˁiX}_p`۟ ;v LH܉T{nw1Y{ۍ=/J""]D%wQT--fDq-#׍3gzJCǵd)3KU4dqnK b`{&v,>4څSː{"l'ػ0YW dEޣDZ>sYFdw8Ww1@DDYჇ=‘'R!w/"GoND g_st$SЇlYRƠ$lpA9lϋvpepq|Օm,|^epdd q8yZ^85/Jpؕ755 /#{Hz gT˺UqqV:b%fy <>qD=s/K= ""ʪ/!ZQ'R!w4r]SVhoo`,-gr͏Wp'"""ғ g>B^ } y ]gq¼ΒA!ZU{>AyH0ΒܧR[--B׋a_kیbIq!~wplj^/+nj'UU]MwF QYBmXI,>i/3Z<%gg1ڵ DDuҥt}i&5kjSg]ݒP65 RD3Bz Tyvv9%k}=6_u%:֡YL?%(Ñ /.gtuVjuaȝhd9txSVh祈_cCF~@&"!73ၑk1܉tĞw' l6hF,)Z[keV-OSV4SV*]6<74"ɻc` X}Oq#qtuKBk}x@\Nj  (sjaDv"RG>{AyW+C}&a,(S~֡<3L Z E"""ʄG!\RwrGhar'LUt_j}n7ˡ8DD9Xu?PLDDD# XU{Sjȴ!+\5ZVRA ҩFceJ}rԙ EtsUaUѐn7S;u欽PTvКHDYyiaaL5ZD]CDDdћQ>xJM~_Cr!w" r]Q+72Ⴧȷ'"Urg錫4dXkx}v[Wiyꀕ[$Puut18K?VW*ⱨ IDATJP"cg$Wg^- mesmr,t D:$׳IyWP*22< 3e0NDDf݈EVj:6r'҈,| m{ lx`#|"p~8>:c wfBp? 9퐷>Ӕ)ӴszNdV=Q刈7n+5yNKe҄F>ej~GFƒ%@Z`,C GƑ'CDۃK0y#y",r~-3:r-Ɛ;θJ5?u'(3ȠyHpGk~6KP*u{cIګꖄ+l[EScbOv\q5x,)šIu).8Kx7nF5y?MNDyʄfȝ4B|hr[ڧ"8˗Љʂ8n&/ˡW9DbȝHcvWp E?eQ}|"ji1;HGkrW Rvd;䭿)F "mPH_4@U_J1- "ZI8:!tM-4s4QI]X.K Ke%+3No K 5J~>+d}dv{+-3CDDDڻk՚N=܉2@Cnwav} R|kVsȷz˚^sZKDDD3:i'22fF퐷8K` vf ӢENmx %E Emj^x'EcdY-Bwl'$D}RWʹDrCJZQr? wm79 22J;gիv8iGp`JM+ˡp䉴ǐ;Q< h;sܝNDEίG'bX""""qgAy!\?g9Gwy qDcqMB"^jWb[2Mqlny]ݒ&L-sYe#<~>O;()*~]UP;S%[Y94j]y=;hnܸf={9X]P;Ja>xJM#O e,Ox(>x(K_yKDDD3 FՁlWU 塴ARL6_ubO!Csmؾ__~u$*&z =cD&~̳C*&)?١bw8aUkV]N!""J]FƑ' ܉2k*/BcOmdž6?QZmug,HEDDDDY.|C*9"!o$f!wBm>{Esϻo݌}oݬ`!aPNDBDL45ֱIg2SdR'|B˽^7Ν턤i:,^eCD$ˡknwG潻vcKekD!w""""qkrav\u.S|2B %lҢ\e)CWGMU _K9N[7dNFFfW[IEDIJ'>+S*|9<˓3qZ.EoFVkZ v1m=٭hIY|\gEj @>>h;iS6rr4㝆(iSfn\ߠ'sbP(!=YX1’F[Oܱu}!Uc}pk 9{Bge8fdL&0*6y;oJ(Us$ITZ1[ceo(ݤ S0&+\]ez(-V]rlJ CABPBR6jӌ#iN7r\Gw|ItYiUd;{)c& ;W2SJt*w$e }̮ C>ўu{}amhXĪ[p}17>QYYK=d5r򰡡\'hRaCrV7;1)ٯf I 5l7sFh(0&;q'@^rQY%^H5Mힱ"иi#o4x'gB@T/ 6:= q"`PtyfքkYVa3fu.p1˽ʪT6f%ݓXK|!fx o9vEnoNV9@{6w+;MȽD^8nG5B-Vkܺ=9;ey yfs_+iܸA5/{H;TYrܘEvP9۫c|Wy{B]Sj:je O}䒩5a;Q`Rx)Cv^;Z ֓%{vvZ^Y\Cp+8@r 4 _/KN7LqC~1N>Xi.~,w&ecTQRo:Ǎ4AJx;ù*ِU6\l¹xlam/fEK0 ;lSUv%;]T1>wZ8̮+av:A TJC{*h0@a5op/f-<܁Y-Sm:tXZX6bɻ>͚Ċ{L kل%<]e6jF[OA6Q>^2fvW O %fvҞﯽHµ\ +{r~y@@r 4͆oSfnРmg 9Ys{= ̌j3sJ'cމ2 WW N/*fv,|+Ɣ{޳YrF2 {Rv[}]e WW)`LV*7@@qM֛t=P ~fxu{?2|*  $zzsv48@ar "(^Tg\$sv=A<gG^WDN{T-J8KKpil 5`L9 giG[KknvXx{|V7%clam=Y!pu^޻?9kfG[۵l%Ƌro:3;qUN.6wR\n7OChIY|_Gjjiqn0W(ricE(0ӌ1 ^Iw:e &~(93}N,H(wu J_.IsXB_gF-U6G[OAI d{6;,^8'c{V9yvf{Z3 NwAq ϫ@(tU=ȢOέ۝6:ӌ7s"jI_T vnݮV=ș ZgBS6/Ǥ]eÆgK-tIiUL_΂/uXgls?oJVrXTTZh(J٣9K^Ӻ@~&EZf73}CwBk>Ak# TUScQ@V7(L:iS6r#؀i; ÿVNy=`µ6U8է? `#քi͵}u?̿/gn_k y}RZpuUƐ{ѨVWXމ4rrU'S顦hkmd'U C%u~rwVwﯟ3 x Z,7P^as}6a_!)3oٴY7? ut{γ6cŝvR9m腫CÆܥ ]_}Ms )cNֻJ/ݟq-dָnv8>=)-Uas# '] V9vM\KL֓܇6Jbfm,4^w=RMmD %y!-6;m콦!w^VH:acڹu9gr P{͚clº{fY S2J1t=viZa@;Ow+Jv9g J/fj^,-]1t4gunB8F0`S{1bPC{:Twc;WWe|]͵$S+ 'vӸ=F( *\aQ{vkM3~!w/%Muq3yN5o{r}9=&)J_TdաaC5WoW2&SKjM?lP޳j:jfg|e!0eU>q 䜇S+I> Il0Оz @=PTMmD^?T ӌoBӌ3 jI2sC;n׽/gur{<9]؉SZfF*ݒrrOcam"\̊,{^;vsr{;ng\瑄ܟ@y;'Tvg)\jk՝=ڮ K#~u=fvԉP;`[;@5nhyC!ӌ1 ^Iw:e]vh l52, ~?=GgL f@6RnZݮ2%΋"~\ԝ]]]7=2sD+Y}0>nVYLku-11KҜ[ę@ņ{cC!~7 lwaa}'/$ոic2Z>`O29Sfuthlڈvmۑ㶙}lĪkhIB6Ǣ>hTu%:(c0-ڞf/_}9*'k}%5lν>;Ggzs`h6jlkCoZkZڽ'1%!w;pav;9vP74(L:my6fᯗ%̼k]0(k#ĩ^-[t3 `#.szZnv8c=zCUzy?\rܛ G[O*zsϜ*^%*`L1+/v;;nOJXBR6v՜}6gN𯓴)3::sv{r6K(yƎ-Zk#9Km3V)l7Nm=9=&m8A*ry;bq4r{Ҫڰ#^ ej!vۤ`k:*0d͚/7NmfnC1 ۥ3o M/*fvYⲃ 䤭@{g*rM?-M/}4s!ş~>g!iڳi@ew']]]Cϫ@(4>a ӌoŃ;PDL3~0%v܍lݖ 8AB2Rppۆkj#ڵmGΏ{D!w1"!w'YQ:4t}4"ހe__k1sFHc2vu]T1>ol{y~w? lkHµd)ӣ-6;q՜}ri;saέ@ɮji3{96RgqKg Q5:r}ؤ% r^ wҾԲf|+zq3gij Ɣܽ FTSQ dQFq}Rɤ^gf>P\iNINx=` }E(BH-szN,L.M&]eJ/~c:Ow+qOމJz-bfg5'.6خahkmLzFIk9H'ǣ`(pmJ=rW0Z>P|E4 ÿBn'ݸAӹ=n|K9=q;MT,9nLkk5z#>&ڮ K#~u=f޾Z>[g3m=]^U2~?73Ø$s7a >Ik{q Gj 6"ǢX ӣ[;q}8ri vnݮV=` s̳Wc/t[&tc܆ң4^IpƐ{Ѩ/S43%S{LJҶ W}p}֓öUPp; W?ϫvvGIǍmf>PmfINx= Fl,Jq7:{r[~PВsOWra@o\C1l,TZތ}[|/*SP-1˖a4f~ yCK{s{t4j-Z:3lBX*fv]iho]L0<ϫvvSGm8@q#%;eC޻&d pmD+AG۩Bwg~8M̘Zaq'6Q7;;ctmg]{3B V'] Te -v@%SP{*})"nG5B+ qe"sv::6v}rJi; ÿQ'ݸA5/C4 Ozfvە00[hݮ20&78NK{ \ifl0NEv;|iϱA(1_kzIN9Lϰ3͟o7N# 'ѷPJu!.Bv~#Zy=CK?*.%SYYC3}CahkZhg]hNq^v|}gs{\~MUK{ȶ-CK{ GjZګZ `Pㆆk /rJiƛ ÿN'ͽk]0_PM(LKV6=G:qW#~6()qܻXX]Wv Bbf҃6Z;f !yܼ`=ZڋW x*`({v+L3~B@2ZKu܍Dzyz sN6䞺?&/;Ss[ONIɞfw rO4Dm>ic2-8A B @6==jf|;(M܁ҶB1' έ9 u[ronR?'w٘Yzll PR,9n] lk!Q$l }{6-B6ii/^WPHv\ 9{@>@"0ӌ75N{=`? O`OοM_͏ 2ě#6 Jh8'*޳]%3 ۥvRx0&ȇhkcPP5B!J y=wkM3~.B@3ZKuOy\[.gQ{B.nAKG9ϚcS1Lbf9,ͮ~#Zy_=g] Wț[cf~}E9ȧX{vnaracN8LqC~1>\n|BiU&Q7vc'rO]X{KfL`^e3YX;^g 7j}#Jsʆc^8R@(XLǛ?Q0TJ=XGq}C^5P`f𯓴Is7:7mK XM 2׬%lLGs[^凊'_j֛ PfLyȝP{U6lGgmmU@;q^i{bZ0{:$ l2@^^ii/pmJzO^HCm5Nvef::8ZӌwGpӌ5 Z]F!#\eyq`!ѶqS\}-:|<wx\mժH;$8G׆/=cs!P`[]hg]qSEK{ k#Y=c=)h=N;,+$sdRO>6n~Wܶt%!N-H(7N.GqmscptY~+="3 P6!%ݓ^Mv)\]uM%Sk^BK{] ((7.$ոk !bf𯓴Is::sv{r6H FyI؇Z <>kOoǤ/]~o-/R?־?{ͺ{fY` S4b-E5Zv16IBo`}5iK;P74X"49cᯗT뤹wmۡ + @Rܺ^7KFrG-֣#nLPٗcF[ip6Y}0nFڙ3B 7wBX£Nj:t؉5YδB1 u&yz$.IZ@g(w:k- OcN-XC>(>q9.֦-5ccQ%S9#t} hi/@p NK;,ӣ-6;q~ 8 !wL3lu8B/->y}>A::r~7t$. &۟֋h]_s}k_5eamnvXnWYA|nWP}$)NK{Aڃorw[VZgsȳp8Bdffr:m|nw+==jWf!w$ӌo4 /90->cݶt%!wme==/]zWƩܥ>.}NuH8Ko%Ǎ]m4{'N`li]^ոAdґf|;DVHjT]uky⥷[r5?/lq{k-#Y}~^#~{C6l̨XI$`fgcn:wUNP;*ڑvVvnݮhq'~JZvA 1xaJzi7nhPy}>6GmKB rCom4~V XrOcamOg}^iT;r@@[bA9GK{y}^k#6Ep+L3~]`!w0FKN%zǵq3l( *ёc]-YgΥux^xHB!Fhil*y! N4o \;OS/SRuth/ ?؅nso-hM nAw/|>enֱ='gYM F7Κ.),MMwkP2um1O4O#Cvr-qo(3y\ iiG%zNIk>~߱ 6Nµ6Gߴ_<. 4˿~L{~.5ݧ t缞җ.ry¼~ϼ{x~Ξ;%eA9mmWGgY<( o?`Y)]iƛ>;d=t^W8έ۵kK]Qҏ {k;NUQb=ܰ?FkKi},.CK{X{~+L:qu_.iLIRNny'N`(RohҞHCUAy}>p=}8ud!wY]THZ ޸AO4iis(V%)fvrH$S+`;-GK;OJqCSi7 dB@F?g9mXG<#lr66 IDAT}oenf,f]ȽKu,06DK{ J%N_R=;@6Ȋiƛ ÿN~p Ft%l(rܒ~L͙&wb~8sz̘`-Fj.09vlr5ӌ5 Z;efFh[(޿\-9veq6w=d*-k9L촴QMmD@v}ޅXS?%i5Hr0"4 ZIO;mXGlڬV=FVKC" `J8kO6쵵J]1KY<\Ndҩ09v `L30_tf߷{µ]0nsonщS1֣c'zf?=.M7*>͚~}*' 0Jli]J/0yDK;|z=޽3[#GX#f$uJ*wnGcD?hͽܥ?8ʉSzoOXw^ 3o^υ,8K G[ii/@0@@= ) (l5a]ӌod-\,iڶx:uKtY/@.kH]8c]^|E15[_'N^W]ty=nDAKf+\%ڮhɡvZ-PH'Au3 ,Iǜ8і/t`u$닶ܥ?6$=坌o˖kO|zZVN.d^x(FCN_4ӌc'4no6 w%=Sɤ\NO4g#(y^O|㯴k˞}}eD۟Vs[m@m=9 Kwyj{Zu5cjEǻu J_ӹg8BK{a$/ lw@@Nf|a%}iG[kl%^}eRɤ%O__kѪhOq0tyB@NXr԰I+?+}f63i/Z *\@IiРDO±f|@.rK+$5K*w໶P͕@)g7[m=:q7F|K]MF/"I3V<\@Ѹ:NK{a#5 _ih5:?] WӌwN5k}ˎtY/֢Uw}Vs]@LAr%ϛ8s;ni],gp䅁ܐ}4DVKN@|]vXK¾򹶙7ni`Ӎ >}V}42.N0 g CA ]`=f'/ ӌc'wcX0oIgڸ6˿imז-YlyzU+]6MzZ䚠P>6oGy'NDF ݊niV)o,%/$۫,}5f|5;Uhr`zIʝ6xC[6md(i߷9fM٢ }t\7ޠ#ޤ(wqpY}{)8dU!3g 2li Ҟ@4nhprIkD;^nkJړkWӡÖ>_עX׍7smuTv4乯ntߞ?s~\{I\£svڶKӌ7X;0 FI;qvǣ%-y!Sd5ݧUw}9yQ;N=jo{|;9o aw 'ls{<~bmN`5B07IzKRza;i[MU W8PbfוP@t7glٴYvq|4o !wyg=tnGO6W d#(YG?{ur)ج_G,!w0x=ݭ_S˖I"CK{޻㵏;y ֙f|-;@>rwIRN? ꉆ|ݢmtVłz缞җ.e xa_ _Y0GyN&-GK;|>0,v|# eIo:uu䅤Xͼ|ۜi{ :os[6W#GN3VYbO 6mmP@[{(" I#XGS_,ӌw!wc8uz=@V|-A=׋d=|.b~87f^`PP{0R dQ5nh;y 4{ ;2 [x+\a#C3zj{J_{uraO57ON"`K{V$-yFK;7O7KhB@A&Iʝ8і/%+y!^DOrx]>Wq9uc|7~K@͙FdTA]y/  ^xs;G^dҩK/f@rPpᯗ۩#5za=@I\7ޠ?[S?C-ckKi}<Z vp|TD-:?d#(YG?9/ӣhK%}-p;9#`'F _ iizrj:tK-ӌNPh؆a%:uX.Fr;ٻ{ދ_L&=2dA$J#{[J8bíPX[- ĂkA|5,_q&~4 9jɐ&%i&cHʏ<kVڟkحgg' B{H3$Y^0R;Szn5 sN@eFIn|Wm`BJ- s}wGS}5^=gt}ңZ>P!cGk;$SYkV<:%f$Pr`)/ǭ?;к L X\h4)ע GK?^ip-S+Ѳ%K]E]oFVr ÿY2>iEӵz,Nl|:ibԐ6UV9bSz' +0=\TR14ÛY d %͔T^ufUKS'eN)K (f{<8SS//6 G(˲WϺwV$wdBIoItk6By28%K&85'{uZӮm8Ql/:0xN)yswɾuJ*4IV _.i[ǣ-۷2cEZ\PhI8ʼnH6U১-y|[.Oz' Z>))v@Rޡ,u{ כf(4Э?;[Y+ޡՕ(\>=[؞|By$,S)@ YOL3(4f0xd1pT;pvlg)2ҞzLiXɚUji>^3p)+!Vfᓆ/W + sYiv\u1^؝}<$~I\=d~2LiOtGAe_dJ;Rvl{rVL3hv5g6>@Ns,2uE"_[}<Vw*ݠ+$* 3r!t}É4!3ۙҞ"ف ʾ6VjgJ;֩f^PjᓬV ÿKB>tG;*cp~oVMlogM{vVqR]t`LÑi&P{VW@4~bͬv@m$5@@oe1phTk*W)ёRtN0pjH+gy }3ಌ2?J1?PHcx4åvAP{[3U~bͬvCmQR[ǣEGKU]o($jhk)==;8Ku}32v)큜f\'7[k.e5#Jl0$5Jtkف6obh{s97fsmڇm\É\)Ŕvjt9NI>Ɋ`GؚaK%qshJGKe}z_J`[5ߣYL$ÔcJ;_nM*4usff;3^o̭쯭W^AP 8k\*?G}~ `;%3&듓:x4}̏$Qr)gJ;hǶn/Kr I0 ܜg2 r{Wgߢ4N5I/{J~ l듞2;SS*L=Vjw~\T~l!ϙf(pt\R[3Hx98pTRTY6M'DwP ^`IϪiWjuXX O&$>\j{\P{VW@4$4IV1 ?Sқn ;к |R]t\'`[ݽ?Rc[Dݽ2TkIfԐ6UV/iܾqWs `̏턒dLi 1Q-.[{bFV'Q ܜ9ZR}ܘ͉Ńc9p۴cT2c2yOHӾG@ 0=@r,_Tpi8%wctshiǶ)z_J- ҶWUs6E%L#HdY{Jo#t Ҟz^W99+2$ڲJk]i8 %wcq%Mts6By/8_C+WfhE4_y'`i^yWmKLuwdo>O\o0SS)S?e )K[L3-(p(isU-Ex;OOja̘95th8eq5En#W^c4n…u`J{eʾ66=ճܥ^I3Y ܆;1paI^zaiv\۱c}٭y70pEkRZrAU>S'i8)6063IiAZ>pdZ;Sړ+Q 'VhMkϑ*s|Tjm׿awIZ =d,bhicǨb L$ܦCq/,_*7CJXX́c9p,ݳpt]Lho))vp}PO=AH?1fbFa%9tG;cZ[pR}U2c2'0'"}T}H-m>!e0)Ŕvp%x4nE2ݜCv uUEZ\б5ƫb J N6 !Fu"ҧ'o?^i#` SS) Eh44'Y܊;3 LIo=Ysle% %EZSJG?δc@>N: !"YdSݭmοXFdLiO`Lh/24č[ M3|U($/KpՂX,ōȘ=uJfLf; !N i+qZ_oPVf'"6U: IH=d~hm'$ڙi*'. %nG0 .I ݞÃ+,+ -* j/H#!8ficǨdd͹1d/׽}6ӮmABG#S %ɘR BZklj(7h}&s5|4{3]}ycKd9ߢHAiT\c0=Fsܷ}yO.ǔcJ;}uzf!fRbJ0a'Ij=mپU^E eRq+:7C+ʦ)+VTwOkgvv|By!`aJ{1XQC+Wi u{Mff$b(g7ݞCv uU@J>DOY6vϽNEA? LupowҞz^W99+*P^APtE"Zd)wW{#΢a~M굏 $ՋWv'u+85MՇD>><GBM:&.J'v>n>O>Κf<DNichQI s)DO;k-siТ t뜤$Ig˦F6\o0=.w&I3M3|((W0 LIo=tG6(;'W-E}!zYmTw@Yu{Vf~vͼ&!-.wbLiO@Ȟ}m@AGKݽ-W{#Q0%9x}^m~vZ~SC1^J Ƣ]c[D;k,wWU2c2'm>6'6VhpdZ;SړSڳsrC0OD" "x2-I=~/|dߊi21+DO;k9)1YNRW@qQ_#RfhQI18Y̏A;SS)jUI=grbKC.aIj4YdZW;Jo(85Ǵ;7Yi?:X?Ŕc>S/^CsXhvo\#SS)jqB 1M.$t2P[2ݞŴZQs$J}GklhgM%Kx-*)PVfpIZ;r{0✈_>iwSS* ȔvGrB!uJ*4IKG04x$S'i,!zYmK쩓T2cү a[?S/6ۜg)͖y.3=5;3= ȔvZSJ-G B44ÍD;ĉaK%IHh h*Oʾ$hlꏄTs%5l1K8#!K] hra6URm~{J~ ?Oz2?V*d~hmgA$B;S# ]K p(@$!=!.K3Nʾ =e;5Mq/KVfoj,4m\{뫽\sLunU>>p򾙓 +;'GyArӦ2 Ԭ5+&&I3M3|( ~(@P/{}^m~v_X.[7]1 Yv{1scfOd ;c:x4T},=%xj))p=P^AP򗾿 ;sw\;{@I (@\N@pd^_~{PEA#sô{Ɍ,|p{}[TR\ C;~;x}ypQ\uvBjC)kx==߱OGl!^&7"0.O۳uth*^( phT[6V%e_Nrl]2Ӵ& 1KNujSCsX%3&;|Pn?{޶WUaO]'ǥŽɥ]7<}ΔcJ;DZіSpa;$awIZHҬ9Z ڱmjM~rZQvkrTw)V̧٭(K5owίX)ǔv}:=dE﮹YdB4Ï$%wH0ҐZp_AԬ5+N~2oqՆ^{ϒS?{Ͻ?n8fS[;Upܷfȿ3==t`c*͖U_[O1ϙf (@)I҃+8+ҕ[4ڜN ijlXXs*1YS&f 4ETs{-y|Mַ/R֩麸o3zjƧ "W$  _.i'IľP__A9l+~-*x3!{jRvil9l; lU~^GՖۃyT}HmfO.aJ;.s*6( 9(@qIEw TRKфЊiz1{6E4̘T~HSCjhk;m7q߫}TԪ9p6ڹgmr;rQˆYd]CR0$-$4uUCzz#m(I|z= ~zKÎSۇ ]g^y'~fJ;≂5ER0$%4(vj 9Ҝ  ŔcqsVffOipNDFv.ŦN/Lw]zI;Gɓ/Eϗ@N֞hTRp?9 $%wH3EFIICV4]>JM|^zawBQSżfƎќ5{$p{?#ls%=y:ՖU:pRТ#J剘ف99|RDZSJˆi44';a IҬ9Z Dl҄^6vZz+eV́c;=߯;;YYiDeԐ"#ٙղ+u>-,7add̘. Ֆ/YJNI u(@T)T+`a[6Vim}BQ1;N i;Us펽0קS'i,N$W;.Jw];+a]'ui;y^J=*6( u(\NypC]< DcI?:Žg_ws$HbiEӵb\Tjhkgegߢ+ 8YӬGöich΍* Ɖ(ݽC]}zlفW,Q^A0f{✈_';SfڙkzսYL3 (;I"f[)Ԭ5+N>*ݠ\aǑS 5=߯521 Z;QkgR{}exu_mvlnߛ-͹1۶`9v降OYϙf($Fv6Pt,"S s}wAǑS s$854Rjol?=w];RE߮HD[6T%̥5kQI-RĎ;”v8y4åA,LLҠXEJI9Pp*8I|,٭6Gh8 lrg^|m7-7 whu*2$4IdB&Sth]@ %z|v.+khkͮ}LwJݽCf۱?kV-L^T?owZfJ;JD;Xa%$@tE"AYy¶fŷt>$CwZ;٣6[ݽzv+S/Okgv +;'GyA v-+Ѳ%K)իFF\ف6oJ@mX ~4ebA/S')߰t\R0G whˆ*::,u\>]I~<S?E jM*.42^bkg]D̬9Z $I\*@q@]aOEA?aJJxtݥyK/1E%*̵;kuhv;/uUx+Pp?EE `] ÿWҝ$CHDZz+S。I;FPQ&`ĉHND(y5xc1vvja۝tG/}=%K)9 X%w҈)T+` Ji MȶgOs#˔޿$O1+3md_ pnQkg?=M(gd*R.Tr{q۝':o*'^3p)1Qr8St?.)4b\+ 7@쫭3NȶƎSKo4R;9pL5%u^W&׫ IDATUKW+\2T(N RsfR{B9iEuݥ+:_skSa+SRrQp&I3M3|((PϠ$ΚUji>m̘ 2i3 ;.I~o)ߠЉHߙB{؞{<]cvkcTSCʻqxД5)m܏y[?p +n3:%Rp6c$(e 6S/ 9.-`!3pjH'"}j3{٭> ~z`B^0_nԬ-,gũ5H肟ich,Me()%n/\8S"mSMpo$ J`C/$b.x $~_Gkij֋W'NV\w ~yLmx^|`Ԑjl|n{>zJ\ u=wJ`S,iIPte 6tCs~ N ijl$}ߏ)|ːw*̍ݯ  DTkgȤv_:ϫM7Ogj{YyyלD_73#ޡՕ4YkM381=Qr3 Ix9ypvl۞SKo{^p+Wj\˵44eb s)_)L-,E|dۖݟ&/uUXHD˖,~&I3M3|((CPϠ\۶f޸o7+3MO-/PCsXhNɾYpYj봿޵;"Vh֞ubYydϲ{kgvvM굏h`[Tr0/);8%wpϔ&IEq8˗,M/AfOs# YSJbIJW$}uĉ_HSC:)=^wԞW$Tw>eSCT}8S%߫X`KϫW D@0vYhJBW$'dO-VCSaԐn V|W[SKQxMey^!NDLjщH_B4붹/*;'@ 6jck->kWQЯߒǗȋm()Pr2 #(_m_mtܷfŷ8Κ攕Ejѡ~g}v_ү`צ1==I7sPW-6v sTKtjgMSB_w^7'l)Qw綹EE , ÿKB8;lo{s97fhlhgM?=kWGuA5_}4Me߯w|nuRhO@@nn.bZuE"ڲw'.O8^^<;ꏄhZt^( tm;8%wp0t'Iu莻K 8-TW+}jlui;S{Wf~qƎ)Oe(+3MS&f .铓)y}^5HA;uMe[mfI?(s.'p&J`'-Iqփ+zt-wS:))q&+3m>|Iڋh১)Xǣ<]Ay}>BGVfq/Cic|3pjH'"}Tw`JW[~^(Qt??}PO=Dܷ[2cJfL&QZ;w5i^+Ѿim]BJ&Ó߇ˋE {=bQ+FqԞWT~AP9BzսDM+k%j2p!1!p6 4 bELyfӒD8#ޞ wӾw|ӂʴ245k_m}P(" ~zݞ/}nOuοSҺtvpD/,Jw]lR@d?F^u/k4.aBQt&1k*Wh\6vTbԝ5 wd54u 1I2Ӕ&l~x$]=.}wA}rr`䟇ؙnmڑ(/>_^M y߫#¾ں~+iiO8%wpϔ&Ik[)(KuE":Ԭ?F$i$ J}u1^+nr?Ŕc)hJttWhTjwuL̵хx'26ܛ$?>l#SץsKL^3ϫQvG(HP{S`ϫWL 7%wpKIg{'Վ_={ۿy}^QGOw͋vKfLVɌɮ]?ݽYӤ68 DtjE!){ {~@< E\;aK%IE jM媯,%*.ID"|ɱ\aYkV<V;MS&fr8#eym0~/*;'ȻM[6T(aɺMyˣfx1Pr2 .I I,ʠmcOplR-2eDdCs~Z7z}R~,فUm` E8Wv w`5W/>_h0.%K;A=y(Qt<P{?4R ͬ4=V׬SCz}<Pp{KSs.ztX=6=DV?zVk ?m޾ `i\[klj܉;a%YݑjCo"㵢&W#!8OO[xfѲ<,ա45#`1ف99|#45kǶi0ܿs.'p/Jr'-Qt?g1ӥvlۮ={u~`JUji>m̘N"z=uZZp_O$.nhPW@$bJ;n_mvl^`[)(! !p7 4 LQt?GWKk*Wi]JSHCoLyɽ+62{Z;UsK׃+<$ W,QW$CoTKS65KH Θkv\TT_ݣ_Η|6VF 5IZN &$I/TIge]W׿ڞ}jCJsoi21QªtG6PⲐ)-M utp yg&|HD/>_1Ѳˢ$4IPr~~ݧ+ʓ/v-pzhlHrv^!ѦfnhPKS"](̝9W\{:%Rp 8ǙH\IgǶٳ7)T+qF}85ƶjSw%qV-.LW$Mj9wUޙR{~AP^P8]^u klKzHacrI;I\%՚U ut$t?6"Sk[fq߮]Kݽ?RCsXq>!.FCv$5Hѥv>G,{A/=_ =-Lw]ʉEZ@C>;(΋QtwDZW!٩G+gcZ1ex:uhSBiG ( 윀^KS7;.5dͦ8J/d~I>/>__RUQ"Jx(t>zcPcδwXu);'GJ^P ~:p֏eV-/4ûp>woqTIMgL`tFO|`/{#%#ZVM9Y$01sǀЎfŹZgwmٻIV#h]6KB$T$܈*YTTՁ$[-iB1ȫG_k3~CRi\~sGwwD㿏/ ̺O]k-y7ss{{G{ܵX0$pDLH~ewn;={  O\q~t]RQlDmbYnPͦՑ?aC؂XkhŤLv9zw;ӵRIڮ۸!!h%rɼsdD]]rG~M*fZDLJQT$KK|Нn6"WŚM?>-q}_7X~O2]Zl'2#C39u8!f\rr_̟O~Q\ў۸%8B~Mϖe}I) I^O&tg!Jgu'gu˓$q}Ų(O? ˅..VT*ݛ[(?|;Q "hrZ]S߸!IܯI4 Y+rn2oF.ŋNcՕA{._)0%BP=Y fN r0,Ya}?~ܹvmV~"jN$\3`DLYQToNrw$p`ZDLKQT7eDwgYh:aS}sz'~.\G~MwM ݯNBҋGç6YQw灇44IcYy߾5Mr0#CjP ~p!-ߖ;w885 Mt-33QEQ}8ɏi}%I۰>NcYn<ЃNE@~MwBe}(s,w{D=_{ܵc" p&;M? 4EQTE~Ewn[N׻G$vX|,G@3hJ]K|НV74XˮG3 nI>˲>`E@Eu VK|НVҋGç6`OH@ӉB嵣bmX{/q1`OH0kW't ݯnE[-_t2,R (cf`6UB^x?1e]]έߞʊA`Oٲo3E+$-yBwZݩ'/##Kwo]!pY'r`E$G~EBw^<_% `OH0'&tgxzdѽՕu7` OH0gv疻GRYY1-odx8oq,ofN|g۸!6n&p/˲ ;sJ~m]]yН1;'Nԉl}݆\6_"pЉ$˲~;srn<;'Se䟇348`-9d it]ε].pE "wEQT7eDwYN8$ M }Xqovڵ>_)OH0o&t14XK> W"wڄ\Cݓ 1L0&tOl̷/VI6_~g`j׻'QO`:'"DO0m }7@@˸Di%r>4X3L}BwZ>C+R-ɏ,qe+*;ε]kOH@KВ&t`.]}ŋW}>˗/⯵庶6-ԉybвD, gll,ϝeޏe˗eժUmYےkIjYv_W!N@K҄&tX>ӧs?w.~>֮/e}BwZ't6;22)w/|V`A*$?ݹ5/oMy_71IҶ-]7/_<_5{?weاo3o/9˖/'GU@E$ߵƕ}^Zu4~ϪGk֖UׯʪUj~5.^&߶9H4F9@N|&p`As; ^QTl9`aߤGQ{{Gs1Ⱦ=Ռqmw<;}bwn;}$ IDATc, |݌}$ik.͗/Uts`OEA!tXgWW;$t`OE&`($ZjݓhZ?U>1;EE>,Cݓ {w;}/j JwZ},J_TՁ$[-qu+*;ε]%ƱOL%r`QOL@xbbw5;}b+*ͭwf },z"w>d%wMr!S/<|~bbw;KFQT%%M\?ܗ׎b X2D,)Bɹl߹* XRD,9Bɹsk1r;Ƙ%G$t;md_ jƘ%I%tήlkղwO c0mClp}bg'p`)s;K'+={zӹL`-{{Bk8dsY֏LO֊J% 8} 2;\&t;ї1 "w][1W$p4;|>C>yBwp_^;!&&p+E;@ָ{; @*DpEQݔ't疻ӳKXcw11;\A>y~[zvb %1Ⱦ=Ռ11;L@O^gWW;$tXBk9@FG1I˲)D0 Bǿc,rCݓ 1&v"'1\&I>y+*;ε]XzX 'GS r)OފJ%|;6n0"ї1`D0EEQ!FkLwMr!{>?O 19w;L}j|nC,pW 19w&;L}jrwzv`j6rp:1&ٲo3Lf@>5~[zvb 1Ⱦ=Ռ19w!;̐}j:D!;04X22ywh'@Eu VKLlE}ҹ-գ/{c/.3@sɄR;rז{3}x{\x㟯tMh\K/zpY#rY to>#_ccc0>S~˖/˟_d kG_1 ``EuWZbrrwzvEtid/sIKthk.毸 |1Hᾼ1cLffQQT%%&oKTVV@KoZ*˖/s⥖,~˿ύkָ1Ⱦ=Ռ19g,OMgWW;$t;w-#r Ik9@FG19gl.qS `v]-19CZv=3CNu]T;$ɩ'w}0GD0.^&02<{rIc?}zQ=ĽzO9 cL'#t FWl ؅EX-_g.*w"&;̝/|V9TMI^Os}پs!7~3`knLtMEX<W1y'2~S<$hɹs#9Xf.]C׬I,_<_uۄ|Jc}{2Tc0OD0OzCOtORgWW;$t`^ͯZ*˖/KxmE[>T rp c~d};ڳt2s ŋ]|\s}tzZua;4۩'s0=[mf#ryv9tH֘Jvm` xbjD":d%&wMr!>?_!@Y3?;{_wa$Fyy+Ƙ˲>`h "wh1EQݕ他[n-={SYY1d5F׻'C1F-F-(ےՕ' %ih{r0M]ME-J>u+*;ε]8}9dsY֏ZZXQT7%y=jkLΊJ%w][1 15whq"whqB7z/}Ss"S@p9tHw疻ӳmd_ jƘ;,"wX zCOtOAgWW;ʊ1ohddxS$0`OO{G{؟ε]8}hcj-63!r(IZbVT*ݛ[ҋGç6e}`a%to>#_/}SpY J]KL͝[GIee@j6wOj5cL0;,pEQݖGήd5kzxAC13O }Sw"'1,"wXdzCOtO-ߖݽ3FPf{6.;,."wX.ISՕ;f`-{{Ba{,$jYQd߁og fͫG_󭲬?iXDE$-1u|tGz!{O?;by,fKK@QT%%-wgw!h6rp:1ln XDDE;@֘ή{Oee /C1,K>Sўsm1Ʊ˅FpYKHQT%%nE;w- ='I˲)`iIv'HSw}پs!S##_*cc,v]qhiF7cz&\DNJ)O˺ TVVo;yjK|NYϔe}sg1=;3,BF` ZZPQT7%y=jkL7ݑmy'n?_zO?;b;,ޜH֘;ܝ>ʊ1hgdxxQ>˗=׵i6wOj5cL/310"w`JzCCXcz:ҳ7k-lh{r0=[mfBLKQTlTҳ7q1 13*fJL[QT%%}C@h6S?kG_1M,GLLv'Hӳn=?c<P_j5cL$˲~t+$GdYQ`ߡt2̃8}hcNdգ/? 1fDk `.yQ2o|_=hh#{Oee,JCPf;)V rZJQToxk̊J%|;6n0ʫG_3: cܳIv V"rZRQTl}_=hh#={za fdhC}Ռ#_\3:C4ׁ?f`KFQT%%g݆{`*++ I24XK jh?W KXR)ɑ$7Y9VT*ݛ[KK/ = 1Dk `KNQToxk4Ͻu灇t;mp_~1$ʲ~R"r>Օ=\e %7pۛᲬXDV$IV[y灇4"m/~vu6沬7T%(2oF۰>={za EfhC}Ռ\L]32;@ސ$[<+*ͭwf EOC4߁?f;EuWZnMee pw\gl+S|FQT7%9&k4O{G{zvf X`zXBa:,DWP2u}پs!h#nj|&U34;5E$-\]]ӛε]hQNwz{x>` +L(3~jk4׾<Ѓh!F^xgG|%.qS\`zsChu֧gOo;:0φk?ԗZ$ʲ~&r>͵R=m ys?!fǷʲ&G0EEQN2d5oKTVV0G>&\<;4EuSChJzv;n3,{#ys0F2IwYϘ`jDT?y{ۊM_x)ϝŋq͚|%=@ h6s?;bs,동`vfYQTe'~)f`Eé,vxo];]099q,동`nXQTeU%٥;%f..͉>LjF(I{[o:ã#b@~m9Ҩ7hIj~` >d&ɨUЃz>zXZ}>Mkz;1r`EQJT߾=d~v._fSdVۘ`0 U]jޜ)W*b@}k=~^n>+I&j;R .#wR՝IU=J9vb"'OLA3_ghwk)0r;EQH5ڣ\)o_[ι?ͦL$FGWgF1o͔h9zS:dV۸'2r~J<}*NLmt|/*D{MzR׌QEQݝ3<7of<7$l՜{ibקi ]o7Eu2T\uoOS)m/Q?̍e1~Z9))FJ gr&'6iL\uᑽ9STx y]82;&X[YGb<3#w6EQTU^/s񔶗 ]J9RA3\YBsMc) i]uߥF{+o0r}}gr`e\urNʑb$/믻~QEq^ 1 yljS2Urw޼֛ܐ/Qw;g?]px k+9Ҩ7 h #wU{DN>F07h#wUV*S9vbB ^A32?;ͦ q5w]h;W;oPxtrQoLjRnFṭIF/S)W*bnZG՛btt;Wթ$(J;1c'$|٥91:v;]('SOy3s\okU\uᑽy7!1Rk+9Ҩ7:FtWݻoLi{I 6U^GKbt֧i]o'U$SIvJ;1O3k>hf~R>5nnd@W+Rsʕr7ofbT./,?fSrg@Opս; o= cY[YGbtݴ_J@3rgEugZW_Q7~fJKbz>zXZ%r^a@)DZcwW;h[c'&r)1NA3ɿz;=TjtVR??x@ 7?;/a)F[mL@/2rERGS`K&6^e@{t}2;jts+1[zSλdVۘ^g@(i]uU^/s񔶗3z=_ȕ/u#wNQT'L%١Fgm+[Αbfg/e~v.MA:~3Ɯ#wRQTw'NWsogxtD uya1F!Fw8dV۸'VՉ$3qս+ o= #VVswi]oR ;}(;L%9Fw8r"@}k=AVo=ޭ6d00B$jt~;q<%1D^re 1մߑA`)T$;mRN>c'&fg/e~v.MA$ƌ #wRQTw'IrHPS92~T 6ۻi I1r`Eu"]bxdoN>1|rBn3ƗR0xEQݙd*Y5޼֛ܐlme5_M1˻Ɣ :#wx(/$N2F8r"3}k=q{;R;'EQL5'rxBz=_ȕ/.I~@QTwu5ǶR)NL؉/K6]\ZmO( IfR{l+[Αbfg/e~v.MAJZۿ~; EQݙd2;jtrN2vٹ\<Orӌ1EuwZW] 卷~1uya1F!F8dqO ی Eu"t]jtᑽ9y;0P_[?ָK)S($SIΪ}GNR[k+xBVo}'6'gϠ(ϧu9y;Wۻާi]o#<#wEQ=}z=an,-ѝ&9Sm|)<#w$EQݙd*Y5ke8@hxB,|!FwdVۘ6;l>UCjtmR0vq{O4dqG #Gʸg|dV۸#l-#whN$NKdq{XIkFfEQݙd2;jt/cw`Iji)C;ѽtya1q{83r+ IfR{b>9!zCv5qWR@@(T$;^0nHg](;L'y]fnZm E$SI݌3n)u]ELZc]jt7cwl=n3ƗR@w2r.W՝I&F3vbS'6f=(L'yEg͸Kk~O ~FcBZcQ5;f/-Ijwa=(gP@j>hf~Rg7M2YmIzXQTw&Lzq{OdVۘz;􁢨N+jcw^=\ZmیEjmRȱS^:ȸg]MrV۸##wCEQ=d*.5z;tN^ryaѸMk_OEugGEz;O^re 1z$SƴПEuwZW_Wwl+rdh:r"l"nZmп`@E$I[O3Z[YEqZHLQT'RY[YzSs5qR0rU$SIv[GS~klq{odVۘ; L25z; 4 1z.OKHQTwuu5zORkOQ1X\_Z2nm&6INQTO2۱` 443?{)syl қ>Nz)EQ}!L]jmRȱǍ[z=Eu5qRgI2cTʑ9Dʕ F/bI?IEQݙdѳCtxŜ<}/dmnZg~;XݧUw ӧ2<:"=b|h'N2]mܓ['Ri_Ww˯NQ1:\_Z'/QoΥuݸxlFS)i]9F*Wy? tTA32?;ͦ w;LBZݍ{ضR)NLKGSTz.+ _&6xZF(ꙴm_ӧrk+ˍe1zմ.)Mh>dmxdoN>1TsŬMrf1r6]QTw&|rNʑbԚf/Qou}F `[ؽl+rD8 \)ӧl,%ALA3rea1zCqZ;RdtLQT_H벻{V*؉yhʕ }Q ~m9MAq;QF@/ g_[gzSr5d@'](IR ᗎQ1zXA3ח ii]nR ](gҺnGʕrͱS^G4i.]Z9vx<7$@Z[Y\n,-VLzkxdot4GƏO_HMr@73rzFQT'Pl+rDt4JE6k\./,a)H1nz;S3ؽ1GƏfxtD -vr>՛b'v'=ؽ˯NdXJKlf./,Ki'v=ؽm+rdh:r"S}k=re 1q;`>Gdz1|^_}+\);q<%AJ^rya1MAq;Зd>8#G3<:"0_[gzSf5#wrOϑ񣮻Q狹^jIDATF!H3n;0ǶR)ȱdz!A ϸ(F@1v,{?6;f/>d $c;\m8@3rq$v$1vDd=Fh>d*.E@>~;(vs}`#w}0ᗎQMըs\YXt}\Mk?1/ <זsea17<O Eu"dCj rORTF?b6 v`𔊢BZݍо9<~4+/fm $ӵWR<9#wgd>ضJ92~4^p[뙟ז]m\uO`EuwZcL{?6 0z_[gҨ7LŸ`l2cw76}bn\[΍e1$Ik{rl#w-h~&d r}cc9Dʕ nZsya1MAq;3rbEQݙ}˯NdXJK@h>hb| Ij);@EL$l_̾?x@ Bsrn,-JZWgh#wx4vL2`+W76cN\tzg/d"l+}xtDxׯ-R,|!ߺd:tqO`Ѕ31vr}cc9Dʕ nZ\ͦ |nZ&;@{4vHv)· KGw+z=?_̕4 AIfj);@($gR7v ` 54sya1W>_uAk&6u5kx;f/-ƵXZqZmGEuw$Iv(m+3x\KKIӺ~Oc㊢3dZw)_+W76#/͞'};l~m9MA!w: 1gیHQTϤ5xUb@/}k=?_Ev~մIPQT_Hk=CC9?x JE·KKiS>NkEuwZEDc $v$Ifj;r'#wP՝i]v?d"wڡQ|6{ɰq7T1#@3r0EQ=-loW>_uAxW)0rPEQ}!j8 xd"<w~a;On$3=9;)$SIv2x 1l\Mk>#;?(/u5x\|1k+hRn\[΍eAxV5lga)i]v] վw@lFזsRVo ³d&tqG6;(;Ӻ>d"<=CC9?x JE'tz.^_Ͱd:\qO6;[(i _QPol,G^:= #_[΍Qof8_IV1r-;~}"lmR<}cc;:(j>hRn\[͕"#{Xj;;Rol,ã# @G44sse57rڲklIfj)FFt=i}cl۷[kKY[)[vz;=uw͕w`3}Zj(#wzt+rqf@OsݝN#)m/._ͦ(ӧi]m^f@(g;m6<7eH<7$ Gڗs{}]nZWg\m_Зz& ﯨAm+﮼+Q4\ݸݵv:$sЏkyRN34ё d@i>h./-eme5zC:n鴮ߓ~e(DZ_WNh>= ]+7- t$sIk`0p3~}T:i[߻^TD}k=7WVK˂ &I2j;ViJ9ÏF{GG`4.\YfSݴ39TFHQT$Ht=CCa^^·GOnqZ#wO;d]M44XZ2j$Nk~OwF|Zc$;ʾGk+. n$ӵ9c*ꙴAݕwwQ;=.I;'+9e!U!ɎEXeN'{iɻ4Ml^?:h~(Ss++T`4.K|:;($Iëcs(b7Ugaw\{X!Ѩ W]ig*lDʲheXu;rNry.]ig]ksr EXWN]Օ^/]igݝ%+U>0,/;,S]w;k+n7;i4I(OFa``E Df#:~2 By~N&aS|NrDIwM2׫~.{Gcðia_թ9``͔e!U.xgc; "h{D03 ffk{0ÃD!Fvv#|^x4J*d8;x4Ì66V:NS_x*~^_F8;O0p66wiwiiE3KW]haqv SGkw:ii~o32eGGc*0ɟ[veXÓ8Kra;;FfX^gFL ?,_Ië9?ޏRE_txLެ3_F8;x4x46 :a;SDO+ˢÓË;qO,T$XGH~oi@er;e~Q.{=1;gxj"wٕe!Ee;44vOcxXfӫ:b8;/,Upxuj9Uaf,gz}zf{{+{E]߅  cT^x5eY2E`yxJ٧!{@S;*0K-k&S< ;3*(">ڏEGBʲMO_wXngIS]j?1CVWuRI$/O$ʲhw;О*j?5 Cʲh~;>~~m+;̵wv:fOrJ;J+b7}cw vWxR"w^DYbi~`1Ixn"w^MYGOMk4ʲ4|k'7 OS'&`YXjw_&h`X9wG Xy"wBު,1A;kIZ+(k$u%r`e1;$$'ID,VG$TAkDeY [q9թYa"wAeY즊ݧVwUA\g"r'RE+/XT! Յpx50 :;<,w;1;0;U[^LYTQ.X~TpxumX"wXeYLVG{>&N'NAk$o^e?,h Wj+b_?Lc4d?M~jX_"w`eYՏGqq%v!; rV_ﻩB$yo~O ëiE"we1Ͽ <&Z~i%r\YTk7ɁV΃{<S/KIrTI'KkK,i 4w5^ ,;E$;VTz2~ U%rZYQwbx`<_ 3^Xg"wZYGc+0>I[ I7#T~^^D?h:k,uX=u rxf Q|=_o%yk1x Kי]`;*hb(ߪ_SIvƆY܏Փ֯ëS,;*bB|mܿ(?y-ԧN>.`8`xTY|'ɷ罷ZI?d1@:ywëks;ꁫZy8ȿ7v^pI7x|o WgZǕMIENDB`dep-0.3.2/docs/img/DigbyFlat.svg000066400000000000000000002372671317166637100164120ustar00rootroot00000000000000BoyeFlatdep-0.3.2/docs/img/DigbyFlatScene2.png000066400000000000000000020636071317166637100174340ustar00rootroot00000000000000PNG  IHDR q pHYs.#.#x?v IDATxMlTg/'WY`%ccɜ8 0ABlHaAV 'QY.:Y47^ųwqkv-(YE!D"&E>aȎ!UTR9Szꑛ7o@KSeY!="<1x۹xJD[͖emV7!<4 oElT<дR*#d,;௼)9yԅY2VXL/LRq<+M` MaqLDȤdaz5$<d/b""z0=*Rq("^mCXA@R*"X0L,~8y K)'#nhL?Upw@vR*Eī:@TGě:q_ulTlԍ&L4y )3qP'V0=R,TLD:jDL,j LK"b@7̇Ѹ^Ț<Py)'#EXW@քJ[:?Q)@VJK8/D &<TZJ|D DveY` R3">ЉV,gXk@eTLE1hJ*+b>"t%Jx-KXQ@%TWuEC*)b*"wVDBv#<TRJŹءbq+}w!<TRJbc #<TNJxDaz ƵoR!L-yrR*fb1 k@Z<P9)Wca[8k1ay- R1u #<TJJDDT0=dHx8dD2 <TJJlD *%/h6a]X{@eTGě:A07 *#xDazX@eTDA **#b>"t *!b0".ܗ0=@%TLD:V~,kwS Gٱx;RV,oX`<P )1C/8^.}/|Re@ETdC sB$<AnS''3y`ݥTs'⹧'ӓaz<R*#j}賱gCb~._8//?JxXw)1C{ELaz2r-!L@fuR1"Ho<ª=dDl*b""^ϡ=FϮ+LOFGXg;s)ttdx]ޞط;TZgD\EJ0=a<R*f#b,Z_:qdRqw^XTU}~,kZZUJXV]y3ӧO>mL/LO]ZjMJΈ Z ǩG0=`&PDC?==}'#y`ݤTLG39zdۻ) LOFфuRq."vP~nӓaz~0y`]TlormCS-;[aw^.yRe3%"<x3Z>kh/ SuFfzazdkhpdFy`դTsƁO@g^?/FS"b&Z<jR*f#b,Z_:q$FG ~Ͽzq30=Uw-҇0=y`դT\j>m`Ɉ0=y`UT쌈rup:q` ӓazhRH8POsOO!az2"LMBxX)L=<64XGdD2%<s#Z_EoOA|q셥0i Uu-"fb9L?%PMKYnoA]ӆTؕhL?%P K7suϮx賆'#PK8/Px sdD։<R*f#b,Z_:q$FG 0=5"<љC3ӧ Z@} B *VTJ`D\ΡSA Z/G4*0W~y`ETWs'⹧' ''#= ۙKC[L ёT؎۱ azlVTJŹXU˿=ӓaz y`ETdÇ OӓazX$<x3Z ǩG X.řŹ/?V~,k@+yT 4KGM X1#1u77 S=;oR*""ފ@3yX1)3q0Z_:qd) Ɍ0=MKxX1)W#3ZKfh'34 y`ET FjL}1_P dFl +"b""^ϡ}{wÓT0= Hc9zdۻЀ,|{F9{!.\?/FSrvP%Hj}׿-d/^L/LO] }PH3ӧ hdDu%<?ihA@xX)uo _;֩k1eY55XonY/1ԿV0=hq{#~ ý'˲6m_;aiXe]~M0 o-U-hnЄR*c!~x;;[]Bp_ovF9Ժmd8N8bhkla+qҜ0=Ua4nh2Pa[~Lʇq,kx9Z"{z֙0=]#̆0=@5R1^p0~-Imm:"ɡ>{v@ӓaz RqwzSײVDL89*z{ Ɉ0=@fh9)Ѹ~LZ֕XП ӍMn<dHT<J{x;tZD ]OD9Ժgh<YChg^X_3 >Xj`]-n-[=[t5&@w~2"^̡>?ihM77 S}oVYX{X2^wNN]##"b,kWFXtH @'3kLx)~Lh!em6@ɛfO@ '3LxIT={oߡcGY֎k,j62N14ɍ0= {m~s˲6 UWs'⹧' ӿo4*xHk`q;ƺ_?[t *JD,UſMG39zdۻϿz1L?/~,LO] },i < CǠikYNj-=\._EoOɈ0= <{#~@׀;;Z{i O+B܁<X2^wNN]V[eYZ{xDC{vG54V0=ϔem^KV$< ?c@<[imwsurbLN[t ]Yi-r1su0o~ihT0=aDr}4G-b1u1oRfk}OM JC['#BJT-@3y@JŽB ?k.Uk"X=<64%L:8^Z4 yx)ne2EĠ` -p>t.2bh4 az1:h ?c@]C@Ge OM'ƙҜZ!<@R*ƽ1ߗemVhs7sup:qh) [?g5MQ-`Tk5*l]Ls)tȰirFGctd8& ӳvDĬk w6bR*Ch ?c4)ڔ6Є{3q0Z_:q$F0=+?ʲv\\ =)u~\] ;]>e ȁ񺇃q;t Ҧo;f>nZ$lxDhPuFR*Nu@SK(˚` &pWC[bKdD*yZJš8䨽mC ,۷-#"FG_հۻ;x\·1Rq,k^T\ zp?鑛7oMgqTySWn^o z- ]r?k1X&JsoRo VZV e]NxR11jL}ѱlI{[ -=7Կ嶭뵙aGY֎&PM]/jKsժr,R*¶Ng[]Zz<:ޞ.+nrxr>c)eY;gTx.nbZё\|,L'yBJtD<Z6o}K;b9L9Tͥ-~j2i ;s)'}q!LyR1"f"bL7 _/::B= $=Fcp!eY2Q*bm`@@4Pu6%yX=mbh`9ؾo)1:ޞz{crby9FgDLE!evF&m>6ӟ9{>_f8ySr <@Cpiݼl^.n\d{W|ϤTLemDYG;s)tkiٹϙ*yRq2"b0EGB'm1TrVxwimmqgo{5C4\ bZ@1{vƞ]/_70fMȁ<YIum ?=]KGG_հx0{vƶ\·#xY֦Lu͛7q h6un+eYyȂ<H3:zڼ+z7/۷-m~hok~;Ttn۝L.UevPk{o8y/gM ȅ<99JL}ѱl^!g-䧷;'30:#b:"&L5?}ܴr+ d!bgD n.XOwt-=R~CVxMN<o^|79͚(kh/~o|9qJtYMՔR14˟|_|MN%_+˚<y*-bcD<?ζ`c=ӵxt=] [IoOwSOƟgatFTDL(l_~ۛ}eMxȎ<UwP Vl;z{o FT }{wy/qDY%;r(y\Μ[ɳHxJ`m{DK{{>>.x1b,k&J^՟47MYƵ͛wr}{VޞmyZOG{[?>_r?i˴5X9@>/?˭ly KTN-1c![znm[ᅥ2x)R*&ʲ&BK^J@Μ[)Ur$<@ jg[]Zz\rj k&%ØJZaRh-rV7vh͛wr}k߲Psёطwwr>8'MR19:/Sl 4u[{{6=๧ƻ70^L)9!̥Э[L hg^ȭ+ gVl;z{o a+<pwmqgs2&C5M@3y> y kkmC m߷zy|~oOWVx`uۻ;x\·1Rq,k&CfPiM/&<6ou/{{BC9r?]5Q~\ IK@8sBn%5;ye XaP۶k4-q`?};茈qDyP)Ժy9D. XWy;z{jk$P!7y/>4aT/ڔ<hM hMj10<B;wBh}ϻnku.XOwt-=R~@8vx20NTL \;PM]> h ^cx~f <dR*EġX@D)˲6eX.o1- {?\OIؘR1 ɭ0q9b>b:ns1:2#Â;vxdJF.ז|26[&ax~f"<plDPJem&"t`gqOX2s?ΈyϥЭ}d7r ϘL2Rф7"&ܭ01go &'͛r?gR*M;fd¥J,k&4yL;[wr܊myfq 1mx.<4 λ<@R*6Fkww4ёسk4H8iv9C7uEoO{>e& /{=.也{-,V׉{6=826EW7&w4yےPF (*—6D~ҿ "L3gԗ9-t(#yƵ'"چ]ftwuk^EQ٣ͫ(*=7W %wC<@*JGDNé3l@l޸!Z[^kS6S]}Nj-e%<И؂8{~8Ư߰%e(n6\ڹrnY;{~8&iɟTs@Y 4/؉r1}\[ttO~(*}ٔ<ݵJ=?ےt (3yƳ}$<P6[~R,1rXkk˂XtYs[]Lxls틛1|鲍(Unx8"fSf?zD]ɩ/sZ)U/Pf (*=Q PBΘ>P67n֖ZQT:tiΕd-t (;yƲש3bbrFH[kKlI_J9M7vw<?Ӻ<@cf<@[&VwʽgI7BO. }4+q틛9-vJUhEQYىr}hJh e(;;"bak(5 ZT <8zlA]f]%ӹrE%<Pj?_2Eenf'd+ç:4y1j ϧ.6/]}s/caDͬ47b4]m@h98M(gcCs/ㅢf<߹],=?ےTs@hlAs6~ҿ#:grYhd>:ےM<@Hz!"nۉs틛9N%>tw'νG7Vw0 Koh۲$<XNۂt9Pr7n֖(*\< OzKf$<XNۂtpLLN[tI>{ #nf7v\[@솣:4-y &6|M(gcCs/cCQTzu3L6y1l<@I:Dsb_2qD'_QT:"ֺڢi@vΞmS9Y 4_ĺVźkr/ᢨ͆GnY~45yRHD|n'6o- r/4l+u TŌ[| ]ʼnPbm-?[RfCe]t NOR̾g OJ#EQۍc~[[ģ?z$VEwת\s럎\9LQTRhc':90<Df'<и6EyMN}g0=@lI_w(2EtJ[:8ғZW:dhbr*^'<РR.`7(Un8u\e<"b6\Õd'')UGuhvmSDF2ڲ "jp0=@9l޸!>ܯ_+aGt N# <R*JoDMN}[Gt9/]L;0=@~Z[bO;r/Hd4 dӋNLLN9WMq1]+u Lv;^{/T=~\7sX벇o4 +ΜOR<@6r "~^Z[΁o s o|;/]bSؕxշr/vDtTz~싈?'莝[_4 +of_^HzKG)"?7i̓sZ)U;tg RBQTE&֮p7ԙswY,L/]}ɜX"bΩ\ڹrnY9{~8%W<e_b!Lp&&b+7s/)UO蜝/Dc9?cs?S_S^9(X[k˂90 cCZ[l ?8{~8<æ>Iڣsr6\Ymڲ fPyJ*y(PDl(cmZ0ka?_tՋotV ]&ΗSͺ {#ݱs닚d;ԙs9-)UW X(cp@'&>^~{.L1~FO)Uoh]υ{"߷>4 +&iɏTs_%<P" p[vMlkazz/ ̽ߥTݤu=grXݵJ,=?o<Ӓ?OڡsLxd X_Gh6/m׾{?NzZ7vYp~ qcq̹딪t PQTz#ַuK[&˵ ׏0=Pv×.}r/;"b$kol4 +&iɏTsLx)"3 ׏0=PFo<g^)Uf[Tlاi@FƮ˯jp IDATӒݰ /|SJ#ӓ_+c}~(:WGYO>O>i4]t5N("ټqC\gMGۊr$ꨎΪ\9h.Μmɧu <PrEQ9/֖q|of?ǵ/nzQϒ]ѮOű8R=]rXۿ={ShEQ9ϔ=wD[kKSr0τg0= <_)UO欝eA͠Y/VNKRu|3y&PEQ{Tceholo ׏0=Ȇ/]^)U;tsV|~.ك;4 »GɏrZRn9o&<$"ba[vMl}az|X:s.2^OG7yoODZG߳d!'>=RuH<@)JO&З2@b>A~619/mS_\I:7rX,]_}+k딪t_h2EQ鋈?[c5 G'N~={Ttλ$C{Eѡ8q򣜖t_hBEQZIN~1^)Utw1Z;8vM}_4X[k˂9+Wh}kB]6Y5|rw(2>tv<]l5uK odJ[9-vJE:g SJMEQ(a~rڢa%nXvMD~I43L?9MzqpDkU[&N9sGĶأ7*@26q<Ċ("NGcehH>jbr*^ھ g)UGuu#~Z¶WhӒO*@p\VaĉƻG^)U{ut|?td o/ZsJ9{#<@E'jeo5uKFaծ}Ks/{?F9Ս@.2)xJ>7DZOkaz_][q;":Ro=msXk{V1S9{=[@DDJ EQy1"w֖XvfϡΕ+s劻7.ώɩ/8{~8"^=8qX{"b~ޜ^n܂pL+r\ /60}} ?DwtwKh"Sez<шx8hkm48a{xNK>RO<(*G"2ڲ w7;aǧ.ېY_L/Lw̹8α jn~㹭#"Frݚ4mm)UkEe("6e-ol70Kg= Lkߡ2\C }/"Z׭][kƯ߈r0e/NzK<_(*"tD߳|bD.c}9!@_Bww- L?;}q3N9Μ|;Z[l4']ry(*Rшe?\ٮ[@ZyHܳ쉈X[k˂9+Wht=Ѫ`_?`e܎*G"ֺsބ@Ú mٝ)UGu p_r iܯ֖q|nBSr6e@c86^:{Kɹ2]X@C;uݧfⓔ=:`oEQ=w"L_0=ͶWǵ/n^ʏSnآȢZݿۛhho<gS9#<}k] a`n _ʽYCk}عEo<aMLNOٯ3h(*G.TU#yHQT:"BD,,c}֮[5o$L_?P_N:TӤg=ZkݼqCPY~k}عEo,amٮܟ.*k}7n?4 a _ʽ#'ꭒDk9o}=4̓mJJFx)ʦ(o!nukh4 I~|;:W!wũ3r/{Jz:ֽ;tLDlZۿ,Y=z,GTHݵdmbr*^ھ )UGKx sXБP@]A|-[yr$"^(cm- bp,~a8{''?wϽRL#9holf6u:s.s,2>H47Vw<@C]b6.&`^EeSD4;aX⯄/]bS]ŧ.^Ƌ)Ud|v7pFƮ˯e#m@79@Wk˂9`J4LgKkgx BF##LMC!1]qѡ8q#l{=y`^EHDPZ[ā7 רML~ PdžދcC's/)Uezf sX퍶oἴ}o\⦍`}R6@^wEQ=wazfTl{eF?Nz:RGDr9voiJ4S^ y]QTE(q^0}}Ξ7νORdvVꋈ?uk-,@yP8^^O6@>h/D2'Hߍ0}}p?v;TSt "~Znukx {%)U{mCxQM/eO} @>WƯ߈r02nGDGJ[NG39_":WFؕxշluRCxRCY3C>|;VE[kMhrdžދcC's/w)U7er> #Aѡ8q#A=Rm<p)";kFC _g_ %E{m<Аr$"^(cm- bp@t\0&&>^~V 4KcCIJ՞?ms7PFƮ˯e# Tc 4)aho<g^FC\2rȝ[_'ʻGɏlMJxUEq:"+c}E{ .y&L_߿i22nGDOJ=F9l94m=sw)U7ȃ< ]bpǀFCazr96^:{S59#"Fre- 47⧿̕Rȃ< (*=Q /,c}֮[50}{7s/)UO7/"<po&&bd?ş.6"< ?7shȀ0}gؽPe|R?{"5g_k7j]ɩx?錟a.&y EQZ-nUh47s/{s:"a/s oB_FD;)߭<ԕ<Y)ʶx @Ưߘ_,}qӦaz419/mS_\I: l:ߛwSZ~ ߏPvyS#BkkmY;DGq8a{xe|R;=\>w x@ OLNؕ~3zFDD|~%'a6=Ru6@RQT"bCk[8hkmh(!a_^je{%m=ؼϋ2P OO~#Ǯ&""xJ  <@("NGcehG`n _ʽ#'y<Ls^0Oj!#cWbb:2 /ȇ<ٚЏF2ַnغ_׏0=@|X:s.2^Og9p+/]2""/}/ 烔!<@֊ @) ׏0=웘ɩ/s/3]kUt\aCЉƻG^ƼL,J_D!͝[_)BWg|e~3zFDD|~ 7lCxR(ʦ8\or'Lp\g~1?KZ[ģ?zDw(>SfODl޸![;13?~F ]MNED]T yJ#jmY;7o52v+gaaz3|钻g+ۣ!ѡ8q#g`^ PjEQ鋈?>63L %Z@z/ ̽M,ʢ&,hsdKEDm_j!k77m4՝@.KGDDwCs6|rw -S􊢲)";J O gqtz2!ߝ0=P6Se=RB,~ݱs^p:2v%""Ưߌ^QY \|Y,໻ѹrESɶWIT  r$"^(cm- bp@hL!Li$jO+{"6o}= Bӓ߈;!ϯԗ6 DGmmLZ[~/ی{U'QEDtTQț<M}w@az W*)UYtD\ %:WGDK;Wuں< 4Ww dC>FvlIԧ IDAT86t22~Ru,Q:"b$;8v/b {3×>ɩX-?~F\⦍:._V;`XtqDDt\q78x2㔪uAxSuk- dI>=8ĺky719^_Ph)"H=ؼϋhسĝϙ+1~fJLN}iΩw?1 둈hk]+Wب̯_ھ :6)MT6oϭZ Ͼ^')U{flr "~C[Ǻk9Q OO~#Ǯ&j? CC(ڣtz|[kDs,N9{##-i4Aetp-L1ڐkU?[_;`>yp=?{/T=%"}W0Nj!ړGFƮĝ@fΏomΕ|钻!xxNInx>ꐎ@Ԋ-".k}-@MLN}20}[ݵ*w `ތ_^ٟѓRu;IeA͠.Oj!/g\ _OLLVL|}.KGW+lwq틛AJ^EHDPZ[z)߿uk-67džދcC's/xJվ3߹r|ypOM@(PDl(cmE{ 0- h:fXvMIR88쉈r(o}= +1~fJORI]DDD[3h8oOYRu@9 @DEeQDX=0~!t̛KcCyJՎ8ds&B^ߎܙF ]MNEDħ3&hsN=-_8/]b֮}IJiшXX֭][k44akmYݿMVy8{~82{:eQTnr>'`Bq]ADxh,ComΕ|钻!SN99VRR@>`Dm=@i0wKԗ9q;"zR٣#"Fr8v/Tx@|KwS eAt>\Kbѹr@")U(l]J EQ鋈Xߩ3碻kU[FA[kK=9Ds(h~7'&bd5124:hkg⻻ѹ `0*C)tOxAQTDkeeA  Daz7Y$#'o9ogr(_ف,BW^ ]MNEDħ3&of Im-w?/]˗.Q@^ھ ߉|RW79P#BkkmYLaz7Y;ԙszJ=r#0ik묑+11xgjT`z:֖\˗.T猩@^ džN^:[EBDcTMh.p"ba[vMlүs(0s럊4 s^_IϧTPDlȡ[_'d:uWin_߈ϯPE{B ķ.Ε+lpJrkD)U/(4yGEQRM_ߺ?֭]I/Ve|=)Uob4"Ρ{w033?~F ]MNEDa,!;֖!KKlP뇗- sNMG}(J_D G4+_ /[[S)9ѡ8qJ(gV#9,|Cw{!fyzbb:q:?11U:@ %:WGDK;W ho<g^ 4yOEQZ=ca- w sDS-Oza< ֮[:`b>_ CcimYn<%|∈\^ _*C)ϧTQhNr$"^(cm N$z(m>0N99{T>K쉈rXO{IS12v%""Ưߌ^QڍM bCc$Θ?#Tl{eOTQh^7] stSkߡ9Q^Lz(*#~P צ_wB3#_)Ó4:hk}@|[L;6^:{#'ꨎ@TEq:"+c}E{ TzPsۺ?֭]c932v%^~˸ͨΡ#W ߜt~jmr*" 7v@%:WGDD[kc%6 #"^Nz@G wPOtέ/j4@FƮĮ74۽;{tNz{P8Qe|u:oVVRfGƮtt~bbjnH]k˂||_t|v7QIIJ;*JO Xߺkb~˱{ߡ9o,ol7ٻ*3OOz2;:G:ef▋/fr'{T i˵8HA4Es\Qc[5Jv'd=1-YB`wcWy\N~ysYX\c'hF v>v]߽~ϙ_][dÁ?lZM""mӃ 5[qsnTϚOnh% x =US;m-+5C7ߺ7? ?{zYhl\?v|c /o#<|6{?"^4MBzhD8VݻW_FϺ|e:*co8?FOI/eE 뢹i]/ov=Fe7<onl\2Rڽ{tVPzD  qAz:Տ 썞]ظFHOwU119?t*i_go.p i|G[K4 w꽔IR3QaPRXDcm8~?ԁk^K,XiQ';{{w-@z6nXش>EDDGۦ?o}GDg @ JFĥnS12ZI嬍ɗ{Rqt Ոx .,.ѡS6 |V$6"ҼƞMI>Kxj~~>"c}۷n PΜ or8AMR14r6._^_w-8!_tX,<77@ݻ RdDcmBC?rP@\2C#\U,4 l<5U~|߮?ܴ>Μu=C]ߎb;WPc$K& |yHQzD  qny@vU.Fel'k7hkBP?*c8"&E<)+ZK}V/6h[X\Cb>yvOkEDDGۦGwPrfxPʳIR=i!<TjmH۾u u1xDj[ 썞55xDjd;ݻ\|Iz(p |<s{3IL`J\zoAdl+oGDDc,M$ի& |QJ=q6 [4@MLNh%K-qa?ZTnknZ7o^ѯoN$1Qw!<Q*>"yǏȸkЩTN 媦fsGc=|/w};"" w5̹0vqD'I#~!W#yG4@MLNh%ܝ>BbC!Oƒ|sӺhnZ9gfWO塔IR}Dߕ<dLx,o$mߺ%4@ƥ6m/ɗk:P Kq˹Zi$7S.I BtDDDs!Vc'b>Qe$m |A;{6h9LrZJxw.RcJKꞈx3-.ݍӕXX\2h .Ǿ66/.ݍWzojoGlܰ.?kPsgSQdXe K1|<$^2Q`@}苈wX|r#ȸO[R{oh:݊^,6d1nܰ.vxd@eb,.ݭ2>AV<ԁ$~b3܈34@۽+K-utT.j:z˱7o3x&O2U6=3C)7bN=@?19e0@5 q(~\W5Xqhת)ӏqgSQËhPƛIR}4&<u$IW#/MLNAd' ~#]x`E57޺y;}|7XPɍ<4Z:$K7VlȸM1ťXX\x`E}:6nXW?L?Cb `ݼu;[y(GIR7Qݿ]p^e o۷nI>t`E5 qS^@(wuzBdh%{$IEjExTT#'ymqn:7o6h S L73#MVTOw9z˙~m"7|l7Hpt73RM%ycIR䱶ťXX\2h ظa]*gMLN䔦+j]Q,4d:3:th,<VR ~# 'I$<o[4@?܈CL ᡽OGF+1w+i}Og73v>>;s|,.ݭ2>M5ysIR("b 3܈ъAdXGۦ8t;:tʝI߷#h|YkEO ]]7@M @$Iu>72@?19 a=MťK"/mS\뛙UcIçCo&Iu44@N$IjD 浾x^6(Vߎ.r|r#Μ;)wueӻeާ w꽌#biiI7Vbzf֠2l`ZR9kbr*.ٷ{W y<(e* qú7oݎxJ9yΪI^{ebuȨb!~xhoj3λ X1Me'e?<ł' @ VP;IR}44 @%IuO4@t7%ȨC6\XOvѶ)nI IDAT2ӗr:=A2`br*Dž䃦 Mxk0"caWꌁ/ x_Veu݌^| K1cy(e8ILH<TT?m~OnH>nM [۷n[x_N3ׯ{ Y&z3X,xbdscqnqDhj?F+ӂ7?K-/97ط{W v~c&]'@LTJswKX@KSqa-ȰG@0v^*k,X;6/UA=2by($X5k}gΝȰb!蟏ܵ|e;{Nhkk7VCb *c{GV<IR}="k}#AI hߗYKwᳱWv@]WmOw9z˞p硔:oj5$I'#'y)z ۾uK}*>N:WѶ)׮Ot|z狅o1`mߺ%6wuRJYBC 7lz/x45*ɩ4@FumCIW,n޺W/~s__x&Ȁٸ|e: ]4@&vV}yobr*&&  z˱/ jDxel,,.i<;h;{aZ=.2@,,.7P$(%%IRDk}#lhȥO[R9k>gΝt+7UMBC 7\0V|z/4M kH1Os׮4@F۽+K-519|ݼЁgX0\ v=*cy($Λ(5@DD$Iu0"~ѡSqmȠb!9BC*UݕJz˱3lꌞdh>NTO&EIR䱶ťXX\2h $@w%C뾆b!uŅ⽙<4>k[4@?܈CL :6@J!NU_UsގhnZoobJNUkSJ䱾[T*gmtYX\k7ܵ럺ݙo$>24r6._2ޏǓYu->+IR불9 OLNEsӺa4?TnUl97vi"bPp:ߪTjgZؾuAdR ;|x{S{WvOk'IՕ@ +;NȠkЩX\y??M5~um]xqD:yT*?cmBC?rPX ._t*磱Xxgߓ/s׮dz/RMI<=@/, ]ink/#'&L?rk7 vOk@F ;ɍz/$n3M^_HhD\>aIl9Lr[b`Sn޺7oz[Wm~mǟ;qa8s|J$^5Q^_Ոf.Ǒ A KqtTjlg&mSKBC|p47 yv ;Kw뽔%IE<JGXmٕvFSRQ["dKwW#$~d@=k}E5=3Ͽz*8~`tm5<-Ի]qLI}& ԣkHR<72Zۆ2hg1wFLLNFV^_%o_~o_XX䆆Cy ]Cpc@yJJ#yXhG dw>v[_>gϽ=j|E)Fdܵ 塔gzDz%<|eR륈WyǏb2faq)~9ؾu˚-P?^Ή/5fT&PτTj}4".EwX=@v]GNIl+wu0V9w>QT(Pτq?@?䱾[~Ƞɩr K3qA-oOC7oݎc'pa򏒤NxX1R㱼^T97NRK||kca [[C#gz/xGN +dާcڍ "C捍§Bm-_ɴ:oR|DHx$~T*EՈx$o'7bdf]%DDu[]~nO7j~F_ݼu;[y(GIR7Q v=]jTj}<7?zoAd[c؉X\!i}47+>mQy [z*ޛ2Ojiye<$^-Z#l뫌GsؾuadHs8~`]ך5s1@=XX\o䡔$Iy&<~~[D 2gqAa&پuKLfKgCeb'7jzF{%vh6@>..ݭ2>ANxH]T@8:t*NxVVsv73d[Q,DG[˃lv=*c5?g4 Cgfy(e0I(w_w.+ZK<^jG dR ;|xG3ngBoonZ@$n3M`-VՈf.Ǒ 1s׮ѡStW3\_f |SְŚo߸a]|鰋3t$IuD@xXUR㱼<ַ}o319#Xl]g_xAid[c؉<\$hZu-VSTJ"XTtާ  Co7oˆ5xjt/5@>VGpXkUw?@7"汾3Gc۷n1l sn+Ӛ[ɛŘOnEȐW㽙<2hZ{ R`D8O$:64@,,.ѡS56`v |Gۦm&]g_xAG9u~8I#<dJzD  qAzyv ;×qúhoo,>~e <}N›Ož} !#2>$~dZ#<dNz)"Ukk/#?7=3Ͽz.-ŨɗgZ^TLX)ZK<'@Mߊ3ίٶCv=}ᵚs]1|xx3ILX@$IRu[DG#yo>gΝ !;{k7bbr*zqd`C>]I)y]CpcZ{ZdQT?mܙ3 kG{%._EM:raOnEȐnGel<L꼉k<YIR}y۩m7;~` U^uOkˡDc2 K[lM(b`fdp> NTO&u-UT_/Z#"汾_ǹ_o%-wuFszX%;{k7bbrg'7̹µn?]x& Ȑ4.L̈́v?@-"~:/_~}3om< Roc>Q&&i]xHh%O. ;R2 o{PJֱص.'{Rtܼu;yG B .gΝ' cF>X^QޏǓf@.JFĥZx&54wzv[&+eaq)~9#{2wzyvOk<|_ť/gc'{)瓤g_<fJz*,]k[c؉t?sթH:s5 c*c26^e|IRDchl\2]36wuj6@ƤyQsQT(NxXJ#: x;X:5ȝ4FM._xXh/vA @ܼu;R$h_<JW#:-BCQr׷!@ݙJj'_:Yi8hnZNީR'IDV<J"/u>tN5n97NRK|鰦ڷ{W}Z]5qD'I#X_P,4DD]x+qtD,D|b9LѶIsڷ/~uF73[12ZϚRXNy v=VW/7wul\n٘OnoQ,4ēO<`+}c)@,,.ѡS[hߎ oG}zX,hkw_oTk~xel?r4=3[|Dݻ4 Μ;q4jCx :6EGۦ KJ?"ťz^jԖ(wuFG& R߷#n޺S5?k>gΝO,,.7R~ Nۓ$ՏL6րb!o۷n?&N2~;OB7VzZڷ{W-dbr*E'7*ck bPOzDjk`M+ZE_fqn\{|e:~ve:ޛ=(wuFOw9kPc'RCȑ."gfWO:Ag΍Ņ뽌#yּRL.njz^jǾ۷nVܵ rVǏ:F][X\c'juy JBM& P['<]S/fc>[ =JX,h LLNh%K-qA]ԭ4ZK5 L6kMGۦط{y[l|eZst7&&bbr*"/tx=hnZA}떘}RKɍxelhJyp>"Ё~Ƞż,|c inZ۷[DD<ѿ_Ѡ73ƙscu(w};z˚|aW_O%5vi~qݷtAo"yO>M᡽qtT*#hkDM<8q@fd+yGD1Mt<y6l\nөmNG7{i+=)S12ZIb!Nxv5\};4 c'IRc<ܼu;._{ܴ^C]x*gZK55{ ΜK.D5qD'I#H< ϯť!ھuK t2exj~ΏOmdl<<7I(@5Ox>]'oQ,4ēO<`+}c),,.ѡSN۽+v>d5FXSfT&mmS툛n?Jֆzt7&&bbr*"/xNra h,Ё8:t*;v9w>:6PXT{Ep` LX=dNsؾu}lߺ%"".__~>|xGl737'(G]ȩMC6T*2gqܴ^Y5s׮Gel~fd[/.R~$yX=_w.kZԺ-"2ssWgܵ1=3?2 4o][^!.gΝORK?r0gU ;Q-;{}諧{wi.gbc|H+uZV9=j;3 MΑMBi⋙vҍ9,qEX8v\6$*J; 2#*r1 oVe ƆhlΎɮOdo #cKEruۖ2}cCptv숩k184cMEOo_9[]_;9/o\.v ΀!gѳ<=#51#c1~e2%bVUY۶[▏EU] \৿q^H67 ,ek0p*U((榵*:2ٛ184VZokMFA9vd$}Q&ڷo.y],P~~N>lD@ilƆ җLf hDDlNl=5MoS3sqqRΏu."gN A:;V(P}Bqx(, 5Ѿ&ڷoT&T)N_3/Dt˓OD[k2ZgWW|0s-ޟޟ޾8[נhlشv1܏'&szEwNaSoU Ol Pؔ ꢱ.:;vR&{*} ܊doe9)mY.76 qysPܗxwr~wa@IDl}RZ"QlD[8NX IMLx _N/sfufjf.~_XUq~pOG_?d9[h~a1{ٓ(@Sʞ<`~a1FR1qGv):Ay({"}*rUmK*aC/דΎcϮ.s|,&ȁ(@Kl;Z) Jg9Cy({ŵU@֚dsUzL6|"t#/;;ڷo<ѪʊxK.(P{Ζk|Mg?vFc"Q&ڷ׬PGR×Sy+'&V7_۶$#D&C٫Gc/a Yxwr~W(P%<@<=󔊩HMLƯ.t@"Z\.'vCP([Cۗ%p~z¦\ikMƑ P}Nv9<ƆhlΎɮO,KLfV6'6Ŷ-hkMZŦo ?䫇_.&ʊ8[D!g8Yʞy-cr~I3ׯmB6xٵ Jr}V24^>󋹎mIOQ OIg8)eOyr3JlZ-ѷ&vC@(YKl=~:r=Ύ/#G_?d9[e0~N~(^@S-ek%+WbۖdDI 8ztΗWKebph4zzrzʊxKP.&ΜP O:Ky({𙩙KTQUeElҲJIHMLK䫇ա-ek9(ȁ֚8@&̃S!g)eOym%Kٜ{zk$N |.BnNlcG9#c5G6@&̃#(@q{LPk}ֈKEjj _NnkkeŶ-H6?aٱ#fh^;=}%jd,TUeE-lzQ~ 88P,e<|yS3sT?1)hkMF[k2MQF C/#v ,ek9kɑ]P |.Nv9<56EcC]tv숥Lve~2/(Yln]^ޜ-O6EP' ڱ#R~XV޾vjnR(`~S O"EgtXʞyxfbph4ƯLmUUVĶ--kUB ?/8vd KJX*䫇tz3 P:<3JΝZ֚T FOo_^q8aL6/w,س!pupAgMҢ<=yȟTbRu{l\.mIF[kK$#w|\tl/(l~g_(oQ|i[YVXX*/Jaэ8p).\ʊhy,r(\'&s~'&/|Y@**+@_X~_)&yhlƆKmMdoVHݜ{zk$N@OC/]#F#۷ H,eqꍷr~dgn8@:sB)LaDt6J<UWUFkEّT&T^d:}-Μׯmr>q鼔azzaDDOo__O57Ega|܉(O^Lg?vFJ>S)e-6"-TsS~'3#cKd$5iKy9VUeE|׳ׄ@э_?\HgQҥ<=y(Kl&&KV99)Zl[-w}y{-;?*__~-_z<#253K\DD\>}IDl:Pڔ<kjf.FcdL *+bۖUz%d޾˱ڷo{^@Eh mL6n?-,FD~NϞ(m(V ug*}&CkE秚b[k2ZQF@<=>˅+Cذx۪ʊ8 /_+@ٳ<i9~R]l\.mIFhkM /e~a1|"2ٛy9ޑN R&^>{v= }NV Oy({Pf"514bUUY-O.MV/xy{;?9.vHU:=ʃ<P硼,e12d _bv1ڜ۶$5] FOo_^ǎJ?"`"NzE<@j-`}Mg?@yPʞǢ(/@SJ>ebTUY۶WWU +GKᨪ"ٯh0#v x,wZ_ZY[Ngω(eOyVGR׮mH67)8˱*+/P#Μrz͉Mqx_ӳϊ<=&/vCMo[#"bd,1|9UbdRhٸ~]lےd֚N k߾5fr^do㧕s(51syp_ YxQ<P,\&&cx,V狵&mevC@Jy;Cq`öơO )p(S`*}E Ky({@,e+1|y\1.6'6Ŷ-eƆ:{y[ ݳ!oNlr(y)BӳPޔ<Kjb2Fcʤ2]TUVĶ--kUB)bS3sq]<ڏGIkKq(o)Q*}O My({0J?2]ZQF E(_%/Nzk+Zd'G7rz)pwk7<PGm)]+я_j1۸~]lےEo y9Ħ8vd|gŁK9?O'_=,lxR+kKl|RIDlNg?@S \br]TUVD˓OD[k2ZE/Frd9[ _w a46 b c{Օd۝NϞ46EcC]tw팥L6FRk#?\&by{OodsBnڳùFRNtwtꍷr~Sʞxȋ_+p+@ٳ<T&T\@`uS82w5%}9=Ħ8aaPCAW{b`<Pb5#cK+|})j7y9VUeE;y:-kPt<PRɮOq؜-O6E hXׯJšO| #v c-suƚzUe|\Q -3<+>wQUY۶+Wcw IDATqq16'6W y9" 2*.6N[;<E1Ɔسk0KXJ8doh Frad[k2ZQF@9gWW|0s-_)v sfr^g]ࡲvZ|cæ*vúEJ\톚h^۷FDǯ\Ux'&8sBl\.mIFhkM 'G~r`wzD^^ClnZ{/}9?Fg_X wb-ˮemeY=byq:514jst#.\"Z|b-J=$U񓃻y)EcæRQ'EwNa/e153Z<|S.yP uٱ#2Vy~&MDĦضeHp^={xG7NTALE_@Ώsp.8(kS3s޶ʿrg--y"by}h߾5"O#c1|9?![LtZn[&#/eLf=~:_֥SoO+__YZ< yP)MgWW/,X*RVC?G7bph4F#bln֤̗ݵ3neKkq8,'rzEwN/lg-Z|D|<T&:;vDgǎXdWVS1|y<2ٛX*FRq؜-O6E[kR}ڳù#"FaStv(fpeY{ۜՕKoE)TWUF[k2Zq`owḼSy)<N_"miY[W*'wǡOŒ3/D톚hkMMƧ1:;v@YǗWk7Ԭ}NjV/b<WP uݵ3VGR¹E&{3Fcph4""jnmH67EcCnQ&~r/Oxx+_硯_q ý}Z|ϑa)c/y 5Ѿ&ڷoT&唲?1 qض%'jnMq`ow~%=cGf梯 9ywV<@δ&5{vu\&&WFs|]lt#.\"Z\.'z9}HMLtZőK6SoBΎۀc-Z<P(ȋƆhlΎɮOdo hE&{3FR12Ѷ-!46ԕ]v傋T9{vu\~ 7_];\_ڹ?p#ia1"Cx(wUѾ}kovGjb2FcʤUϙN_ʊضem,28vdzD^{/\Ɔh߾d_X~'9yMo 2xXf-(EG78pܒMQ(CuUeܷ\zzvCM,/,[o%\(Qެ'yJNcC]46EgǎXdWV'cx^dd,#cX.<^K u/~:/-Nz(.08ۗE@qf-)PҪ*}h߾5펩+1&[LtZ\UmK*}!&bϮ 9?V&{3~~l;d/&תʊ8 Zb̯W>sx(3 ugb*:2ٛ184CTsSl[Y/Ύ15smqtZő /,[or!ѭk񩉫+ w[y 5ٱ#:;vDDX*FR1~j\膀nd?1g_Ŷ-hkmJAQڳùHGRNtw,st/m+Px7kPx2by]Doig U_ODوxSMq0s6/"8RW~2w_pʜL6>Y.[~C/(>sF??y)MEjb2~ui]TUVD˓%ds}}yyؑ9->9y;\9z&kpo"DJ:=HyY&&cdlVԋj5V|_XC/ۊ5=gs~}(ED|{eֵʿS>q.XMy({LvD?|y\Q.6'6E˓M/~:/ǭcG5T9{V1kpo-;$K' <P(S3s+Er]TUVm\r͉Mq|?c)}_{v=;HrZ<= }y3"^IgEPXƆhl1J?~B-2ٛy+GDLEOo_9޾ç翂յL6f"Z<|x B"QfDKg @aPS&ڷD12PسGR9}|UqpoukS3s޶ʿrg-|/, Y-: <%5mس+f"51c)<8p).hKlz㭜?dgY.>m-~ M E|Fz@DĻD"d:={N$<ƆhlΎɮOdo (z ֘不/QrY[{GX˹y 8HԿKD__ODوxSMq0r&51#c1~e2UƉX*c9Z9)+=}184*È8k ,46yப*5mɈX^KTL  F)ڷoOMLŁK9=vUeECq˲~YT#U^HԿ(<\P uݵ32Kg7tzzvCZyv)So>';bm-Z<fU! =å<:Oӳ ڧ~*%FĻ8jnc?P4cd,c){kCA@Y^?-X^O_y 'j7DgǎK*d _Z9X3n"QD[}8;fbph4ƯLt;<w ugJb&&cd,#c)@u-eeZ<MB(\J_<Hn5Ѿ}kDZ~ո AZ]ֆݰ.">[olUB"R]UUFẵD.='Iy((mhkMFD\&&WFc:}M8m-"%')8<$9|Fy(X uP;b)m%<\ikM*#=駟J(kDBO57űw`Ejb2Fcr*tC pOG? 8}J@J$_Wby)/,XjPo a-ȧ}"DDb+V&:;vDgǎXdJ×#) xP?w+#l"QJ(e<P64oyJ>kᑳ'&QZ,e<P,@yklƆ k#c)PYYʊ<PϫPk}ֈKEjj _Nn;zj _]UV@ Pʂ<Pr֚dS3s_]5ᔉEƚl-.*Pn-ѿNϾ'(%Ci*ꢱ.:;vR&J?×#)"d-ZZ |<&%D}RZjnc?#2iXx4^<,D@J$ꟍ3r)ɕ*XJ8x(Hτ%z(EGixj7DgǎKZ~ո ݁x( J@QS<Ph*5mɈx?^)@ٹDb:=;-(/nD y56Ş]ugWWLb|j/܈.c-g"b*3E2y`%cyiifsbS/?#cKhA<>k,- /(Ny(8J@)jkMFuUek_ƆMZ|uQ`wCvӼ@߭%C" <P0oFPo bϮH,@./,ϭzu?]1s߿x{!"qR(#R?7$\*g9?ƶ?GL~o)YDR #QI$꿙HԿӱKyjJɷpw,RVKӉD%yX%oCiҽJ_w~ߪZqFDM$GFyȫDD~:"Fo|3wNYYq<E"Ql"Q^(?ſ޿=Z x7Oy n)ͿHj[q/GߞgQU]-L|V, H$7'Bi ݰIVwJ`DL}6)_(1"~?oHdY<ϖN>z\wk'|#"~HO6<&6mD%,eB"P{ߊCyX8=ggJyD~s"Q^D/kB"ZYTUW x<&DfqPo&"b*sMMEX^/T/>E]_ IDATT"Q28)@K$_xA@>U(j~ߪu"^{qL)@J$_L$#g ܿWvq*oDDKP~$&Eوx\"_}Qz<"N$K$y(DD\DHtTWU [Z VK?F;-)DĻDD~8=&(]D7#?ߐ@il97&01zo#B)|/DDW"Q2"NӳJy(QD1? yٻ;6RDO tD!@1sda( y a[i&lm'fb*I9QI;Q{ުR}IUZ^m[73+Ɓ߯HC4c1V4)EsJku1˃Dcqj%-" nWT\Q[Z^m[t4$pYNc퓴1no%(g5BRL lFwiyJ:yǜ LR1Vp}""kFIϊ<xF`Lj֭=n=|xy3:-i$DSJkukqCycXNIE"5yFH >BHJ2Kyczcxy#6Jj4kjz-^@ZuBQeZ~$݌Trp>''Iz uu_WWw$)qcj{Ss$uu_e?x_ߗEQ*@'OPigKZ&(.e5N,p%OA+Fv>.]nџu[\yoDz%1n?M$@Pke>EZzy`[T#Ijj")Z:-m~/ֿoOH,Me/}!eB<n.UP/ ]fI:eORM8>GyHcI( TY]9B|F9Z*5i5v?~|ůk[c`?zn){K#WggsLv'^2IXZ<@X$K*' w4@ID!ީ>P_fKC?M7ҧHt_744x~E$3̟KޝKzkSO 05.>_+W4@pS!ޮ>PϼK{~6Gr3H:]\)c}' (q60VI1p ߯E+˟'\˅x1t?Fm"ӄ:  5g\=:c~Wu {,TaU?81ƚhi~iy! vwk==*^[wG@HIRaA,IRd$ۛw\ǟWeu>yJ3\ށ=5p{#<k֐̞Y\eJ$Hoth9H_]Ԃy;~P ݯ Sa# ڡwsz $7.ic8>Qb`U!^ 0p>'GNP$9wQK|7?̞}_!^.]n׃S_ ܑ 8~_V 'ۺv"}>ҟ?ۯWi:N1Iˍjz<8`5N,p`Yj֭4ͅ+n/_3׺tE?tLFI>Qw+ u/ 1; SͺzJNg~pI{KZ `ycj$=K,+U*p^u@JųoWϯ=x; {W"A 8Nc~]w@M.;̒2zNRm8>CCy"c6?4!Кuk)O,7'Zv7җB]|^ܱW۞!}k=SVIo;HI?'|L.Km_#V2nۢݻj%óc-Op6_/iiC /*͙?0 ܩ/IMioOao>jk=>Z^ܱWN r|ο#]qgB<9J˴n~r @]uJꍕt똤pH<܃1VF~-Z\*IB]s]֣|s>CN sC=5qBN!>uBm W3̟APPRonj6y&):m4Ro4˟'p \z?۰/){Q9 䎔$(C~d^+x/K+X2^Gbh(ѧpI/c-<no$VcPtp>'G`w?cHM<.pB|d$‚GM-t%jC?#)u#+spWl*4g\@'OPR\yc6 Ey`U!VXH`Yj֭4pG.wF~oNNgZOƵRyk/,ВI}߽>v͸=0`?V>3yxI`Lj֭UݲUM.Jꭑky8@y@X-/" rYJ>GӜh9$)yh+o k MdO3Tw}($~/+{wAZv˵Sm[ttxJ7\ҫX+iy8J$dьj$mTH@^  #;}} {a i,A C1\~镽y?g^ʟ|ѵyD+*.&4WZ^m[ozPRkFcp}#q SQ@F2ƚ$^R9iע" 1蟻 #CD> mB| wۅTD}`;9qOzW_X8G!̟9G?hС%.Yc E7 2 ydcj$=KWYT P7'WmT_o\ߟT˾ @X"Z: VX%m 'd X):m~,iyU # .yge㟻ֶۊ=PB||tu{;.Ϗ3j w|.c_U3o?'~L(FR1VM8@KZD,+U*MqޅFQ wd%q/BG>Hq=vµD!;4a#߸:;/>X{$B`Lj֭՜sux5]H(3VҫX$-g =y5cj% ' bi ]֣_OH 7K}]R)Ļ1#Ƅxx!87He*ݶE?;ڽ/^"IXZ@<d5NiH#u|~-PeuaUcB-XR_ ?WO|iwoϓ;1MΘAPPRc*BJ$H7v6JSjzJl?aˍ⇂B+2Ѱv{)K[lmjd5 d+4g\臯:$ 7 y cIN/' fZa1B|:pBPwҜysWtgJ<{F@:<3gI#u b*45_!%0BLq!dmMzsW ځ46/.h:Z~I(Q.1vI^FyfǒFj~\Js% 7Ne}Tx䎼19'j밽-nI {a65z@)-/7txuE(FR1p4q(oTHZ Qw+eNW)0&0 (Ļ8p?굞>fPFi(U7,N1v?g?~UVWiμ:N12}48%%-"(,.ҊիTZ^FDjJ." ; ֙.XRl{bi]Ss !yQ`Lj֭՜sux5]H(7\ҫX$-g =<F8!`wE]/~0ۄ:/Fl*@NF 1KR m+KV$Y /5֪0@Ft^l=RARXmBm:9}sBt7<HHyitZyN}ֳ.;Yݡ7υd2m۩O)zy18cӒ^Vt* hsp. ?:pܕ1;6MW2}D~+{:Bs  A Gq~SOcM"yS'XVںZzL8ӎGt_ܱW.H;N}wRd{iȟe8')$x?ۯWne|$7HH5HͧN /5¶-**."@̎4שU_GKFq~S=̹&1c|g&v|Yl:IQT\mѷ۠@^@YcF ( %6:Kn̟KNʱWSWu[|jjnuO}s'R]~ONަrn>gNҏsqi^KK #zy$S'XVUY]%@ Ec#]Oxs!NK[ZOom2yxMG}E& R(ۯ*>PӧH1)AyIôzaR;so w:.ojS̞0dxS.4),ȷMeYz.\}p~=uyI. ( 6>_K>@11@ uܳ~Bz\5}CdX9>y2>OKzk1I  o:}V^'y:!HKC-Ϟ9e_jPSs.)BmTX‚GTXPLaw椰jT8Mу'쫬ҜysWtgH N.nHHHcq%" fZ&~y~~9-#GJwrr$sa WXS']W/,xX3Jgpyg¹$S`Loڠ[.BIg<no%yk UVW iz#}j wO}vHqMt49FRBϋNo~{Io8>stZA‹ѥB@*-/txA"$5cm k ^c('Ӵn'y@)90)н>[{Z^;fʳpTHq]=v";i w=Gwuk'þ‚G@TVWiGNM>0gNv yą1VFE y=uoڠ<$z_GΜkR8z섺s@R̹&}mV=vKH_;mت ՝|Yl}~#c~=uyI)5Dx<c0j6>_K>@c+T:sdxڡd#{+{S2i~^ѷ7ҞC )~_m`ImݟCb} y$hjVUV/'` =<6*ii$Ӵn*W/vlϡcwou\tEg5y*HρP[a=_-}m֤g+i"-TVWiGNM>0gp }Q)i ~a ю' IDATrM-tѶ.ܵx1$j9pgrݴ;KC6 Hr 1V1]`1cŴ^uTZ^FWp:u~Б~b){SI&rzeOw D(-/TY0gV.iNIK",+?O W꾮w7w*9wrK^ rq=&UjJ+XVJ18)*/cIN_C6m[G Wٱ;>p:Y;_-9t(JVɊ\e)‚|ߙ"m[6g0N,8z2pOkgI"9<^'4p]"婟UXG:G{$t*,пi#5 I 7uu&XR%wPuh{#aq&_~_KνӶ"}zq^})4$뒜YM'~\Js-[j%$ޚ FQmj$m44*-\\AW; ~k#/KgNA}$aeDIuoOϼ+n7zTNjRS+֩P[G\WAh wޘ@GNھ^z#}:s,O.Td"m۩APP\ycQ X#$5HE7u4լ[+0}]GDN;93hϡc1Tג|7G.KuFђ=sT wiBuW/5ܩ=pjHr¥-چzzE':<,,w=*y\ WhݲUg~$޳7Mo%H0BR6p֬[2xƝJL>(4},>Η5LK*kO V0{i8Nz񖣉~loQIzb[x<0TG]֣ooޥb}sA~z\­#c~7Zi.₶o٪%fIj4ƪ 2ZIH#*jg<@B n.ދ':b.3zzG튖ߏ@ca}ϟJƾJa#e s-]=*GS'5ur-~E9`>BUiyҏ~?H 5\ށAR sQ`KUKK,+Պ?4TX`}T ݟ=Ŵ _J b}K^ɷj)C0ur7o17?_U:cvK5]H(HR1VE8~82D6J:% UzaXK'|ӸE.;_133X#b~Lq8'>zTrG:6-$AQq^ضE+Z%klSX3 0y cMRt|9i$TnxG,ѣr4{%P[Bm-?GXJwsZBm)+_'zUx kXE2rszt4ծ:;Xk$=f<no$Ay cHڨT $H /5֪0tu_}Zys8Y=D|LZÝ2EOXmتH_+8ډ01yZi~w{_.BIrI獱@fxҟ1cI/|B-xBvQ@R}<7t\F{߯o,)vp^%'pͱ{zŒ=/*NwP<:c҂+#^6:m5(y4gVIH#q T[S+W?O HϡI* q&ۙF,,{Yl=sdK_\43?9yR0tlV^nVaq$,IX<(iNi UYTv_\ ;6M-Lw ʹQ~}7Jp?.f-@Z*-/^J5\ҫXX# =QHCX$4'XVu;UY]E! BQ&RY=s=gWagfL+Ň*WeuvW0kS'@<fj$TN^ضE1y@MPl^>eE'#\b0x:R]a#zyZ}qѼ|/.⼓by©nc¶-Z*~Icm$ By Mc0j2i$Ӵ>͙?0-nYɔt,TW^1%!?zTZR1ߓxؾk-\\=iiXc6G<@0zLREߴAl&9)F]gN@ 4),rGKn}Yb~ѣrE?FbNV͟M60>fIj4ƪ <qXNIN mۥGg07/Kq\Kم&|ouz^d?'K?Ƴ?.}ƟGgDW͝=ﳄ8%jUo58<GcM2j4#[7kULcI|3zoͱM;Yᙚ_JHP[GJ/K)OP̘|}u܋ "-ܸw)-/]Zxa$NX5D=w ,Y/ii$Faq֬[bP[%ńr:z섭mlXNi}%Q9 o#o@nNRK~045pAe@H]lX:~{Zz1Mw)KBI*$U7P$%Ĩ^*@%j20o*,x6LF*}YZR1_ }Zg5̹&uu_Wk|45. yRe53_0EvsErs@BEtxAIYZ*~<kgI"1eZ_f<7O4{͞9%nyx;#/,xB@\rp)f5^ҫ.8b<HX8^:ןqYeLN)^( WhGN'pI{F@jQHeO+l#ilzgkS_ϫ9aǗ$SnƁ@PHO+\#itNEɮi}[22‚c$tݓ熓㛜U'b76'XI獱j 5($1czI{]q´yWLPl#}܏`x$y,p'zTi^3xl<}q$ꥄ/c5c <D04i]TO&'%Z/e5¸/km[Ýi|ܭJu;UX\DHR I($1rE?Lni6%c΋ ҙ\_ʷ7i{N'XI獱j 9($1czI{% 'a<[b)9g`IqFɞNtXY}~F]~o1>^6j0AEy Y<-ii^,.\Lt&N4^˃8cxZOڞNKy @0>IjE$y1Zhq4⧰iD 76΄D]~0ɶ^.nDϨk,|ŵŃ"]"H='XI獱j 1(ę1czI{% '^u;6ϡ 8q;;2!dʶ[Le[rR}ez|d<7A}OHC ~/xG 1V1/q4iIH#~ T[SUOrc@j9)RbL_Z$~7J,U=ؕ>?W F|-8qb\|9i"1zⲭrslospWu~,0ЌWcs(nF:T(-/]Lc@|7ajkqf9"/KS'S7`ESsz#}:maNwHq=2aw7=0we~0>-ׄ`yj%!:}j֭e<0Dy&pEp'+KΡOv >,pĐ=\8oZP[GJ'>o=)?~^}=U<Ϯ: s<:cvT햭jp@cXI '{k1V(Ǎ׷۠6PlqNJndvSsKB^֩,mʗeo|kS]mɯ^yep~s^7ҧmتWIjqf;v|mъV߂hSQ .8j}zt4`XtRLF=|l,Rxl$xANWRNwu_ ¶-ZDDMKrIɱ²SZL:/H;9yn|,78ypYUz~f?kNc <pX$5JZDQYTv8pTu4e'eࡔ2+G>ZU`̚>X;ᤜ>'ɹk=c4zTk/$Biyy%%1vX%*!b hͺ*-/# <Ƃiة|]7ܢ`I(;L+&;y7O䎴=m'i(J:õ}| ;b)ۯukݲU^BpI(|1Ve$}V+WYl?apomBmi]=z]' moM6$o#5zTNB'Ϟ95;qBs#֡‚GMuh`[GFnF >|rz}[SsopӴ>=95]H pEy`18I I#v>ऐi$h'SãE&;<dfS'o%T.ez|d;akd=t32%?U&ՑTDzP?q)ۯmя~Рw"I =@ԅFQ`YGq8scII;Qp( J0uri^33$|~QGc'tr-[q>z߸ .PmNF|+Z 2(锤O ۶ȟ' cb۸$f#yd:)'765͂%=*'!by:8A}ͮ^I>55(;R Nƞ?o \)ST\u;qq2\ҫXD2݃D21I.Wiͺ*b pO{JUiR!Pyֻ盆'*gEU'S[^b^s$pHN8*M-C>BmDFn~)F2JWZ8\JΘ7lR@bkp}<HWtBhzi]څSC~ ֍Try~͞9e|%-TK\Q9 Ƒ~Fe9*Hwu_w]Q܎3gm_R1u)_0[H_[Xo;xSMWΓ+F @z+-/ӞTe,IX2D21rIEq>f>_znV^EqLy[rGO޿o>%[={}_/k|b}ϟqei{\ɹIOXrcme IDAT$dp2A̹&=vBGЩFPt<}/;8~xj|~M*K:? cJZC jg)'Z9pljL^>O]̹}Y ;zdq@c`&[65_QD wۛw9~ _0}zn45KCS']}#5yEE01YBIeھeB-$@(@<21I .Cxj. bٟ}ݵ3{MԙsM‚G4ur0ן:9I'sK+ ;__w|bQ9_g~S::oXWu] ^@>D2JQq^غEk?l -3ƚ$"no%(7˞IcI#6EZn-Ӂߵ'ߗuc }sR,ursܰ#XR7՞Cdž4Կ-++?=ݖ] oq&_N. OH_^ @Fgr*vVEz{ %6*y֌KK[x?O K&Fʱ5:Js?!tq'VxL=8A]~ u?W]r#t>_"=h': =:cܧ7<  $6%2Z8wQ$ BKBwkbDJ O‚[暍 n(&LE+N%r8* &xU2m1(Fb#d#!D%ofCdI襻ёt>BR9B i&LuBvx<PeuJ6p.\Uy^ c)fcE)Tw.\Ӻx1sz8'ۆ<,}# ͈oeKwWZz[URsaf^69.C K$+OȑhYݽlɨCo\9n<^6~Ƴx %5 $ ik$x9NR~aa0bYZF}-ח~1}7I_eO)]{-gy׳_9NB0# CǺ^?֠` @('}teu! (` ]>dZUVW {ْ߇y-ɺܼ\ou;sm/&0?vݗ;gřCf-꨿Nx~xeu'(f)t@a^3W3pˑU?e[z-Yny{ܽPy˖F}n y}+ҟ=ixr]ܝgepz{=GG^t旧 lTd I QQ +npN"FnG{z|Rh}ZZNcc[!\o˖tn 9mege~C=P?|X] %x@ع{ t_` @ +.П#(dcٰ\;w 0EeK.Hw޺=kK# cm=^wTo˗<Dҟ{SWWaW*bV[O<zHؗ;R<l~U+V 80V77 ^Ib;dkmW[ث@ܽ(G~z:Iyv}dn=+_𹱄0̪'s9f>#}¯o̘8m/WX5 $vMU$ieu'(崤oF~B;w"`IQOvKU +_$X9)-Hu;eÑ?I,@o|Kk哫BI7+yLU!鄤yaJek 8ɓm0,mׇ<\Af]t[|w/[:e݁cd?שOHI:gJ:A Qq4]?t$bz`rx~RV_뿜z7?UO~Y5r/[2sQeV$ ĭ^@k)HlI:n"$(dHN{ ܽ HeKwWZWo+_~z_>;#=MeKGC%P!~$y-9OHku8@<NΔӒ I#6C5/, //Wn#A|E=ege~C?i)SaޯSo\>I {V9tf<+*tN!|?t@{BFW:T燼LC'#teeSVQ{sa 4 m|:\sH@@bSP²@0MII"v[}O[H@ `Hί'#L `zH<7Y] ~9품ݧ7[Oo67[u&)/@o|Kk哫y7M_ZV< :"iIaF@p8aUO.GCh!~2FzNsz$'*Dfy0L5_ IϒFl^sQa][b }y^v.̔sغE t搂fi$f y0kwTHy ܽ HIY>rq}ڻHw|\9@/,Л'ᚃj*ĦPRi*,8l<fiK:-iiDaRiZ c˖زFOVg0T[שSo$|C9tfy0LӵCq5r.! Pws _ d+,C y~e#fy0LuBvUh]@/Gk?a·[{G˖p,0M ӆWu!uwHl~b"A`P34]%҈0s.mܲ0H$5~hޗU="\ c :*޲y`;t-W8_Hs{=S]%C"B̨޾~B(ܽK:S0 Jj6MWeu5W),1ٰ\u~@+-[z<oH:g v<lcHG^UVW0H`- ) Iί #6$*83-([눤$=gSG^-*Tad0bw4]'؁<V#ciDdZm8ƃ@{ ixU'afiΙk>QDyL$m'm=?T## ym8&_A>a;Ιk9QByL tI)40 n{0$bdkFl %5xlc3MWBH#:nG?mxU b4B-:o&m/j9 BykQEy<m\ ʹ(0D[6)-[6*C9nx@LuBq0彪" 8娶ί #6S䏈D4]%҈3ǩ}Ú E8s#*zk *޲ *Z.(GW (R3'`<_# aBI%zQ ЬmSm_Fw|x=z[r3 j@DLӵCy9ahm"axahëڰ07OҕS<(GޯҲ`RU^9 f1P2M Bɺ z!,ڸejr8 #zoL<i曦봤`"xm8&_A>aDoiΙk>QPߑpNҳ9apݏ fFz~cILӵ(X(*,4"zӆW_X@F{ܹ^BܽK{^+UT(970`XsA۰\u~9GP@Ƞ cM˙$Sh~0<$k+ ݁}TY]%;h1 #:$*x8y GDu?33R@2u[A[Fz~(cp4]GLuBv5r.! Tv5]>-7tO%>-%,@JvZ04]-kQ(L5_ IϒF6l..# PzzosM[n#=Mk'ÑNq lܲI\V0 m7MWu8H=HA9I۾^$TӅKzG'TӅKjpI*ϫb|y^V̪4^g0zz$#C5:u钤JO$$!t͗tZwH#2nGu~a$:oM;?*$-7(W˖r#f\o_?!@ٺE9srvIEZOCy$.ΟTHٰ\U@ip)>VnZëk'Ñ΍ jl;׫}{)GP9 $$t)8 ҈K<_A$>nI?80 \5>Xף7O}Ul J.7Ɂ<I"\?'iiLaRiZ \oOҿsqx'_Uz _X@ Cu~~gjjrC5/, R@ 8[b}:x^gKb0ABddc?SSYvtIReu'yiK:-;15gS! RZ_n.Q J0 CUYSo$lTdHH9I15ף: 0H!]D1iuխ3HOSezJ@ap?=$^3'GkP0 J:GAy` -S媬"RL{jN 808J/I%*]SIOeK 1 gMrzoo5 wXVW3q(LU<ҘK<_A7*;HOS|*)pd<^d}KcZ_UiH*=Ŀ[ 0w+1yK?3#Wn*(}q-]fըzcJmj΍0jf*}Ip -\5 djC#$1ݻzzm9v٘HYsnͪkmѥ6 3U"}IO΅ HzԎkeu yiNHNS^mܲ $ [2g"Y IDATGWj\.[O]ܢ7񮲳2U'_^.drцcWU`Q P0P  㫶w$SʜbK 7YTo_4יBC@bˡ<I0T[~Ƴ25 "t͗tBҳ19gS! 0m9vcZ$^tMvvq#Np^"IZn.Q JR?&t CU222t旧 djMӵ\Reu'fyfI8NR!iL/# 0JӅK8[Ysm;8[e ~iuխ3HOSezÑN@Hv= ܽKGG_'}G9t@<,8 ˵sSɧۺi\#m#WZ|MgcY/]*һ-% `lܲIE9:\sH@@&W( 0{ ܽ *K3Wg*3k"Hoʵv ~>*;HOS|@^o'@ T[׾6T̡< 2MWBy1=/-L l9nJisfsѺ5n**o>nէ %5ϋmoɗe!Go|KA +^o&fyf8 CU*-[K`B=wզ5+sz%I}‹m*8nZzJ2"W%>622 u_|H =zfyf8 C~yxŖ㦧QѪܸ2K Y@o_UUy^#Q+"#C5:SSYzfylfN^j22 Sz%[zW9 ǓSOzLIU"k,h>|LɗZL/VY]%׫7^k wXVi>ivH:Nk܁"snZݶ;V秒9We*/+pKͭmh޾~i<3%I%Eb yBFIi^=(`ٰ\U"v׶7=mVMVꕹzY-xEo]Viq&sڷZ@@&w4]@=(`ٺ{ںEQ[nͪn*}pP5L*F;Ӕ"wxUz( m<^j9;=29 ؄<ӌ|dWl"[o˱RLSs{=FE9brr?W)_jnmӍU ҿsUz)+&SY]E9:I˜z yedbvr=?-VV\#m֭YukV%iDi*8Ʈү'_Uz@m/ʙ(0 ((OmrUVWx,pxcu<1ǔ$?tUq^oWvIRvVW$\g>y6n$##CGu 21 <&4]%,iL<.vKSVUzU6@@cJ_RsJ  ekU[׾'4]%UXV} :R8NR!iLl{q&®|Jis&C/|w-5_k'q ҿw5>B`0<^j:Sg{L;Ιk=zCy(P y0z޳%1jpIM.I *=-$ u8xya"Hc|6_nߖc?*3kW\kӍ.V1JUb|y^V6n$9` @ +^o&F<sڹ{A[i <aFq̔[؛ʊ 8deJ?TonmS4Fo_UbmztUU@G1( SqQ~aaRZ 8[ݒs$jx9M+L9ا O}(]b}9SꕹZ2W/|w_/hUW{  {:?Q`Gq~rPm_0Imm.wW{ׯzꅊzz)G ^nC̹*/+VyOz*Sp˖)yryl`~Ƴ2> Q4s8JLxt>EjZBT*YntXڦO;GRp`P1 +F*I@?1 < QQm_FA2*ߖ+3խTO'aWyhWYs ΰ8[l+8ntXjn -ӧ*}p`PG_GG*N S@Hy)(fȕP9~@җ+=ןj3ܽg[yy<GڜUzIë|*ޔխ oqrLz!̠*+1> Fyr(OWPLV[TCtbv%hyLcVC\k) H"WS~@rڸe$Qz@ʢ<H)'aseH{ZOx;R:{/ru+HC#m֭YukV%V鯴Z[Rߴs p Pz@J<H'Gq.\խr|+cӪ1zMۖc:#JLZ?/ҷFGWҭw<q&sڷZ@@Er(R=\vE[q+TPf%~vqJ}2!Lm9nz^Iy#+s*p]vXIJyJ}!x=Sz@J<Hz'×$VCp`Pg*>n師Wz qI'=$Zoۈ\O@p.<D2(Qi?bGA$_N[m BSk8Ʈ_֦]jnmS 9p^zӆWu!uwȣ(RW(O<$ ! ϧ3m9n2gs!!^^WQ_9l)7sQjr{=1}QDq~bPm_ ݹsGO$I.IO1祏>jqVr!!eeUyYˊ%V[CJrcI" @J02 @HjI(h{>p9CZbKJ~/(80h˱7@[2WW b}֫ήYJ}0@iu ePz@Ң<H*'Fq@*hߥ/W|~G=~}0 (̪T^xŞ g++s.'2gX/tÚUzVȌ CG^ȣ(y@Ҡ8?1ף=U$V6#Ѥ| 8 l958isYڦkm>ߦ<dPY]%IGt(ed !TvK.)Qx ~>n_ʔ{R0)'IQ$Gq~bċ+m B;wsRq}ޮ|J2rR!9u'O IQ$ Fq~b̄À:+-\%$ J>smyV灐]חz$Oeu tzxz@R<HX'+C( +JyT< IͭmGHJl$ @Hx 6l.t;+@K_Wʑ6 )?.71K~B@z(y@¡8?1@ ߇V> -Tg%7.}e˱Sa}=ݴm96@ȍ˖㖮au>w(! !~OIE~R < Py ֡ÇX52J$GC?,qZ4yWmX9ݨ O}K΅ 23isz%y@\k帾<(O= !Q$ 8$VMK0s2C?JKH#Gzp9>Z/|_VB6[z1WpɗR-jjm@_dY]7(inn{1?Ξo?QO8>jqV ifqK}|y0(O= !P-KK-\U'Wk r8U.pc\J;ï+`\Y~x>[؛ʊ$Y7;+3Ă(y@\8?x/KᚃӶsGg~yZg~yZ.їapB$À:C͡r<+߇+92;%^ZǗX-C(ntX7k@{IQ5Cq~bPoZ>j˱Ϫ񬎾R/ף7WT XfT+ 3Q<~LO-PӅK{ݚU@Xsk--).(=ף61( EyW(O,tؿޡ7^k$9s*)[^_ 3Xf7ݡ;+ٵ:/IW eq}y^Fp.Qm_y0p9~J]WR]#]KrB+r|h9*5?P~Uy^t1##)=Ϡ@?BI'$U ^Pē8?J"%|G0>>Wzq& &K;\lP Pҗ+=wړ d7v%Ϛ3 }'''$YtZ-gu@<H'iNXV`%/%Zq^yl5H9N TZNeka%Y/^4]d۱VQl9nIpIPvt= P̺pq~;I|)NϪ$dZU~ar ߇V> =eh%~a\ee }Z-GIғ0.y{W]nttM'ir/[J(O= .P*8?.~.~$lJٞ~"IV;B+]FG-7~^JB39+g|AҋrfyOl,a Șsww.#B@z<4TLyI–xzۛ0 hµrn~&ez<TlykҖ`D.,iTj!m{;. hbʹpPH o>#Y1ם m58egn3&o,-%b`}}v/jyMS3Jޙ1C*B(@zHsaDy`1N$ R.-m<([⁢R v * hµr߻j F*$]@<ե_pLq»* 5FKՕwTj!m쎦 bM+7xpK0P$\" \ow_k3Ʃ5RH(.)JbKx<+8yI6Duo7JKt_Fc3h-*XZW^ا?gsoޖ\ǟ:(-QGy ۨϱu*}gt7< 8;y(Eya8^"p$$Ǽ/,Y]͒)яi41y/JW[lfGg[Vs;&ʼl[v 'R @;k5zFQlRq(IdC!ur{{zeC$u45luf442ܩZ/2xسO|fsV^~x!Kƴp6!gBe!]x"5ƹ㺓Dy@ΌqPH޻h,,leNͬ)ϯǺZZسGɹy&\ 3[ҋ Co~7PY(g%6Y1n;[+y;5c>⼷&> tgu'B\t$2(?BsW.*WwW}_{;U]Y7&??j7)2qSӪ*WMU<l{X;{yfs;hµrnˎz^*Mr../VX76m$Aq‘Osu45AOԌF;57*p|\y]ڛ@,*TjNItoW3ghdʹS񕿞 K-HBz>l%<Gl#6֋<`]q mƋVV={;J/Oߛ|NȝW~@i:bjonPc(XZB@{O~fQt{7nMLz~f(Ч7M}UJ3ɹ=)P# fD. 0Qyc3iO^}m^o ˇ9]Y[ҋ>$)ƨQGS 6K-o|f-k Ǭ,x ZH+?# @1@P@x\e8uߣ8"VMjOl~cDC1 ~^ճQ]l (Tj!m쎦2pW:97٬O_ZLNA\Kj!?WzaQ( u<F8ψ V>9{ỻWۦҋroOB@G4p5BzowjFԌ\TDM1771j,-! X{P!otswLߏ&&ZS.Nu?P'@1Bg" ԿTCCyq*% $Uzuiɚ I+%1k%B^%e  hjPK-X+]z jݩ_AˇeGL'3(<M)<W~=9 y~fgK1j5z}Jk(>1ݚ䛞ĤnML~zUՕjonPGSlC U}OZ& <)%-g >97CK-^0P6ez.Dx3 (窵}n3OLW\={;ճSGV6ӳu4vg^W ʵAJKVJ ,}J>O==ۛbG}~wͧc/) '54d1< yCKz$(oD8|,-QwW=eJ\nV•;5@,YH/`\O~gu47AU׺ѵAk*N~_e_S||?ÉV>@~imIlPYHo?N)ud5zP<`8$2Gm+&\5FM,I♭q#˭Iݚԟ+ܠƨK}ϭZHJ9ybg|SJx(4ݬ{Սf"Wx,{)Яu׮;QQa++NyZ$,/,ճS={;J/fJ#cA5{{g^W ʵAJKVJ _h=[Ĥgols;\|Oޞ^5e& un@Oe+qIz$2({# kiOϜ-|6ݎ}Oٵ#pše!xfSO~&SWf5FL]-(j/䜕?cwW3CmF6ܼw l# e$c#.Dy#M{篮VOR6p5˔Ʊџ$\ +?u\QaWw<\hkn/?<'DP\(?%caם& yq%Dyo_~ɹ݊Z]U敍C1 i4163+uڠ%+%ƨQuU9( }ۛL=r_]|<$z?M BoR @@ IWqQP[*_]E({/x~JdM +ݩ i8>&wjZ^p||eSU{S:dj @\){md S|ɬn_H/ ,iޣ-EwFΝ'3;y8(TJyI?Aqނ𶈕sݩM]L]^٣ܼFnf3RiN+PueڛWBB?in+ܿ}J/ʽ=}f!p9xlϿ_ <{z# (O-Jz4zG‚ֶVΝUjVvޡFfo3q]KڛbhjPcԨ|>/?O[糷gݩiW93M!>Q%A +D|</PzEHX_N{z{{MY:2_yaܩ&\]1"wjp W6Z75b}J-}~we3$kV@m.I:F?q%=O7K8{%>򵉿B4Ҳ#F>ੑ_>k՗>#xNyecQ?Alf Q+S37PW+SWJ5<2){ߜS3rmPu4ޜy62kehW'|* »֙> mmډy(^K7 tὋl86> [IQ♭qe_hoWg_$)+rTNҋȘ]?cuNͬkbxwRY2{^R|χmzluv7[v/@@jԉr@8w\w(P"c󎤣~ρ|lKy>KKԠ}OB#pz P|\Ӓ?ܼw ggo||vAY9@^6!:NoS=N d?Q@<E瘤s$!?y| <{41I^j $eCfxQ]}fٛsw5;Z|g<kᕯ5FW 5U<HyK_~ɹ[`ճS={;%IC1 i41YۨslF{v=kԌҋGo|*_S|灳0Ey [ҍ?ԣ޾3LCD"VΝKy: )SM~cDL^9σovmɹz mdjXS||1Z^ Y9wwg EლK0q]wQ@a<_K~ρ|a oSMLYou2u۩TzQ#cg؜^|_S|ok. |{,7q;1 W˫}W_ݗÏC:jkם|(PdsLQP7ӲU7g&KKլfIZ))yg~KL|?Mn|wW6/{m{ײgB> ' ؒP0@ y )K- y(0K~ϡ>Յw/*Tb( Lx[D S3vcDiTu7+`txO?KZ <-wFK ecaם& (K(ȶgޚ$XN(׉Gm|l_-@rnˎ>vA=?tu'M_(@1ƩtURsG}g"y^ƨѭIOLy~P|L E@oծ<4)Wd8+6xj41i\$)*#|ŗ(1>?QTH0纓w  PϨEu DƢVuf(#'5ʱ .~c`Eu7goJl?K+y1y3=!w-/K@6I1?(@~_qXT޽PYizb<陳lFlmN~ku*8Col}m@ɚVpik<`cVm}3#RoM'<q]wS< cK^sP⼏#IvoO,r{ r]ߗG0)~jW5U0ppq݋zLz1Uםg*`Q<`sL)?g t=~mLwj`kPi%ZH/z>Ql?6Ȁ@7߿ s'jyk2K;Gwq\6ƹ㺓Ll-Ōq%]sh,@H}rBzQJXq]nMLzzܼ3MPKw`M}u|cYk@qD(P!BeN[(K8\wrCyRqs8~y oX9׽=d䤦\&G?UgT߃54r Tj!Mh,J>BҀ1NNa2`kP-bS)طNyZd |˱ IoF*G} 5^2w='j<1D OLy>[J/2[\7u )no:+]SU5byw;?yB~}G~}c_S<l"c}.9XTgϟc )yk;瑻rgȽ=&ʆcZ+k&&p[oM'<ou' `KPH޽PY${:p)"'USӾqxd\A cQ޽@_!iu'0`?!RR /C!]xmCkNz4AH#<Xb.鲟3G/|aײy>y@[+XTO 1N%1Q Z1T GtA9 oX9=rU]Y<.y[9r7:[w+w}bݾ ׿Qc^yxL8$?ԣW_.kBe!+6$\$(0nsRybxp|6Ջ/C=~}c}L<q%]Ǣ:~ EcQL%X_0E;5;gϘ  /QV0` ߌ<|cJIWzHX޽PYau o-2{g*o>aru4Q W>fw[s1=!sT(SdQovuw:<6M$[^KKN|6Cq+u GY9wW'\P6O,S}g &_<| cK_;&o3oI#QcٹP|L E+gjfQ*h`TO=I@/h, ]{ Gqzx48$zv `S<<1N~ztA.Ny~41IIud?̑J/`l`Cl=ֲ#F ʁ?qaA>8[v -A%<\=?svn`Uʓ (y*+#<]{A2J֢<XXTgϟcll/2V& r-Ern^;>c+\Vf@ƢFoM%&֢<Yq.Izޏ tBe![*b<_eelB]sSł"97ogioW3 |:LsPYHg!_wa2 <,19&_ҶʹI#5Uv>Ľ=]pY*IR{s&\+l%\-- ]{ 3 Ay$- cNyZ zE"+%\[uUs a7F٤`i  =?3(U6(|XT<T2 @ytc8 ׿P> o)Ϗ&& 9y+ϻS3rfy6֧ô>{4Pnj8|P#~BU&($Kzڏ޲U}glz-^$X$~+h- Y:(-QG<6v_a!]- ?yB96cKL<׌qޑ>%+žP`s hcO(>}gT9S8ǘ~Fyox0ҩ3 䥈 "'5U從ǡw歜. H[y~lW .H@ to+ug1N;(%cg$Ϟ[Q?E<Ҷ3ҋJضoj yp VW2`lPtsl~H@aܷl{AcJQ;K7~K7sjPL*+r{{pnQcB (>nf MVm@Z4թ7O9ţ<?$͏P> ~IP6}#JKIx׾`[`r+&zkV `cVmCn' y,Dw{#d$(f-cg$ (),{-H}3gMߠm^ ?G1N;PPTnxŗ0(*m+&\źU[(KiC1kv53DlP*h*?$}^|s8LbBy@XQTkEu N4rn>Q8ʹsw]W+SWA#vη>'?- "Sŋnn}OPB6m'!*ts!vs^2e 11IGxgϿCx?߶JGb^\M6[0dA1o9q1 y]O-(rxQMUgڮrn{SLroܩ-XxyGL`?q*rnGSL J|ZM0P$`[߷4! o$ GLw'mw1>&@< Kk?{mk|=?sN(yοxփvZ ro9cJ&@!<,x _ k[3#4"! |ڍ+JKDy/ Y9eGpx&TVFWZvWȧ-zz(4c^I/cQ?߲y~`ƨ̭zc(>R1 'P$@sŗhKtWKge1~] ӌ:)ꀗ_*3sGi,w}9.M޿~{̕sڱ @\n4\׫@ucoaeԍT2/,Y%X:tffi,֥҅ƽ Լw',q4dkY%G$ 2rVS' X}k; @(s]&nr=a d`~vZ*`Yxĩ^-%cv\Ex@N23Ioy_+V;1h.lW9ǭy=4^6Y֛by|ի] sR7N{`8^6V+͜i&cbW;:5W+.Ҿ=;}A WAᆬg{ @!< K*R~eok_Ś*W_Zvk~˝)0^oeϞb {2,0۪~'XX-Y?oBw4ѕs?M@|~۝[b6J, Y#wh ls1v@.!< gcwJZG Hsfn~\9o^Mo3~w&9u\ ^,LR1v\@x@O(yF:^VXP؝\Ś}EY?oB% ֱ @G5?w0 Tn\VMsgx&I61YI/y;#bkگ_5U׭7! ~v˵>T!Ȓo3u;LjO*sgZ[؝zN 9 W7.4[${_+ɍWι4_\y٬;<[Zu,/9H%iߞlcC3 4 X%,d1< g,UțOYU]]yh.֬,W>J"5%<@6}1r^&@n C:qW0.P~Ie^Nv,ls'EsZmU9?A/.b{SUQ@V 9_Ӂz2%sdhg%5y࠷\Qؐs3yPYγ`Y:f=yru1u0Mx 'N`84aHlcNI^oY:޻,>enL.XVSyKY9Wl)վ=ȦoqfpUb:޻[:k.Q[څ+gfb]*f?Ngg?g<7:>y[3yA`[zzXzT \GxFHxơÝjhc75fMT<9>}G ts{Yxhtq庽ww@ihӡÝ^,IYv@x댱{$䥚N:.vtbvLO<}x;[T ܚ:y.vI!/m6\e,^oY:޻,>634k+9x]|iYnR/gȲy譞V1; 9{oY^,{ ;pMFs7u- + Y?\tb;Ǘ?}ޭoN,_x\4x ܡ -Z=}^,L;pYIM^*H1545JJ~Ng:Bcfei.M}6hE z;<Mwz{Bx+;%u{:$3s1ϭ0z|tQo5u< FW۲0 pljS' Xύ@x@co讀ΰ Y?gbiYe5{6hg[S%y/lȶ]z~w@8޻[Kg<7 H*R=}J,V@mծי\Wsw g\}Xly93 o`(mbMdyYe#%/|pZ;X|`\z-33Ks_M 眏.k:@}~˝7ƴr+ML˩pyO?uc ~eՁ_Gi.~ι'܋r :gfVϹh08Rw_d}in&M/|I&]X7#xALgfֵìe?yW^M\^+}q y/+!8䠆F ߸s3yPYeљhW<4V"<a_Kr#Ҳٜ+Vn;  ܡ W'O)r/⥲tVR;Zf=^R}J,A꬟s>y]Ey+uff7%<߼'e+4xg&S\ dX39mL ykb,^BjW;:|c`XͳA[_LLej棋Mݷg' )Ou8IrHd.JlP8#]_kcpO<5pxؖ6NVa Mw>yߗI㎤U^!׺t8~6u/`E8&Ļ|n7@n :ohM/]d'Fx3>++-K=},<EEz9Xϵ&Dzzo ߷83'$Ii+'ϮVʭ4&<3N;x,楲43Ǚgx<c%仲J,꬇i7emU>}wh޻'ڱy&cEיy8w*j%)pl^AM<_LLѤײ&$Im:tSx2%m/|YIx`8#]Yu JX&z WO,=rc|.@a)Ew WLdbMNj7416_2q ySRW[N. jWλڴoXZ9Gǧ ~N?GZs{YDa)ĔxkyEnOo|r&xDw_~}b^*;uv!<ౌ(:u- = Mw.<~zpq>׾v<lAxg&xbYe934 j_OC:u\}J8|ۍDW=pUv@ T9YtG d=<QJR|iYn3u*,g:y|kʠER;Lz㻝ꥲ:Yv*cNIoz@u@'Ny}\LbEY?inM"oO>0|biFac+*^\׫qgg:;c-JN;#b<Y=|IX]![~s&_ZHW>ݼ'R>ȼ$or~W{_v+Ie^)H1!VsY?i,wLGTY^Zp 33xb)5~6u,x"9P<(d M:uL导TvzV"<!=^J :u @p;8325U4O̭EWhKx@P|biRt'WjblKewc8idcPi;O[zzYx@aW;}@xkTe=9]g\z3X,A<{'x,楲g>;Dxn$y؞^U@J,-+sgo6YvEW^(\_:4۪uI?R(9P@"< GK^W&iͬәXZcY=[y_qP<@>xɕꥲgcvdCɧ;6$_RW3J,V(@ծw/1]mXŖLV& O:D(ukd&3B0M3Vyg$/<Rc C,W\$SS]!#S[2*ƃvL^|[J٣@.j.@4:>%P\tQX;}Vbĩ M{~c3uxyR߲ˊ*,c,/̈́eR90ky`ŗLG$I̬eB d_j{]x/Տ/.*S27Dx(c쳒RS'V 4|f@k\S'7SA/ᵶ6ӡWSSR pjS`:t2s5G!:>Kei8S{d,Wmio+΋jY93+V+d#Nvguw$Ī1BSY55!~e 4>N]gjӅ|8slա/ ϳ)2 X'W6oN;g>;7{Pe<*z/jӅ&SUwLmjLVABvfrQޝ,5 K _IUl*+dNcB<.:?__:/OW?s(ϝR<JeJ:Y}[c}VRwnޕU`AZ߬Qү ҲSc+2L( +ٯyOɽ❙e%oRz2|ck !o~`JFwyYd$9/1vL  <x1v3^N545TWW{lЖ @F_ws0u!Ա&'g"ovR'"s }1]ݧ:4`76Ѧ_勗Tv1Ǚ<-^)4hqVjjzSS''SSs}Ejn/$93'9XZQ)ep<l˿tOxȾo(r/╒˔u7<&+b`l2}W׉TLBi"|9}{, 6#)=5~ci*<:~xؚ>M\`Xy7;gj>c7K:ztS(b` 2zI~jMxXc IDATLޥ xb'Nohbl+%)dFx(pg%5yVeE<.ޣ .J,-닉²@ .+Sqr-ټw';S ;3J,-$dj  5Ux7;gj yczvW`[5 xܽ{7jz)9a7(sSȩ絎lXHRaYI_ɷJx-ׯwBЅ!:_W^*{Lg$O=\tQe934 ^+,oͿgxdL4`3JJh@;u\7^)LYyhh-5e#%/,>wE<&ýngUl) hW.iꑇ6Cs{ـ9.=>95~955>9 aW\$H&B6]Z4 τvh'x,敒gcV(<dCɧ}]\$it|*u梋J,-'߲`U_s/+oo:_ga7۩O jMl{X} 1vP߲ˢG$ĔzA[6*@.wDKOON_NMd%iڟG)X}C?_>~o"sQcq@A-(2x*ϝR<J31@1ޡn{WVpH"_9qL~WlomKx>-_JᓓA"A(|?_Tr&11yWRׄn)KKg +ӟ9祲g>;( 2/zpYqT?d֙3I:3KrP2P/ѬNojmL7Ͷr2xaE3{*P<~ s#j{"s \.˚><% ON+2͙*,Dm lf箐ٔ7?wr2|<Ҳ$v`32o:F(5:Tn]YO -(2i1Э1Ot%]xIަ֎6545* PZ;t૙{>h2>8SgY} 1v7Pk:]Yty"589 MWGǧ䤂iVI,-닉GBmڀjdj }3yÅ|2 ''çE/5O[XW ~-&&i4xHd.ɻ {% CW54xU TܨP8Ds؉Sh7Jgg:/@3"}sgx#ԯ(НGҬZ>ցt~WȬiJ}֖5}ޕ4] amIRey*ʓ/J+SEy)M` uk<)<_;kb.%Kctxn=G|()9<] Mjh9y*׫ӽ?RKzy  =u<_\]!P^JNvffLGIv;sl{u)XJ`1$15Ue&$`#X~߆|rG㉥ p6O: ?ɻ<y@^pRhw_/ .iWhWdW,OTɗHJM/^f S, d}럯|D:*+V<Ŀ'XRdnAʭ,Y͑1b }LU ^/~3!r577vkM`Xy2%|>?yGRj=uMZ^FǝL~./&h1[J3?#*=1}MMLSۮ[k^;<2/`-EG(Oh|rZGiwc%IZ:ѦFAup.Joc8S@~ < cz`8#]Yt!aԯlNsR26?)c{wW?uMO^sx>`,+ )Od&G.܋]8? eMjhjUb :+܋x~cfǙ3=VXZY&~2a$iW(,/L%еa ]VdnAܪj_ԟ#X}Ϳgxdxʀ|d.{s ]K4y#K|$=9Mm4 ˬK}:#q{X} 1vP둮c C,:kV*PoNIm&g"@|tQi*fQ*55835 e+(5/iPiE[O ^U} CjhSKG; up.J3ury coQr| C:uESQ ǗLG4:>%''PHLRa0@vX~*5;][W͖ G51y7' $Mkbl\Qjh9Ohq ]T^+%KjfFx}g%y^V<_\]!Hxtܑ33+g:uff`*TY^ݮ-I,/Lڮ߽S|5@e9䬯o)K`-G"|._$eQmjhUb 5J,utRr1YǙ:<Ì_Zt5o ELGBNR oe ~_qfj<rK~_[i`S%KX} eO,=xy#c_ #bٮʭ T+PUʭ 27tmXC׆uߛ7njM} TѮW^aOhq ]T^ ){ry GcjekNTT}ű&g"rg3K4 CL> IJ+2P,O|][?+:_iS,]E梺7?}⇺owYm~wѲ^-%%xpw濏KgK܋]8? eMjhjUb J,utRK؝35(gffg(/մxS&`>ک p_o(ׁס/*>52Fs;L,˧x7O*PUC_T,?& ^UIR0+_S}s#$:+܋x2Ig%@n!<c?j嵅 /.Үyd#gfVt$+ SJ"}řI[wU R: ?1yWxB7G%3Ms+ߧ`v*ܚ_ ^*HG|6(+ibl\}`v545OJ,};əs^){q>fAx![$ZTCS# G5 11E(=->=+ʄrA2;& ڻ;OZ**PUڂ{MzG;51yW#c~RJ^D-Km };v-x_R3+@]( @u@Gӷ8N?bJ}bisIOO_Y^$ GR~.0Y+vUWnL/Ԁ mWn|Q iڰ a$c1]xI/^/~376]m lAco)y&c쳎3ury Gc,-/yM*9ӳw:P+~t2|eyi& bxdLxBw܂&pWSz@>X]ߧa-[u: M??n TԨW^MpdXOΜJ=3%l>@BFVPP*R}{vJj$ŗLG4:>%'_iB$1-d0~ZE419?5U TmU(51~NYbӜ,j_ɻOgü "ebl\cp~@3S IkGZ44x )|6y cL,8 qvCK?GlV?'ٖ`Z< <odS+zv}SDk|ϧDEt%]xIަ֎6voPzzżPK؝35<ɌwH:㕛e"~ƫL'h"jbbn)KKА|,O T+P@V:|QxBC׆5tmX7oHO`8WF!Ubhq}^){LgCxȁ LOA/_I" ۻ;OZ*! _(,O^x^^x^4tmX#wgÚ Ic㙐Y:vvw;ɕA ߸r$<;%Tu-K=},89+ ȚR}1A@[Vdv`++Vu>1-ղ^o] ]' @NJ^D-KmjhWCS#oyW?<c1/m8SYy`s61ydѮ ]SE5e41 MLUd.{s ]K4O-NMm~wూuۮuBj* IXL/^勗$%Ԩ֎6U ۪w;_+%KjfAxJ$Mkbl\Qjh9 'tRYc~Ǚ<9Plɻ92X,/iHve} mWwU;v*2k~u^D/^勗,545MJ,6E(ґc/r˔v"<l0cIM^g0ґ,8 Ld0~I#w$jܚ<_r|QXrUX c;ԗ<>B}L*@H#s -hbrZ'tkd Ӫr5|gZRaz_ Tnա/'2AO>ɃP)CW54xU T[@VX%zz3Pn—Yy} `}V3^gK{rx<qMEdnA0pQC׾ &}jߠuTr+Ma?"sQMLU,T< |T.m<[g1:eY\l-5LJ (K Lr# '8pX^85@ޑF0q|*: #s JAX ajvArae/E~?/{S-nou [:ZѪ3C mM߈kqyIJ%4rᢤm^MoVBf} dExdY@Yi3'`e+.DL53@cjp V`C gkOߣ98ũ\Ӟݻ;䖻1?C!R wO$u}[!H-੝ΜzOȃ7ߥw<ДV9}PR9gOɭ=tU}r44OdsOV6{,0-˫  Kʇݍ.q4PNeVO$+:9r٬"1Ec䣏no&Z~}oN(rcq;ҊnSJ*[O] 6=U4ްU ▷ŭ3CJ-Ud"q~n(H%J)4.wsSi*=ΞzRʽ,0l&1aQ'uzl 2KgR gVYZQj5[$Tn"1E&b. a u@@D8qwEc$I6me4hTFPYHYy`6itu:\N?y<|0~U4[ F9`aTaN] <IJ$u5ٽKCny[kөNeskkܦRRtrJ|.{r.' <'rϛf;b偍Exؤ/.I/YȡӧXiV& ?x$ ͮi>}`C,Ф@oL}W +j|!zo[ [:Z*IOWiTrN#.Jvyin9TڻNCCo+f偍Ex`YX1FP9{<b@>lnMs Y\! sѥ*9^S-{M 9tm/Urklt▷J-|.J-Ut&qdg *40oINP|6yrm;OeVZͭV"Is!ygab2l;zx_O5?N(2Sd"&IŽi7ۍa*}. vTrN>3kr77oFsot=RɹJ(i.'Vx~ Ջ<9VL>RX<6s JF [Ua|yŭF˯ їL\љx9~U54(p7ntip Ҋ3q]i>}H(S$<&a$M>;7ͽ9=^%_ì:4K:f:{kYp?ͥ I#&faltI#y{.K [,gMLͧҕkt+:Z!`kөNeskxYE''},w4 `q{#hi_N̳!<lV/^k'XiD`ͭin2+Z\^9]ia5ղTѰObتѪg1Hjz& ej>}O{ ǵg.n-n|޶y񛳊ߜȅ.'`8yBO*s?S ^tUy9fYE?8bO& e!:T^KyOP'GCz:%IDRm&BqUG܅[y[ܥ&L4M[l 23  f$cA(SNCCo+WMp:}w<4*iuzinbبwQ4X^D&b_3۳{{w7h&q7ntDRљYBe(@"1I7Az`GC$I¡3q#)*S$@8`aTSaߞ [Ui'5mn(# +tܧWZ ߱uuUg Aۚg?+H%4r$^k.Os|6ձ7*ܳY93O<솭^74m}9w}>MoFPJ:kvֵ0{M:*IJ-}$L0KWrw 1A~v}<{MA~FѠBA C>[!Hΐ:'t˯z/)_|Uyfے^zpxBD&lGCo L9`ŭN*m8uѥ*9^S-{M دPns4ԩPL<̧i>}O%!7AzG-|6 ^?8J}0}w:tO4*{# ɂM,w0lU?K3` K٪vȱN5ե܍.]*[{$LJBG܍.-Yn(ߜUF.\唻IݽGwx6I6E'*^fՁCxxzgIJl'Xi%PR w,M<w4ɰUŦ2lUmqkp $on@b 3CJ-Ud"ơ9s eTJ6io)ZfӬ;sUy)fIz>%cs'4ٽK=r&ƻ.öC:$S9rk)2#HGCJ3qMu"IR~F"1IM>|v bp=otΟXyen+ 4Tw_n9}Tz&:oAG:6wKF,(:h"1EcJ=k;bՁFxa^񓿔}o-+ 6[3M2ө/RKWi]:)o[j؆Z[ nDLlU;;!H{Mz:KQR*].UtrJ)}Dž*I]=)z/){|Uy{f}@ҫ˄Z: ȰUwȣDRu-.ҕktZ)ʂXq*}WTon3ʭ= HTw_nb `˽sfMYz^yT<@>8 8yS`AjzU4R9\kDs/g:f@Kog;YuT2hY@b,蒻ѥcu}"[e]\^ե+t5&$V>0TZU?Z[ؿOߣ923  fĠ@ su˯zæY9'V<*OP9V*ifiE,= ;+Q +:WӭDҲ..ҕktZ)XʃXNu }>|${tpɰU)Gng9 N*9TrNvo9 3޻:{J(+JDx4ߖk<~\Y@a I*uuUE&b>t(+:Wt&ς9xs4P@2K+C1h>}O*gc0PHOu?dڡWpl"$=<2mK$47g9 eoWw9]Nx۝NȅV/UӬ;sUG%!YZQd"1KςB@y7_nBqڳ{W)H [Cj"1~fBAF|Tz~7JKtG%!e7t0+JAx4Hz5v&Os ܍.]8L\'bbultU7NBt5]r4E=x>jtIK|Z)E'$IS=G~IN$I&yJv4ϧwĪG%9olLlҊ"1]iqyղ5J$u+j|H?m[ ؘ}P!H[7~{F.\$kinFs½sT%_4,,+J@x4K:f1 eVW^IE&bf[{DLޥW!4{M5P!PAo&9okQs u4xNC)*HxLinTBAF|B]N@~fR/LgauQ)-]k7^gp4wGp4%܍.]8L\'bHZU] u5F;Zmq˰U0@-Nr&H9rk +מݻtS7 hN}=,(H3HlV"1}򶷕&3*7^׵ *ZaIo:<ӬHz5?y~*sfiEǴjٚo%HVCCuua* AcqyU\ӥ+8l0{M:Ѫlng/{(:9F.\唻IݽGt9iX;O铏>zoftXuXyTV.QwV6/4q7&5?Ыx"DE&bLĴg.u?Ddd|W>21xxB3lUewE>TrNBAkr77oFs{ѠR9:,0++#<K3[o`؎)F܍. St&RъWu5`@+O_6V[@z^P: YZO[}idg )mi ӧ_YWM0aeaYYSOAYVWk47lC? dتՑȞYZQd"1KO0-NF.::Znt0esk7 ^SNt>~s۲7 =䔢S䣏p9sD>{kilc&yz%`aUaeg%dlLl_jzU4R9\ eoưDئ9}MteVVDxd[ֱ7HX%wKDLIֻ>yѥV@"Hb̧7#W%I]=1[J-Ut&qͧIF e3 minӠA _O?zæYLUe7nYx꼽֮o*,g}4DLc\z+ԭDR򨫣UFP{`1HoD[x jGGC6N:zYZQt&x"᠂\6HxL$۞F1L7^׵ *Z0fa5a9oY'Op| KT?Ы@≤"1MߘUn%ͭ=(:U tky aL\cLo}7W(<=who-n]`z:өlnӊNN):9 p9o9Pn; < ^YӬ?yX yXy+p9{U߲i܍.]8VWu5`X]h-VTS^rM\c6a-o[g AYM߈[J)~&{]^{i*=<}3/F|IgYqX yXit5>B*㓘#1]Y:hu+ԭDR򨫣UFPW>n1 `s<<$Pj$(4Th4(aB> -_YyVVAxV3lm47( ?Ыx"DL7f[{`zsk)2ӞݻJ`TjnadrfCnuuPGsMhN}=~AeNN):9O>X&|vmﭥAyn(~sKzUeοja< gBcu}"[e]\^`XWaltU [P u+Mn.NꁢwCq:`+`b6$BPA7g5rvy="Isz]=|0}8<䲕{#)ap@K]e`}*R Z9`u+ԭDR򨫣UFPaS+ͧҕkt嚼-i76] ~|͑Qh4hP6ÐVJ z%ǶFxYI/Y8wGݽGXeB4 8tf_g):Wt&nzWu5`ֽ>/tp]tp Px̲sH00ho'-:Ѫln-DO+:9F.\唻IݽGt9iӧ_YaIYmlW7`N/T%@[?9pWULE} u@4ƘOoFJmq2lUޙҁ!nx(S*9hPZMxI&7g\~ӬN ؎ vLk/ Xlwyf/G[Foc|ˇt+gG^"Rxltd*2lnV~ٽKCntr bśg^o6me4hHK^t 'V ] [P:ًa/SIo%HVCCuuA*a* _~=W +svr "o"ZhhܾQRtrJ|.{o#9]NuHxe$,5ǶS:U9. @[J-U(< R(2Sd"=w|h+`ы2ߌ\?mq1u ҳ奒spQ#.^k.M& ~a<+}9th40'SH'4+ >=]rM\ŭM 0[+9e&c[yw vG9uFXgM<5{Mu)4ZPx\7f[{`zsk)2ӞݻJaN{M5k58(J'({t.]&o[]@l=GC uT6V=ʷ=ջc6䔢S䣏 ٚvmﭥA#WߜroftXq;.\NI`ˤx>:י~E&bN-.j06]s2{bt&^|-{v[}=`ʄa*N:mn(ߜUF.\.]ݽGt9im['_Y(wQLmYx꼷M&HR)8YZQt&/ҡ[n%UG]r7xH-ny[ܥ_|^}˫  뀹OG{;9'IL4M s?hPѠl!4ʕI&էϿj;cQc;rq> oTS}=J-U(<ʭ=dLi]~%G2gVxi>}O*)xk}`@yp4ipNJ+g⺕fnIe I,{ki2޻:{=9,ϣGY+Loz^E(GC P"1Eg-[ú `K݅@'SHE^z+pы[}=`p+,O$׉NN):9v9sDt9i-t9ZE1}e<ݰU N`JqQp4 [?y9:_~m˷IJ$e!!:Znt LtnqyUBq0ho'2FO8rspQdoI>eNzx^b<y-O?fPv/iڟiE$'VڃG"w1@-o4/|y{UI[(=pp ]I]dg *402v4Y~o(4rLGY#RtrJ#.rܤ#r40v:f@|4N\fQnϣfOeZ;S@gvI)5T_OR w [:$[{TW 蒻U1t`V%o[ +pp9R9s e$]>c_fQnϣ?yr4PFWu5`t\i>}<#0qpN~8=׭ß$)s?HxL$&M>;ih \h23}{kigr̀23V.sXLG!>UFIN_,(Z7L^~˫t.]V [(:]lW_cU&魔dr"#Pr<0S{ђ{0P#1 5f o ,0lA-c !pm"krm)JTcꭶ7$] v^R7e+& [Wc>}:y𕍰,SlcEO3 py=. r 7qSS M^FqX:u١s&/>}< S^KU<ŽZ^]LL31@zrm$OvN*5ѵdZw9 42Th  zMbrbt3H?k[sw'},gS=}Tzx3Lv y9Cާ8x߃)!2/)f6&W֔ϮN6';薿A i#,/Ɠi]K >u]tE/]QO_ Lo.E_XT&ӵDZ%#xE/pX!@ALvyFO?׿b`c?c,gCA /,*K9+\S_:9 8hd&ntb04TX?&dT3K%nTMλwv(ߧ@G(PC>SO_K,0Ĩ&'FOC-kz&陘^nips*n0ɾʕju7[Az.pl}CoՎM/bNS gS=}:6_ qSǮb<y5Ώu5*)5ѧ]7:u'ӝlNv!w(4-fN/,+xBz8 O5ۜ KGR~Q3^PךJLco1= nNFvm5wFc Ec 52 GrEٌ2Hݸԍ+6 ON(p1}Y':8WNgLA`D4O?uc{'ӝlNv!w(4-;DZ% K05Pm۬ɉ u;cȧHMNX8>,+N;˿a01EviEEc '+OOxNl ɴ%LX~]L=]~t5>Q~aQlG[<{7}rvP {n7U.L]"gviIL\߿}ߩ߰224Kmn榸1#Ŷ#3A(z! _~'o9x2흄H^z:VqEc[@G(˘>l?MLz/,*K9cOœiœi5+ $VS}qPP=]~.``^ΔPH򹻚zMMN)߫c%L׿:6Ο3u}W^6W85j8T~aQXBnϩ\y`z˕'ӊ'j6y%}ncn0v꼳ɩ0wKp O5>491ɉQœikjW5=LL/48Э.?N5w|aI/]KWWh0nSO_=]~MNntv=6sw'},gS=}Tzͷg.ΚaJ_}Ep #<B+kJfg׍9t'vH t پӪC4zEa}4>Q~aQlNi(g<#a}rvP )λ&/>Fx;n9+EyPpP u{N#[{ tO)'Z2;yF%]tE/]QO_; lzCe~ 2_)Ŝ@&z48tBm6|χjxn;dMz\=]~L~aQdZsiDq$<{V##½v;Ϛ)qirbT'`S-kz&陘^nip[=]~,v>^`r/,+xz m]aRlFl J[nT͍6 ON(jV LnyP9Fx;弩 c<S lLNZ^]7vw9dRxB8$I]׭N^вYy ;:91޺E>wWS icjO:u*KqPsj`yIn:m_XT40z:h@dZdZG@cEx<0wZVtXDEf3u;k^QA>9;(yN8g˜:Kmn.B`^KUg]clN_:g491ɉQ+,jr`tyu]31MrO`wWS?ɩ>{q`߫o->@x嬩 c<8hʕ?QqirbT5]^]LL31@zrmj/]KW $)lFng4_X8^Q X'Cxnikc<ĝl"mQk;ٜds)p+zAwC( PF#CL6 ʥⱫǮJz6{}Iy<xfnwO%0;9 }PpP Fɴɴ)pܯpPΆzI['Z2;ƾ0$m4TX#B(JJݸԍzwPO^96Q @>PT2uLs!h,h,VwFaqa=JG<ֵDW:vQ_.o뽒s|1?ɩ> P`&;ttD|K|AYIf,lN?gژ:ʃ?Q50Ϯ/,Դ.z6^ i42d94yξ{]tհ,TUĨ 'ӚmN%#xE/p(kMȩ7t73FOy<#xVgy^jsSH?,Slp8pPEEc 'Ɠiœi5S_᠜  r.|> S(pCn^Qǥ1$Y!/:k8xj50}i<-xjnwYI/6d[&F K05m:yXDcbQ<0ayu]31Mĸ{m491 M[sw5YMNXOsV#½vO{sSq["2t H]g?c=491ɉQœikW%% 1['!Ou-6rn~m8ޡ+z\w~?z\ L6gwԧQ.]UXDٌuϮ\yK l|lWh^n+HoIO#uR7njSC'k81}$;'ExOnyMҫ&-~[w&gCA /,*KP k8$ R\S*Wi% W5=L@<fɉQ념[3F_|]sw<#gSc )KqjgCǮWB<'AxO㼩 { | ǥɉQMNZSMh,h,AcvCAz?/t@V_o]=} *'a1co19'AxO꼩 c<0{ Ԝ¢nݞ3ɴɴԬr IDAT)pܯpPΆzI.הk=O;.z/۬K қ|isw5z9SW:)j`Ex?hs&`W%`~')sq6ǥɉQMNZSMh,h,VwFaqa=tg陘gbju7[Azz/'¢RݺӦg<#á@}8)a2H L?9}6yg,<3w5w{p6?4y9K9'/Ǔiœi5S_᠜ z\*WiL<~~N>QxqS^_򹻦.$Vd7:~g{O/)Z5㗋xF_urbԺ4l*{{#"zwM]ޫnwk½i<M]YIxy&/Ǔif3Ʈwyu]XBXBf  qln\\Y.1x{K +=~z\ L6g&Rk򹻺?/s0vȩ7t73*J&.mL?N<,nwOe^nK5y|aI%II=]~I^!F_XT4ЭsFұV;oV\ԻgtTDΣM]8ϋ< <"ڸecΰ@pm5*hMœiœi5S_᠜ 6&ONjrbzrՃA@>๾V/T{]7bhՕ3L#099; I7f</9n`ͣx2l> /a W:N*5ѵdh+ncz *’k J_}E 'B<;]C2tצc.^jkQuZ50Z*Wi%c;_X҅iIRhZ?HtVqeꋄB? ts GJ KA5tym:P9Sx^YvqnwKM\ȩ 96 _XcOOxN~ LA`q6k42Ȑ u{辸۶髗x=׭_YS9Ԥ7>ߘBExgɩ.vE'\(5QSϿv-}N&:y:"a x.G^8~G]4>XDٌɴl4꺢Z 2C  i42¢nݞ3^>QxHו~R K*.q1%M]YI˵|r[^k9 `UrŚ<_X2v%]$ nxĨ&'Fk^(WXm٘_\6Rbw(9fFRvV(=ky y{ai8p8¢7yr5xN~ r6sX^0Jfg n32fP~Qŕu_Yӝl PK<+svAnwKWM\[g`p4Խ@Cy=.4>˫ju7kd(.v FnU\Y.-SmD{!R2/U*WtwaI/}0So- {tm!<_Λ(gG]p Ej֩հS K05-I tgCF#C K{ =͠|EsٜJ /I~VmR(Ⱬ. 1nwO%EL\ۛo3u4j8h5xN~ r6sX}ZAzv yZ^+ju7knO!mה_XWds߫Hj .gC?w5'OGGs24knwO%m:#.Bx*^Kc.Ei&EW%%nPP=]~&xnSh[yctҕvWM%hM/ʚ_4>55P'ǵQ칑So?v/6`M^960Ne9lwsv қb^)W?]ϚUh{RfP~MsٜJїư=X̀㒳 #r69U_4qy'B<;m&f;odW:y'Q"^^Kc.E(L]^]W4P4PY#CAt 1MnU*W Sz6*ʚdsn;$.55Pgͷw5uy6n$#S#``U-kz K05-I t[Gm W֔#w|?"ue_T’kZ^]x^f55˻9E~c|3m*J&.JzE¯qm?ݦpP V\y`ɴɴ)pܯpPΆz8I~{,7WWGfP~MsٜJ ujǁ]C'OGG½i77^FN3u3'$/^Kc.E(L+51v˫ju7kd(.?j|Guݺa"3q]8KM r6s9('L K9e7M[Cm66@O_=]~k K05-I t[olXDcyݧvf9lGawIǮcnwk½i7S;aYkʕƮ9L+LHl0V[_ H9/v!y_t^Ά:. qS^_&.m\p9ϛ笉9yU~' l˯RbM/,’.LMKB(AzvmzoQw5uy$gAxR `gRaH:ݦpP VphTodNA^0m]^9;`wkOx^Kc.E(L+51v˫ju7kd(.?Cߋ =vH]j .6Hpo]6y5qQcoag߫\*Qj8TX KƮw SӒ@~x^Y қ~vmz6> `[z$Dx vBҫ!&6}"0M᠆A ɴɴ)pܯpPΆzT\Yͮ9heu])WYM>96y=.y7'~?P(Ⱬ&.UP7N|qE~5~@-}si|,RW%%nPP=]~@ ds*’*Wt'0^GlWf(s9긘`ύ~𼴑=.| vTRĴu9 PzTX KƮw SӒ@~/,nʚ_4 l}jٻ6;tH&E=JE=HkJ4ʖ-ͤ7ąsq.=sS`9lg\&[vXs8 DOMAdrf/(=f2c4A IDAT֝~'3d Q{ÊЯX%7y3$$3uZd|D-.:AzCtVtV^ h2>`TuoyMڡ9xKK}>Y~B{M?fݗ rs#Be`qonby%ǔ&gߗt´sÀ41bшbшRaMo{U4:<*wj0ܮ6N{ 4@˩ibi/vKr"<.Xd}q4d|D˫NPk*U*UGW#xFm[^ƶ6vhRgO`,O򙷄cqcRe%ܼ71>.UꊼЯpo* hz*驄2R2nlh69z.Q,! |b嵽/X, FGWVOὀ|(rp \F?P*%lxrI7'풉EM3Yrܮ6 (X*;M.W%IN@+/W6uw~ܮ6N{|(9Pc㦆珩SnNe :-% PKMGK]ckNJhjtD#8;b{kZC])EIv@Ba-.3"<ߴ7)NH:aZ] 4=TB\^tV\z7v4lrN=vO(EӨl_ oŲo@mt{eu+l $;K;a/V~͔uĢFFT,m&r kzݫ~Zgۺ;@cPnWB'd=/M`@;oRhby$)7Mȶ{$]0d=ɀ4?q4d|D˫NT5T:T:vOG4a3nqyUҮX*jjT_] d}>Ezi 4qꚉjݗ LoNLࠄMO4=P&W*U&7ލ&4Sݥ#E#] x*k{A/X,VFGWVO}] ^.05U'H_*[s&W&զs ڂ*wDRY״U}Ʃ^q v) v)KcqS'lʯr <|.VY& h(`@SMO%Jg卭TlrN9]Nvq3b}s[;{A/X,F%ǥ^y.]|?Y?[7K~͔&b=.9a?wl@CE#E#*6zK5]+3F4:oK'F4:<@xP0驀J[*j69z.'Hqdc%(_֝olkckK}]aY~^sģJ~hbyExioݝt´&.ھK@úz-גuRaMo{U^&zS,Q,QTv/֌w+3uebшFFR~~a/(;@cP^Y>Be<ĸBaLoL+4${4<^Щݝ_ɿT(`<&ۥ&#Z\^uO&fv9y~W-;lstW~,W``/(KcM kqញ]k7t_iKhqyUR%д T-?&kfRyW7o靟Y~B{0Wjݗ Lo JYamC<=a&~_\^uNU *wWL3xhDhDRFTX3ޥš\וE#P,1ssrqyMml=OFGWVOP|yY~,ZY*&wIϘrc#<.8{FsLCK8\UKÞA&W~~A^3]h2>U'HoJ&W&l ]6y#]m * y@W ɇ%<nWB'd=!AԅW_ 1Cxq]6 & Ev) {9@ '<Ex1%$3 .NxxNuW WRY˫ $ݝ6W,w>qp k2s]Wf;X4Bd|D-.:ARyP]m *<6461wz[bѴҎvBa=X7K;{FsL!ޣ4^*ϫΟݩ /qP94+3kU8+KF =MO4=P&W*uZ;׫#nB.y.Ezi xqꚉ%$DŽ c=kp⪃𒔟/BϼaY\^%D`HuHJr4x_sl&X*;k} 뱻+ۥP0Pgrᕄ S(,1Ax\6 & |Ugc>ܖ$e;fsU*:AvOG41h2KMGMݺ*nWB' #}nNE^WwL,͔Ɠ0 ]_S J7~/uoo[qiip @*%SUR%=nS(x \% /N& mߥ O:_,ٝWvS/:3^Ij^"};C{@]Zu/3sRaMo{UFF4:<OO]P&7nj`CݥB.Y~,gHg9X彿p7K461T*'5}Q*K7 x:AxI湿S,WGÞ0ɛ׸_^~' hKf7uvsQx/  x?||BCf IL$)_}yU>ܮ|&kNUU[;7yV>VBN[{tRRܮ60C74TBS T*mȿ~, { pϴNvwPXƔwɴ0UUﻒm߫bYK5cw㩄HWw:?t34j ʻMi69v 4LO]RտKigO-M]<;4$;KKH"<">.q_X?|g38|W%i7X*u]l3E#|g@ k9@`F?P*%$ǔuɴL$.+@v)tAHj{(plOT֭wh#dryeryI3ކ761njxĶ__Txz謁% W ة{j9w@kM1O(*j~M NK럭VڋS(,1Gx\29a^>^\4§NxrmkO\TRO7hG%~dvFܸIR;ڽ<߷4qoibi#<x.VY Fu~ks'^RL8ZGWVG%^]_ cF6&Yئ (m|GWuNKllrN9];7X4<hpcqc ?mw'$3& 0{&4JO6^\tC/iI_ q v9{ vv0@2pn]T&W&W*m.te溮\ש^ W|x:;{FִNvwPXƔÑ0q 0F;yC`{u_}&M6Wm~N ?1FL.Z*D ]m<*klb\JŢi%lxr)pVP~Yu2Y{+:i&*ݪ?is~/~§4 S W- {m 4 P&4|6Zs4y4d|DJh.[mTU*U*UGW+=쯌[~L\{L?xMBͧ:~/~ںxqfpT;>Y~ʶPajs<ñP'ڃް>]LLbbB˫N~Ydi69vO(y#<lGҋ&x48t; IDATp*?I?{s wa$I^Y+[#};CU^.& 4=TB\^\^ni 2s]=vw$ +=J`=S>% :#>^G\? nr:`{P0@cz-Yktcz,Q,'H[bNK5կ =5׻x~Ƅuɸ/q PCc4P/GNUU 4 8\RYnߩGr]ۥX*+7TXkp4x 06<I b/I:aRMV_`_M@j??w - {m 4 @+l׮Mʻu^EfKu~}s ol^U*U*զs>(v2ih/ +cGx\6 ppS v}^I`u8 pbnܬG&d|D-.*|gsMΩyc flbT> 0 (NxCpvJۥPHU +m|GWhP  hz*L.L.[ԭFגz-KcFT,VZB` IL)B:.[GGM&{?,ܮ6N<_x‡]]4 Pu^hZcшbш^2R2|Ky+3ueӇX4³ O`lb\fZY'l;Q(\cEx`u~`)R6w> >M@K:U~‡'`flmhjckF4T:[9]mhRY\^;G7K pJޘ|3>.Ujr{<:p8 l =65du7ٺ]HSvitx@ZܮZ*=JgJgvit&x.[{ pϴ}PXϔȦ48tF#& ýM@鱻T~,WR%VT7/mӺզH4d|DۚMԭ8R*:AvOG4:<@_mZYTDŽ|g<@ wk#x`kshl~?v)r,|glfݮ=xyK>MO%4=fsuJ]&4SݥsE#[{hecF%uGxlGj:- aMxnWB'l% WC`mer]b"nTB^^22RlK+K5]+3uWcÕ =tV9Qe~[J` L>חq[clˢ M:hB ;~& |(pRQkɺ]{txgX4X4 Nݝ_JF!#tIϘp}k $*x jTU=\`ݦP0@ mqyUkx:R['ZKpz\VKNV061wz[bѴ.|I5zòda&4KO%{%U[wKePɛuޖݠ ڏiDt{euT6q vI"X* (1=>]LLbbB˫NT5&4SGW'FF`?|$% <_ߛ(cQyKMKxq]m ޫ{ vv0!er;ڽP0驀uN\ו걻4vn@<  괴ٺi] <_&;{F# !8J]X(p?ME(إL.O#pnlX4X4_T:[Ra !4qoiZY'lBawL% :T{&Q#8U~Wm~>'q) 0t`T:\ݫF+[؋2>qSK}ЀզNf472Jgvs矆rN^IT:T:+Mc*}9L: kqi%Dxטmw'$0&pN^+ۥPKW'_\jd|&?#d|D-.*|gsMΩݫMGDοL+mwT( KVY !k?~T[?5/&⺘d6yn;7 Ek( hz*驄 {A;*w}ck ];7X4BаΚ*/1!<_{FN4vowt'Cou>[+׫H_^2Rl]H k2s]Wf+8qXHJguw~%jΡ4ql;Q(\cµAx;161T 4xLu 4{bk,A(JudM>Kp,\VK?*j~(ˍ84CgxT*M+-!|>.Vpo:Mެ۵O* Cf}h2>m&o|KX-w }GW#3J%?41TW^f4zAd}s[yLExKe}p~%&hr>MO%4=fsuJ]klrN9];7X4"ql;Q(}C jƸSCg*!AߨxWT&L._tG5P0__cjkڗ k2s]o/[J*Y}F<_}\j e=p4ڽGu^.Zyn?z$(hz2W+; _7> >tV2nI}PXτ 04W8hMy&u2lŕ^s}JgSkw{ 7)ۥX*+꣹ k-QwyM0=261nbx^cφ|nF e4hͯY0nܬ۵7d|Don;AVxN/wJgJg6P0x&ްNK럭V ]LLbbB˫Ju;A&4SGWc*-Tοۦu +-xfn?T St&N\w}sV@i޿vn;7 E  4=;?+ktx@nW[KԾגxCMTġ18 `φ܄qT&!ڏkzM u>[[K,Q,]T*U&W&oڗ k2s]Wf;}E#<\Ba-.3#< l &4qehj~'H_mZYlxr ?φ94Nm}RkoySY~/M8`JudMWJguv%^ h2>w@9Qe~[J#< ?%>.I5!^\57<By4d|Donk6ySnvʻJJhjte#=k`q*@xo6cX½a @{S,҄*mv:>MO%4=fsuJe7v4lrN=v (1 CgJ~hZYwh.TSl,!,ۺ[ClaE#E#L. kzݫ_?мT,VɌauZ *{ܮ}}xGu^ 5^Kڣ>Cq4:<KeY}4Ra%?4/it43J%?4,O{j ,B; HkRlݮ1h8KMGL.n֎ʻJJhjte}(&08t>^(gIV8S xq\`<gpT_/[, /.*|K7v4lrN^mT,V'auZ *M=ZkBV>qnQb&MO4=P&W&׭wT*_֎^K굤z.'Hq1 1q<'Zxl &:`Z4 ^$h.cHu ]d4X4___X42/teW7^tVRĠ {9g<6?iM3Uu<dخu7%<3JguEow4x_h@#:#ǣRhZilL2i)f4Gk~@aR6vrvF`7+A k^***:A9n 8CgJ~hZYǰ* &3vowt<[gc}h2>UYݺۡFRhjtDY~7?|&x?iM3Uu2lcxq\`<)jcMG4f7uv^[;^***Ϊݫӕ`Rl謩 ?whcDF5^&ڽGk~;Rͺ]T_/['d}J蝟dܮ}ckG9Wf79 OalbIJL<ݝttШNm}RkoW,[ޏuG n*MO4=P&W&׭wT*_֎\ו걻t~bDhD!QX4cBaL8N_X½a Au3 tRMJ$S =6,n8.UW-T]WkיݏFx pԧaby&π&<X]ņ)Ƨf$ M3O~n6Uur:Ҡŧf4 \[u+S_ @PNG_PPZ ?}JqouYx cK y9 cxWݦϵ27⥰m~{}UXEDx|VLU]-3 Eqǒˣ3X FL :Yzd`(PgG:;| 5 J,Y4/]N TZ1<~4o1 IDAT0 IzJ}:&Uljt|MیORy.lm *GU^nW_ [:qN:4U^(Q]W#˥d"anFXl:3A?Z:tT\R̬\rnA޼mUa SDoԕшi40@j_žH4 74|N4T_by1Dx}j45<@hD% 0%Oim7WR.c)HYu=v RuEZhG %UZ1?7[4ȝ`u5r\J&VVan0Dxa>+urQyݲYwi yEMKs@+QΎuvqS~]tYԜ>9=+O=ilׁXFu]$O1iځ cVaufo^6/FXM$S7|[K :r]~^>rHM-8uV_}U}~@PdE cUZ[>f<("div_6T`%.azT KhDWozTP2IY^+v(a Kp\T&L9=+O=Uy=r0ZZ[>f>,0B'vbpVe//<1ӑ*AhG:;|:WCjӑeONĩKy]}@Zp=RUW?i*EUm\OU,I͚swMۼ<Q;C l.lm`|*GU^:;^P(n*s& UVWCVO;./ ˨aF]ņF״$G#21'r9jTS}ɔBa뾠[#KeKAzXou5:Z|$F>IO[Oe{X tlb+yۜe`GOȝcT_Ie+`>>5hԜAr:t`8(`aXXȘaƯ}~?$5Z3E%r?Y`dm `rMK X>,>5k~̘oX<w^ZtWKW~n-Lӯoo~_iw3V얏%<@2/pvK0Xڮz,S@z(Q^>rHMr:lYW_zU_\UbJFNI rlk&a`UdJ/]6iUy=:r]CA ¶-8uV'N]*G.`M*Vq+u0 bw{wRMr:lY{﹠ xZKOZ-?RnRgj8K` -ߎߞ\ѿoWaJYXPȼNGU:r]~^>rV[:qꬾҫX}#UZ[vO|M8@@&ݞTjn~ETάM `1n٬;w״荛z\$Æz.QQg  ~шFơ{t}%yGZ<.CMjT"R_ #KeK @jh`J]z0 bvO;WoRgj G Zfof0]ņF״͉XB_ hZer9 2r:Ҡŧfӳ{25@P}sU]PhG 祅5yLd,2 3K_eܼ.]ȵYR*6L\ RmXb,rkUU7Kj_~f`krXTjIӖy("J}*+ `+{cO \3J/ k{t316qj{dy9tWim7W`iE; QBa ºxm'NՉSgؾn#=pɳL.[[b[b;vOVY3E%r?D Ͽ?ӏs`hDӳwY>97wCtEwJrlֳŅ:xִ0gz.s6`֝bSPlۏA"K}T_B`U^9ܮ@p)LoctAzj?\5;a(leƭnsV&֢b`hDӳG-R[z>68V;G&jflTa`@F M:Maw^ZtWKW~n-Lӯoo~_'Nu)>TZKOF>lv}mssrn^#3Vrn^e?nUY,_l1*֯ϵ21vçckjӑeONӯ@`u5V1?7[5Wr7 TjݲUxS6[VLY^BP^k`hD6/#טu8e=gu7;?ٻ 2  @c.>5cjxrӱ_?|/T_)#}_y] O8\O[fn5im7FIOZ?E%r?6ڴu5ڕ>wr!K@5kx5})c[su,}{ab C%uk@hD=[TRV2ЫkBx^7nrxɔUtSQg  ~шF>0'믺FVO;v?;-ve~Rݞ$<ȹެQ@z;)e]DFu5:sU[Qzk|Uln|j<Hk ]D% 2l0ӡJ5W.miKeKazs?Un'VV]y()*q\*.)MUAv?Sہ6X'YwC?;Z5WXN,l٬;w״荛|!V"ҹn[dH3.Cm- jkiP|jf)H?9=k'Ss *?7[ VR pg,6~sgVLu] glp[oOZ/ӳwu̯5ݲYm52VuQB#٢BUOmFx I5 +3l6@sתv_7n/Ka['g闿_:ڠ*GZ-IfanTnl[%Ŝm$sBpls isx?Jͫݐz iߞ5ym-7ی-6`/E; Q£AJ,٥ NcTCxO^ pK,6~Ǫs)I0`L ѭWnI*Wb6[^mEiFᑈ^;K}k%Y6NwvS}%A19ܮS?yU/9d]҉Sg՗^=@PdE<Ɗj}kZX-gdWqSÑI4>?6}{a 4{5pJ e]<-喝TƴgB߮Ǩ<C"R_ hZm-d$QףD2Px<*GMH0Ek$Ex>v;@qfmҡ[ڱ_fOͫݐz iߞ5y3n4yqSE; 8D2%ӱsKwpxPS}+P(m6/靎,UWR%, VY^ ZKV/ˆ p2pq߾'I =ݻлc{ŏqdm$v`R =[TJ5~{rlv}*6tΫwCݏᑈG"2嫹ΫڊRK͑S[K$S:m^xV&y9jkiP[KS3\KaMNZԜAVuBEz>+TX-Eoܔ_/]6*LN/Ovu`rXVV$gxl,2Ľ{^S"qOc<S2H8=TxwfmYƻG_yJ{+=[T/|Of$K3L#,OzUewPAzԴ !7ی-?Po۴9VhGnב 5 &H=vK'NՉSgخ zr:X$S[UTRhdJj#+Ηb8].sv&411O2Q뼪(͈לykWC^_*v+wvC\ܯHܼYCy-.ȐF;Ul@@hD3Zs5:mNLΰ ٚLAJ `MTy=zR~(E߯nc`EV Ͽ`չdx0 -Uu `íL IDAT-㿛P|bB'gNֹ󃪭(Usc~ݳͭȊ`ܙiUAFac,6ʪԙUKKh,Q^BHD%\8~ܕwP =%:\PeHݖL~]^۾=HZ[?S{l.~tݣoZ;Z5W}y=u-qSE; X`]G#21m#Km- 2T.Cm- jkiP|jf)HonL7gRr)HX[>IXmgZ*p|"-Tjn^ FoO뼫nUgksfmҾ=%+w3 #vFA[wZ٢BU4-_Y0Y`{.r9 2`ݸrkUU7⥰-Ѐ#m97b pF}g]jt\T^96kݲYwv#]MUy=,znS3 MkT@i(P(.+cp4W]Wc|anXSVȘfq =%޼@yV\uy}`r7`s~;ЈB#zP^= }=5  ^gwɺ=_"R_ hZm-T@ZjTS}ɔBa뾠16V[[>O{V.&411&hR0nߞ5y-.I6G"+zZW8mjkTO#u:jFu5:-\UmE醜L`={.v(`it,S3 s MTϖʚ7Zm,7}J@IKh,!oc# DdlWsB0lv?={w]3&@& I^|^J~,~Gnȝkz荛ɔuAdw^ZҠ荛 uRXӳeQ`ÕZxi(_JVyJ,if1P4ѽ{ EEH$1@X=guj+J\5lfalK_s+|ڴ0u 3kتy;<[Tzk,y2NGF@PԜ)mf˳EXE; Q£A˦wu_*G֝E>I?Jgϧ1*Ƹ$I_~pcڦ;ia݃BMUy=L&ihv M:9óD%:r]CBa-8uV'NU׳˕a{~ﲕ(i=9Ad S:U~]MS527ی-&/)mfAXbxㅥ }&o[ZXuV [eQ(IXdL{6DƮ-y,2d"a D4<-_u^V>vMJ ?N;c8L< ͙I^lk~`|ܼz Кo]ņF5OL0qTfV?<\N+T_ԌBau=f Az#Kejgw k.=iba+tJ ⿛Ą⿛P|bp<2VNֹ󃪭(UsWUmk  rl+}f Lfo/FLp: lŝ4(>5#]6./$S_ @P٪XH_5S\R,e,[$i8)Ax}8??w|"rܕwP =%:\\Bm=uy>`s\>b%@ 't;j󪮢tfGof`MkJ`[uvSM*|'g闿_;:RU^y9, <R|~dX)<'VHQI\O8sĽ"%%Dt^BkܼB#hߞ5yXcmW=ypfm߿}I~}{.?Rs;ZV.zaJrŧf `CY۟ѕшiSu?*QΎuv4 k(KmĩilUy=lZx29mK gU]WY@ƻ ' E#c  # DdlWsWM -v{Ҵ$,gmj;P#sGU^}j.TO M `Mw˽^xPk^?z㦪76315cY+, #Ty=zR~(E߯nJV|d;ToX`=$)|etwŧfn𷚟3?ۓ:y[T^9$S pF#=i'}S.CMjTM{f8.^/~5yUWQw6#<E T|jv_ 'xD2P?1{|iϺT]Q>**)ZFIdz'ϧe&2O;4;37o)JifzF/B8n].C;tȳI~h:;^z~O߹+οs{JtCqdC/>}瘜nuvuE; tp}- uB߂<57/QmE#4> )3K: 4A :}!YdjN}A9Y:aCAюSjyanTnUEpF|Eou?p8hGR.CVZq\ %57ЈB#ڷDu^*6XE56`Nw`mƶ|}᳍<~Uyp˱Ե¢g UWQڊ} RqLP'#^k"ҹ E_+ Y GoT_ ¶ {W~nRysTn[b; +ToځWTsּˑ;/gXhx4" =# DdlW;WWI-c[#N,Ϋ\?coG#9VX$Fu5:sU[QzYLMM*5vgG\юuvçPXC.^w[;tWvۗfP]Wcn5Jӌgykr"#_5td邇ﷻK]ԌNwdۓݞ\7WS5`=ozwY=~Z/9kv_R5Lw]{Tw+Ly,y&̬:$U^9ܮ@p)LoctY8uvi6[{*j(i1 VqI1g  XpNRr92.(ёxA Zv[nfl~Y¶YֵBUm-  ֯-q0@hD˿kve-VH4 +>5tMAhje}FJux@PWFq7 4W.`?eZ1<2:5Z⻘ RuEZs>[Ϭԥr(dzF+2D\C M=$g^bb0Q!zc[~)v;΁ u?ܼiϑLzȡ?ֳD%O,ݹ&cds.I!jaW$S,XLR  -96ЋL}PX jkY]Qw^:;|jj([ŗ.]__~nZyM{[l 4R@)<(<wӳӯv_* =EZFVOm `\-s!y9:r]/,UB0''<}{J4<1yUc)mãխ+[_Mn=υ[+R|jk)7i [ݎO٢ctY8uVKt~!Hw~a|ae~+7ZiUrvq:TtxZ|ю HD#\UmE麿c[ɹy96Y~9z)kت׎ra|5p޸ɗ[ ^[cS3?MQy,twCx3*p Tݞ3:w~Pju8=v+׋6*6tΫwC>ωSg]i.Cm- jkiP(s=*YY-/VVr:6䵦s3K(X@s,}β鮷?hԜAVuBEzs,9o.5 %3dߩ`7V\kܕwP =%:\ͦ>bcŕc'm;\c1nO7ԕUաLM,`Eo\c 4zͻ+X_g KAL~fn>H/ʽխE6JʴMx> sf˝y9re˝sW6.ĺ.gwS3:ՓNb'uLΝTmErfmzvWS~Med5f7}뺙rq]M{f|??5Wr ̪>+̻O~n61lt,}ޒH4 g݂Wbqul)L)߫VRϯ`[BQI\O8#*8Y*zp<2;/GG{.߼/!=Dk,ܖ@cUnyЋ M{YVgo?#Q`IJtGz&0荕vXn£Uǿn^UAR>?sYdjN}A9Y:ax= )ʬ87ʪPuUy=|r:kUU}`W:Ik 4Ј)Qswavcq`#ƶ|l~[a!o]/,Zv}='<1-tdq>4(zA]M/Os$X_uz?R pK,6~'^t&VoցPijшkFdJ'ш=4 gtG"ؖ:j+JWxc[Ycb,$:~s嚮FM}yױ_HyOϺtu gVkA+#A{[]VrHڷT__nOn}A%Tlxy96Ԝ?V G^}--n_{EGVM7 stb\GDoԕшiSu,Wף#u'#TئctY}WGOZp@X/7ܘi/F{8 c ՗^%Dpv{ZsWA}/ٻm+~ܼb'Y<`3ٛY?X:n Vɫ:r];햹_P%- cħfWtYtAZߴ+ VGg?nW= 7wKHge7ܧ3FNIO[GyX }A5Wcx.CVZ\]5@hDjjte*xl5 DL}7c"ӑvcT_JG#KęhDWF#zW:Rm- i9HR"Zcy ykacq9Kħf4 ?,I5WvK IDAT`x0 bw2gZF+ z6aEMkMHD{M \?*TqFc,C/>/G&S#=]#O}[m-tdeNNtW^qH;ybSڮz(֔;/Gm- _e=x9A=~\OTTRln5fҋʹ>+2` B"wmw?ٸ&/!J 4%.6h)ԙv@QWNPI8?qYg-M;]Qm-^C2s=!C yCز$8׌Lss<}_waP\֒.$gbX_}Cے ;nAB٫ۙK*κ܋54KܱɄ/̒s75V|2a\^7 :+=?-n&x.`6,}L;KZ`ZF(Gκ t ŭ|7_ U?#q[+5:}JZXݯ'5|;?fbfiYs/5RaÏ^ӧ~h|1>`[`q|v#C#mnj`HSqlV;!˵aI-ۨ:%Еw<6,a) ( hl2˱q]O/xz}mr!;i=QBǸF`[6n+)\/CC?_ zO|YfyUL$L42㏵*YWÅv d[&[hȪG,X寳ݧvN tr+7+ p]=7>0>d=l^b% G'DPOWs)E?{oҋKR;}k%򷕾Q._Xid僝[m¢~t=YWL[Zɚ~?6dB-^ݖ.Nz&Ak-[GiEeW55ԕ I pܸ!YkV:6IaG V#,uWw ҧoe,}nk⎆E`+Zɮi9YE>q[[KeSIM[6SnS0Nr|\s)ٹfRV:}(C#1>8a.P^u5a2˫LD” VZy|X-<X iTkt\,1M=YWN S4>n/oXV`@@|!gmKsaӆTZNJV:;V#:l_&92V 49j  4ps3Hog1 y=L-z!6ˎ)<2gQr.H̴!z8c ]~YPC3̫+nN<ZaRVFmd*j֏^з9nl2^)P4>h|B>y r*11|_g3D܈i]BW&?POW'ա%R5541vߎ{w_+.N:ܧ%kZ~D餒s)KvR׮syKk,nwL}m5 z!6N%ah%r=a  z.O#C{2aXMnjԉF*9*go]wqri|UK.מt[弓f^~[mztv}E@VkZήmVoV u܈^zTEW*Uk/->601]O/pX#19ԡ^wE嬫Vu_ϰ*m060lj&k?9Z-n+,˵g/Y74{.[҃歷Sz\_'c-4 P B*4H.3a=3CAf5z?JVH\H\=]U{(fU 5t@Pqcx=LXGv˹۩^kϾtrr<JpO&K[K.xEGe T)εk<\VkZ`h|嬋u5  Lhd4fXTH>~MMsrZd;SI~i"N,rlm]|h,鰤-ם#+UBǨH-k~aQɹw53{7M_͵|7OG=;jHe$}kIFzVj9mo-@( #1uYCi8aqd4#:* 0F?x~ޓ UXrܸ W_[p$n{vEQms緉 џxIc \JաPO ,9M/,jZbk9ooGGlW]: 'ePJ/./o@0\~C?G>GUE20$‘.cW~JH\ӏ>jP(*IWcPs)ߗ8FClVeΕmx󰤽tl@n`H_HT!Ʉ&qO2˫ak pƧ{z;%חuv=X%+;\+ӷ2 IX‘XUκ* hj:ј'cG} L@ 44Rxשׂ?F><x#ϻL|drV9.מΕsV,g[6X($D+X5ܻKijU[K.xEGe s-y򷵒P5d״ Ƹ ݦtu(9R4>kXuZ}n~P!|~Y^5Y](觓660VJ?;MMkcyYP+!zbX>k"b2+)z i}Q>/;욖}/o@]9Kϝ!QfyUH\Wߜ1¥_ј?Jp$n6:}72jloC,?,hG7nj{ԣO+.Cr= ÔK>ZE>qFVY_]vM $w$~sWC=#:1d<1M&t96oG@W'Xz.oT@.|Z=]44Y.k|\w_'<454;B4_n*:TfyUɹU+[o)\OZh;moeJvM+@0b(&g]=ML,M4R4>Va߭^7ti2;^V}m`zaEZT\^cn44j4[u2̹)wAgO>eWuӏV:;V#:f5**C>0WU@;AP|ZٌUK.מt[cZyJC G?B!2o-,Z)WЫ?" G5-g?, AR_ߠ`zrh&wSvf ~_}S^4JVHL'Ϩԉcue"auOW) kaj5nlq@Ś_Ʉ89@k+%$X; ;]L Z ˧4wMooGGlW]4 $&εB>}+\VkZ`mUr-Z`wSc1 Pvcg]t%COOk86M&te2a SIMM'U_[tupxFmgVCP&|HzJTԩC':;ַԨN S4>+ ӯ TG⛓~-Plg΍>ޢ@yq{5fry8A9T9VoR',R~j:W" :f[n= _[X$,WЫ?" ߱w߹V§oe*7nH05JeP$U+nɧ tRSIuP0P0ɄL&,1Lhl2}jXyJPɢqC_VSu Rx^*T=Td N9v9udB#1ӄV:;ho3,?󔮧im>^~[mztv}ICmw%Vok%kZɮi5RF\ »䬫t97;yjɹf쮧uv8W"!zj*boih2z!=5%:R 7j1,ҵnivJo:dxEdsVkZ~X*򿘿ApشFκ;Ur75@[hh0O@a7tf8}&>G>G_c ]zC.p$p$}PO# }n*"@j4[cxV9ۭї;3?4s~_vӷt'1]~ =XvW9- $}|~6V_[-g}vmr75H|ſh96}/lvfRѷF`@``3Doɗ-^i0+VU,h|m ʔrv*~*Tv ϻ\{[p3#D_>~~9G220uY`M+o՟N[o+}+\VkZ` k)[ mrU *S>GCP-|ɹffRKid4#:ndL P_dXgQX)+] $)}kP57n+}k k)5κ?TW} f1̙sa=g3;'f42㏵*[d=ߜtU;s5ݧ^78+G]ux(*Akag>K IDAT_,Z4j<\V?ό۞f ї [wu5r+*%c ]30j9k/T/T.XM}?6|;C:1|?5hRZ qp?ِVlzCS[Ͽj1*ȿ?5o_!q:}rؑʨQڬrvݞfPaR`+N/Tr.ITxۨbH/G=]Pr.Y!nj$ [*75*S u2 tR'V/Эo>|Zp^r ~ З@7*RfyUcn? ?fX}aIÎ;ҟP(}fyUɹU z=A|^|^2˫ G }0@K1\ »䬫6w*G(ؖUuΜKϝ"l>u,5vXZKȡn{p{ 7t%\OxTp$nvLȂ/Mu*aphh0YL!Ʉ&27kռy[2ZO S4>+ -d9=ja9WQ]pr0o~EC_hC!܄cɄ.M?v7OWC͋vU;sfI); !>y_ia4=]`XZK1Z[o g3FtTiCfytdi%amU:rCn~@z.$F* ^=]460V^7 `bM [Q >Cn{oZ y^T#׳r eoAMʼn1κ9jWH;COS?07 ᰾= n{DBK+YSS.h|B:}w fƉnκٗ:H#VF &k;`C:,);P5%Z pgp@CPޠJA8W}m5emQ ft~C35dPEL(P(dBW .]NjA}n*ܣ2Ry,#1C)Vs`,]%<*g!/9j(9H$F[bA_MP ظilJZ Šoա/T4>a>5Jd3DOKV48빼. ɧihhUg3V9NxxsJ 0zVyo|ŪTkY \r.h|0%x6κ?Մ {Ja njJ6c7L}L‘‘؈1*_y ` 4:}t Pq_d?X{Jy\{o>C6Pn\FwS>zGP{-eWu`pشwmAݦO /Ĭ^ZYq%Ʉ&jجFV+xFg~+Н z!I"avFFc\ɦ>7Ekw; 24YtPkT*K~~+XLjq[R"D_9*~uM ySbZMZas1njn~G(7N7t\X/=w{ףPп9~0J6‘‘z:?d75|4R9DpT\w}v[BAV#ew8[_!˵aIr6J(&QBXCYM6>5pشf3 שׂ^Eqmɧ\O/*"8j,9 TUёh=+^nR*Ιs#~~_MUgs;]yj#Bn{oZn{j-XXf+r9NxmV9nUۇ}yVW !yC w嬫`H')ו]&HRk1njn۬ ;) I+)gIx'-dաP:Sp75h}ӔCx~'UPuT\^#1C1 `a$bCjNm[1^Cףz86M&t96nxs5ᰩBFκ9ULD`'[(c:1J欫щB'Lhl2G}nu8V[W`r8HI-^Xv4?Nx~:&;)Unz6Qtr.h|\SIKW}m5e] Ǘ\KԨt%COPaYr0;\J tʎFq\ _uN*Jaո C18p8.ܞfͧY*3XJfRn̹)gh|\W&/XZKZ Z j=i?\ Tt;\T3aC?1@XxNn|'+ϷYSRyPNBz݊ ߧj~ufPʁFC!8h|\kۺ-@|s1שׂ)Su`HދŖV:;ַ;AM&t96nr M&46Pף>7(C!ut= 8/ITdqE5mU 44@hx4W-s<.מvb;?l;U (;=jPW=y y u(PyMHLӖ\MaxݶYe%xPκKngj:$!b|ڜNr|l1P_[uq>~?A}m5 1 +&鵝0緤CPayXEO+'߿SK?fkOnA/cUw+9t97s/{wU ufWuV_۪tPz<,cHJ+r<`Cڱ9y:$BTjQ7ayjJd%翘׻Ӓ\i (C!=}r COTκ tb&Jǔo(P4>vz݌LVc=7|E*@?TVx󰤽V9{͞fHiv>[ˣ}L_'׏^0t;SIET}DɄL&4;2qMM'55T}m#P;!DjzP=V ܩ TyT;r>+`:}OW‘&N3)Tu "/&:^Du}(wT$92^1Y5Ì^B_HTɄ&P(藳 Y^Uf9\^ 7%I3ֳ;TKy=r75rtuC 7OX"t~=a Q_[=]?|J2$*Ne]=KkfYHhɿ2;BC ,X!(IJν+I_X/syeV-}?s.;IĖq75n#M&t96\~ǔo(+oNy)[Fcl2ahU} IrX)<p'6-SupnD9jt?֏^Pf9k}'te"@z݄_Fo^_^z^Ӌ>E#1N4! ( l~HH1Hx0-*z.Qc~#{.H^oktk۹͝`>F_?oQd?4~*I^dWY׊U䍬VN‘:}`R\j3|nvs)Υ42ӑCCg V3-n׶sT Zp*ΡίPהKňQa=R!ɹw%I3@{7oHE?˫,Zˊ N i YWP0P0ɄFFcfKU[)V|TKNo)NV;Ъfr8ke`>CܳB ~CUeW¢^ OV=Őyr.h|\SI\Js)tPL>__30TL!ýcආ]=r +J!+ Ϩj=MIL{7 ąᙿѹOŎ+eWD qU_κN6S~~T዗ ^!5VӖNxkݕxXKϝdB#1-dMK+Ykd4FHɹw%I e.Ҫi~+U.a}{);YWAMM'Mupjl2ɄZd0/s[ooҰ"LM' ]nR(-t$宵)MOWz:`" 7(V/TyUyӬ*Njj:I;am/$R lٹfRV_[=]=?J-̪/а" 1SY ? = D@y(sbH>k @Bwg΍܋yz(p$o(01-du%c rp&7}W}m5U|ZٌUV9K`B Oν+I_X/syͿwATl\~C?<{A? ᬫ`H'il2˱q3ZLhl2vzy)fkd4f6=V };7mykO:\y<+O>O_^UfiRٹqi ݦ^zݚNr|cLM'55T}mc3`iHB-^:}44>Պ\{7oǶe\u|F=]l)ظi*.du?03,*-]z.k*VZ4k6FFclYWC,uSfyUH\Wߜ1JIv[PkL"h|m pO-Yjt};6Dxqm w.D?;"DT빼oJfJU߻i(Q_[O{Еr gQ֜u5 1E20 El=3aC?CFjUșGcCp8BJ 77YZ5};x@M'^6|, hx! hl2+ K15tR?POW'e(92nR(觡p_|ZٌUvm< D('@2˫zyUy]O/@0D׳y=2|9p$v`*=]MELV:;+!g] 'aM N`c `}sX)I_١<ƲJ~p!4(S0|ZMILrÜ>򿅂^uu+ΥX=] T mT^f%ޕ$/,ꗹ߻i Y,-^3vN>ҷcC=p$P0ɀB&*!c M&հY}syë3!^[x׌|d7Wa@kl2a}/]֙_Fo^_^zAITJw.njT(W87t_‘|T镪'Rq^ᰆ_/Э^7 Ѹ#x=Lk=xjDx5{x Nqhh0#D֓Y^Uf9[\^׊UgR4LZ575ݯv=w`@WL>A̹)B#ףPпY쫏 G GPMl0@fybi|Ug[﷓YoL=z.b>9$iV%BX_x9 VV Gb:1R`@``3DoJJ-^N,gi`F;}b}۱ Y!z(/R~fP2KZZ!Dk)l.u5YWxDlo-,2OΥ6f7;\J#19ԡ^7G1I IDAT/JF:1pgV:oF ϻ\{[8w;(h CA?!ePfyUU򺶰%\ r8l] ;6 U)DfU3s/fly=y= ue"aP +Gա^1 | +`eӖNxmlG6kRC#ᡲu96@7!zۮߔ$C] |Je IyU`Hދ}s COс`{AMM'52j)I-^lq>|.jUMC`K4[/ۼO,7s`>G?s)Ss B ,~&ޕ$/,ꗹ2K-ſF969-YYWOGg/餦nQvz:ա\J?ٹfRV_[=]cTL!kdتro-sS3V96I#7@@y̅=J0pS빍߼2Yi >Wvlu5rثnjvlgx̹)GGeWDЕJV/^hL?֪Pu #7H}mz:hhl)V 6zC!z܏"̥>6lUA7 Y^Uf9\~O^[(E|wS_[-g}vmr75am}^&>CC 8κ* hj:јWl746dB-^ݬ.TŢn5N7t'Z(>7`hxڳOҗr6 Ĭ(9 #tgV+ ohj:FK)RJfK4}[n{o!Z »&mݦOGg/ٹqitTաMM'u9>nIls)ΥT_[@z:nL47yQ|TK>m)tl5R̽For&|Zz1D?5+T,L$<@(JE27,䴴Տ^PN 9T!ibNUKE_s1שׂF{fxݧ^!Engd4vu54:*l)p$oΘ~JV/^hLGu͵Ҋh]-{BRW|z.d`1dm 0Պ\{7^3ʉpg/VS M&423Mui%a*:D_ $ݬӕJEJArVFj䬫.V/⩎U~B4t,og.N$g]C:1pLc ]~r\.h|BDqbN7?/L[}ӛ\:}) _d1Qi4[$fԇSy޽ POW!2k~afrF,$iTE"T6Jwm݉ߟ{{Hj{#%˭(@д5 q_ȡ7ᄌ"/̺h33μd&w[_lE].[kSIwZ"Ģ1jJF,݊'}!ZQP<02u~:<y[KvI"kq9zyP߽mMM47mrNij:cu<" ڱfὠ#Kytp= T]V̅?m= #D_~ۭ=#h`;ús:;U2.Fh{̬[1;m I.CwV640F>ySW__0,rQɗ7X؊BRB;FB?zHe Vl^O X^kq\5ax^.g afHxwl;dsy&u"ic_cfZB2}^'0< =q}pcӖp ޹g| ȿisο_\EnZ|s ۴{=UTMCŔoY6!GaC-FKJ0Z?_̘aj:ExČ3B $X< u:m9.I _ (bo^?}xtB~ ӡH8H8ɤO&mq26dRu.g`M o?(+Y,|L#=8J\^⦾ƥ? f_<1c/fRv+ĸF ?Y\wo`8tV03io3`){5Ą&_'˺5Gb3K G!zQi_ֹU3lfx6mz9\lzO!lm4wp7/Y8m ;ko>.ˡ@|x[tRD/j%% `Muo!?3Ea?rȬk41ak\* qպi(*"3Lx~hMGעlnKo$y -y<w?6uF ۙ8=5.ϭn E5|/g53It}z\e=axXAzP*ٴ/NG"  <}J3vYVlfx]FC0_61eA\^u>( AxoK\N<m ا)gygXwn\'RSS$,[b{{5s>=HxmUlJx+vy/y;Cm8#m55FäYv|\.Czyu;5_yMn.[CQk 8Pw""&Ehtжg>;~~Ub'AzF^g1Hs37@d𼚛O..~5y.OxЕKEAEc BUy# $I)onʡX< u:m9.I ۷ -vlr~qCS_TJ2Oͦ5/,[٣ٴͦ5|/g50|jq?9r:qGSv[VIOJPߡfOap9VKKhFso͓N.:x<:4JygX}}0ASSfm]qݟHZp醢F: +cq·V|XYD|ĸR~ly}mOeu^I-(%es[y̦ N@NfmC+kl?rj+4{rGʥ._7s-7_gxx!H8锆ŵt3\ϴp1{ӳ oK;"Hsh,ak C 4NV3JwhlyjM@Efuǣٴ>+R>M3(cu4ԫ鐷7Bۭn ٳKlZ t.ԧn{g%}= Pt> ަ_.jB ϟ˨{^"<̓F²6syB(p:j=, %`]O36 ߋ+1P};[|:c,tCX?tGj7wϗ,~*AzGj6ɤq«iAd׀C?0c%77x.#8^ m[XV6דe@UzH{j6㮓]U )S[s-ݼo_c2uRD/ɤFo\[/p|XG=rqfeI)快<+`-f_<)2hoe"`fmC+k4*r9æW~ۿ;/,k~aY~!@p9zyP߽m^&95uv+eqtJS)ttR&z jmZ%=) ue6ڐvt{IN-%IgSfsy38ۣٴ{[~vl.)*K:XB=]{f%0 CvQ|C\M&Mڲ:%tJouC?v,k|z.OJL%m!) (U§f/fV׫,h6>M3SGa4EoK\N<=7և~ͦh6{q l.s杨봔GוK]&s0o]NG1r(tB.^k~a =Az,c4aOñ]G5_׋3*W=է׸`1F;[K@3/eii$ 50n^w}{e(Y\!Fw}1 q8mF%cn E5QLB}qc#O35,.+0TӡdR'Tcu4l?LkOH*SlnKD^l.qV qGW^c6MWvYR/ЌvmKد#H̦:$&h+r\S)4v6:d<%4׹P{`>oK"ᠢ3POWgMo{5Ą& `2ZIsX3aK ҏ&&ә+H H@eǦx[k~aIŲ(Φ<5Rj6͵ |JGvYz% 778m T'{ϑMZ,ݖ(\d3kc'ccۓZ7{QLzGc v+l$if6mz;L T(oK\W5$v>Uw3]啺y.M<Nh0;Tei)20Qhlw.gt4f `W/E[7L >w?֕KP.CpHpHcIݟLr-R-~9[h$<%es[J>V6²ټ,.3801=T-Ru4@1cd4O}?5x>dz[ @VoRbaQvn9o#H@LMxؤ%,$pS3vYeh^>Şl.%e6ϗ%ʧ+@$oc@- M垭? ۣٴͦpNCf,j اe|ΰܸ^UՀ>>EAM&5|Gx@VR!YIg5"H =*\H>$м9U[ki-J.H<e֕Y(8n4Z t: Sێ0\NA]*~n E5|/g5# XЏ~fj-ҭ~t5^pHpg21;cIms"H7Po7ٓiko/e)i{?({^"< ;3 u>`p` #Y0U5aC0y2x!OVn(Kh$>s>BŸ]<_יNil2lEv[t1 HT<7韝O&&4 H5@yx}*l-Jon>jdqpE~] 5R$DyHNCu?iIw=!?'<@N-Ƿ텯NPJ[V$1#652u>)XXSS$,skNG'vwc|aAz2fM6{y f%'KR6Ϸe]5n*6h̦HS!B hw;=3@3=gi-ՂJ> !7nҘ_Xf.Gi0 0Gۭ1gj:eȣٴ{[ 4x>~n)i xF S_g^\`ߧںF?~J*>*=I" o#H8ݳ%?_ߪXq,Hx[2<6K1P [XV6דeji>bV{! i{I ƒv4|/nX}[CQ ߋk|H=]WD!=4ej\.wzk 8`Cw.^+ij:{ijw9^ +x`Qmm:%˩6e\$Tj 0SߧZ4}m?ҳIcꔚM.pf蝎 i G .C?~L}'ˊ⊄ [ݚNi$1nY^S8AgXRccILΌ3:`mF[jA =6{ X\fm]bqN7QYPBh huf<`l;>mnF: y@ޖ&EAEc S_'K+Ppkfm]> IDATo4~:K}O9*콆 =Azυ@<y^UxR-wC/+F6pS?_sJؿQl.eeV׫fwr,v6k%_Ѵ)8 u;UouCOM}cuzk|FU&տ_w@ SA]wΐ,Ge3ܹq|'3s)(3rGȻœ.TvӼ@%0.nȯk~aY+1劄CCLdPnkq @ Pa;ٮG%z^8 3ty{iuZKC盛Oبu2q1h!7fpP#qӖ}.ا"&&m\~V$0@Oٴwuuf5ޖ&] j41IkFcbP7gT =pK{k8V'OCe87wu^l< )EiFrE+++.ˡB01o?t[P چ b_F&· ߋ[6Dh6VWlP:.CW/>4uSMk Ǡx.#ĚMVdqY(s> xc"Vn胻냻Ξ&H[cIL uB<"pS3vY*ᗨ^A&-\:̗+ʬh񜲛K)2@(9FޓM$ԒdM \85yLM4 G&cu<PB=]tL ߋ'OOpFov\~KXBXBuB2Az%Qm^,GyNOJK؂y`.{fVV\)6gV2 LQv}ŋښؾy"i}ߧw|]uEc M&-9O7%4׹P{<tA]h6޿T7#*!j̬Cuo#HT>񰚝$Y>:lUx (Exe;d2_heY(~v| S85lRmyq(%= &dR)>lXוKEA&u¼L{  l4<Ąݏmib*)nc9 3遣Y[Wfmup<*p|^<60\.;ц盛Oe$=e.]PY?N+j>= r:q0\ŞM[vnxx!H8ĸF M&56,XpXpH3Iy'߾ƀ(1tJZ}a2g:> +u;Yں28ZpX/apV/_j.Vv3tZ+_n7ϥf S$-M&ye>>4:464ffkxr9CCLZ:3t6q{:O sS߷jj6ĸ- cu:So73{O"HOmJYwjh@I].O'ÆOeה(VVV4xNf~Pz8 iW^w]"pPp {q2iڲυLݍdR#qNh6Vñ: q#oK"ᠢ%F; } }ʬk41IΨ・k^\^" S"?Ch~aIVk^ 5O`?˃yJ\da/e 3=fVʬ(ap`r_b xu,7M^<’i7B u87掙VnPT4{ ӔzkJ|PuF6:} , 3aa% Ep|5|LɄ㭋yg{jÿW_O|e4z4ž*|:/WM StB6~_1 C;%  o,[W.E*f]F[>|ۭ9Q;7Ӝ 1cIǵt6@ˬo'z\cA_w*u.EP̔lٴ{۴_!<(\+2߹g| gk]V/Z77xQ-Nu d/Wsf75&p)yO6}Q<%򵟙$TdXhH|`8D y7޺aC2=]k 8Ni$1n0]ñ: +bo]R6²|'/Rcus: (uduY\w/uOeRK=fVfO180 \_DW3iEZ252-\Ul8t[LZ:D|\B}6#F8Vt{X$Gi:3y^j}E'ÄOe\:3=Tv3tZY?N+J)Zr|]1% %;N4fAX-BV %,%43hCFǒFP+PAҚ_XR6U';ǒ̽-yFA ϿhAh%vYͥ|ʊ)r,}㮗]_Vqי:!Z[uRD/ĸF|%hbB v+>Po{qtؿT oK\(jl2ic5XBXfj:T8 /,k3KJ"G%uflu-`7{= v >CI̯*j>={/WW?q ReV.Ah,aڲυռr: 4hb\'mLjl2OR/<6uts(w|PqpHpC uqͥ 4lE~AKaF8]/Xd|T"Z`6WNsÄ#id T*|:/WM St[~+պjom?G^@Uj8VW_6g`l.oj]o!z#x6|/nٴ{[~Z[;s9zyP߽m Ӧ2mt1|nufOӕKi!HL5p|j$if E8vC<ʡSvZ 77x.#y h41aDc th@POpFo[Cq!HUa%r9VĕL8vE<r)b]O_^<`.]PY?N+j>=/(r9kԚpӓyH Fgj,Bj6x1`5O7tk({q=ӭ`7–"f~6=duNT}PF~~ue6 _ ǣ{G<ʭMS]V ?til4c*|:ͬYYQf%w”;/,5U hOi}L]Rinz7SOWA.uBXpHq-g+L+`7a pH>M]gS7mRML(o0vN6X_O+nvT@y:r46iuZC4<_UYͥ|ʊ)r,s:j=٤4w F]O~q[h?`nv+5p,nro֝׹ s/i%6 \NGad ruG_ÈNu\z;$if5cp`cu4ԫk4oMx[%nDU!# `=0BgcIݟLZv&Gk 4x>m>3POW'il!7_Wfm]XB>ur-GW^ۂ#qׁ"X8 m>[/k=;<|E6TЃ~+95q㮓]͙Րm1Ugi+6~է5΅vt7gڏ؊]+"xUM&+6xj̜Ì9^f46ԃOS`;5v7M&-O7ݏ!`DZ"z6'~ \NG1x:5Hb ygX}" I/40AzT)vyf)w4ź47h]\~~ y4ϻ\v?߿@`Zri쉧ޤ*~~mEp(6{[8Zڛ<[eF-1B/ĸF KlM&ۭnvf>SDfM3c}4)WOWjeM1@KʵT݅NޖWf<`~<.vRglsZ(sJ힦ҸH`IC*26i^X8Bf/:Cij:{q6! IDATO *ڕK]3SZ@5D!M&u2ijwWc&Hߐ5\l.eey=Y *xUyއ]jkmO.wzkA*C8VQx5o$yT˧$}diTmb뷠̗+yO6q#bQ=L{7#]FF,5p,nn E5|/!t8GE h xF S_g^\=]y :;r)^hb\'eaⲢ" F2kʬmnN8yxfk`&ZS#E5=KVpNt\t3B;olZc#im-է5Qs>  Ӕa\~K?!P$R$dR'e{80K+Le57 د%Nܧph@|Vu?|s2RZ~ !PAvry[qnfܰںijnT{CS$T4l>R4H|\^" 8r.CW/M}ڏ`vp%xYÃY*Vfmy'm?mjkyފ B ]ogf䘬Bxr)^hb\#q[[\~&D#4'%]657mpALCpH>M&5 K4^#sBX3I3xwzk 8x[i41N5 !8Rh8V'OC}/ٍؓ3JZ%=?y/"~_ U \i~r~th W ߋ[6Dh6Vߧz9bze}p7F1 43֣ٴsΰaF'h@%<}6Y6<}r{JMP^THfm{qӖ=1_OM47=|fGχѣh?sRDouôB%in E+1@Zvjlܗ"D<PUHp|:x:*N]:j=٤Gc K.DP>e%Lm2S.h,Ξ@vAW_ӟ?W Ecq]f` اln֝׹ TںF t':žFycu4/FDs(`l/fhdh6mʲv36qʥ"&[1hbB v+iRiSĄvڏ`+"|g[Λ3@9e,wr? d/<$ @0ȹ7CW$@OqݟHj%el2ɤz@ ߋh?s9zyPh68! fӦ= #y^?sx+vӧLp`NG'讗]TT n>fشl.o Zt()il2{qˆ触SNӹ`(n E+1PPOW@S)S_g^\=]H 1QA(3>T{OjL`Z`SJ=yr9V(sQi41nڲ{ Unvkl2I˶<>*4T6Pj>5S<;\o0\~K?ɤ,.3%r?Uwp< @57xeqOo?m LDP$@OS) ߋk%w} ѣFIpfc tur|’r 8*j:{.OxFr@[5g2k뚚NlF 2~yQlnLj$>nLf{4woXχa fpH>M~qΰW ~\cGa׀]"K Ϸ)<|Ev.g)\03[Ϟf!lZñͦ-O7tk({q  K@[7ozlݏuRL45s㙁PhUy=ʬd*{.ki j_XEesyݟ0M"8ߧw|] KMLze&#Dt\OA` &wχmcIt` }35yO6鐷xp<hyWsw/TeKPcI6{q38oK\(*KX6Do)Kh$>SpviP }zPwuuG&Ƶtô7ӝh7/,)5V6Ir{\Uw_˨xp`~_!ǴYH|ܴev3(^W.Et«Mk$>nڃfDB=z)7޺a1F.[CQk 8PB\^G\d_M>_ݺxUKiյiꗿu]cIZZ@Lr: tu]YzOO޽-@)鍷nhl2l.<,ةF 8PB s8|?/mK/:TWo˨t|Mr˜_Xf`-mB?{y3ZyMmv%&fJHV$R 4iAH-ӥʝ+GLv&lY+x[eIEw&"{.NpdkpBDVJğ68Yx@sޯ%:ss}>`R^G:t:[)B$FߺS]=a&*j|{*:HEՕ)H 9ۯ|v\<&ި1i39uQc  sP[M'#cj}CTi4닐)դ;SNH`Y-!]9_7fy!`O6j-%8|LwwͷŬm@)G#m ힲtKڷ93Kbm{WX hS6KO_TWOX{‘(Ȱ>~^l %y.}~ߧgl|BH >>Ѹ]9ڻ:R8?vޟqM^ւy6N)#QSxzv~&l%78h"DrYHL;udD3sLTF: GbYD d^P(H,??}ԥl &[VUX'GX=eARi&ӄ}z;Ȣ׻"P/+ǒH$˯RWO[Xi( 0?~vl>m SR$?y "4X<_RyH1XCȂ>oKDm?׽P0# )3hD/rHǤۥ{~O_Rpz6`G̞7ͻڊK7g]H;Q&F8D2o0<W"ldە^c3e pDx|&VXs?~7 ] |;ۥ)w m|I ӟ>Oe켙I ^nX hWǖNoOT8ju@|uƋ?qCq~'$X j|t4ྔl=/8ZJ<yI/*.h }OHfBM,iHқoTCme e# H5ed%SQX3s Fk%9qߴe pGSg]Ru2*pM'5't~m^t([:ͻhD/rH]=a4z?`Ȫ^K$u;LgёѤ܆jl8pD]֯I<^u֏)ҩtsڷKtlL:v) H[B L<|n ~O_R8(S?4blnWiVYݽo~:ݫ:XښmcS; ܂GFv娡NvEc8|LL.Ux3RXs7)ܤ%t_+G1k::٫za-pCCiɭYd`6"mN>?}I]=aTA=Y(ҵx pѸܮ5YQ p-[?V>U6nv:;|;4pܕDRg%CS`?_W)>>˦/',+GMz5T j܂b:;8b4n=\5Pˤ1wg_kHW_Ñ ᰵ"Fb;`UEy<Ц'43<*)'uNT\\l(ƨ@ZIE;v?dD! =|^*  Gb-O$t&:]uj4{١ۭ@J?~ʤ Skʵݤؠj hv~J6ճoC u9b873XsיFOQA[BzXBAܮK#\V_lP/rH]=a-ppZ7_gq|;C#8|L;R"ɁpK`@(j7x---%=5Y`o ,_a~nڷI1WVtKۥP0# F^3:+t1mDKџ!2R:03p$ftZBt4Hy<Ψ]|X&^K$N&.jPna~.@5VH^m c u NAv"S53R~g0؆ '$y@ldl}dmp= +/ݜm`Nbƶy`Tt@:Y:Yvv~Q]=aà G9PCmhӛoTNnW?4ԺS}9p-!u^:Ag۾ە{^F< m{|solbu IDAT@H[0v_O'Wի/7Zz%DrYHL;D53u8yk_kO/6@z#Qo Hem]ie=K}c S)2HQA[B љT1SREHL |@ j܂b:;8b|ktЈ sWCm5UAj|j6z.Iq-e&K(U(:HEvjΪup0y1ܒT!>SQABt(ʱl[F+z ft?/) K G޻VVxP[MGlhp l{8Ve2RREC#:;41Ohl|BjɡRi{-?W3;p$p$*j4ؔ«FbFz=)/B#^EgZS|pX6V0w]Y/uSIϐT\#`Q"z#Q/'SQ5P[-v&?hwX^m㚉wi*ϴ3:D4XgN)[n~aD͐ވ|0X«C->;'Ou‘(Kџ!TiÂT˯]'4<vyr5d|?/)l9H=/3:D4 ;m{%yH4[c3`fnXەcB[VTJەcv$ GbzC]=a-ppzerHβvGz<`}[ /6EW3 ~(g:ܚov4loؾxyTTm^+#‘m7`W軏t([ظhD/rH]=aפP0sZ&KW'7y=76%%[;]i-%F'uk(P^ãqM*3hDC#9]kVCmf%˶jh\ãqjW X~רEujKt8^o0^لyl<_C_,ݒmD0m]jV2k:gp"Xi:ռ|ARj -L:pRm߹6m))ZvoAl0|As::pTbw||B',َӗV難wTS#yM=ۣqܣݽ>n)T[hy1HGlyQ$?Owf*A&>>A:!&?Y )>>˦/',+GMz5)tT=AЈe'n܇#1#1TP[*բɩKמU?qT^Ew{ϷF'$ XW}cu}6/&~LtضX5k~#1' Gb:гOoW('6H*>>ɩzg|B./նǶ\YPqYw0P#X'3s Fe%e t4HIo٥9e=]k)k]٤ʧ*ןSQTHuČC6VsopR)W+R"I'3: >at#+GRl<_T\qJ7HDǦ܂4J+G t2;]jׯZxl|B«] < W4zX]B\5vi_k:3~ G Q Dn)Pd03weS;ԜGnE3`J6L|ڙLUWmdTn||Bh'be'{*zE*j|Y"'m/'"j \hv/ؾ u =SgK0{D+G~VQ8^yvDFK[bkЁ6uhtzuqT8pݽR(P-SSi/rHw]>hD;DrYHL=|(Pa~hwy+bt-/pC&uՒC%y4Ph#L/e2lq{n@FTVxӞ`G|_ɩƒ sP[M'ȨګC#:;4b4=ͤkoj7!{ޣa)ӊO%j{y5Fؠ|ro|zpI}mM[JJMO뿶C Li֡m<ЦJ O_TWOX;DHrp!?4sT|h\_?U_^aHە{^`:u 2n­矧{tsڷ99u]TR nWt2uЁ6AKh*SSӫ/7*0?vm+튂p$eKhr?%$+H.'̠Ě,򓤦@5`'kST\l:y~@FyIz*Eyjo 7_gHДDrYHL/u'L0Vz Gbtĵk׏Z@_T}Ѹg8d_a~BA @<6Eڪxϳ@FnI6gf)_KDm?RQA * /63&hppqK5U>TVV9;8E[qx4Ѹ sZ **;>F l(\nYȔz0=筈|^Q׹{l< u vJ\[%ϗO1Bn¯L+EKd s-ۖE"NH(-!+$:@PY%![%ϗ١aEE]dLQdb_3ۥګIC#:Kt l4zQp; O M}zO/6F=w}~\9X:vغ}ڰbF/2wiXif{0V W{SXECm<ЦJ^3a߻׎~CSozMO:?~-6^L<yPv6'@z]9iR"I#,|^:Ц~QSӫ/7*0?vmjߩp$Mu{H.nY 2p;́VI1ihcpߤ{Wؖo{c+"SnnQ{KHoqP F&ii3^ zF ,\M=n6K  {8cvE(7R&6p"۶m]V8KPNc@= =//63%t lʧ*J/ڪcP[V"JKFrCICr=QO>'~tE%5^vu~^:C>u_WCʧ- h$~5+G~c`z5RDEŚ'#ڻ'O_2׎׾_9ktͻ;c:6vϗl}>`E}cn&cx.5W{OE)cFl09uQ=oEwإvlo4>7qAK$wTSӫ/7*0?vmPWOX{𠎟hfnNzځzqopz'zVA}%گhO7U׎~$]]5~e0:y6@z)xDm`«|jI0^j}j|kc*WcFPpp2E7z|RcG2ֱ n~vەcE>efn$y8y+G7 BIE)*3ݙE:6:?}ȶ smY楊CACS/ SDF=mrꢎ<}ܨWFO9K?WF7flOi<ywG2A#Mof4cNo Ym gmvcNM8SK${JLBp;'q[hd%m;>>=c-vg6<ғ{۟|,_N%eo9|(0v( u0mm6lw#WTɩt*f%7]9j.xܮ'q>F:0 i_HJJ2ɧ][إWFOel,jn{Kj*-a7ꍭ@!uZl d uWg2u~W]5}h^IᮬZczZw{B=E7zqB wO=vlzOEoz]ڜkgdѸ lSK:.QLK:GnN60uDRgj MMO@gVN#Q&q;G3@R㎌[L$ExM/#+Pʘ1&¤Wy6mmn,iF=F-`sC#J$l M|^:Ц78bDSfV)ƽ>@υՐFb:?V)}4/`{`|K"Xs}v~J6&ummm>ӾMK[ٙy)<+*S{KHoqP:]9lդ^~吺z>jo c)]R"Sьj)*)~~\qO_e=8EˋA:kIa]jF%lK'!Eyڻ'# -O]^~^:8p%a>ɧw{*+l|GZJ$y1c_K8@=4rcorg2{E*L,ϵe+djuP{KHNOPcjI6^4z[P;(K;l_O>ƺ^mӾV/)q:~7TTGGy yٲ]L߾s#DR9od2oWju@:Y~v~Q]=aT_l4a)>>al"hJ3#zljK(g9KuƍmQ(a:u٧:8HuP<~0NJd_W_cK'o/jߩp$J= iV>>ɧyv}馧zp.}> ddR^w)POQL_]4dl (2YHEd-jo 7ZnW%ۑH.+ŶuFeO_2GUR-.5dݞ7_R+sv sI8j=v_VKJ7ڕnN60ujzi^҅ {䩽%# -Խ!u59uB5y3\O+lYuFQAw/Xkx4 [Mds4(kv]<_f2bnH/7cx4nC /B`kl(P,?4}+:x\7s/۾tS!~_l zUVhw/YT_l^Y)n4R۴cvmc<6=X-iEuF?$if{ۥj[яO1} Gl=/H^g MQΘ[R۱ܱ|KW@I$Z ^,ji<$TRg@v cWU`U"ʼn IDATmI6%uպSC#$cMHϾ{Ya(ǟ)wO|T7v"|ۉKZ32osicyxv8 ҥdԟ)ԇqF &r=t۳+EH"z ittkNJ5U>T?:`S pRlSsIfffnXRەc"2pTok|"p$Y kg^vx4nlت9?L;(\6:~>='O~('8ml,?bFmj#몬dO_J6'.:rp$flMz+TQA[Bڻt&:DrrHjP[M,FW||BC#Y֞«]6dO|Աc9>7h\۞KZqv1 ^lvtߝ̹V co7#R.q}Kq)4ZE<8v) _؀ޤTseWX3_W yAC#:kE=oEZM@YJ$uvܽǟ);G?So}{Rɟ,>;8rǂe_W:x)kי<䪨 L^o&wRx~Zޏun$)XVٸnyrs$IZTҭJ@ܓ3QsPk|G<`@qAƔ乙EɤNgIчTԲEc8|la4}2Ǐ]wz:iK[Xy$ir~Hji)Ʋz#ig\i[f䩼t MRp6i%8tKJ$SWnW;$t6]}r"Y\[z^JF}79ɤFZh\gbiMͤTv難w(GZ8-٧_-iߏɴLRϔ)_9Dfoy~ގ,%y+btZhkG_|O?}}K;/ |vM=*}z s9Fƶ]yy)..e/aĒKKIG )TTSS||B} _Wc% 筈WM܋yNHOd[0I?'w/Y$5Ize%-*/, bVH=R܇Խ{}qg,U(I-%̜:~ņ zW6i˯Gb4`s[CSs0@'Q?bvlg`ݙ(0Tm62뤒g,[ H.+Lt@Mz5V #vN??}I]=a]9iI:IO䏏O8"dRgSy) _؀e%T'ei%ֆGVVfM1yj)nWBA?w'.V7>~^},yLyYefnAãf:ݮ5Vq  ?4SQ5<WeWMzVaAZo>LZ?]Wbg|0~cUc%jGW͵b{]"]LIW'|b}G9GA]ۣq=׿ذAmUmP3; KMN]$uRnG%;4//SYMSmc2u~W]XZ ١ꛔ*B,UʐV_w1vlU/{}A?'W/_Q'?D}_T}M/cãqjZ7\|_]32~0uQo|z@U?O}w my`my)تM?f?Ck)}K*V"z#Q/'SQ5P3J$[׊L.+i@VU9~J6kW]|ޛ&S[mjzl#wR)MN_?Y_Uy,03`ya`i tKcF K#؟«C43p$fE?yz_O~8)_ddco[*E܅?;FVOt5٧}jNk!}85UVal/6˿!e>}VG(׋_O9@#1c. & g?y耱m! < w16̤DrYHLHL L:CFo3es5}KjGW(e//6J!}~M׵D$Yܟ}?4tP||B]zw^ s0өͻt2P<blf־,C#RJ6WeP^[Bڻt&:`"5hD jsB}}GӶ|E.,hM_t2lBUW*=?#QkMѼ,%a}kpXUN:0y?P<bxEEg & 5] jkx4SQ^SE^5b4tx4OߪVt~<'OdqոnZB _^vgƱo~}>ߣc4ZJ$I,qڴQJJqxslw)V39uQcFM`}\+dӗ,ٖ u>\5p]ק-}Τo<܅kES.S(%u%I5U>5^M'O]uF&Ü?Ɵ40קW>վf1mٴc6 S; [lwr_MCJ'0fz=U]'SyGcdŷ{IMMkGWãq v٧_<hؾݮZE ;Ejo O1}XJ$u&jxy.f-v_O'«CPЈMJѻ]9j ԫ_O=(/ݢw>Q,wWt¼]X+iH.\ sWo6ϦP+ ߧ33sz?R('>^[MM%uP<TYM{l|m sIrwR_;DROV8d<+~: VRb:d1I jשt F8-{^6bNR:ݫx`o?;Ohس/+;{m+ݜ) ƍ}PRY%` K`@zLt@lK«`V ' j|tD+EH~TP ܂0@=+iVg=H$Fx6Z.Tض r "SQяO1UVxZ3`aO~xoɣ7ܓmR+J,C_/NݩH}:v\K6z￿D )1K<`gvmJ?o3R5K}3(jO0?[DӾMOhl|BjFFVR\n;?$I*xĥNcw5}_ݧ Kj= qy5t>EﵐI S!uݲ]|ѣ {xު 7LM|^:Цb[ 筈W)jI#R)tTQzěy`~E܅z^(з~tKշN-!}r:C<l.)*5ݙY_f%]9lWᕯ«#1X‘DZzK F/m$?ιAj}3^RS?Wt¼/_Q'?î e ^~83W_S*ڬ\:q&:`l> A>[Hض$ }oR(WЈD,YH./6ؠj)&DFFl_M/xĭ]*)~H>ؓŒ>"5+N߸_٧3Pi J>^W|8b̛fey0+'EmKec)4K<  W_l@gG4;hɶhD5U>5rai*.y!|@O>'w+IXcrsu‚]wT1~s} Gޭ#m>@aէ>;jDmNIK<`Xc[4g'.g苙[JNq  ?4SQ5<WeWMzb[cz|]w߽w/,h۷?u+U3Nyd@̜^~S5@Ktl*fy6ylצTN;40JuWx^Bci^na/UDPo$j"z aE w$ͯzpJ4$wznV=c^jܡWwO޹˚/i6/*Lt@Mzد_~83GgR>@z{4:˿U3;X޽G]A drЄ$@$B!H-`lRmկZ[ڵֺzhu+_e46w, d280QD bDa>s|>+ s&Ly߆:R '`fOeE W0#?/[Vu9]34`$B+ŪVvC'3nS&' VO+DnIOWr9kҎ}=N؍SUuTZ\ʊ2~]]{*{ q Əq>_s:y$eOڤߡʄ dUU̼l~V$cXFTCy0[UL2k|6瑜;VL5u "/A.jBANW|41Feiټ7w56k`8WqbJOKS\\ӮҔ)钤E󋔜xُQǿ|.I]}}}}[,%0[?TJ G ĸ=^Co^]Q$$b(j :_Λ|tC*+USנ !yM!}0TXZ\lV̖vmd$TL<*R/7rFDEE)>~rru2UR/]~~?E'd~rv;w4=g7W߿sLL B@<`DcrB᪟FViq ʊrUVE[^ ِppf^VW@]N[j;7ĘI)8)F)p~ۮ#9 1x=m#z̙5mjAߏ ٷ_֎#ۏvqϿ[aB<Ax0Qojw9{C s# -]RdHu"pmmБ!9})%rn s6Cͭfm=,L)  pwʾcsx ]{ӛ407N*b}o)9)1,U뻺oSsK;l:y$=>I]C Ajn5vcTnp/)$_$}^ 77ʲ6i8DoXV-֐GwOoҖjDdHuۨ.#ҤLPUjv:%B~lWK a?q4#/W7|:/MNJԚ+JI 2$Ū/ݼNw\Iz-/r~ [~,PHHNJyxfwh{}Sa"*CyufwQM-!9^=ő}eE9b.5GBx9 4)=e2 Dn$A*MQan|:W!+UԢ۴D+J"ꆱo:쎰_$?·8߾Pt#b3gӛ|H}K|GP\jl~ d1<WvTZ`XۼQ12tJUV.d}{}C7_+U`PM;w ۄZT0Y &W=7d4nkmCD0ӫrrOSq~W3r%_d?b`@zY% !S]N,Vp51M8 &kZ6+ VHy{gЏŰӔT#%'&莵kUSנ !?rS7y^AլV LPFf*\*U%ukߒ{!9<,o6mѻg΄ոǍg>=WmJNJy׫JqSIGiRnI_^>C{׋sXwB}wOoJEt~M?/*8=n[yu-< }h8Hm3޸8aXLT bcd$Dڐ 9کZUV~xeXGˇM0?bjQd-*c]'?H9ک{~JUrbBȮKӮ=zM!瓘h y%'%o]ߢԳnUa?fz;dg3#x7DkeyAx!j k{ZiqJdX6oFey LN"IK6lo8[jn5L+JR|qPŊkx3rC?$U/ڴa_;m#Jϛ&pnW6{̖ݮ;j钢 x +#Րvmv2҂n]NZ i*Cl˺[eXUb5x}jn5k|χ[2[ڵs<ZY9+{iǾc9 1TUi{cV_W2'Kp>z8]T+QŊkFѿڼKa9wϜcOo^!/A7aq}yx -, 󲕟ʊ2UUuli'<˛-V5O`|nI\\^U2]JkǾcze1B=ZJۛZkfa~g=!Rٲ|'O:Ϟw_ɓ'nK Ͳ96 6{lv,Vp q)913?I2O%);x++LݱReojچ pt;YK3[TsrRF) ,*Es« =^H}ŪoV-QeEyݠ_V/54(]~]%'%d w~U/zf 1vZs}w(Ϣ ݡ.goge6`qW\.C"&9)|pin5̼l *> (ʲ5h{c c;dXլ+ S&('3A9)41!@0Mњڱ:ސ{M]7ΛW͉,OL4{ߺ]% yrרb5_?_wtۺG{Q3rX (akyA}R )NP2%\a@%7'ސBam(g#bbcTYQʊr7h 胔UsYfUmYO3n s.oä,6zҲyYڱ^{L쮠ۧo̼lݹ277ڣmҗp a`8DzV!wϜzRwFϛbŪ.GXZ\$9de6;A5FjX*l6!HEjn5kk]C!F[v#G;O2AsrRT LZT0Y &=ڶ:}o>U% M豧7i` ֻpvw3Wզ O]~`@S|H}K,w;F<'qRm`:@?7_l7~H!fwljgsrR=Ipr3M4W[kǾcA_OUuڹ۬;oTVF_7T[w|C+a}CӫzߞzYov9[Yds{;eKPM"I`1M=t?1o]ߢcڼK!;u9mo88 yKº:,k]NasCzn[̈́/ҜMcJ!z_W_Lp>**J7Qknd{Gv߯CCv9z1w0Gx):rӧm쎀Wh\eK8DN7 vkpfLHhՇC5BO.gH'lT|Dm=_ɓ!9wϜ-yPwFϛk~ <Gqqpx:*IE;Zv6%E!1.Kͭf-VhEHOEi4)=e Ϟ c߱pܹoJ~+sU gecTF+^mޥӛ$)fu$,Q~]ހikmam*+aalva7͟.sٰ񇣘qcT{r34''Ec!41FkVhU 9ک~V_WڽimklknԚ+ٌd=#~9=!P л=ޑj<Gɉ>o-VވJ2u Őv^tu\#=^5jE2Mќ(7ĄwkVhQA6!+/lꎵ{z* ?^Jqٮ?9mTg6n *ʛ-#Ayn>\ }ɗl<5uV/<hn!.]Ru9]jn5kgY-V"IQnf sib  ftύ&v~9 5uw~]y>^9zύ K7(vޢx!sҒzuɐ'lv.!$"yfe#[k kM@o2T) ~t9]k 0䤨0w0,oÄ&hۮ#i<̄|kO3r \IBm:t=$<?xKWfT9ɂ$Sf)+#Uq\,0\}SaA)~ ͆tߘtլ-.ib(7ä&$6zVLWan^!IkƧd h$'%jӆ'']}E}߼䦤jjf 9~65#Հ qm7*$*/alva7͟I<-ff.A"=eqikayOǤ<]ߢsf遇ɓ'\|VF2(P<gFT96aIxA@ݜ7%=Uɉ Zsw<>#LPNf sl^Lƚ}sxDyڼiup;󚙗u#<.DWbk4Kv6^_t9]oj*qcT{r3.!$6znzqsqs@p&9)Q6=e!ly6]G"fw4`}I3!a.6&ZYi4%'_|Umx:u/צmz_/Vhir%_mHnWqU5*8/I >=оe5Ɣ޴h;F{},9S&('3A9y@xW0'Ek}z+Q¤IzuI&$\((jHUx>%u0٣ŽiZ ͚]$bT Syنx9(ccv6%Ein5kkmd҇&(7Ӥ99Ոc2)r3MomqXW"8QRP7>5߸SNgbL9ϛT@UxJbּU5xU)Z_ՂŋPin5Vuf^6P6C==n.5Pe~pX>73A&&Hunn EEE%8?9ݸv:΄)H4[~_?W.=Sԧ>)&yoMݰ[^5l.VW!PM-0IOlV!,$&=|紱f:cz{UREXڴI?_j16%=u$(fe7F$qms>mvv3~fX d%"fCuޖvg̸1#a+ .HlXvc1UսUW_{;4ay&Ofe+%1<1L$|>jw-VD*a z$'#A)4)=ed &+7Ӥ_mݫCvWL>Mw~ phYZw߃gB|hf^Bx@*<^totu*\Uuas@۹$\99)LPa2MaB[U2] XO='Aר(m4Dœ(@"<w0 =>mZD.kpbLHh>6z,L[[5knTrR" URPտOݰ:ydG)^S3F*|y}Iɉt͠_Z\ěVD0#o U)2 豺Ok.~ҁ_BKNJOG\ܠ|~4eeR^`Tp볶7j[YM@۹$h00 MW4 x-L~9 >E~])UQ<R.\ר$6&ZoOt{|v}S{z ̼leeP6ðP0''E !'=e[[o6=;|o(9).Y\ϥTPUe%?7~O۴>Z`ظWDhNNbDz !kǾcA,pC!%_쩲Y;B-VXd%EZYV -V9iHIxnZ mqLвySֆCTTRRRϞUn|X}jp:% F30ª/T\{zUU]zo`!fPEk :_Ny"PwOo؎/=e|somL&8v=^(y}ʫ-,p]N{Fn~Ea鉟<ojQ}SjUyJXT.5S 66&*"ibh,&r! |Cc*99*I}ŗbUӮ=*7IGZqhw8rS7Tis#!޸s:tIb ijAo_X)f^e(=e {Ru:>ZrR~^ Я<0 ~x~ۧ:UUשHEfe1"H~94ǫuE ch~NN sS`2 (/C\\ƏNy<^E2KRR0(9{~JE͘pL}5U K˗뙧~)VojQ}SLZ}]ͧ*$ɉt]i9M-8κ.u9{e;xew+l֬TZ\sv>-4oe0J&; @i?ګ^O_ ].8{+I:x}^V/19M11?yS?NƓ"D/w}A/Ū]{@1L`Bm ˱uj*Dk",+!.Q]Kj{kmac-- t ?;v.ۧV[J2ΛWv7FWjQAr3M< mcހaҤI }OKczhq騣=7|[˝eLNSfzL HO *V\#Gj~<oPK˗mx~ۧF5jf^Vu8[I ]{6%=542X2ox=t jeYI_}S69UTBw~:TӎWO9{~J< 5kvSu+"ƻb~UIx*/Qiqb9c IDAT|mvE̷Ű1*/at;%S<^p4%)dM-Ba7pe(=eOQu~؋-ϭ::B~leLNS^Nrg+~ޮCۃOfUMP`80ŋT|uDWn~Qn~QEZYDYU YxmvaUuL*-.bs{;>:xaTW+n~QYi!uRbl мib͛E2y>DEE]t\gQaZպ-+Vmb*[Y% *;R=)۫#G;#~n15Q3󲵪$keԩ3n'_myְq(gq ě-r{wN&'mbȝ`ElFe!L/}|ΟMUJo>3˔ iPGAx_=sFߨuwaa la3G!<Yxㆴrh{SKb~UIx*/Qiqa:XIxWvr$e俛-Vê&╟@r{>V?kj\ǫZ5TMcdLfvW@U?#?{J߻֋ пjTW/%zϵZ-^P ?Әp\ݼFbE_3WIx>V!<"NeT_moolnRUuvn j=zvzv*-.ʲ%HcCF -VhÁ.kO;]vvBSM]PRCHвyY*MaS܇dNtΰ*/aAG+쎑J<^pIk ǫg7s}s73@G{=^@|]]ͯcz}Z޷nU9,VMիg7U D?J4:j04_5I H8ۯg5plP_rR[mO?<_k?bcß?u-[n[6k1/W>ownnlu9]kƖx}SUuJ*e1qT(nаU'CrӥnW؜RSנ-/ԆD'+;Sdzx `@?iʛ)I~ utꡟL=jU7bSG1c?64'i(/(B% UhvxG5u ZYFk8ok}uI;=jn5ktCnBM-Z67ESSD5.]VFok;fp௙-풤6Un7l^"tCf-K4kO{׾b~q$o9_?/W;r} fя}Ԩ3S!h`` C?Ҳ?'ISnu U7;;>uP|M͞dC?pv:<Gvj*Dk",+!Flo4ge&@r$ GXxxCwml:{6p!q}ť65UanspAtO6jtTO9jhEٳ}[ӏͦY7^wldAebuѩGi)WV&ӥ5:%E+KxB5x5V 𫮷rrf)lVn٬LP"=K+˖P! 1%=UGvM1RylaIxNԺ.u9{>dw+x UUu]3oZ(S& j@?4&}|K%eJ4^1xd|?ꕝt*7}QQEϜ@|Z`q>c=v$=}23[ =}nsYn'ՓtJtõojuWoj̼l-YN\+=ޑk :_NygXx{aTW+,^7}J=;r}2իGi)ڿ*w( ;]Jpv^ۻ/Dy"K1)@,XȐ4Xq`eB\q1ZYVe%jn5EͭX[B. ''&Aշ/C]]Ds ,֑4?:eV^v=^UUת1,1a֬'4@9ՉSw`W޴ H OW%*-5QW&)DCvgbǛN:SO]%=̺j߯V8jΏD0yLqhw76<s5n.5h{c<޾_^UUשNCxɉ>o%تKr8qK7a #MHU\l2҆>ϼ@xfKP0A.)l,-EHOWOUUbvU fL9xөCxU>_n*GHF1:^@?9)Qpjbt}> 9ک. ɉ UVլ A91aO|Hx~CUP3NLӊEl8\[{ބҭK fdꬿ Yi.-IrjԾVy q}TQG3Fg500_sc~_]#'kCy 4tX;>up< yz_vUV>ؘJfu$x U%EZYVABQV靖9ک&N)-. Fm$iG_f6kc~4F֟[z-A}CE,}JFe#zNxu=~iť}GG!98 &hA-(!io:u;Bn͆/\V_ߎ h~J}Z;:TC}$ǎ|Ð\(pG"< `Bmy?W~^UYQmol /ۧF5j|i|6/!`kmam1@?x^w >Ix%'%(eb|VF*ɇiPm~ՙRT&rrM}uWN?o9CfӮLg֜S=.b[UJ*Q]4[}}@P2cxYoѕW/4JQcƨ3ygpv^  c}jSnڭrݲY; , wfw\rb*+UYQ>oj Jͭf5dתe0k5gezb)۫#G;MlL2t94%'Gܩ'^m~FvV,Il\B̡7z㯸By2/qku!6%MtgEދ3pF::u߿>o[ߍjl@~W_6T.p%ɼ BX#<5@):kuʀHEkmA}ճ_ԖjӳlI@nTIB7q)7lnE蘒+?oGnΒ|b,֢YWX^O{Ѽ5*>t|px)l:ڇ$/R>owee鎵kUԢ U'OM-oj̼l-Y\y!^M2bÁ.kO;]vk$Sxee UOO`X3[9{Pg&+6z,@zھoWVq+>/o߻A1Tur;jkЬN>izUou+=. }{wt֢Y5he>dk=y۞⁋CxAairCo[͚?7?he%ZYVVZojŪ-/j}rbpv[Bp4Ѝ6fK$bՑLjf^8'x^ ^g7W1(6wd}it&r!;`zL |U/gW&?D3.s=ť+V^ޱ'N8{$vm|Vj.0zh=ZC}V}^[~|@ף<@}IeM|m5kvA،mムϻ:=[C`8<BĐgV=wQM XԄ 45@ni 3ciَ}L̹ug5=۽g3+ә*2ԁLf?#*B"BP-B'yxb_y>$Oƣlc6 ~lE(`A Mvq?^YP[gAYdNDDMDY1_y^!QDQ0]1;SI~J(^3PXRP8lƋX k'/úU """u B\mWhKS~A;Ɑ V\fW?w,ڻz߯1SJ]=: 7o)ӿk|v 6>版Dr/}_Bιsh2YtЦrćΎoݡi+OskŘ;HH;pZmvDL/ ըww5j+ciaٱ:3*KQVJDDD_%Wȍ$uӁ^^=p x00eQԤMSCQTj3iqS@y**] ""/IvWYĶ}ӳvWhxEPAn6 rqً>4D?>>~cc7߆im'K 4!qA<<"wӓ"o[7G$<LUжR!h AWOŁu(VRh5jDDDscMuh$mֶ|Lg2"Y! P*d0d9^H]IDDDbcim}F:R#^AWytCxz6XQƠO=/xmΨCD;zg%.ȋ>%$$b28O~xZ} .9?""""""Z SЦPesDf5qWl2l2V MvQTFQoiB Ę(db?hy)[#?a/FJTWNmvUw-48®RB`E;""Z YLsՕ$ZT|}^tv5V Uz4jh5*h5Ї(l%^Jװ3DnhdLU^`X Oo~'T DًwoB5wTHIIώ?T?$)$R)&C,Twb`ЋT0Hf +0 k`O S)޺vsUq?e%(+)&XmvQ.9` ,}[ZIBpZCU2aG^16dR!!KB $kᮇډgNg#U<=YE2'!%1k zojp~)*WLyz>!a ƃL$>?"""""[悩:uS u:1Ég#֎oUK$H 'P}j3BRTUŁFT<ցm8tʷJ+噌1|8b> TE>><`JC!JF FFPqe-IVc׶5PȖ3ķ_7D4zqD&K;xC.~~ڻzF0V1nݺ%KyE~8vw.\r"w'?x2lvŌHhnqhY}Tg*;:fbӇjq`ʷZ8DD$XRVRY G[|L>|ts(jr HuC:LR*@n);h;}Qn o,h}.'H/BMa0깽f~W?xC~0OwJdP,6fCFd5l2l2VG5?0zK-M(`FUE)&#(1?U8(4'Sљp|khX[I// ?tk6@+QԞYmBzo[¶-8qlYap^x^l_{RDDDDD )cbxbVyoxi_͢SFJTWjfMŁRUUY˜KDD4g22lJ3>w{``IKUA.T1ސ2TIncy"""ظ 3ú7}NI#bScmh>}aA FJJʜ7#Gؘ c<9 6^3<ቈDxFFt8g)WD&<jpQoYI!J E V]50oCGxc>j+ըEDDqCQ̾(,2JG[;|:ΡQe0#yV ސV=</0)PfS}ًވ\^xz{+d$>~Lyh^ $R)&gۇĄ0}? ]kNDDDD$0N Nmt$(х]MqdEbSx v[P*BRTUŁFфηu|[9m(QLSeFdx4w=/< I#-Um:Z ,}|I4\nOL׹rmHv0?,ۊFG7?\~1үgS6&>D'@ͨ6ME``c{'9QP*0х["͎ hEp=4.x/΂P%zV$"|QJ/$6\[b#tn8mcPT噌H7dըbf H?+jDDD4n_vuiaV5xz6,zRtߓo>DV"HH$zA <hj299SCDd:<bwPQ&+Qe3#JCQcjTWŁCGbff ,e@hm -ޙJ#WzE1 (rdfSp*-zVsصm %"""ZqA5S=U_xz;OL{yͧ/[} ЯZ "rlRi"&&nEO]krpr c: }DDDDD0]1^ld%;D']@xkd]=}p=8J|Rc&x.]=}̈́yNMFA+sadMn{r{5DEi*hi3L%y"jc<)/~o#֭J7 斶w+~' xreɳuT@D`b@?]/SY版hљ6==V9r='cbxb^y¾m͎Jv}00fc΂: 6QUQʊDD(q"Y^<&?8ڦ*ju CQg2"Y! P*d0d9D/aOUќ;,x7U|S"(%O}isv灩Ka HHRQǿg?atlLi*DDDDJ%S:BAxì }3'nrj+XBI[33 pvn{׀^vEB.a:Z Z:)Q8:2uK"""on_v+d|k }9 aٲeHHHWcc7~Wɒv,Q> a8<Q⿽oćΎۅ]ggs;| ޟ)pj'"a.<8{NPCp¾zK^WNC/O҈&(e(6;6;LF(E3"Ff]BpZCe5yI+&# 9 Yz(2N%fǖxvG.%"""ѱqA]cZ6N0||m"w+(m݂ua[ŊBJTWŁFфηu|[RU(VRx QM:-UBQ zÈ?^+:3JYr@^&AA=Ua:V!"" `R[m4+Z rCs_O>5t%K?5#s$$۟_cDDDDDD\"\\ޠV^#"y`-V fm0΂S"60Emub+QXK ;:BUk#o(~(2VӨըըC*A&?P .>dmD2N&""9}`mo)_=o7bB t7@?88yr;>ѰDDd3RRR0<<,]ILDDDDDt:;EwLVlpvjxi_ ~-:rL46͎ՙUY*DD$sg:jϕ U1Sљp|kh5jC#/T%>?tk6@q%W'~l)X=U""" KAդs\ȕUi!'@ /lb? ] r Ri&ځC;,H lAɦy"͑odD,re)WUطkٱwP*X-Ҕ 9J QVRG[-hnqغz@- ѳ(WrK7 vr{r{CS=p^j5?RUЦBC>t D?$ÖIDDD ] 킷qBUin ± ?A. 麅}IRL@`2}٧  -N]ӟ.M`\.ȸ]O^"""""ENtyg{GUĴ:mٌOO} 6;BFJTW΄knqŁT{E̬\JDD1%d\ppx*?:om&?ks [)J ,=;9LzJ-Q؍ݚ݅9gg8M3B@BB‚qy{̂]"MܞЇn\ z9X5i*hЅ*P*s"/͎j݇tw7r0(bIA-BDK<k `M_Ook? V/CW⣏O[;]vR)& lj=/_<ѱ1Adx"ցV8 MFm0'c!xPu ^/#(,=^W@ MvQQXmvXmv䙌UQ f8 "-U5S hk@gw|hV`XG@!KFʼnDVBSUMy """aSOHH@z?::kc[Xu" 7izHII% _uԟZzU&LkʃT*EPu8} m_p%""xy8U_oߵ`z3^WPD7;D+eea x+䨩DMu%[8jiQo@Z QUQ c""aȊ|/=;jufJ9C7VYD"H;:`gmD2#""BYKt3"ق <1(b!~Xlsi PxŞ'=9 ˫_[y3'DD]g?axR- wqbT36r{P[g[q zQ[gAme%sFI.v4]Z 45t5 YP HDV]ij;r-`Q_Үj흑Y/dz~oR>^ |ɽ_w|> dl&]h ކT*$&WCJJ Og'""{w紲wWO-dEL хZ9@P(|a߶f .2F`'#00űYmvXmvRrThH\LF$ jTj"YB競5"""'HiՂy5"U͓E>s{+Vk}|輷!J|ɖ"|x m_pd%""s{4DD™xR^¾S;ww5;8(r[űuaZ8X7gH\n\n/ݽN!ÀR)Gv(o6&#;⒐yyR"T=t"""¬ܚv~둩Bp.=?]`m/1 #%%%,mS Vʄi޷H],'E^rsBu?eC*bQsAI=(~<+EJgG(+CK*ۘ N W+fx>~i5jTWr&D/TH"Vi*_@4G?LF$+3xCJ ,=;󙺥A![ :d^ IDAT""Exo{gd݊7r`(d$tߓ?B`,ZUn{a%R)&>Gpwi/xQX?(uM<ŵ8a[ҾvpEI43< QUQ F'"݇+X (rdfSp""RepTy٧5N$'adIާ뇿²eV}JU|tm|J(<٧ O}v版h[VbEO' Ϸ= 8̋@yEd(6;J "`}5ػ [d7E &䙌UQ@gw\Q<PPe0CQCQAQ>T8GD B競5"""ZRtk\+4~O܆4`0I5"]I n ?4 V^A?y"""ZzK}gz3GD$7t l8;:þ"TQS]JXmv48!c;ցmHKUaWe)J T9DD_a*? G[;5| y*&# 9 Yz(2Xh>*"""\{0egd9W>^ |ɝ$ !%%Koժ#Ïp_H m> OP"""Zgw*@&߈O5;<LhSx v[ TYI!J r{P[g[q z[EYI!*1|GD zÈ?^Q1$&H~,IN{ZׯKG27ID05}/٧ٜHE6 ^/Zmw xlT So޺ ]kIJDDDbu?(8;Y2CKx떈/n*J"ըҾ6;klX83Q,@D$&P:qB.a:Z Z:2DDQ$tpo_(Fn)H`?;=7|9)'pk/06;ws׿RIK_NeОbêFDIBÁn8pnOJ k?Nb0de>)0!Lh4XRW{iݏN0!!!l ݸONm|4LL(Di*DDDt_6<f+wW/o[mvTW!Fww56;k$w͎T{E{rtt _ĕ/p-x kEQ`XGr(ըC*N$"k[ VbOUh{8BU/=> o"dDt~hd`T*A⁙P}n) \#|ifU+8(碽ͧ&A A{UDZ#u9T*EP9CJJ iw?Ƌ?|''ݗ}gzft(~twf==W23Wr)no xطv#TGNCJUA@=EegoD<y~9D" R+Rm&""WVR#q%rhI,+wD$_p9aR] GIlz'&}#ۃOhmg /XyDh vO}<}B΂SoBTUl D 4{ש@|^ ğ$B33Tʑo2̦ЭCDD߈y°羻W"MpK6sS版hN6ǪDo\<Uy厈Q48xC_KQ}5ػ Xmv=ֈAh.6;LF& -ڋB.mG[>+xD8@4i*hijT0dC3 -PyyR"T=tZ{4w:na]B_#06Kh.9Oװc)n0|>/_6.^nGۥ~}! DIav?`K<hN-}TgDw\.Q+ϓda0fm3S Rݔ(V噌H7dը|@DD@ }:V+gN|ڋ^0Aif&'![ET(2s$v , ?_?ᑈÏ?ꬕ}߇D aV*-ٌLLLD훷na`ЋT^WF~̝ k ;εr8ȅOj*ۃzK#wkQYP[gAYdS9{OMM{g~r{?;WD:3J١pٔ3FDD$j>!yZx֎KW1_VRNըww5fcdmaٱ:3*KQI&t_{g f^xvή?Fi*hi3L%y""X@-6{Tdp|k C#c`p=n |i&'!?GKrQD\pط=M8w l' ˗}kD@4DDD-,3r%o";k=g+5{wFh&Ū< L ސR!!K!"T@ QL \*=t5uCI|DD$zVFMIk708vk|Az"e'eg&O`T>(ܸ;.H۶S'""/inq~5Օ<""᝙E"HDYvX-CoEeA/^]:r QU ,=8fM Ϫ݇@/>vQ U7TaC񑈈Gԃ󙺥x{}I<Í[AzyR"6%9|,'""ѐɒx&Tw ̹x ?`@J oI+"""^Z e%"Kk=]n["郳6(C/OjFQTFaaّg2<4Y@̦ߞhk}v J(&KєՙP*ʘ ї_yPT-x ϜOWha;ۙhU l][ǎ!"(dIk֣+r3|t9}ߋT" ϗl,) ccQo{z5_"""by"g~o3w+޺ ~_͎S*䨪(EUE)[^*֜o:r ۦBZ:6/ܷ'/Loq:k#Dr ijTjԡU>*gw/~QL*OJdpDa.Z\^?>}ځK"9*v "_a'P\ NM7[ic msIp!L\.HoD$""E8q+԰<QL>D[7s?\܁ f[dEA/j,,T>RUCn\wadV <$"yǣЭٔBh^y#}yk=^Q^?'$k7_}KPd%9H]&gQ\Y$%hXcs{V@DIa8),<y"""C3j=N#"==W:]Bb-m0)5FMu%[8z]=}86͎ՙUY f(wSs"o^_"Tijdge@Ðf|񇈈/՛󙺥K?_A`lA4'`;Ӄ?AJGס"" 8⡵ً>WDM'i&'*HWp$"";Lukw‘DD)c;<Mbm̆V?on0&~xVl]3CDD51,oX;ԂM|ٗ_+I$R_F {0m߼u ^x"ьBc[ Ҿv=Ȉh|O뙙+Eq`y~}0=y+/t(fMFMFTWjʍ 'o5rT`ҳsbhnqD=)xqE\y T_ƓCN&qDD{ڴ03qN4D_D*Lk>)HYO}'"ݡd|aψ( Dy )LxfQH 5j+QS]9qCDq--UmPxCP%yB"""Cƨ<ś/ި? I=> Jbo2c(AHRl߶W1vVD9znL|bgl ?<ݓV"po$OH+:pvt}-)f^[pV"ii*,!KFFN!""͎z7j18OgN|tC#\(\^?~m+ovS(&'Ƒ }IIKPɌ鈵U!KK6#!!Qo.DDDDDh9ε8$6L|;b!Kwػ r j"]ͨ(ddpHݽ8p.m28OgN,'X`l3=/~+;79y;4E:zׇn|T>X"]vo޺ < DF*[Dl\fh! 9*J;ǗhBDs:3y&GMuj+$1)rv8HW"֞)!D1$L?_y C,BDD='Uq} mD/}O}+X_0QZ JmٌOO} MvTU)m0h.F44٣`!KKUAv{vVAu)gsF5u """Wވzp~KJv>Ť9q2Dq`nkᮇ(EA`rLТδǣ6c%R 0!\T;蹎SKwu`x?0: :[atA|ZSΒզn~wv9նz-T&mG[QYy'axfBayKa;s]̼ϵ/wum!9Ms28]@f ^^hmi5{غ9L(hEvB6e߬7]7] di^@DD$z^x}vcplB{Wм\M47Gex[q\ ؟G zhZYނ$b#}ĚN yzrrƤɓoY\]Y&??ldR)V8ihj$"""""b1˗q/M"CfoIUغ9?<5:2 g r^=<4]eۇ q' ^@DD$/ z"}yacpMēմw__Ge#1$G P!4x6'6Gf.eЌV_܀Bji'nc!< ]},E-L&$L**,o.w`"8'hV (8Wd=g9W"9q% ΕAdz4g9g]{xVGT>LKGm}EKK'p 0<ؼ\M'4j&&6*b]DceTT_BGg78af0<N8v'p7<BUњ^QB $a`(>ݍ kkrnhj"$"""""?]ЉB(f2AqQdrX.rE!>. <)VwP}^JDB]DDDd/bmLĢyޜx7?>:F8tQ>70YU0=nt" gJW/켳8_Rv\[_PZI!\&5{ٻAHBW/,aJx` FMuXR4'e(?e }'<4AHMIDv_́Ao;^3r!(,껗@<))6{XuȮ.F"6җNuecxѸNoUMk[mj؇nt\ XW|M壼(l* 8L%dNZukn ӳ2 ceb P^6D7R*Ԕ$d穑·,%X L gMx"15@DDDe'P[hxccr$',zэr<<6}nw\ QUZkm?&ߴ'n˟ w7xz}Tf@.bne>-L9(-/[yNբyިYS(ձ~Lߧ FI|n]]ߜVM$&?*}+exHD]y^W>,Ŏ7(HM Kq1q$?%HMI&"NjMSvۍy7?>:Xk*DپXKm6˨ojMasG]QrT|fwnPT ^>4x6B;p(*Cye-‹-G19QgrR!]YzL 7F122I&0gJVyI0ZBSEHDDDDD''Gw39*i.O\fo;+W<?wo14L1p}g`p,ɳ?_;\.$$SF_5~P*HyHw~xz ^|n{I?kkLY+Hx:- OMmoF44]f`~>$@e 7V/켳8.;@Eu'bNlLw{ײjRh17Ր B[߭!ni8c96_0*y;S +r Fepvqmg穱i=?%Ļcxw ZtAVba!]n@LDw&{UZn/$YYK[׍ɑv㤓೬r 8Nإh2< \jPѢUZ\V2Z^YӇFhllٰN|U6G2hCKx$*q>N psuFnu|)-$&?*}.dxDMSU#C'frt Io3l)6OK)HMIBR?x;D1<5Ԙ7 'D|\w8ٕ6fb3"""{ 6<BRi4PQYe~pٹ[E) @`P j'2 !5%yj|u4zǥ7~(28ɉ+N6KsIk6]yy"""{Ы7`tyac2!02se6qቘ N: ET ?8|,_=5044P\܍-~#5&tA9*T՚ M#R -"C |)WZuX%{l nNRԔ$$]7blJQp3<=ȃI^P1!rX""";/-r-:acr$eS8dvhYVūZT*ŒaS?]оMm8} e5u^sP%kpH.T>J P!fqT3n{XYv]'>*GNJ [ZF6BgHMY5c냁y2 N:o }lTb"W{_i7=[UKYF'jPwvvlPs,w 5CCp&Mc$<ߜU0s﷡ DZ4ENDWݿ6;-8W^.άD$4g9RSs*3miʫq3<=" ɉ+B'Dx~,N,Î7ga7_9Nf(c81X}8}ϕ/M؍Az19? wӃ7V?|,_=5D=#>=V‹-1\X.)V鷬ִױ0nI Bt׺j\}E?o%xD]HbJ~16O:/p%Ә,nmOD8=,b\;~(?{v; ΕrGEiަ /!""e野Q~<˱19NfeYK$,]o>~N|qY {޾28OfmnÁ#xqlmY~| A"z+tV&ڻ \Pt]m@wme.;>&j<5`Dy~ObRHDDDDDdn#qe΅{B;>#vBHRΝoϿ{JWQm]d2a^MkdxCC}LDh`睶w)zf#"""""bNѭ~;.\b/CA)[[߈6 N28(W##3Glf@jJw2 By M"""=zvoRۍNf󳢮6/H$z'TJ')bX`SqyQ!zI(bܞ۟ć_ 96#>=V:< ji>=VfWG7htb;2UMDDDd篹ށ%X;"TWi8EdGؙ-\4f Iir{4upVEO>w~?W$N:8-c~K19β)t`B nl { /W9υDv /WkVoi[T*< ?z ohdU=|,ߤ sWNV&qm9/`B}~jutͿZy,FDDDɗ _73-FD4~,"Iy\N0 WaT۵)aG<^;!ں+4KDDdc FIM?o7N8M!b ]o>w^}ƬJ;2. r v9i:Oxբ яx`!>:\㠔V鷳۴;T =6.->mXm^3Y]]GDDD&p⛱_wb5E8Hr'j^/gKus*'8ˑԔ$+W9Pn۷ɗ|!A N, MA^w]qq#_ue7^eX76\td.^0]=}<b"nF#YgPU;" !xuu^ V{B fQmmٰ[6Ů@s'zzc`|u ,5y2rTy! iA.2ppp?s<*ʅGDDD&59ՈwD$VNwĬS,PSUM㒐Z`DRD/$ّ^6eT4Evɉ+D";9lؽX""MM]#4uZhѣ7=,>^3V*R/,y'ødU'g008$1N' ֬5k Pp;˦B2{ IDAT3;S gTj e l]g7;6MmܗwmnþY: ֭YȰ@ڲa-~r$ȴp;vuw^ ?|78*;T'"""2'V'"2[Q{%0(AT 엗RSi(8Wr{mg'_pY y MSEiy5J˫QRVe /wr{.|g U \HK|~R'lLl 'Dmv,ĈH#Hcˆfmta: QBv=-7S Lj#)mj؇nt躯͗^^:`#} KMS?v]'!Η^icێ,7 1@O2ܫj(; 4w R+<ׇ1+jh1+hkkxڦ\pDDD4.2xgw"Zo*Sx"ѱPmg"43 lZMSWGsn @Y`Dش>;&mQE[\Z}@0t/8.H.X2䡾!JM5c֦ }h^W3 O@}A PPX=B&ΚձX:/ ΖL($lM ; A{XI>䲩0ͺ= äI!qs)NN•+c??8~"jА䵝x\lDDD4fyj\hw^J~NDªwruӸ,&<m:x)d"B|\J˫6v[搑(^}Lf{1L'|?L?z~"w̱nLl . NCocH$^?e6u8FAa(|p,LNc@؇ 5ګzV?rBcBP^u !v9Cxك5&_"5u*KZ_*f@L g`'K0i~.Nsxw+4Vky˷|x~d( ,$ (#3Ǥ`Όh|jo;X å@<; m+ErJN2] iAV;, i|מAҦ3{8DD4n7]9oVD*}k|[Wżٞ\4nbΫf_m@hyni47E8rB-}-MEdX6B&"2,aݵ0}qY*w '9ukV|W/c߁볻`!0@/R tX~m6N{H,ARƻT}2^ +Wޮ]keU8;O<Im}Iϋ^#"ijfw we=\4n.\ ٙvVy"Gy/q#5% )IS#+OmׅEqG'Ǘ.7ހCGEm}#|%gb#<4HK`tpʹA4nJx{$y2V( ,󃠚䢷a7׭Y]g7*4Z_AUVkR܆{e &a]'K/<0@/n^ T,牢 T5Cmi`xMYԮqww|)- %\]]q/m:#"""A1cFD+"EÄ5ՈY-fy Fhc HD(~(ϖZ(3L&bsbhL Εb3dd"#3rbD zqMA/KKCh=8 |^x*^FwDhB}9? 1( P\V#'OGAa[zTWcxw =⥚1*vwk@ M# G42~cQR+c;`wWߜR[%<3}DDDDܳ< ^J'#"Ϳ)<_@.f28@k7<56gxy)غ9?<5<*X j*)IxRu^JN.O`Dvyj8e ?xT_9y&=]MoQfiOٍ;%ާ+ MMƪڦ6>WfAzA( =֬ŚձxƾfeU<ȪXczx^&BjZ-9,2Srxxx@"}}}0zm#u|+(p**X1?Y.æp"4UbmeTpeV J$",GrJܟ$lChe2PWѝ?/y3(8WUCX4Nbإ o-8uVx7n*%ݷo3<, cpAf*n =z"B$Bp;>g<Db7cg^\V鷬dڸ ȡ}{Foo/:::p Ϣb}TzZK \lDDD4&o݈o{g ؔ(NY^<9;~(;U@WD0Vc_ GvyjE!5%^J'ȁD/]AV'IwAYe_㉈ro,͉1{vJxMf 2|q8׮*+](Kq DdX t(8[Ӆvqȵ*5 CLšձY2ϼF  ږrw"aRL%䲩f?NX}|~8*X mb#""1qqQZ^V鷯oB dj(Ht{?w*UVsFfc ׊e6z{z$hB_b>#egngA$' OAW|%'CvgqrPZ^, ƢyޜM۱2^ߎGM]nH;Gra0岩(xl]T3\$8֭Yo{[MojH;`plTP}Tx.bSd3. BU4rQ}yU;uho|!JȬtqڅj.<"""""Kjomn Yk'r.rl~T؋u Εh괂q"""M_k3wT.>(ƈlo҅[={pw%ɤ;v^]`!Z-~GԘT?X?CmNVw"Cf*#T:?{**gXK \|DDDDDDgbib\ 쮻 7)D"8w ǎ9ts6Wz]}@o0r2D@mħܻ'"Bzew.l~;% 8?Ԅ26_m^G%?^|&DC&rMYW=DMn؏{d _|Xf̏oۡ73-!z"ۼAۿށCG9tK5u}R%""LKNUbl}+dBvou4kVOtjEr͎ZhmO fQ*٬*r6?p${dh35c5\M1ॿ0@oӭs7@mS넞+vUְ< {XYe~W,_j~yp"""""Wwr [#Hfr{vcx$Eq'D ɉ++X_A|\hN/҃KD22sPp&M.uϛ9.^g.c0 " .Ǫsh<"p Z;6sg㽷3K[L(]qoR\ Wj8uU|-(,CCe<}PFhl׎K;ml}108?+k[´#! ^mpvnp׭YAa4}mGUl~c}iޙ"-]IDDDDDvW<X4~,". "w-Dl~4A"HMIBVzQ#|%ߺM[-_ʼn%"r`m:?hwvCl9]~ˠӋڡ7]uQQse2, Ƣyވ AmB^QoCƖ k'܎=msMyk!Ӆe: tWlf۴mxtrZf*MjSᎏ2~ҟpu.J;ji>=Vf%0鹪J(]Zu^]l͟15{PB&gj.52XtMI\;`MoD"+y0ߍjqy\6,[{/L&$шYEa8]X/`Nǣ&t;>]~Ͽ\0cTpRW`7"#3ɉ+9@3<=8DDWoG-ڧt9_9y7kkU\s0}{ȭV-#r^uC6}JO/x*'Ԏ؇AU( %DAjd2)MF0|߹()NNN2e d2`ɐJ^d288@?oZ 5;{غǶeZ,k.^l2@?ݹع- x+\4/ >d}lN4 py΋X ܢ}Xy,>V zj 'G1+ERE!5%!z";Br dd GgV #a*{ేQK Fb._9׮Y6y/hԎ.Cn|q p Z;6}sg㽷p;ڦ60tWlj|sTxh f*!)ckPb_'O r9d2L߱ehhF{CkL DlT^S67 ͏O׏pڸ _T,oG.ɤP(mn35a\dwNa߁, ˇC9-TՈi8cyX'!=\oyjd'C)IU <ɗغ9Mhi38DDMy OB!X1^y`;;G8W\VÅAvނPm Gzx[eu \DDDDDd7Z[41}Q5ٜكV'IL ىĕ'l}8Wo*N.TH_lLtת?~>lyh b#}!:9G ғmx| =jlٰv=Grmf\x穸7! %NʦAt` ?xA:|  fcEddV:o M5v:@ƅAv\|?u>nj{ ُVqdN XSjDߧ7'#MFȆϗiK%"r0:-8HܖAߧ塾/:+zm3GphY((,1)]uӃx5Pq@2E)Rg`kkhA6&oY ߠ>?hìu&mS#LR gy(>>^VP W)28M1BUJ/؂.Jkm_w mϕqaM<WTYυwYe\DDDDDd74571j2t;ؙ= ۴8e:ʉvPB9Avcp_-AF1+[X{;fa3smVO{:&Dsb )S-xxymr9\]]x1G-۪`/t Ä k۠y$&kCEz I{p.i8h˄ȱ\n`F8ȃI MoW숄 V'"r$zrB.u¶EKؘ) ?; AKy|v)8/MźVjh4&aT5Sm*z9@oĮr}ڠ`?LR߹&|L 0o5\dsȲxp{ HuZ`cޙ".`"""""y5bNX8|xvv W<8\ ?(-وĕ)->Z.|?+9s1yeS8&pMAl/~x =0yj]?S˝m>?>ۮDs?Oݱ nC4dz8a"/ҩ?2e \\\s7/x ϟMmT*xaBmBp{SYmh&I$fosͪ/aۑH$񁏏ϘWj@քS8ۦSTwpڐ`/}@Ad=e5ر eSk.>0.~wJDDDDDvHTB4jjXylTxh^{n݅ ΕmagZ:CDVT׷iަ\g9'AdiW.uªsf.^jǧǾ[{O㭽AF1j_:˦ 6~<o$ <;/N\D}sMmD"Kn}BX38pwMބh.2"ԉ____L* pp|:m|q ˆy`IV?J&F|a%}\ dq'c#0-گ\6ܴ?2?7P|]}Eh}""""""5|Xd5DfJRS0S[-HKD;޽GUI.3LHIr.1BT0EX"źVWڟV-@"(K0#@B}r!Ifr*$33眙v993'3>"޿MFN,}\-U{mi+95(kCy]Nϊ'`nRݱ5p߂hlٰ$#%1 :'tZJōG34ӡ6vΑ-8?3΄7d ID QB 0Nũ37^G/pa),W:FV KYf[;c\Y_rw FTrM1=>V'"""""ūtAc}[Voin'91Be JZ>{AZh٧J]‰v:zN,uGaP҅vS+FdF"lX'33w01̛+9w0j5+jJª!j4]sp'_<SUr5z_Ymfx1Ň1lXht_p'_>E8y"^yi޷ΔI矏:76}w"R +W"!$I{z!!!z]h1Rf{)f.GOrQ)ĜPYB^A$N7 _qY5l>.Rcٞ~ze:ωD<ŹOhyFE˕ӗxRKϓ1Dk1DODkW/˖v;t.[%o4ȉ%"r=V+%L_\y].Z\toA4lXMkS1FxbJ܎/ ?{YhhlŮ9Nqb0~q!A$"w42<䴾V,9Ҽ*@o݇ ADGF(昕׵ūe.:P_|R/OY=[\.I;ӄ$ x(.m c @>+~~wcK+>)VuK}Q8mxIIBcGefՅw| z9HDX@)؞͉vADDBH) y.U}|^HI 3ߎ-%wJ-I)wўx4)I3jNry֬L"F8e<'ߡᡈfS{HJZN.z~qYCO| s=h"}?~޹7N!˜[:HzzXy~j\eZXyĞ5j _  úՙB8WV),ɧN,DADDQ\*`ND}b}tX<τ_Ků֥"}TaMEl',V|QhVԘRj' WY\TD ;kzm! ;pEW.Rq2.^ KWaipHBXX丆Vl}60{'K> >0PyI@DDDDDU*bXqgH:s0#n>!'ŴKf='MԘ/Ifx k׵ܽG֒زa!6IFJbtOI&iNF4`C^yi8wgJ6f/ǖ?d;os$81aBUgv^w2<HzYy~ ]eZ'uYx뵗T߼e+^ڲ!z"<.Ky 'څ4IfɜX""7 ~vLΙ ډ0ɌDi)?tCA0lZR">Ōo?w } iciaE$e>!%  x{kno }۷utaۮN>Џy"'엥:( ;>zzTy3M1rr@u?x4W<tvW)Z 7lX_KEFZ4b柌hj]*lX-ƈƓ2o6V,Iqv未ƉxqCD&cybn 'N뎝< vbI f%*]kCkXFr]wKX=1^.Q)*«Ʊd,QSkcߡ."\#qr@eߵ[=6ooAj׉.Ō'W^|ڡ6vuZO}~h.&" cdDfƙ$ t:mf볻=Focy9u# %i+qIZEB߫ ol߃m1N O= an 578|\L ,7z]iwjƺ=y><菜(`NRolr[C\""7Pc*‘־Al4~PΔ:N^KDD=&6B7`ݷ :]ۖ׵}E\X$bӧW{V|?)ci%IDc7<4AY03΄;n;qb(ƍ8e(*KR0+!VǎcCKw^b"cN)ūƁIX2]؍1&vΫ>n$˱PYÓH1֕{zx7]KsKϢ$l{}B_Aރ iKӄ<UX@1tQCdq=깸ȩ,V^PNY X$š6}V[S )@u iskr ///;۝f볻=FfYu M0e1u\.l}6vA[EI'=Yh?@!Ow0;/R==ҿ<;>DbGyHFX7YT+# ϗP碡)]2т*qFFeb<j#0075[mx_{{qX}^>1Y냥M2˸HX[Gؾokٵbxg8A6̮c'X5c+w<ѷ-JM^~YKltc~ߡ|ⱓgjw?44X}^z_YmHU}m]\(.Hyjo6=hQ1zKn!((6$Sp*سB."uYx뵗T߼e+^ڲ!zo]upsՆ|‰VLFN,himnpK͓!@'3f9;},@OaxxDcYdEEؽ}Cc+wXZFAU7HA >9b~~~us*['Y[Mƙ Ņ\n[;+:4&u(M YWHDDDDDDծUyƞ93."נJ艾ã,ǑjPU'}e`=' 4t.7WcBp;' pC,V\kSX AOsw&>|a>~6  >S=3pT4!+!$\-g_K֖>3˩3e\(.ԙR}ܱeՊ>/<{ғ307Z|-3575سۇYynBŒi!zQ2 cL ,> -/ ]tO׽JƝ3ṅ NC 5=<<vs*|3L . bdDw? .OZINw ?ޟ ~^ُ^X:t6/OY-BqY0Dl>;_.vAEw‹#Cm:|\L,qDDDDD-/g#V`i"G֫.DMś۳'nuȉN]H_58!.KDzz3= ZN.cE{lZ,I7w>+kҨOAD,|:7~z"KD4v#C?6!@ޗFY}ust:[B+(-Vx1SV:dfé3llC6ϔjW7Gɨ1[g DDDDDDJhin@$k!7> ՌZ~ {\ sՆ9 %4%"">Z/p/8ss'n܎^E䣡U8\&&ghp_W'۽h/u̝"[߹ %m/ynqZm(,bQڝkE)qX2]7l<-|y[s0Wylb qЭ$M7c,USϿ'}?XVD5Eӊw܋\)Tvoх'Kx̟υC䂆0<4(B&"vm;gJ>!<s:!@qn2i6S%gX ׯ*},!K8QK-N9AO%"""""nWڝk,FcQjBW+ebFV2>D+P%B&9DDdnR`_Ef;wSJyF=P#<C+Rp\@###v(EE YD:Ymj,y爩>ԊV.l}8uol߃_vE[Uqb06}+W)ݥl7g$"""""(9[Ic."k!̥iU1o\ٳO=*se8r0ͭm93n'hD[XRίyvo_TZO 2`9@"=ٮt:o>UQӀo>#WI>֙b" ;44bIL]dN}]Do܏ v8Pj:7V.O *6#C?$JuwwCG\ Dde3K*!n&=|҈x\KDDv37_t~.w ]V)|!W.{{;w>Ε`̅CF08`u !qGb]ur{|};Panud;??5UL@9 utXٿ IsMY>.iik'"""""rJW-"Uѩ2DҎ7g3DO.k-w8'Z!D`bɌDdEKU{md7yiߟ%~cjT}fhpC~NKϘ󃧧-_ ?8tIƒ0nm]R&So2V\Cc+vŖgׯrU`l\֬L瓍G9il"""""rk-ͮ;vWap$<q3⦹_q \FH-[ 콇*2JP]wI: )#-OܛSv^;NB솔Ru~VB,"޾N @csFFFd_ⴹvm7} "#d=FM|3xoå&ۜ?':=Y⠶.:Sv_y [c'ϢUzct! &)8Wا#"""""JScyo46>9dueh??>*!~%(['yb ]j{΢ gw_{~=ڝjOr&79.w ^m"""""]UeK\_c贐We\Y%6o=u33|jzzOT!"r7)W+j <\1}/(9niUD?HAo 5 B83΄H."762<>Yǰb1o1r [\T##dK\N4}l}J$6ή>-Ư_{bu7[3,mW\n Y'=Z `z|W$]=F/~Cm\u^ƏZCD쇇7n6YEB %Ǵ\u5L)'Qَ 7"i$.VO¶=g0"C啵i `44qNűWc0D\VX:p2ʫ/ QI; 9HE;5l)A(fJA0)F()ć{*DܯR!zLRgeǛ~+˖v;tY82鑾idN,9BN73!6€S6HFFZ4'X:9y<'_xU5+2(]52~+4>}zzNOOO KqOz]cqD4\jm~נOchSkw®9NݗW5ՈI0NF 0N Vh肥 *a膥˭7jynqs[k=Б=%\D$ZB4U菜( ѓ*둕{ ӃDZ(5Lj̗""r !9_Mž܋)}qB3HDx(+%NTR-F ^i 6[[=f \0Dt 0C5/$%Wƴ]@@,-_wY,k7 ee.[ߗ\n"uHc \hw̎\Xm0 C`aG`oX}u Zm(t}y""""""RJWڝG6s. "k!K}^\b7׮>:LR [ \ڰO'9ξ#DDE sbC9#K#6€Oڛ [HOhh8*WT/^?EЀN덇Mb!3onl1;Ec>;֏*̟oV,I[nYf\%M,[xRZӐTQԊVU>ͭ1}NjևK^[?[\(/?jhiuz}}}(E\TF:Ni S -5.__ 00IŊ],j6;TΏdVUV!rZ$"{<^Mcv>+s$)ֺU_/[ڑ 'Jަ)%"rGS& BUGavL(b/"r j$o?jdF"CQ s;:dCtdUEW}hE -TkO.;<ɷDޗ=xϱ cN0#'NK)@..}/ w͆V|I """"P˨,@K[ ///8qݩuq Ufgee.ö7#+sj* _ ?+8r4ňb%*yHa9op^}f!2Ң߇KS pK##+NPh}X6<G8k"`(ݔgA4e2'A0_6[olecQjf ]}^N`S|}\""755\5_)<?,N)i־A+D+Ry+bIۋ:ojDd>EB>o+@\Np{$PuAɃ놮UMYR!bqmԢ%ؗS_X%EŮ;m`ADWe\Y%6o=)ƺU m| D +i 3b~+bxQ3 1;&Tp)W^U s;}Guh{UWHB!"]}>5ylUGenm^F||E /\\vFX)wLuƉ2ODDDDDQTxeep`yPvJx_-D.Z>+s)؞s* _ ψugHdcbD4;+Ģ$8T5HC'ȍ%E 6tZqB3Ćro܅^}07w]j-=,m=ߓ07waӚdhx d瘼AGl}(*7zT#RD~+ue;C`2튚utAogɓ.mă c@%Rp[Qԉ^oC^A1RfJ/0 !1> e}VNjj1bkkk77+YUk5 mSA"9+g  /GIY%>{PU!~X̥ `ee.CNnz6!Zm'ظ.-@u """w'ꇿfxj-tZa^˗׵>.?t;CJSE}ߝzCV[=P: 9dddC熱1{xx[Q>t)IOk\qQ0NKM^X:0g.4[ F8SBZsUQ9i<'8)"UDDDDDˮ7BO/:::PU;R4)`"\e0& 㹫^mq""rkqӄ\K׵B^](k VԷt)z̖N+^y g^&1<,_M`:ѓU<'GHC}MFJ^7Δ.;2/#>;QWrW/t>*C) MHVRm IDATԔ0>!CgGKWWG' JS#E#&>eK*}c~ KK '5Kؾk/~l6򽇈Mv#/gnxiŅZ .^ +=(}} h ];3B/OO"!"I^}~V,rNkuqEUvOW\w>܇!Y楸{Tq( U Sde[ݍZEIS>QSibQ}#Ya^&&0,5˅CDDDDܯޞ\+.,r9&E#R Uɣ?BaqD>sPU!Sq߲XAVru3yVaט/]9#<2K 4V}ư|yNˬk ?L@JbO '+[X:á6}DrVgux^.^tڡ Q8["\}tZawy hh"iDŽY ϫ@T#fMDtHu NɦٕvG;P=x!zriQڋ \Ӕɜ\""7žJ.7̅fVaYں75'||Ud##`8֋ hhj6>V'"Y}^BB %GzN+WgJЊTh}鲅x|L8]ڈq;}TXۉ H9~6!q 1&M$˒锱s@""""`KVUfzjc$kVI"F}wܫ*7M ?$Nb?bՏྕ{o uw8>sV3CDkWݏSWA]ɖ@u*Z|!""HOKZ}>^U]+GayKUO_sYVӥx LXuD엯|<Vaxƕ4}}}KqEۭCWߨK[C7=kwdt-,91&#j$%A< UUYjT#E#<=%rZ"rc/.,"z{zEϟ*~2.qUsr ˰(Hą>LXPŢ$9>7#n'\T5A rWX:8e濭0$r{l}$l}?#,(#C8=8~>rV;rLbGu#XăBڞ?'e(؉WF1Osr-L2NFK.O^^0WZ]jI֭T s"2<݃oWWT=׫3 y'o p5$ K*DҎ7g='!2.㲥]X?}a='Ae?Ee< ˋRpD}x{_yv{^Q=Q^ƅ-}Cx}W>7QUOP^58,N?ŪDbC}#KIbs-_OOO {juty= d Ϗ|X[kv9vqs؉`ᝳphHz:7' 4c2BpbT%]y""""rY٧(XtR5)~*e]WUYf45--<Um9tݍ!P*=Sb?WV#' n#}\ӔɜX""Ndx ˛WTvm95+gQx糫Oc^Z%Ueܷȡ6 ”Y\ D$ Fq۸qN;:8<smvEEox\嘜.mtq־ApZ-(E\Tkfɳ> }׃ayC i$F})˼M !""""W DEG|K쏧D*XUE+NdkWRbV9Z Z8]׾3J jU߄ IZ>D\i<䰄iHK}^$M/+ۭ,LSX""kqpL\CPyB󇿬fix='+>7CaĀ 74Oo"j5 |F3Χ.;<)e>Wk܎C}SFxO>?<&mV98vGw r&`Ę&#HC?Mՙ[%olj ˼M CDDDD͘KաmYAUfW*2yJ<]iTUVՕ >xovw !zl\̥ џ+-[1#nC$Gqiz6!Zm{kWerP] ]@DDߖ$4=~Of$r"$Pp?'..V'"vNnUx^Վ݆Vut]){pj,gRZգ'M}Y$weWϵVPQU^[? %vWa7kh><ʼn%""""v;ܤ;0ejUWTyņ]fܷ57rd'>6۳=IyܷDw(K#;􊹩DDmRឃliև o+327w]<*p$rtl}k4XPEbf!1> fh^m2B텾 E>q[WܠӊNT ^Jw7*j%y}?#L+jpѦ}JUko肥jzKGۺVXmcZFQa=|R0Z }'OS||\""""r;^^^H{+4^{zy!q,UvIM<8("%YZ`=~zUýU_̥ ']2!'@hX 9cTRV!y>:ADDB(,oV|G9a!z"6NyRiEkG/}07w])R/uw\T/*sk "+<Ѧ0\t:\}ץv e^lZ(~X:ӧgq ̏݃|_$,< Y|>zhyIvV!N w^񲚺:Y.jj8///$u'.|*ЇO@Tf ϛǤjSAqK$И$MSeȉ9Q=٧-[_ yn'{ ZZ-JM§,ZF^Q=b#HIDay)zCx?}`Iڇ!@w1{mum8sgʛ`"ӊ!ھ|qޘ?7 kdCrzIbFS MhY [x~xx4}Jo;^7(X#}ZqL)ω$Ucl]| $dL2NFoO/.54`p`@qc  DpxyyH"WI)`p|>N>Z[J ѓ#k>yn.]{7 >:N(5IfɜX""^Vg ]GdԹ GlհP̎ œHıӵyVj]!NTַr+R17'OV!")<2!~>r0F3ƢvW-(8IQyׇÊ%)]}R ;~"""""b9$&<_#ec<8"KLrLB4l{}36Cj}D~ב zz<4*kW/˖v;t=յ ɛV׿39!^sx~u2~OKuxdt$.w]󶢟.k-2/ѡJ` B;CDD2)Ęn٪ӍS_;ve5E s;^z I%_~/x(V[?~QIRQ#a}ik?nkZcR66NɃ#RqqHRTڐziTB\*콇"JHڄ(N,Գ벜֗:'7a|xex?~kGMX?ioYE竅K`."Ѐ' m1"gjhlr'c"""""GIQ+펤_SfeXu-DviU1fi,2.~۳9ѣ .ҮKDD7n$*@/EwCIS˵xx2#cBUyٲaV-a!ش&'*FA\TCm6]2d5<4(K~1={e;pzN+CN244?zDh`*\nn\l|H"""""r.Vu$}8%HInvN tYKU/_Ǒ<|}tX:Sh*]XP~#'n)+sOvZo+$msvL( UVag%% +ݷG`ˆxDtHƦ5ɪQ@I qSbu8AD-@?3cϟԱqMue?y':v+}>_QӀ*LRŬ)F}\^)Ϲ?ޗ axhHN$P>:de.S]onSϿ=} 7Mhol} " A=TS+4zmȒ~!@XӒAJb~.or<:%xHfp^B ~;}8\D$YuPь݆Vut=Sd;bw1^Q׵aSZQVQ+}?/x@Il>TH_y>8>>:G{{,gpӕ-r4;lP7#W4DFMDSXq3DO7,/{ANMT]Wlj%"Q3M1"+sS,,ok;an1xD4COܛWYLn000/HkU~=<<4ӡ6.V7[H. "R!*"xt_tq$ʹ+/j׃8Qhfh^F;/Xxlo븂9_`b qIJ_$"""""R%/>N $$d,g'G2k/aQz|p-DҖ()$@H^xXӃDžTWwݽf2""eŸHm.p4_] ZZHI &a*'nBCS͎gxbd2gƛnOO1[^Uи⢧v8 K_L܎Mo-׼N-އV;g ɳhhl%Er&~>ĸsZ)nbq2z+Ft !zl\Jl޲!z.cڰO879'DD4vI7F_KҞ!@GLǯ֥^7_<9E=kfCۋX93VAD1<4 Kё[kO).g/۱(H޿ Itvq+D__vD{ғ"'6ڹ`()*vݩqj$iuZ,R ō!z5U`aL}]uDU7M1rr=.GE7Q@ňHbbLӓJ=&S=;M>;'iwjwiI#J5E-$1\ 03(`Y_;:yֳ5fg}"r?CI;YQsK)拒z}M] ZUH^%+%Y)B'rqO1\ubN$"""""ʪѓ&R$kG$N2AnmI |dfp/4|ߏmunkjp]' 06/WΣ)x;/D\a;/傕dKa;GϏ}_%AHDDDDD$:R7#@'WVPE@ݗa(p}f+k7+gRmXa  1!iI 9m[<[ށ̬!a ۝Yu 0VXam۝W V -6ϜBawJƌp3(f삭aݬ`&"迂|DoWvkm۱fI ߳`̯xVTJ ' ΃kVbξ4TDy0/[$|YQ%N8DgU͍ަ `:t" OGQ<"6D' &E!ze됒t's k`N>RV3}UOTDD$_[bI hu 7)wý+OÛ$oRe ;L<й&"U6]ݣTm!uX0¥'&܎dL=cxExɉ '>B<qB6,V|W*`wy|Zĭ<_-Qʼn}8Htu5:jNKDWQc@TxM-͏8_aά(n>It:qH/x[M@yE a`mD#Q)vW,],d gpIEMS/FеP](4Z-4%z.Z-iD46 HLUT@fV.3D%&i1;32kcxeVHGkCV}('2y`͒/ŘZ%^K)S6Ι=/ftD$[7A 7 I{U:cO`=!zy%8+@Ua{ ?!!%""聡[8%a} ᧙Da蕤݈]9N:=ޯ&%"y迂CfwD8.&winX.X]}ꕒϷXm~tǏCt- m`6xɫ4y<*k#:jm*Xf+t"W+dZ%ϛ-I1nE 'N]y8!F<""jzJ|hxjG"w%&"nE sq0'_q!HLT xn._onBvn>RV{-DD$g\PTވҪfܻҀ{Wed"I"n|AP0N "ڞg4~krx~}xe;h_w~ss'+*9AcI7V&QanIoxqӢ;s~A8i̋aNRDy0EoV,],>uttJn4N("""""VmT/F'Oٳ E@` ^ʡ1 HKMFJjŅwfdblX DG sa^`ǎHV9+.8'M ѓjl<^(HXym`dmϏ T_u`ijX 1/.+^=G'L@Ld0bo b ?*>}qBt[ť¶42K"9I>ABmVK~r'EMslnbب ZFwށe3RNEݫ<)pWCZjbށxg/ &ilzlkw`{v|5挠N\""u͘*> 跾qϡqDWAJ&L@|{!^[1 "/7ST5|J7i>nX,h K`jxZ=_4d"$""oیE2[}E;JJ!pji|x>j.2  H+}} 6UԹ;WIWdſ:23l^5.*B$֖FWv,V;T7Uguv KKO]ƗD KbE2ѭ Ė4ŅMxn.ێ] ѫDJjfxiیЇr&i}fY^^;!zEgCvGq{BoxMJD08 ]u_xݸ{!~ZNX""͖4lzllWTވo{3*w퓤3z90E)t38)H%q׍^{ҤInm~0__eDbB,Rȃ0iI3 yfV6=)Ԋ !DD$1ؾm3^+f>~юT#_%:,Hحw<j&!)710zZ\|)1v|x'Ə𡥒U&QH ⶧EkkęJXGD 9I`UZ /fbVMIZ͉EDD=vPzŧhnӧ5w)rHR*<ln2`y3<<<9j8 YDu gɒuHZ Kp!z Cɫ+XٹHLASx )""Am8VX"7Aӵ_;2DwIvN6M5͋Cg}}}a: XZ9ٮ񃵋eFaY8]!zO)3CN'v#l֦Fo9,x['>= ]h0V-_BAH]$پ74HnPtN,"""ț`jUTՊv‹^E "Qr>"t.5 &YDb}fV. +3Oms;v #/'!""\xLŬ 6T7ؠlL,_0Qm4߽r{f8h `*&ƭPVQrh[2<BdRD(sQ`% #|!K|g_g̀nv0OrzUйlI […fI dxH<U8gy8NmT/+bcy"! x%= ~Z"kw 3+OEdf堧)c1ё[#h{yHNP"" ^^Rw /\]ҪT}IS8t ^o_A >l -? べ?ocw/}ӉCGDoѵ *J[ V4wtIkl ?E$m }n`Avn>vfd'ϿO .8IEyrYuܸЕt$,RV!RĄXĭAvn>}Cs1UǕlcpFyށ|&v IDD1B?}jiT֎^Iڝs|{G geU"RA`8ɚoa8qۭwPP?NK8?J׋ )x)Y_xQh|kwp=ih|y-;QtZ-yQߩ3Ŝ`DDD" gj%OM}# ^X[1O};_a bM\yh4HKMFJjŅwfdblX ̬\$&Ī2j v\h }fVBQ~@i&@V~{!LH0"R0A}}'"<4֑!L3Vt(bU W-4TH־E%g+nU7;DR[{C2wؾuƮ*̘DD$ĄXmH5s4]˃E+-MmS\ ID=:ZyZ_|ňmjޕ%ODKq:Vjkf+t0vG`ۗ<440CML -ҢݩvB& +p>1!Y8VX~#}c*b#y0e"}c*^`?[YSFĭQ BDDDr[7Xa 2d)be[QV݂ME̩NBse"fCCk~fy1?~&4x.*n➫;ʚ󈎚#zO? ^z#n۲4[w|:QtZ::eEN$m IFDDVm$(oULPFL M hz.UMT&t>":5 ݁ )MDt3!ؒ$EMxn.,Ćde nE EG Z96cOb#U o(oj0ce-byHuj%UOZHyK~J џe^FIOÏ~]w ;7i0n|P[DDD׮(>eT>K_0N 胰|LN+j]V'"R}LL#\v*jB^1W*9!~8|1ha%Y>GS `p=oGpldm'\FDDt oʏF≈Fc<]]REx^MG\ "$  }bB,fZEܓCq+buaxX3P#1!V5Ǹ&q)zbۖ'aU+-]0t!d=`> a?nŜYnopz_<8DD.Jx~ĉ 5D xwcI?*i>w/EH]h Q:mUW yYM>hMD$UX/t>bDxxEpP,`#"rGLt$oݬR)#O$%y%hkdvvw۶<b z'"z vm!' 6T7ؐ]h}}9ciz|Z +J"vϙ]~mbՎ8GoS|qS>HY}] m\'zv4TmC uU1%i۠d#""k ʚ{X+k"D$qNKҾFg6=͚z ^؏g3@e,xwQ @wdUAy`nx( z PDG !;7cjh""9]]1q҄(Lje1 9m$H?I}"ݬA$"4ξjo5nLJ(z\Ym~l~v1100(YNPYsQs$ê a%iig6= `NFs8x-c(eKb=/Jl6C9H ʛ,7{We[ ʏƕUڽm|H---3a98M~ -1!q+b9;dkC'syN&#Dykw`{m˓ʼ0<ODD^&&:1ёhڐϾ8kR1[`nBQy# V_0'񖂔A2""d6k Ai7w_^ᕭ5qh$ ڴ;Ƶ$OyKUZ ҟH;K|DD$+(7271!S1;32kQ_dM-97 Ė4lzl`N-[{3vUWbuzB\ehgN3$ ~$"""u!CZ /ԌPTx~#= 8\4]y@T7H{E5FD$}bB,2rqD6DST??y]Պ|p]"q+bjXa JX&+npJ]9!z""" L:Ӧף=gjt1ё9V3?}l%[~Rl{8h|lzIťhІgCT(ZOj %k[K Ay1Ǿ2fZHω}.!wWj9BM版$-iHKMR\(:RЗӔ;[ X{ 1!V/r GDD4cZj2RQ|8RyQWn IDATPV݂? M2@DrЙ0V[ ː/fXe¤Iszl. 8(V3񃵋9y<ɔ?:RK>̦D}ع{?'T+sNݳ˗j>؟-Yۓ&NNF"";_ԃE ".j单^7CSmnx75X\ZODtuUh67֋՘hy3<<<9j8JM *Xy<@n )]Lt$o ceB?v$&"-5!z$F^A]3d~&hi|y版\HIZ S KFS`CQy#◄q0Fp^Qd;l 1mٛl Mp8h|wd3>!~8E JDP,Eч=P~Ot$( c1ƨ )sFu-<M版de(D{(&4OIi\b ;1! Kk#cOV\d0s'Jh͜I&ǣP!d͘____8N&|4<)DDr>t:Nj۞͸H3&<`b_*!+wfm=d9.Ƴ='l6'&LZm0Vz4(# *ΙpaԿ77G|$"4V1diHD #j%s WPW#%i5C`cgkw^Y9X,*6C9ypUvUD7;@D$syԙj<6*z,;/$, .\q55GVUR>;\_ѵwZO'NcIھcU,Wr\^{MKI$"Vmp`^7q'7 ϷY7 XHp 11@KDBP[yQ`5Y,<D!v.3D &ia}2vw@6s +L 6j8爈Tw-\:pDj WQm`ˆ16bN8G{pHDl sN`2qb횕.=$Ccc;桦^Plz"Ms%k{HXHdrʏ2/1!s<%VXaƿ """@DDDimľ `VEG65^Xq]$9T7_vyh|lzY>;\Eex`JZCΙ,w@cj埞k;[N"'+ `S OkU/= I ʛ,hvj9?Vx/W~)=t! 2ըWtĚ- {&@BJ ѷw`gF&a~1ё[SFؓ1z꽵_C82\HhF^ah]v=XZ9Qd@./]¯_/1xťٍ=qI.+j oa6+ʍg%kHXEM UiE܊Ak0w2J։eac=ΥAD)<>di% zn8D̬\+,QD ?USMÙ ʑ՗v!~Tr?M~vToGyηX`&'(&L+ hp@q2z5>p9G&ηq斡vX;o->k|'"_Z,tdRϟbP=boLAP쎅FY]1D{ÉCy'qӒe88|65(?Sky!  PDGue1GekXyh&iՌ7 D$gN5ߥhG-pV'"R%V2DdELlߺY}:+ݺ#QЄ6?VFazsK7η]UV㗄qRDDt5 K%k'͒GOFIiU5v7qޕslLqɫ[qH/jBO[{"=ٍ} pX1,=K7h f@YɄ锬I'"a2Nd"" jj] a_fA_f˿GyjܷzlA٪13,HDS.I(󞘌5 SD{pR\&=MOdᙧ6SFQ&713XuZ㇪`jh¥^;L-c0#[>~юhhBy-]8d9`4wVIj!AS`du+AҪɫ_߯ˡ+ @MV~e{Lt4aXч V@7+V,jVJkes%ìlI_x/8+1(svǪ=}+W쥵S۠sxj!TS]j45Z'iB"0uؾu3؛~ HKM}Lt$VĠQ62d!&:R0nE7Cf'""cjqO;T֢ǮAYZ/ p-^嫁* ];)K8d_}s8^"" 6|tξ˷Y ϭln՝} -ݪ.|RވYjm6򢃈Tۃ3``2[6{ݓw-d!ʽbFd=O\9>Cy""9]]bx^jkjpjDD^ &:R!c%8VX!M4<ށ|&K-|юЇ'""U2V^"oA-VZlhkPMw?秙s`N斮@vUT-h :)mjռgGISkh'QT(hNT1Q0CG efcW,e=7̠5һ/"NUc67zOxln, S`$"2!SFdRLj8Dt'ReEݓB̬\EbBd& 7T@DDj1R=ЄKvgNCi_2{㗄{-f"'i5dY]HlB[:q(2\ξ Z 3&:9NJD]FamwVe-<=`!(_};~)txs!Y[PSoy0DEbA0 & ֡ޢkp](~S=9T]7C"R4ohS1ёlW[{Z6޳6P# ]}$p:l-oJDD"q+bp{(&D[<)I"Dy%32}fM DDD$QЄ-!|YJ\N4]e f%a6?S&)6ȧ55-:aw89)t5 O,u\_f}xe;܁pUu\FQy#Wdy%p:x?UƵ`lqQ4)fm(.@qi2>;,iمn5|X STp>7C"R oi5#[ ʏƕph]*b2V"1A~Zi5;n5jXutvL}$r/XɳK%&"1!VQ!^Y8!~ZoLK;0V֊RZaB!\~3\1~P% 1MK{-w}uz vnQ.xXڰda'y52z(yZ S%]SQ^e=Y'M/gU8tkWD5_*P@vGT@\I V%p8,0_xd~'IqC |$"j`jhk1ё#=Q<$8p^k|~VH[eۿbe?^7M<Nmyը=W<3rp0'_kC'#%ijO܊,J~0zxD/wxDD zzWLeWw'utvsZ :a*FfUu.Lt_yZOl1U6 da8(ojXY Sw*(#M MnIi ,5<_onBO]]h,U?fs $"}QRb;32w*C!HKMBfV`mGbBh?ޜ3XunMՆVk?n\ }D  2 p|k['}\^ o-FIu;PyK䝬I%*ٗ$+w/Œ BO7vǪXlxtd8r:wp2=(D  ?JĪ \sK&i1#(`̅uL M.= ( WRZ[ZմKqw ]j864S>Ƚ/!E}TU=ZЇo8=<`г<Px5#{z7G^L 3Q`O??Żi "E Ϗ'F~~Vrx> MP"ϱhf{诸W**D XTٿˡd?-RVsRy/pqeh)XwX8ceH`VcP~4355|E?fLZ ဘ(dly cel!c_FU;ժ.Z&eRO@%yh410o5_aodP IDAT3sÇ1ё Ȣc+(j ~V 2&r|aj "q)cxޓ& #"[7OIPLp}c.ulmAZj`mZJ""j|]CZl^72sTjYxU@kϻya+3Y6Poo.vѓ07f;/$ wb.GQy#O +:Y3]g睄WA-SEyhm⃏Hޏeqr)jP`Ϭw2~owܪ!y5`>>ԥp8mZ;D)xJ`Hp 1b WmO/W%S͍7.P޺V[pmo ce-f(*DĄX&)RACJҝ-9HIZSCA QBjqϡ?z0̍R8*4e׳;"R7nԿt5 O컬np;/zkyeyxwAPeX0?)OOlAEj76r)PA15XށA@uyo ʏƕׯ s徰;(,5ox~XYUyZ==jڥK BrD,Xn0󄈮+,Ql>-5y%kw`{%=MED2CU#HEOݭPI'!t_vPSoh,MmX0g``'LScyOZ8.N_[S{0tq(?Ph4x`McC2jp=w!;I۷OQz\~,ZyP,IKw K=++=_A*j=&:r+kZ5CH;I9O@Es [Cŧؓve|q6Du\>Oؙ)$& F]烔3y" SC?-hvjcxr+D |EܪN|2ED 50p+y9Tn PIƥWށ^^j!zycU,6<~*]=ׯ!yƍyj' j ީܨd33F1Q0CBu\kj\( WJ۝o'jJW& ": ; rD,HDD"q+bp{(*DgPj$Vď+ +,ƞ,<6DDJjqg~(eeRVW? p:6B=^y񂕓ip`A(9Vj&8;\ 1],IWEoyu(:Y=rdUCpǪXMBPzxVk`y"i9(?)9^=vWƽWF;j!DE\ylwYy|8UWS3<*1! |ń7&~ ٹ_NN+kGQЄ6bx#`x^&MSg_|n;oB M -M[ +U>1;[Nힻũ?cMou9ys0?MM9 h@ڔim?99'9|<|T\:9Iy]+Ã.tݏ-SV'J寤' ʋd4=Fݞ 'ڶq'P~nN4݇&OD}OQW[N)77tN> `jgpZ-?pb!ʪMxoNٷ}E|+.٬MXXV"ڍ)DՋ: O8""||nO+zCaOz>L8 nA{vq?c3EDJ=o#G0j(ٴk?7I= 3Ǐ_TxuODQh4W7~$6gn3n/C̓/"Va;U淟Md+ay"iN=Z ˂褷CgZ8Ayq٬BMC~?i5q=H֟N,,+eNhXYu^2)j9&'gx$*ʗbXSq!jKc݋?OCֽ+WT`(,I;,-GDTU#;Ww8 IJpL2_m ''qU!*GD;9UW WgʄBD44D ضV_p9Jg% uW7־/z<$ZJLټFDwT8w3N7괰 -yf|jЎ we;cE>mmǬ0X=}ҋP8"I@bpz^pHQ8 gHYrtB܇A6H^]z9iWK~ͦ^f(Ae&mhەJH>Zldeeaȑ˔5”}$DW ֛Sr\za0wŵMI6kl¸;8>ܓNVu!ψ筶jB&W\i PmҐ v4Z /g-y9}(3;!!i yf=:܋ h괚 GRD'W]:Ѥo ˹SjjK4JD/jJ o]mkS(_j% |}k^\xܿ2xWc wTiEo(Rbk!ni+[̃"ₘc288҈1SIo[ȕ(<Ս`x/q nǍa٢ېg߿p>d{XOo/äьTɒP}GW7:EΠe` o[{v{꛰N-zz䳲#yPH. ʻ=^VW#!A+;WmvL2N_ўg/B*':Òg;pw@+x=\inn!dȨSrs' &5@'0ZV}hbe_"J!zb ?н5?=/.8/ŜND/7c&Ca<8HB9I}ߗR0$~u 8x҈vtjn㵞jOxƏTZ~`%׎m5 3ϝ;`0^/Zl-X|VpefɖeF*~=ª^*vϖS-aMlt{qYoN`*Gy8("tz˗,!I<O/L8(%B*U mw-jC9Y QQT{ćN{y!j֞ "K:]#euA-GDLb""_d5w7)*DGXdARnج(kCCwJڟz %Fb|JOCJZmAh$ nJ#3qܓJD'[Dَa8 DDOoxמ?Xѣlqeՙ|eՌe3 =I·Ή=Xu)3/3@/uQJ.' ޻OVmZx`Hbr펦[rRO,Ba=^Uvb hnʼnVl]+T~fge9   ~XLD*ƭ\' 'Sc5'""Y[XVe% чTVUM;{Q$Nlމÿ)(H/0NV'IXq@xѠzκNGuI*NWԶ="+ tuB-paWs{vbaYUÏ._'0hIt/@ _{࢛Dbʄ)ۀuZX봪~(VRwNǎMCsOqOQtwsQyOad!|xl/z2===j;v,q\ps tLV\X_-/7PoEw0=3wra8ѯNM[d6NU+A"ɼMUcAyK^l"XQ !bNjҹ;_{0ceϕg<3/nw8&z߄q'p[H@Dn+Ѡ`o>USss)CT;c7Gz1 ahgk+SUY% uWdP8uomsW>า930ǓޏfZ >u"H9'Oϝ(Mexfe~ٮ\p8=tbſn +M1OT\xy =R~5~w^,n} ʳ+fٱC|eſx< ˍgxH2p{;&݃W"$ziXhqOYp;\ss ɘ9q+ V"$(mw8C<+'zU!Ϊj9- ꘌqNڤ²T/t@bxi͛7ȤXf-⠦_5>A^É`0%I2:)fL0`2fV"5fNHGE𸷶Kf& -Dt]n]weO>Íğ0={ϟ`H77FX &ቇ'~$?~6N+>^2OV}Yp|~<7#6w"dg I) 苷o\jm{CY(k²<_:>I9WL#x{;p5IZ;>2~QzSaxNkx~Tw59DDJ6k"CvbZ!ҹ6[ %ߟz=~՗H^`&Up{Z~zw?I$O*8z- bpiX%7O;&4&|?-DtUnek-j6ȺFܿNLsM 8|*p}uO/cݛ眉VY[ɜXa&4dAE.  XX&BVp{ "W.;K@'0Z.uEDDg?YmkM Q=>t/Y0e,yf,_r'6V]mډe%78jI_P.O+|\SHy2a6 Vs(!R<Ҏ`Ǧ1i,|OL-0cǾCۋY3 8@HQ|3E0wտ=ۇ (2h1bĈ_|4gBHeYmi1Ow(OB }~\πϿ[#ʾ,Eټ[8))fLH酰f-bP>Tw{^Nen;֬]/7ooF;[hΏDV&*A򞵗ε!;+SvﺣD1?KYh`W_x^\lolbxR,Dz'ֿIxBz+.ǚv6k!zCaѷ?UI"U#;'&i5L1c1&&jD C f;6͙>oonHFQ8NZ4%ƏaXzDmqw+>A><؀"O>̓F3&_pс0ȑah0ryDϝA4z6͛0;B"ւI+_8Fٲ_qGOP/(~oqۆ#Nxǹj1LF|k_'Ec\#VdGڬEx{Cu\3ZݺdUmjN4V~-)c* LHfyUW/Qyc \D$:Յwȵarשi8<(-_`0Dަ oU? J`ZW>#k0PJBCa=?;q=&HsskQ0YX=d4+ϓȲnbT!?:H8<W;tA7O4ewb%ϭ. z,aH\p.OS~8mF$+8/;sV ?6IYrDiQP_K޻O1m=j~?sSRYr^:/Us`?bh! b'*|_jtEUer=D\.KmC `%)o+0Zӈ(}uZT/% oĚXW^2IG@/hT1m1";+JHxz!^Xxٺ1'V:~gdF!/ >sS%JN\Q!k$2Ac#v\9d .ssPQTQcPȤ*9M!p9]ڧQϐq͝| SV,'"74D_Y w) [XNIH]!H]b &Ca<Oʄ)ۀ FLLXU}Gk)+Sq8I~H()* l}n/D*<Ι/,+F3Ox {ϦͦW>@mmמ|ϮG/Ɂϡ?{oH_=b7<)F:$k/gvkVJvxzaܕ`*!Ag?B2>@DmS ? ٪L MnOkRq~LEN42 i5q[(IODeS}ɹqr/UV睍M  iC!jl]vB[w7)*ʗbZnDH-V1|`zW7?Issk1Z8X=^p J+.|5:(vn+_ S-ҼspBFܿNɮwJ3Yو<"oNi;Y0 ^yp9)5KI3#,cUjh>f(w :L!k%ݛ PvG|ZεtM6n2~CaM<;jªE'2*lbFYxaxi͛I/)d]ǸX!Յwȹq {2\MNՃH*QrD"})&4sf  GpÛD4VwYwkۋ߾Ccړ/ٕ(g65jF~wSGaWb_~DQEI&#V|)ʪMw,8HZaP85k+Lkhp'S]ɞo괟J{ >TGUO4b[qDV&;R;X JPY)Ǘ]"*&cLDr ն[urn67NV orA""k1 xn声;X_ G%1QЗ8;ȇ7V9@Tl-č:`\HXub4c2;mtzDَ9G^̚QB@H}.7 1ϖn4fG䉇eȶJ bn }ϡt+6TVnFKWsɈs$ B* CYbzZε x=׿?hG,/ ?'Gl)jELجE(k%/' Pv5좵kZXr|ɂ!h,Zªaw8z'^B<н9oG15^B [@%+Pˈp661Y?3q{l[UY S~[HD$ooe[ QQ4k:%%D_Y smJdeN VW}9MسY av slVWW]Q'1#Xr70C!𼫉UC)a_N "w,DU ~bW?}Re&bssk1sZNÛkD)vIB3Se;`?Qfu&"cмh5qq@PJ^IۛRZkp[H GgO[QLO}AX8̝dD-6  c85 ?z~%/$+BM t ȡpڀV>*6jĚqo_ _U ~Y2mే%_р+*/MBB*rEHmK|exǖո2 Xd/Y`(?bQVzjWCrݞV>#JCC<_'*%<=i$""Z~ w7)j9\9)" dxNe7T7 0 O$s`X&KYE&|75y(Km~"kt{%p.93pϢƫs2[[3*dpdnusãT3Ƚw`b+2?cxNu(:'V_:O}K2O!V1(ݏ?u m7.*_jQ";+Dr W5(k6㩪wb)w5QY)g[_w *ʗJVox5VzBm޾KD k'2%/']NiS^'q+d²_iNԶ[;@?qmnnّ;YUDAjDDDB-,+²rk;U佃}7LvV&L m"BdRLby)R^/Jx~Zdѫ~ܩ- 6E4kn,kKG4<ɨyogËËߢ4o/}wߊTulY GQ_.ܗGR\:_Xصg?ǏH'u't Wh2Y@H^As!ϯg6kP-ԥ^}UO67{#Rj&版D04DU -ӗ,S;Po[ ㈃+t:L.GIDDҌ@\_dK(ۑ*LjaxH&]ݨB8rFq7݉Y3 xuHTy^ nq!y3-xŃ}ݷ⾻oŖ}G揰ã'k$,Pe`RJ !?n،݉Oq+V<<*KFGGYY߉U=Va2o=y-!kRz Gfm%[un{#xi͛I*N {kg:/z\I t;+h%fx^nO+,yfAgsL!B5W;'[ 4QQax~TMx@t wM;_֕?ф`( `XJD'' 03a3sx(Hc,v. ʝ0N ߕne;R܏[jt{Qs lV3,,ŧN?<_/εdF U5x[|X|Felw5.SZ0 3 `^-wز"ׇMbjPzL|k7&p [SGtӌH__Zd2?~?d@J<cc놑/kKk OѱM, lˑ]yÉ_;ph# | :{Q IDAT>n7v<!jW%r-TsuNܜMNWu "/3<J ?<4_<+ʗb gJwi% OzyI29뵘9Pf-^I鲱DDL|4(᪢|3NLD"}kpaǞCZhulu-HTX:z93j$`~7:>KZ+\k@j -N8\$m㼙'dbFAfLŒœ9/; b!b:_sDi5E_ Lv$G?bpL΁Q)_Y 6k5ܞ#ǜX+WT$/<؀_t ܳmk}:hQ՝>ٲ}$۾4O|yhۛQ0\ ?0Wɠ=ُa̘1NnuLNԊtmF8Pw؏C0Dˀ|^Po}R5 |Ds+֬sWojR7 0 RXShnw_y]\Hj};:۬q^ QBBzB5"J* PJCԵ* ϻ8CL)0;HLFV@E/J>>ܞV¬O*5Z8gx"J{uXL1u.²S-}&m:kkŷW|z"<ew¬bD$9EEN4bز-kp1C-L wvbN21;" \+#F8{,Ξ={s8< D2b7y3HqRm9giڱfmE`(1봃+Ƃbˉ{/lBAWC\i5D yf%ŽT_ VWр̸'%toD*ggx>e2֩_Uax^9Ny9H-_Jc!uom…R戾M0gƓdtZ ,S̘`4do&ODJ%ٟumt9ilJ=D#m~Im3@OHu .UTC,'%j>%uXkogODҪ_< /~~1w*ze=.\PEQx[mmæm{1rHdiS0cZ>,y9k+ϟ?ٟQr5 |Ydge3H(ghf-²HլⱇS'JlK~\!#B =^Xrjtb c'ҥxx15x*vςY5|7;s6= |94XZ/5BxR#w[_";OHVnэջDN~n]0~٬g{Vw{Z.]{\\Q!D;B}E!Ds$hH>Tߡf(sjbH_Tc!J ݞVTVmB0 _{@7/I2a6 /z<3:-oD;&sIݓ-mlgZJ<|"6gрHu .sHU 0~,_v'f(An 8VmlGK姿^^θXzJoG@ټ[ BPXVPs^N4e?^KkXXV2X~S);+3gipd0jˉV%Pεao39jW䙡j^pt'1JSRcO!WvV&;HflBgmw-ֿIAvhnʹ kT{ZtqܓJumEَF3Ƥvhr/ࡴ >Bí}+7;f34YrDNOoHU}p`?(3<͎ U_YOQmkv^tqٟU/ZKy0mwm\D$&Xx!m)1Ϊϥ,y9a20Oz%/(q%ߩ6kQܓhj'R)_iNԶ[; vnj((Ltc6djaY MhtZ ,S̘`4d̄hhe<}N3KWT893%h4_23mMZ`ZN_GDJpG8D8rFUVo=ax=%7 ݯ{3fZP:;ŋAt7܀G*c R>MxJCD~t` </)&! rU?7G@O*<{5}1!BV~9`g("/'""?N7'9ʄ)ۀ xKytef\<o_[:gYT"DFGNirzUυyB&['ȂD1LF\Q, J+&A@@S y0b6k$AU`+  C .ذ䙱Gfz egrX=qmCDžT;Y a VY #P+(NuUܲCimP`'͝12pM )H,D߿de5etZ ,S̃MFLF▨$"JW. Zƌb5l1bw]sJ^kKގ\6?֬{3|w2KW?FEh5qq@A SL0{dV>M~-D/aTJ[&c( ,}BK90 ?hw,^:׆TVU+q=Y\zaNYĐ7<[M2Wyafw8Q:7Y"?ߔ ve,UHaLFV@E)nqd$"dJn_{Rk%dENy3-:2j7CDC,,+Ev5!_+P^/ eA"a`*':^Wc y-Ӫ|vpD֓ ]1U思y"Qax~ "CeQ9 t DDt/ ӕ[ qT+z;]>͘ %u]"zZ&``j60DOI.?,I/7;fc֌$itMf4̓ĩ<M}ΫBw0-{`˾Qv ]LV!}boB;YAbNҹ6ùB&M 9gV;XXfPM\iڔε , .A%6:-ɉ♜!&G版hxb!e%X_ GNvege”m&c&,y*OD;: '1zz{Ba|ۚuEvX^S,,jEE6+/$[kl4'Ř3Tu{fZP:Jي.vaBt 扮LjJ1@hvVf\rMX yv Z7w ~*wt" >_/QMh?_|jرmw+{/_@<sm qN(ay"ש<[v( 'LQr561!%y<|҄3"XM'h:aX5̺j4lS~4h9O<_g۬qnsm W#K9Zp~#ǜXϭ|TE0F́z|$RԶK;pe┷pZ-M,Dmw݇EuyLj aa# "D$qMw~i_m{'vn^6fشMՐ1OjD[# à0 3@!psf9~]W/m<|?;gy?ywl-Nbc`#j ޖ6|m"PHi'OorЏEGktщ#'39YVdpBN7ܧ=*{fr2Sq0'X^;#@O9VRK8ơj.lW؆ߗ='NudsjP:a2gZ# s!#1~&Deߏ 1ϥue&EeHfΉHv\ꆽgk;:<^lnX[haot\ {lmG_/`OQ,,-B<<vܙǻDHI2DDahт<,ZD3RG괰&a4Ȣ x< au'pnǽ,+`"_DUu0ԑ~ }t'J(:큷3Sp1/7dDFj%yBZ9`j?}NٜhcTUیCuhpFCs;,U(X\(,Z'd1DQ"泛|'/n<њd_J%unol ix ns?9{Py{c}pp/D fWaxj+WOTp[,Se"579r}\C u7a4d7񽕈d ϓࣽUx|EyAa䡎㚂H1c  ݧ=AigI8V9Xr NI;;+pOqJ}dpDCi>X54dAnB;y"[tO?]݇ؼS\|EYXÈaAyr$XƢx]ɋzؤ zA권T!ՍK7 w Vp'PNUOTx<""" !?׆m;_-&DFj1/liiDr(A'&Ê|`5$<3E0aMDb3f !r?w9tv_@gWC"0/7]A@.Ql}]dhh>ͻ`zvzr .kŒVi{*jgX$P`߃̙V(vqGw %DnM2>v%W"1p-# CyZ\XNjqwrm~|Bq)L߅>k6r%<2B׋DDD"uZz˗. Nu] IDATo4a4=+XE4fSxkH:6SNV*>{X݋TUҒ͈Bb, i{<45>u9Z,8i5{mhdqV3)`p\QfW0dzc3yi' X瀧Sf1DO10O$=[F6m)h6dr\#J@v18[;fkIpx a4#8motu˥e񙶐9<O]MU䓟K} 0""p}\l qz\ [̈iEuJ ""RtJ79%A":n.ۍX}eN0@=ްvM-n4F߆}b3\\>A;@"ڮ9^Z2N9,wJߜbsoƻ's0?'q_=[iq2R!. |F)ul rOh ޶ӥ-Cxxy 4Ʀ/mUGA wxy"<ɑ ]r%@ybI<`Zf<Q /Zǟ<ge䍆QD%""R 2FŖ<lzcd?~F,쾀ή/氷'Rȑ>z ;rapC-j 9d{IG"kk6FcIAV-G;y"V-idHi.a[(&a9X0v(ĄUFh ʥP'u1]ɝv41a.x/,-#Upx~d^jUGf$꣱qˎ ϻchȮ|0Q%)̨&:j`nFA!f{j7y""" C4{I&Êt4`7 ߌyK@a]=Sy0'Xmh 3HEA%a9?'?IC!OcK tt*ǰ<<AOsS5${u_<,&?@B\Wr_7>W;}\2;]\P:3>4\ğ6m iF"D@ghV۰ʕ>el-&DFj1/`liiG""P8.aS's&b⭸tJЏ>} 0O3}Ë*֖nDTdY‚Lq$a&@q:pAwݜ͛- L$K|[tGJ@^V:iq|H"ޠǜYsv&2gZY"&gUHr76 xF૒]dIp~{Cm˗.Ѡć-S[g!N}]ea 4k HE ""h yg{""" ’2L3Du'@: fIA}dn|J; s|tmƋ%epwt5&c}Y#v=6F0H/'""œIӰ|BHtKWkI _L*懑:LЮ-#Up|[5p?庺ןpv, lot1@x661IܽƖՏ=-ND*y~I wxbT^߅]I\5Yp~s]_͎fmXjϪE@,(<ɥs)voťW~lOg:݈Gd9) >z r2S0#|;t+ɾs7:pAq]RHo܍߼/q}f=V1dK~}ȉO[pww $ 4bc+ɟһ_Khy_1ۃY{,.PޚdխEU,R4O8Տ}=\6m)hW;}ik"~plmG+NbcCa4)D:*6S.W[m$V_gGC?(DDt:E ""RI:7BWQ<dAs U~@j&!-ٌܞf2Bü=CgeX:UT+K T9wj̿>?_HbIĒɰG)~,׆p큣 g}x 2a-q+} IJ]կ%&>1k߱v&bcYLkE$nUGX 4QWp`F V7tx'.$3"uZ.$֩mHjD]-PQxۅ.1z~HNDDDanf$$`̵bӮ}&wlɂEjQkݞ<̀V3rR0ʟ檎H^#(W HةZI];Ue% /+viGOE8CW \>N#nCI_DEN$'D#s6z%>mqD$%wUѠr=0,.F~M5 6[Ю0);f ϧ X@>n7jvh-#]H8r d.Kjeܙ7]"""""""%`xhmq@Џ;00u7+ 3'lFSKQubQ?>ʣ[q ^N}̰&"-4f~dZ$̛56j<7'Eu慒2(_@c;UqWN*Br̋EDRrWk 176@L.k,.o4aHbт<ž&, aŎ9?&~ӗ^#b/:<]76g1&XL^ADQWSae ϻ\mKfY}w灈“N"иQ}lH]ޞ IC7'̟{FmC3xDc12,?j>LXCdO lGԭSd+PO>?xU46g3H9 +l@DRrWkv>bBrj`!.߄\ȅ=EvzjP:[L#B:jG~MTP?#Ռ!y" 5.W[Z3Qeg+e0MM)v!""b+/|ɖoޜLl޾_ s2SowAmC3ѓ')|dwHM;%Rs|*JCiPR NK|ҧ扈B]GrXy^l]Ą[\):k<<# z$[L"\~Aq58ϐ<EǙp:6r5 f /j~M‹:Gw;@ҭghl:^i]uq8 z.Y[F*IfQɕ^cM2rO~MS(uv5ɌE l {ie 4 1x gnA5\MQUxj;f$0U-c y7!""q+퉈o;2a#$Ǯ8*dDUu$Cxv7FO:$Lʢ}tfZM0␘``Wy :)k5{Rx<\:Uxy%Bvv6EERnyόN ê#X !"dw ztI&p.hr ["-#T=pX]_N.X9l 1Սvԫ~D$v֭MT) 活>Z-?,&:yt$VT>kI! ^ƦSH}>8Oho =>I6ͮa<̀Ą8F߆DX h&0rRvpp wE91>Fs䅒2,{3|و5kH \C-xh PH0E\{>9ӣv\&"u3" 2-=z h҅+//:<]76gk;:<^QJ`NO5iO!{c8,ePHfG36r Hr(<vܙDDDDDDDrd|ɀOd3ZyͽnGq^4'`N00L&i裧`( , ɒ]޻ftX/~QPXx?&9mwNVс+a( ¿_xe:$cQzą7:66<]"O~xaot߇W`utuȚ"y~$[&2`4ĈFO>MՁ 5k479'""""""9rS9'Άsw%9_ow/*0/ {{ wm=- kZd̴j`N0 6f Q,)]8xNuQ9OCuNٜ^lP+ubKv~wwE\g{rW;DaΖM[w .bc/&|.`.tx0e\ߤNݫ^|vzj@lu{c:<i~/bт-Qh~KPTTDW~]QJH}اgqT'ҧ2KA;DMMI& uXMvz*O8[L^ bcy ^z|K/.V?(xe(>l3#"b".]sb7y`P(.hV۰x&tCEyϏv&: @DD_N"""ij1F%oťWBr4<5oG d裣BNf5Ѓή^O{3_+V3 ߯vV=X#{I3b{l}]B#d_'u׶p/'K/n4Af=tZN:݂HVX}1hЋϷ&xOAbB+vrDjUyBڢA9<T_kgx^EF_E ٳB}dK9oN&>sH˛)!H>YP`==uD!6?2:/"" >ㅓXCi<«#|N]w<{N⡅38h\rF]qHIfQp9T;276 T袄2g㟿2VB~KQZHpB\l o$9F\lpPAy"yU8(U]-KT_g}BDDDDDD$CV>//|g_o=xd}{X/L =~4M_@LK_(8ܧ=nliwol:w^< >x/48sXf +|\>Ēi"8h\>0zq]ɛdeϻG-# X#"Թ.txWyP]sDHVt^3y=/~WsodΰšdwTXL0&M^'R6S.W[DÿZsV """"1li,QJ@cCr}K}~ߑPG:$KDz{~I]ϭㅓ]GCvDGAA`uxyv!KKKqqIMN.[vhcт<(Ly2\5D=XL"M]"uZ$[LF-Ö*8<_uԮX:-ylܲvs~El"xd]1_*i5xkFC'RfG36-j^joP_kǝ% Q8ijS383=!9Sv#VJ}=ĊŜ@Ȏti!֯_/-*Z ą}~uXHqUԶa~cyq{t#I&؈„`x+˱ Ϗe,:-tZ͘C߇H B-&Q] XQ2RM2 ?s]õeP]UGx耳NOO_|Pg],)J߅>8j_]n^30) .WDDDjW DDDJlufؾJ}ōIDDbtQU 1|'OT$}oBz?!;~VV5>d<7l(su㭷Bo4:P Z87#_oˎ|>0lX HŬI&-`cvGnM2 >= Җ**<|Bl.txP.BtZ If z 1&r 6Q𤾗¬9,)J]MUk_SӀBm䴛`(4 :$fA[qd)46BFW>Els+IDD!wKv"Ey(?pD5סϏͻOㅒ246 ZbϗWxQQQXn%CN, ۲#Zw"""!""Rةٟ$0ՀgCv7>OwŲ7?`^n& N"" چf5:%=FLIoUU]߼Kg#*R7v<DDDXpp};v|~mQJ㒌7pj+oįy^$".3s]!R' 1BTEw1T#?[F8,x@M~-P`P^kIvU۽Ayy~)),)J}}j_a07ˡ<qg>GDDDDDDDD,O ixH$LAZM-u{xVqQHx{;%=V3 .3?mz?dj"_ ~Ea#٫x%^;v%%%c ڵrtekv"*HEmjڱ`cb`!:-AV~ؿ'hHn{6A,:<^tx`ol/Z\|Z"?')" ˏ.2?YsX R=;vqXjnY5 <8[)K%SoBʕ+x叛̷ \</oxWsw=Ux`q>'ݫo|Ǹ`6Qoc)x:BVY I> {]Q߼nYǏcڗv:ۊ>v(((1PVV&Y wO/gC \g{ڶZٟ綝;O%R)kIpe@ܚd<OרE qˎ1uZ -_vF76-U{O!N5<9ޖ!fԹJ6w Ddn%gE{NMJr[,LU˘R%[L,\8Ҍ+d>I3fʰ)ٹ=X;2% Gc裧޻nd/!-|.awqI1w#*R3v[`#436l@ac _k5,񊋋GWWԶᡅ3}^:W*|W;rXmigd[FC̨_6?|e[/>#{.8[ݰ&Eu?p:-M aPHh)0OƠrf̻k>ChghV۰j\n_a2G|]-hnr %(2xWsY""""Sf1>;;€ѿ[Ϯ'Eeu$?ΊewCvzqTCa*dIjǗ`l!ӨmG|Z19رQQ9nwv܁6-~mbk-֯/l9,ިd -;eŜ.lܲ{HeĄEBV3N޶Tgr`-&|*QUԥ?9ՏEu_uEՎAyI&u:Xy"""ij5I/.F$<=Q~Fsojq̟͉DDrwH~d3r2{69{cl`^nmLy}Jܜd$ 1>n=}~48GCs;QU,_ (..mqq1^veeex1-I26ԂMKf^V_// I24 e`|cymԯK ͊B-vtx0:׫Yvz*=2`4ČI$O9eN<Ϊ*T?rõ Oa]%j@uy"Foht@DDDDJkjq򕐝ß6/Ix^Kv>E<LDp~~U[0[@ W}f #B_ϟ#KJx>]ʄuBQJmvaǎPXx~̛7yym[-*j=s]ظeV=\ J"$smU?[nM?bO_|&캁ڠL? hv,_PTz5H u7dts +PP~9Y"҅S r(<v,g!FGI"bL+dǗ=ghg<S9(~޿$<|῟rB~NβP,*++QVV n͚5cǎ1`u~iBȝ}>qs"T|p~x,;aт\K䋿D@II GT؟dhҥعscv֮]7ceggeeeymö'vӓqTdqN|*^\"lu˶ѠV5 }7:gΡk:$;=KI{A8x_'u8OU1Ld6#%-Isg.VH{MU./l.W[ŒxTx>Z-$""""""""Eu'dǗ s2QU ^g7~h&sBѸYC7O?r:=SȘ1%ֆR ڮHpxvhLaC)>#~ӳ<҂ 6-x+Faa!EoodÝHSQ!h{CyEӅWu c~/"?w8 w&a4pΪA S1' N`hv4lچUr5fsU"lr {w#x;,]?DDDD\-/|0 eG-@m>E}ƃ'V,""+j7O3?]絓'"/+xS|w2;=$Վf.R1gdP>uF̦6EFd6!""E#1UvN0[|}y uy^$"cx"PФYb08a d eyf2\w>/b¼9TD$Xeu!Z$8jyX8]ǰ ϻ\m-Kb jG ? ų b\+6..(eyxto7J:"^g7~h&sbѨa r:3}zyJ.ռ{ޙQ:$;ڵ/aǎcD pqAկ~_EmOa vp֭[{TTJK7 %;6GNd -vAaWsH~[ne_ ohÖ kFC eʓ`6d6#F#:(?.2hX\q߳%[Ly[FI&D~Wl)ь-0a%Lh(*T:kx%5 Ύ<̻Bb7"""""""BEm>C x叛̷d,GM3>i)&I;}J<#i5w/MPc?Һ&NBTa9xzyNЃxn2{t@X,=Z$;K/5/,˻Ξ~$|QQG_Q\\&y_lF/?wߵ_6&U`|Mp@mneH}z%܆w?s4Hk`X~OR7{b/ !ePZzqF#&:' Uy^\cKyS2.o^K""""""`C R3>q6}C+ғ+(8|g,`N0pbїTU7,[1}li$*Sxzyҧ^o=5m \ؽ()%֮]7ҥعsu&<G(YYYcPR+WIv>.XIDct燽!jP wxlmG >Fߝx{w?B4`RD>+rgqQU ;[| M A&OiE J׸\mv-')5 ֎,)_E """}Y8v,BOmOIoN0{6X}t'Mpْ? c τ,1Wcni"jicްa GAA<&8(((@QQ$9#u Dvzy:Y½/Wq{ 7cқ~"uZy,V`P^yRRa2`6CZP~ & h>iTyBc8^p ϗCm:版"QNbFҪ#uhl:ip}#8|x5߀F3(U黒wlƊewK~WnkP~ucIz|وӘԴI޿vKرc瘾~<|1e :$)SPZAPp9[lK~^JU=}:;=Zeeo#;;[%%$8?fxHsmشumZ\!RlPՍ~+hÚaX7 IDATdBN [F"uX,N>9.8Q9G@لH^, hv4lچuj;3,.W[ŒW_SӸk3?w)"""툈d,Br>Ksޛ|,U j&3ɋް>ŠW'W,nkU#YO'P.,Xׯ/AaaW\x饵 3y ׶բ-]n|Y[ذaރV3I\$3tZ zQ;-|6iFFCտLOq9G0a3ў8px.ou э1jPD +Fl 'a2WOSLA|4DD`ԪqX[z{x~;\^_u'%;Ɠ.kcPBh'RwG߾'Oց:'cQQۆDy_ߣMĀuܸ\m-K)2&Ϗ:;gx &@DDDDDDDaK.w k_X}$GGK7?x6o˴[(Dy|- oRu.8qاg6ةZܞra8KZP *++Q\V^ܹC{'|/?ߨlOЏzj-''¶m~̻csmgDr$fK{mwx7:MtZ I4 1|j]g Oekt㜗AySSPZ8b­xBA5kk8_Ӊa>xVMexH|,ɂ\_r?_߾$1r2SpOt/6Տ0@O2'nAyō7py%> a!v鱘)sJ0?'߼/u-;"Sn%%Eo___{llb`3 ׹(<(y4]߯{>?٢Aٷ%鉈j$[oC_VˊA_;䩿P](#bm4 0PޯqRȨ(h"8s 帵:1#03yveOΓ-xM IӍO+wpE{^rdDkF*h=4{xs$&ĨazN Wrmom6rr,IWU( oٷ%b [=ej {{m4`4"Tʠ% bЙgPZ1<ӆt`DDDDDDD"Рld< ׭"ir<:Qi8т#G~DQĻ}NA<|mQ nf?yxxRY70?Hl˯@QCk{#8Oۃ]/܅#1{z"{[6<$$#t奧7(o0`01"+tb  9n80{;vl6?i_u 4LovݍG΋O:'^z}Γ-xOi a#L ?<}Z+7x d0=fOm{j_@Lo­LϺ"?vt,bZꛪ:41(/! _DFGAVD"WH2<+2  g`g$LE """"zp8;xs>Z?kTxXen7~ٗ VY?fHd2mf&On-B^q JIgwzJxs$7aҨH6V]ӻ76 99A׿[۱! qD,{br7MHÒXk>ް=Zٌ]=JFj5A$1%{中y rڐy"""U,y &.w"X$֬Z̜6-(←n7x-f+ltub=}ÚxRu0Gi*fM_)qmq ͋{}jbAj|,62nm? G D Dh\>@rx#jAy`P tz=#Y "*8u{ `=d?Rۍ@sn7@DD3 """"5"nb=0-ѷ_4]n*k>gc Ϳȇa~vQY%6m(p_.C*/?[ {K3Gj0Gj,X_ `fp222^Eۃ yؐWۧ'b=s'Gn?x3Ԉ'ꏋnmgaDAyh4DFGAͼDRU_Wf9n1<=ql6,}*OStɻb.瑻&kvo?Ӄ~.ħs[<=(.Gk xT@"oƊʱe{)ܞoD&cTJW|k[V6zzzDQ[' 1R);%pwͺnĜ)1kF$]d|Ag(,,`sa2l]ۧ'b%S&v,7.ǎ4y. K*Px>,o2"Tʠ@J%jHlvG{?A9mV<y>8)I#:Qivş+:*UJW}eM^}kNB8Q*OwC\N vSϯBӢE`xp8V1GjI Bvv6{zC G_I#YkK0|oی& 5""L]Ҡh@Oypz((X "(S$mgg.<_]Yۍ@kQرh&ÚcC }z*,U֏>y/7q1"Ftݟ/زm/unmwJ v'ESdp^ w͈Ü)1lHU8Z|nF$$$xZ,pds/a̝sg`]|sƍƸ1n6@o-mh8ވNTԡ6EAyiRa0T*Y "GsS<$_DTp<TTaHRy"b|'lvLLôD߆-ax2m zf$xH'Z] n`ӭE(.Z7!1>W O9/ *bZ j` j5:;;-=QL2ӧLd!_. 7saaDAyQ*Fa1df[V9nnwewOmp6ddx^L"BY"""""""Xs(px(Ӄ~.ħ2@[(D }Tݧnҹ6ĂɅu~qJ|86.?K%" 奇AyV#2** ړMhnjֳ?OX'MC¸. 4{κlO8xϽ~>Nf݄;g%Sy68e^9U7aې4ikyU<}Z41Gi1gJ 5#FEbCaמHp#L)R"P}N5b...jeVS >=K= z ǝacQDAyR(BpHA$s%{席cvc _nwtͦg9VQ<̜)1(t~%5=5?ƲZB`e(?؀́1:bOC` k5Wl<)(7'0K9RH¡cdgu3e8714/B|@_28r-˰}w3 ΀:C"?'h@NǠ A4l+*m`g˃DDDDDDDD3\<]~hִo11!Zb;O`cyT̜6m{)L@ |-kCO3t"uzrcAzs7&#,uyb]~ntK|322Ɇ lC^!>)؉7 `AH6h'LFSDFGAVDD&4qkyO1<Ò# y*9}|G٣փYSOOV {un7h.|uSI:\(w_ z@M3Byl,iZ(-Ls\諽Ʌ.ٟ>R "gora]~M=eH ''))|v ł6\$Xߌm'FDE!"ICsK <) GD@DMɞb9n`x2 ql6h&[DDDbW_͙J'']YSOOyr֮ݠ пzYNŔk"omp=PY 5_o%""""""""Dӧ,\O,zEJ`D3񚨿kU}p ;|j]C||0AD~à壍FL]BNGxD8A4ȕ)vfarڗjokgH[""""œ)1(t~%u~r=ctJI=9D֟IcxtQzz9O䫃(P'7\1Nyr:OWn$Ʌչz-:RSSaA KOWUќLDuˍ K t4 "T*Y "¶­rf^WI9mVY `);KDD4DDDD$Ҧc=' ۋѨ졅~J?Qq'`֭'uP JנCFޘ" y"_D"RTj ł%>Nvvxپy"ޠ|U͑ A[9`Q'oP*6VY "4lBC]^W2 {*9}Ndڸ$S IDAT>hJE ܞo2|Q\= Å|uPOfcTͿ q1 o18D9/"X_ kh4Z"99Bnn./A%*D:Q0(/=@ FɈP](aP QD{5篂f1/[DDDDDDDD(nCM[[11!/6ԁ!z'|u N Puf%OveQQZ,5/ "h=}7]G||<,$$$ZjLO]%`P^z. t, yUZ RbOl+*mm1<myy[e%މ/f@DDWp"Iѱ YXx2m8u[tkZq&>D7n7!`֭ Ӏx<8DEujhަN;g'u_Fm1ѭKy6/"8ts}Nu$%%j] Sm6233|k8ވGDXsK7ḓAy`PRȨ(h.&4qk: *4 ]~#H>.ƈ'❏>m(.ǎCSo>y NWQ$;܈;gOBdPDU+:RSSaZ|xL:\hmđzZ;N5&_B7H{"  º ؛\%++~fCff${h< >>ty_j{CkpaP\\8իkomAy6`>(o01"v$BP(^bui>لz9nm=7 JN'""7-m, ѨnhvQ7@п.}R~& .ƈw>Γ- *k.LׅhcBQ0FO7Ooos~n7 _CPTV_[k7m$yȈQj Fuק_BjbIL`޼yHIIAJ<Ѭd2d2#%e P\\Q6 "L%奇AyDEEA1Dbu+S,׭屻}|o}7Knq8HC iğ z57EzcT)); ÍЇj?0 9: *Uy=|(Z;NM&?pYNzkAx$8"?k=}7 sbjj*C JY r_MRR23ޤj/鋋!rss]Sۃ߽z~`P^zFĎDNǠ<ɞBNGxD8AD^| urzvم=nlU. CY""""Goމݸy+j#ŧS(.t! MaRtaǎ~h!vݞC iIc/#V`Ų|98Hb Kψؑ0 6a0.O4h4DFGATD52:7S1<v#l6,}*'""p@DDDD MY^ue3S1uq۠ ]utD2ƍ['& {/רq^ <"?۰| ss?DNE}h4`7dŒLdddDu\<ztpAyaPP*6VY "m ϗ펣n1<>_]Yۍ@€S=`AQ_?A֠ {Qq}B~ S'['\xjuWxR C̿7)7V%Z㑛Z0wm6D۫$d2i2̀a}3H_O$kA#_0"ǠBKNNFAA!z-A }w"B~ Y`P^zT*FPAyRa0T*Y "Nn0W_Wf9n-?=(M*8}aŲxOpwZ7nފxg_K\Oߋ'C$Kƨ0$2IJ =uWxR>ь$CZ:w(?;7999j}Gn~`_,ObArr2v=kel |eM90"Ơ<ՈJb1olֳuyf`9k?v2 =(M*0}&/B9-HM.g!h"ߦ.wXoOO> DC_9ʚ.ֶvşQ[L2k Še3yh|бVw9גu-Z??\.mRl6+j}ۃUomg4 ǝ/ QP, DS`={}Nv#l6,}}yھ^8-#G77D $:<:.ƈ#:\ز |CFT݄FOcF@ t5(*ċX-538OEZQ%-- ES M(&U賳j_ɨ. jXcPHX ]"")㶎ax~`d7}mm#a7pg߶AWUeĜrDDDDDW ;Oexi8NTkӅhqxz}^utc1Z<(+o18O{]X FM}, xPdJbOO:aZ1'hdĈؑ, CBAD+S3g丵W.<wĂ"sدcxHb7DDD5lmDR www?)gT$MIcPDW5FO^ .ƄA;]R5Gᅗ@Kk<ٛ\;%pw|-Z0̢OAgɱH >wOާ3)) #!! HHHyXr`ۯ΁r{`}3H_O@àz>Hj/`3 If.s0"v$Bu:$F 2: J "ё0 '$$j]%KR}N奇Ay" ^b "j>ل"YvQvx`M=UV!aXvH]s,QH9@/)S0~3<т';pn7<;}&C5ЅhYZJr<x!m:Ib]~nz.Z~C#!賳{IDNgky1-jPUsBPkޔ80(O$oAj5 FJ%ADDS׳w.< PUt҆02OO:(""3g,ura r;=P=0F&ӉO~#pΓ-<nD&B9: *UeEeX<}Z{>ьc3|}h=%M&zpl6deeHTII KAFF&ӽTLgyqms/a!DJhdPhP*Fa1H2n݁cx vGl: XNUV Nٙ.7^zml~߿nmP6'""?EkPl5u,[cgaGo>iҘ 8N݅#G<^ ƨp1@ .ims֣ꐤ<U8n05wn rrrh˅4tvvH\NzF u-lp<GĎt>0ӱ0DNCxDC,IF&4qkv(;

33s@K"''ǧg8p'41(ODjDFEBRD$9?pw0<=BfyU2Z|7Kz7xIn@""7.&k1L^KY())ᑡ `SRRad_U a 1(ODP($tO\nw0M Ӿ+v zBj4]m w}ڎptLAD$! _IU)7@tx3$+k]C;lur#ǐ?Em1Ey<`PTj sS3?|#c%%%HI;9/Fqq:;}seXzO F E|@Ay"N((X "z475qkvG; {W'嶩}e>sƠk-:7/4wl+`xOZ:X [+Es_OƓX˘6e"29:N"Bk[rE{b?_̀>smjl{TkDffkfِk) |<q8HM]܍7HO99q.I.ʏEDtUZf1H>h\z޵2 wpO8e3]~bLnhĽr;= &>G)zzzd X6%Sn{Kh4Xk,\.dffl~k֬Pgg'KbAj_Ua-c,=h  #"ID$%{5罈y/f1z~ g#.Q8}bY"[l&i%vK~/===ظy+?ۉ_-Mc|hNtwwfOFEbl.?Ԅupw|-IIIZBJv˵;5z0<DM!!b "(S3g丵vo=,mjXvWB[ڮ 5"(P.w&s<oTԱDDD*{ ݍWּ|7<ai#p(6>Y]XKFľ`XPXXk"==`Z1ggBROM]%*DR6m4}P`22(OD^T*m4@VD$; uk:e {z0O~siP~DH|s:,ҙgPZT,ǭ^펣f9GC 5\bႹ3_版DH "9JcN=#}]gal6Q?547"۠R"o7wJ>'Z`VL;˵X`P˅Ŝ:/2y'"!h4DFGATD$[%{亵<{@6eip _௦ a版+a4n]>8/b,KV{kimDz_F>@Ρy0GiBt6>ۀZ22|3uۗ\.Yka2/\;5u߮M$$$RS))}p"\D$4Rhj "cgy`xwUvy[e%@"t4_5<p<7T,bLٸ5nOgZ:{رglC77m$ņyQ,>zEr~Z$''KY˵T ]OjbnW>=='[ۯ9׈ؑ0 6a0 ),<z! dd帵Svy`xvQ,}y|YZʰ"B>g|N'"""""(T-[<m[;w3[¦ӠUs *#}*oGb|4NE&W|-V+:~\\+55mXPXX,rHM]>qVsS|ү` 6~Ay" J Ac[VnyaxwCfyUV1-։f<8OeEZסhyBzzjeZ/].Y5Gjß/YE H-ZOkÁMZ}zyh4:*'> ~PShdP$I!<"!  475qkvv7a66[n{UTaL>N j;}komO<̂ .7@DDDD$/M_>Ğv|'}h=! KlI^͑cx/PuzzzŞ7 #1>ȋ8O _,,o'\Q3%](pGz.,,b y}׭8 1 ʏ |`HjDFEBRD4hx|; z0<;#> bdU( SoFѠ׭, <8no8{N[gIn3o@ A IYc%Zbs/M 2{ s TZZK+Frr|kě#ɲy-3%sĠ pwrr,HHSKI7^jI'"9R(BpCDۙgPX{G7uV"$-Cp$$6e2M&аXˤI{WfdLיFs"93Bf6~m;chK{o=i,Sc4F+i\CQ%z{z1.wQ_jyx[_.Iٙ,Q'RDKs ׽1橩)}kXl~IĕnOtX9Z-zTUC.:wntZ2<E^TX "x 'P 3,W`u۔\Bx<ksѹ !5ya_OyGO4cK1J@D$Fb k๐d266.>t>`0`0uC|D}"2f Q$FZF:4 ADt슋Ċ ϟjjƖm[9!d}k h^R3 DRɵ٨|Ӱw )5E]YhW@_?x Iz^Bgph8c'Na 捹ZDA曜;Ӹx-Ył{墬쥐׵Z-[jV__ZwHiL-Øc;kӐgxuB_hގr8{>d2=<Z/(s׬FFV&bcy"!EJTx|X| gX\ ϋL<njFC7EeO|+9!Z }eߐu*)>o]1wg;" }8?}#+3E1HO ϣz#6: pVs;aVEee%,REԵb'B*[~fd4 qn_ßuֺaa'H\D'tX "(~Atq|hxUi:|-|@;1χym.::E>""ukdo]^..tD 0?h.^ǾpGOf`~e6 /?(A$ֶ=d2nz\C) )),=\鼂~`x>sh4v'9D85Y9?gK1"""""` ]o3?H]L<7cq084C7xgsSSS,mؼ1۞\b79w\%qΝZoYYD_`@ڋWT} Y(ccc(++˵kay\"VEZF:jADMN]gX| χUJԉO3<b_փEkKh<ӊoymDD$п4v+d8΢,/_VȺٕ>˟>9Y{07?nD"}B7ۡjrS\ȷb'CR?д#r(Q"vTT?^BHjYh4,LOdRǮ!|hwjŅ燇Ӄ,B%5Y|"߽:W3+/rr$F?O\#l/?(×_~KWqJ\WVeo?O I")H ,z _~ɢ|url{ADe4xNic;qSh;'9Dr3Y뢞zOmڰibQװƍ'qc^gDs8ojn ?H;סB'K צe1DQU|poGy 6Mqz(+{)$X,XJPtgkve.~}eeFJJ6 ""8YPy5":>ԡUΟ|kz{۷`L7;g2BDDDDD$׆X"Zl4^dn HNJD~ųld$n>w~/10-Njbl?*`c">؂OXAբp1c2`Bbw0[<Ũ7GQާ!Cyy9\.H@DD$%ji,_Ckyog8toWҠ&8، 6pC ';sz1%쮉E~^.'(ؿ`0HIce~?χ$4$SSS齎pÛ+Ve1P"uqZ/>؅|cۓsX "&C^L&N' "lC[t߼^]cA߇BqBuby tx<""^TX "%:Rخ݂9CH<#F|+!*c&E=B' 糀DDudo)';m0e`)7' ym \qyb^V(ZfE׺bgH{f]j> xq]d='L#%5*(Hu~ x8á|xxUi:|dg.9]B/&|~:!|"""""iZmLį^ |t_ {gH_΅{z-][lph jЉq@ 5^WD߶y}%$d2NZ݇rD_`@UU=S]]-7>lA7G1b)HFb~|0<oAa\܉VrEz^NgDbEED 9x|q W?1J$%}DQk9,Q&/++CEEzQ^^u9{hhhm?xb  :pl)I<MR!%5$67#"C:m χa .p#J۩fbE;FgzNV版dfp")ܶ'bۓkϣ= 14Oi7aVJX,Q󲲗066&zvl g?Ö?[x^9k}HMa.>!P-WDD"9b5 Jflbcer3Ϸ^̉ "!j`yHu:4vz"ch(|>/qɦs.tCNp"lO?Yn*OKfxNV##+WA IDAT "ѕ+yEç fla-a\փ,HBY"""ULj(2cׁstm!z" bh(>/~F'ö p:wAED=v!YW?6֍$iԝz ɉH""ROJBJj !7n|Qj5X| 8+uh݂9D<#F};6SM χBj)I1({y""""""1dgL+ AD-)>?q!CDI"Z#J' ;χ_ W6?XvfS|\hF 򏈈(rYķu:|qVD(HJTexdM*~݇B`pԏ>/|37oqмG}m4LpAEY1M+xPާ/ৗ3Vs>Qh Zb@ 86BnxFr^/-(0h<ӊ<$`@DM620~ +hAHIË[jc" BD݃7ofrsgVkDΩ}Qc&mWP=(zB\bw \,m9wy8>ԡg3^ K[v+mPW.wbxhz춽W6Z>q1'<版H!4q1,jc"~B<^L|݁:j9 3V#)>!n;:f7^V*lyvvСC4Ũy/orMOD&9DD NAZzbb]tIVዞ^d=|Jp1cmЉ.^vѮ6GDDth4CFdAv' #<=ai`x^"Sc4TN71<@S6?]Wy"" !؋ιut_>g({W!""1B' ADF~܁FǧX=jR~Q>N$ | 18gCy 6Mqx:DŃ+c1")8%go_2DD̨BJj*I|WiHa/.ΰ40G̈́Ϗ|WMO1+,E!]BQm{r-=~e =2)qxx{ig }^G$vKbzvBuu58 6jԵD>$~ƻh+qDDrtX INIv8yDwp}J^ gX:=P`xN;-9VLz3*c&?Qؼ{>>ٌ\1HdI:eaW9/Y@Rɵ,l[;&q= ơC066]< 'c/;k""PʄFa1,J]zM\'u~T<{8z` C<]Fjjfx>^؊ $>>|Ǥ$%vhbY0""83{Z:>5n!de]^."e1 AfX ur'k\l0e $Y~ n }^J-(-6k(**{^TWWtpB )>q1j|oze˖᫯LMvńfeDDROJBJj 22!tuДdNm^cyax^z@I$N56u;rq8޹2f`}>?<U"Ä7?0dv""=` AD!7?H?8N\O+D"d%6& $ _?5 AyYCpp\Ͽ݋-a YRo׿5]q~\֋W۹IVEZF:j )VZ)|Z98qD9R{X{3,b@Zh4 ^ic;|F G)4V+JJ6Kfe^tpBuCخjt;6kxwHFGO^ z""iPʄFa1"LrJ R1xc@ۻzjAtG܊ ϟYΰ0_h<l6v 'ZTzvngyyv_O/m%f0n!꫘k'" 8YMġE8qd1JF"Dw|Mf G?P74aR-Cz9i:aL1(O r?\M"1x<l6vYQZZ Nw p8XDժEEQTT|:Qh|t!ŠEQDFV&X"I:>~ogXC;o(, "";zkKY\l ?-O0HODD!a e| QdS yG>/d>Q|i:5JYqn78><*++` 'ZrUrELMU~poržmd` ru:Zla='" ^TX ""RpyyIcx^sh4tX?9FNx-'!"ˍq؋O6>$>_'+/"';; {>/6 w@wsg}s3_~/Y4DG[HkUl=Ve$$@ -p8ރ$''hhhPؗ/_l۶ %%e#z=[Zn2rv{0@OD$SHHFa1zZ[+uxY.-UJԤm-x`CL$5w wcpo;e7)S?j xmiMbɩȹw}k<fCh+bjC4_ p}keS DtQQQ]^z/#Qץ}zw%RXbR|DDR } "R(yx{8@y8 xß.]B/%,f]^..tuJDtdjKOK |gm:yR0[Gۡ jؼy3PR9$ٌZ(J78;aX,sP۫`2QYYq= M\ ^"{OH@zz:TU,Q8>ԡu 3,m K xF~)ml_YYh"""/{kj3  X"K7Nx` D`2o} Ǐu]QQQaC /))AImA E$5]Ł sgVkXmZp:aO6j522hX "q} y`x^@y8qS#"uZp&|~49t ,JNDDDt>/|7ogn$E&V pm@QQr#cccj,|fY~ԅ<[$q4PQQ mx۱'"IRA(P8 h4tXnjƖm!6""LI>^:d*kR<Q'), mNl]GmllFCFTT k V)O|]?xb J4>jO/Ibr6weW|bH iP,QyW;(ux,} ;8Ӎ'8DDD$gZd:"""c`wQ? Daa2a6ţ((˷nYY-u:*X,DCC'yKyl`^Iv;u: ('g:p?q>|p]1R k4X EZLh4(B<=ay`x^^"'>9<Q2fFx^Ys ֯BDDJMNd"$EZfFF[19Q lߊrU .z{3LXJQZZ*9׆` ^,糣{_kCٿ\}ݷ*֓m{/^Y+IUrJ Zb1"N+uxYeB<]Fa?6aoy4άGDDFxE?%""&EYnG ֮LbB79 4^) ov7" {g!o Z,XJp8`107iZGjJ<Ե̞p!_v)(..AUUOp:wby?.D4dfeBVDD0|Jΰ|0l'/^Ⱥ,)^GJj*TU,ΟkA_R x8S;q8l&"rZbɉ,DDDy;4wx 7V;5>70 2JZr_'B6 .W5vbCJ2 &:>/~5x񜰏>|t In>Z-]2ƽf\ysIضK@=]F4İDDtQpyyd ϟjjfx"΄8֜jMDDw d"Kaa!hۢ|`jPb)R x tvvʾJ27%%Sju-=3aʤspԏ>/gf##fC7Cw Nb 2YлHIMj ";!Γ0 Յ屳>ټoZr_eDnK -9$x*V;ky.W__vі_QQ(!4o0`PR'w0X,a 9q G+`LC\LwBi&g y18MX~ӹKW۫0:Em;lpw S$ %~jra۶I,E|zJTiqobBD<]eax^ةājlfxH^xW|cn@{>fK7.6GDD,b&`)C 7{;p'}'ebtdokDž RG!)99"*>!P-Wq%"9a3,O SdxtS3l{e"""e8u;`l)~Ԧ 8X{|A_;bX""'n& :EE`.@ qAl-uĤjQZZ ʫ$܃N*++X `"jr8'쭩EjOmeD/ !:&rSʄFNKDD v\ v^Q,O ˔ xFv(q|'3YDD|;vM\,^nh<ӊ GE_oF[G]mgy"" ,Q=+X`""Z0Iَ0M7og;ȓt9іԮr YQZZV+Csjp:wE K:aێ٫2@OJ433s,j>yRT'%!%5;--a%ogXf版(" u@''x.*c&r &"1ORf0`0`4a0a4n%yx\.іخmmm)uaa!JKKarZs pVTUUEf.>DY_GՈRnJ"-#j;,-~!,2&cFJmxhX yzmXeDNvڴy,Q=i@DDʘ.7DDx2V;kQ]-^p~1]=v] ;t:](-Az]BIfJln4}_\1xci銛ZLh4DDd>_<]ebx^Pān OxeU{k`-?z%xu; EDADDDҡ}# ) $usxNw-E =іoZ ;eeˀq烤v=gc; \"ANl."뼬\867))HJJj;*ݗ#Jΰ1~[<5eycx^3b4C;qSb!=xjpDDDDD 3A]fG 5,.̾6Cg8d2p<!ڲJ >$ /^YYl׸.pU/'%a$DV#-=Z "Qx8rFEO75c˶+N}W{xF5n߿I 8$ f[3ÐT.W5<(6 wrUn^1-0?_Ov$ /Laa!***a6YE۫n61@OTJ%ؕ^GJj*TU1(ht^Aky%qgYDZ'FG8ǎz >$x{7 vhb*͋z|[G'Z/tdCb"Ȫ^GJj*TU H4Gj+yxs + xFF*q|`zY뒟XDt4qҽb=9yɚX' }^]QDMNC`8n-y""(yxoqy _܉+;je]n]e]1{ݷ,nޚ?R'd-.6>$ ADto}3S{៚ IAaa!vhVp:z-Sh>@f{ KZV.ͨ5c ֺ;NV '4E[[m^wܸq#c/}k '$-99C|B2%* )'QHqobBPYVD<]FjlV\x>]3DVv "V_k+DD$w9+v3by" I. EEorK^/:$򧧧eq|eeV\hoo_z`pr`}x< eeV24mmmzg gCmsuK9ffoM-Qvt%$#rfffd+`^'\G|BӡZGDD!sCEgg +[PhxtS3~1/؅^&|~4}z9X{y"R KDDDD@~ 'c8hi"cvhY:kkp:(+rIIflZPR9b3z<A444D\=hƕ7g(d ݶ'$.QQҌ[jddeBpG#":W;(yoq;)K,1 V*q|Žkݞ]5H]$^ !5N#>V^QDz ;3F%P go@$& :x s8ދq/54PTT^*î]K o F"Zg;WWWtȦ}͑̆=gG=%go=IʜU,7** +WB ST'%!%5;a%Atqye`v㢇3Op.x5h:X{e/leQ"k5ޥhdOtix@8l6ClykNcDrUG\0~Clvg챱1TTTprGNjjUjIv+7 ())R ٬y:x^s'].o;W^d1Hηq '$VX$%'KZiPܩ(,hGJ"+=XOTc3+ z}|>:T[Om=[‚ML+DHW,9|#""%R b}^&o0Op<k0C:_bcZ7yXJap.WuX%(**RT@/Hdh<ӊ e1Hrw/`p`@u :&l >*j6.8_+VȪ~jYh4ܙ(Xu EYψhx%CnN75|?{qD3^n%tA ޾rcpW ';%Ev \XZHDDJ<p$x"yqx?NɄJf6TU-D `FO`0}pS/o,i-co86صRhRM;sIi}R;3$-晝 5YYX,-q'""t;jy=hNh4F!%?$""uxqq-q'WY(( M;?xAE#/??xAU 4?']lW%']&N.ix@z;.pH+:!{ΏB 'Hf_䐪0O<:W\ƻ<퍨5\}WɄ)I1I>^/箮. ˟SBX|QD̐\8DD*U&m'8zz1:2 p@5g yGg2%{%O#""""-7&{xR/(LiEeeeL ~vh|_S,C~E]v}"Rٌl8DD*o;1xnPCd뼆1a;˭ZoCmmhoo. ϓ<8Nᠼd폔xrBIl$i@DDDDr 2O63/´["ZBacccضm+Ĩ@noDuu$ݯ>4- /F,u#mpNC\/^ ""#?!u^׾]hx>]-43 p=4V%__ rHU'"555iu~T]]]hlc{ORp8㎪1axRjD`6 'TM^.1 0<vAkWBO>ݫwt9D4gkf,}~44""JnJD!G^ Ǔ [哷VL&NŕX6[WTT~V+*+뷢ek2d3l.pnwm9DؔI R)Nl-uQxև} 'wXܦv|X~KQOj-Q9\=h"[Y ^'d@GDDa4 SONDN'nA@}}=jj6Geyv8P]}^[['9<^J1vyvwEy"%q҅l "I_-q2(a:}ث!>pZ(>-%kzGL'T17lWVg &ksF&"U1R%VV‰#""Pq/aIs)a#.I1WW 5b8a{BmsZZ뷡gZcvlV/b7LF[CWvt:'n6ȓfC"HII<FN%wqIEa't- Z${f :ډ{8?<;>kW݊|MK"") eɘ>u3}* 8qDDJrzByRA ]L'c8XBnG]]Mߗkj6pH@-RYY)yn7w(z}p:vcllCNMϏ< Nł,N%W^zY{*'N۵8zz1:2 sϔ0B$4[K>- Wv㍷;o݉GDQA>HeNu&xlͻo7Vm?DD9RN$AN,U5r$?5,Ԉx->  p:hnnNmA}}UI~Gφ C֜uuvkooPr{ֈ -- 9Kr "  jy;Ƀ  W۰[T=jozlb4o 9 IDAT<>݋@!^78?U 8G72JDqupufQDDIY樇.0L CW}tDp<|~Pne܂n~">>/RQp߯E}66'CXQQmsL&F|[5sll Mغ^ѱYVs2@2 à<5?bnHJJ h4r2(8]z}Ƀ$Έ iq|'w{T>{~…=?INe* T$ ^]ex9z?ƅ#zn 33u *版HNYMuȴ'TVvKD56@SO5݉ڸqbqz-QSYcTVVmmmjzu1hv:Փ~N'cp㋛р'wc;C"efeb@@ "wz$|N}wjm?֟ڱeR`++?$>_ϴx 5 ywup4VVmܲ6GQA>leżBiZQA:NCXpNDy7mBc]vo󢶶6k3iii{/FTVCkk jkoyUrx￘FW;,}Ch!Ĝ'd.6>gإ]տSt\! F#󐒒 ""x{>D IE=iq|Gs>vO=߸?k:v -%%9H3q2HS?9cN-w+\ON;<ŁM'pؠmd F d3CbY3hc<#}#rhN< Dnݧo}LIɅ~y-~xfN JBim _ #aAŃDrjdJjpD'!瓐%BB-/>flO|3"O{ZSgG}{۰vjDt:.EŜ ""ҴW^zYCUNN 'hx'Bx` }:|s[Y|/W|l ~>}IOO Hɇri3啃9JSL<>>1ex? 5{9AJ @A!´["Jcccڞrm~G{{궭;v4Gn|kkWG(//&W'nN1U ̑«7#W&퓻8Dsd6 '4mq^-ŕNN ')wAg|O▒f'>hk}QN@TZv/n}q_FpDDDD*484>@Uz'EƂ1{bOn hxz0-aphT}3|eaiv7Dw6~Ԇ۝(*ƪ |7%RDDQSWW֖B?Ⱥokk C[MhjjG~[nE[CUUUU;T5ϡ$;MMMA|sݓa 0@1!s>,ϐ2]Ύ(~6?? 'hŋ '뎃<7!z}lKb S7:nIm0>Bs/^EUB_M' FNgv'p z,n=tsy"䜈CDD13WwO6ho*j?qCAy"5JKKlO4O%"JD8ul>q˧_Fq A={Zа#!Y5SUU; NDTTT](sqD-O$('({'@wF@58}vxvds~/]@$A`8R8D?֭kw:QL۝PW 䠵RبHjj6Kñ1fsԷrٳOXp:p8pKj {~?3ԙ̾m[~o_`I~F#'G)-=w+M ^QvخM'p}o&ƣmo ?zۚaJ':a[q']QX# |}^Ua+1|.m#p8^EQQbI=~ۍZkkkQ_-!kj6a+8EUUhlK_CC%l(,@t@7 "1âij:ϒ}ŃVyۋ? 'ʂbnADD?!u0EVVӽg /;p՚+K䖒\8DDD3]\e cxjFy-b } ]e{x>Z:Nxk!i6PPw )m--FQA^$0i\U*<\N`6 'hOǵ:N41FՎ曑`t|>qEE5Y/"%7(a<\8_ZhfP4ЂY׏Q9ݽ8tYPf3[d╗^F`|\C|JT 4xZ;zal.Ww%ϲd⾶版(^< DgI1nki1 "Ay/-\)a<. 87yQ@I˧ŧj-"ODDF noT6ȭnV[Q__4Rmm+vʎވ*`h~. ˗Z8)42{χ+= /;?J-BΒ\FN%A.2<]Ea't-^|Ӌ[J-#'x%yޠOE j-kxANdP}Mj8=$cN mT _7@Iu***&o+x""" ~$nw:ȇΉL퍑cdQ]}<477E /*_Zh%WåeHMo{N(G{[6UsIt:aweDDDR87^a4,OD}}C'{&UHII<FN ;bܠxJ0T9UT]@ڧ`X ""$ho*Ӎ0Z뾻 kWTM}~ Zy/"';qu Ww/\=puhVVla%@@D #h'[eXAc-8ޟ1zџse@QA~$,69'٣zyp8>|6ODDD7' ƻnAgOxd{gOzңFss8cB3V.aX(Zarؽ mwSl!gI.RRR8DDDSJӍ0z IDAT O/r> pH^^4c?}L'EyR9JO.unxp: |>|>NBjkkаqͼI@SSu32Ԅ[K|ayJ 02HCj ۰ O_8t+n_e\ =)+%%K`49qr\,˸xB}hh%"^wz \ii6ySs }I oǭ^N;T^Y YaK}=&ruN U _=q@5DDD}C#ӂ 28G~ȃ7wZ [KQT '˕tk)l^|GAZZڔx-X8`mv؁͜}g"?_@eZx-~BZPZh\Xbd oJ ^?xAN6DfV, t t|2 8<べ} (,,De:z}?aJ0^~?|gQWW;$gll 3I2/昰ЌsPZhDGmX<ۡӋzzqKI1'c0v  Kztw=oǒuNٶ _rxwC#4cIM:'(Dt1L?p?zy;'fY2Kd5EĆ{y^B io j3q$)mZa23ODDt kOEEdd̢Zrxπ'_Tsn_Y ˳]H=J -XBW>OHIIANn.Li yΜ3g0|~({etsbQMD"I:0Ü 0Άn˗/a\s|'"R$i?Õ0RX7pݷ_?1eSݒLlx9vkዏ4w@D=ɇ^nxޠOU%?˒ JPT'$@vθ͒5NQdU^^ ‡a2GBDDD`{,>_^y"8a6pi')vMkqpldkwuKoV˪n5PYw_{s*םGA5+g]\KDD-C#cf 7zLv9atki1leő|vy^Cp*28qICE_WwoN:(PYn2ڴZa28ADDD`0bkٲehmcyhjj‹/|p^h!VFZH֭ʑ1|Q+Nm/ՆS="gm-BΒ\FNF<|(0r1$ Zϲu`x]Ea'Z#&Z4JEm,߯x{<j'8.}#x/>]$< OiiiSSMl1%""`<իK/s"dhmm8'JNmX݂_2n)ύH!+;fC3gp!qy"x`<ѵ'4g4vM5@Pr͠OwLH(܄/'hv |;׫hQ \s\d++_ºoIzp[/AQ!"DQvKDD~?n7||$R|<쳜N'ޮ120ODVxxyPw?'0!w_\ A#77:NF}??QJ]\iyd}Tw[ ZۭoyE|CckWyvL3\zΏj^&Q,yx I ηvbqUx 굖s cب)Z䉈5?~s"$jmmASSf<?<ۡGQ܊4RjcJcRRR$?F'gDD,IZwrI*Ih8G=xtr]>Tܾf5߱f3ICt: 8qtAEm@ADI:.4I|z]\ݽ19@a%G|@p"bf,XCj(+vKI1n))F0|d3EqJΒ\3)ޮ\m1 \"KywMR1O?O"++ ""$ ?# s$(//GkL&NMh54_+Ksqךs<ʷϷawpLfV, t t YKV&/^!"Oև$8S@ ё-R3 T v xNEGMDDnC#|]>WN,KƔ|?K egXiE2x?QE_)]FMJ6ODDxap~vNvc{,M;qU״ϓ6F!E%!mN-[˹DD1K/#0>a6pI.I6w4WB/'4Vy.tnL"\ݽpuDROKD}5Ah6]eZ '={siq䱳33`4#nj?+@_ǜr3J'""q:ciy/~?8AY0LE B sOu̷ JkyKwYDUJ=|a)))E)rK@~+.-DfV(?Ǿ?0z}g$4_;<+Zh\% ;3/kNDD1uM>?M0Ey|,C䄶]ݽXѠˑcL39=ypu6π*JX*BEyfx(*ȓ|hF?A@,زI^㤜&Wwﴫ%M%Cҕ QJQ>>D6O&ΏtL _Bb wY/,ρ!5 LD1dDp':: h 1Ajj*'#dfeC1}[`n[yOkuplW[ᓹy~<\y5Om#዆(پ'މYZeɘ/A*ikٙfɡQŏs[Y{T,(%<}UDDDjjd@e:Z)(@DŞyRh^h!&K+Q\(># kNC\/^HP_\+/+\L|Z̬,N<Q$I.44o^o( `<ɠp>70E6<OKyf{ki:'d?_,i3W:?ߏ ǙBu+.,ݗn ϳNf3[d$0рwlG 0 3߈t`4p‰$IZz}4_ S4$Z[BRBDD~rHhg:Ս. ;&?za.\;ݎ޿Y=.!||nh^݉ZZHP>O4^6uu$`-vrNFP#>OrB SQ0d2E28VBE 4wYʖy"Ru+rC _T'wjѢEY Јŋcp.8h@aa!2&ODrI:h`xb}~'t i>Uն}z6fQ yʕ#p> YٛOz#'iY%HH^+ rB3ѶMӊ?`\ݽsjΟ`|9 hH&Myyy$H~̃۷7.+-zܷa<a*ݷa"QO/+V' Nl--^wUxΜEχ=7 ыK Q/%I~Ѓ8zp`"8mc =-ypHWwZA_Mb?oS>5 zMH{M;84 g' z,$_݋;׫3liexxJv ڂ>g2}>/v{OV&1DŽ,ź_@DZS}DG'߱2:fYY ""$ \i&)>OQz0Q{奆oso"˒HXWT'906}*N-'>ʾXfx^ߓ\͙03 >>D`rs&ep^ u+[B _π𷭬<rF"""  Ǔ֭[c555hhؑtMMMhjzccc E 6w)%?G "mo2#@!RRR4S'H:O$]px`|<~_vlT-PQI MTabR@0Tv{vMg--FQA^$(ICޘiN٬/:?<:{< qdUQQjɔ`~|3aI5v=aCt=ZV0ɒ)tt2<gYYX,-q24D1<8? }?>,PT?/gr { J40X*w@{OXzS@DDsvwcy;!CDR ƋpMs<kmmnOS$4OD ZTA;b`4"/?))<HK:O$<@ǟZ[xBOD1ppb& K ˪馿Å,S%1i&мK=cphd^iwB6ηY _FxGW{s2|""RDF.]?Ӯ P඲rDQ@ee%A䤪֭[KDCo,/0 PZhዄJit=/*sXNtt:#͔ ""Ҙ$i`/W<)+lO<ahvFZfph}H֛o4lKF}* #mbqRT/#|L&"$ """ I~/mRF}- nb2 O7`R]?pI($^n\ȿRJjZ󐒒ADDQ:jMJaxy7Ы \Zcȇ68}r3%o߼k>$29gfѶKԧExz|߹&deJD}<$`0.qhk۩x`PMzhhhݟ`hn~ZU yX܆5ˋԔdZ#'lW@RRoGsgi[牢<)l8c D6|v;AU׭F"=t%(==>ܱߋ@ν`?U&y~ 1T#D5zuCD ƓY,X,3`οxfh4> jv= F&g[N8N|f扈m"ޮ.Bw`>b%둟뒸34n!x8IQlDa -AsdtVP^jxVr2Q^B3l(/-LJvIۙsSJ'g^/^x"i=Dmf? ܠf""b0jxݞpLXkvKK E)q zEyۍtww3ge~"\b@Dt <#yF1Th ޓz ̟?y7#--;H'^|y= 8)yrPw#s 傕DD01B_ <='ZlTCJ$(1-0B.m҆"Yr๯ 6IeQwAv9)r[XAx^Ӂ'(++hjbh >`s+~Ia {>-!?RgfhH5ˋ잓l,FRRrrsab 87_0:Oq<)BV86:Co]_ (dw6v>SfDsɝp "zi9 5xjP^Z>Gf祆GsM6.9/0Mx|- "'bGTMf%8ժjӁhÝY3CzrCf5RbMnUlf=||XZ~%79X,ʔ/?/@'~G%ҞϚ'HHjDv8&g}||.?)])9Y3;lf?,5}1S '_6P=y ?|j.Ker<6%2lЁx->u0;D G0Dww7wiZYYRSSq7 lכ`0^TW@ -[#-t9w8FlľzhllP<QY^XxG1 +?Lsw79}QjH$&&CkKO#n Ec3s)73"mv{ U5k)8%0mزuظq&D\Kss3]qy 8MgNָ5Gy"X/"~_gxbG1;:?pM<[#>O1͵izL$x&oߌ^P3k)NmHhOO/_FtzH=W`+,g3s1kX dZ܀^o|=7+K M.E&.0iPDј.wG١Y"_6d1 Z`v~A{4iKww7jjA[o5okyokmd477*_'"J[K ;`~=0)) y,]< .= M<ŝ^֎ W!+Gj,y3}/1tv~yVh嵲G8. NUzNhcT//]v>>lfjb2~͊f_<=>Y:{d}>f}~H[nH+7ه ۇYVĉܡ|9.t:Unj\b7"CDD v<CObmo_ߠj2x%vy=  S4B=*b<:. ]DyHH^ ~-~8 hccϙ j@ZjD93F9'󵼸 ?~`㾯-/M_?zx2Iq^A63&͟?1wm$Q]sc=55Uoέhii\bՋ> 5%@̷=6: iiCJ Ĉ:O,)!>عx.Բ0.Tsf󩆔HP>OideJFiS>s_>f{NVfdƊB|MrrE3Rw|+PkO=I3^R,I j[!Eּ)) OTQQ1}a4fjO c߾}1.Dų;׿MbVX[Yw闿HF$y܃$%}1=7'fez CDDq{C8qjO^b咂+^o-Ƀa<>$43H.]Ua7[<%^_yy7SlZI|"9m+4*-Ќ'<KuqLLk  ٱ\^kW'$Dm{R ml^u^w;Ktr sh^/*++y <ierx,oXycΝ̘^Ú[T  MMN?gVW/%DDqr|h{E(],.4{ԔK^{kI"cc@{G?|ݐ4|DDD4'auyJFh}˃ӽ>ܸ_s\Zl//]H&CbdeXr_fI ۓ-RD/^ݎ7CZ GnvIOSկ,DŽ;׮C ͮ$ Q Ɠ^:󪱱Q i+xGďk- GS$”ŧܽڇa= M<%^~p?'\C %7a ;06:&gC/XOR )|yB ͚XT(B\.gjZw =7'zo-uv̗.K%f [azO/nsX%^x>ՐEt?ɐlw\ 쀼- _kll@[['(F UѦ>V2 555(wz+X<QOW ·s}|㮲Y~kI iRyu<:hvy`Q"t۳XmJXK԰ỸH sHL9#(PAQyrM†b5Ǐ35CTKꎭZZၺMO4+KnH1jHQ|.P^Z =rNZ #|@ @ Eh\{Q__υ-$9elDccZqF4;@SSSӉ&`?W/š6^@ 5<%0B.<򑜜̃d{crbBCml'1=/bx^Dn<}=͸43DZ%Zڬx$.Ր[aAMXׂyb{;Ag9lf?,5w}U>Q͊SBrJ0؊–DS )xe5pJ O-Rvz63n/yz_Q6 $9[vn{n #\,OG]X\7O!#=3#I1u`55p uΆ`Gx 8q"słx]46ntnEK7imyF^<4yi99BuI<(j:i?Γ@'a}.u-ёPJDbtvy``+4z8s]^^ZʹBp>P}+fɁW,-Gc8zB&"mRU IDAT^R,}BRS_›Wc݋[/g=2Nty G^_Hs:s+w @[[[eeeDMȾP0t].8vp#0w֒<^8t@Դ4 HNU(6?Ž^Pd5Zg['BLLx 鈖[!lP;VE JagvFyi0ٴTR )ڶϞdH=Fj6:{TKarW̺nH %6lLJ].Ŏoܽ6h Bv96C2A$ nј`| \{%\638v35~s^ւwww---X,RMj::VO_vmPYY)hll,daXuj NN轅~f8n%҅C_*>gˋ#p:܊ Q d5G[4O'xl^R [i `(&&C~;ĶV1ۦ [Yr{_@ƒx?=yK>~e6mXC 꾃DDvq0>7jZVp8$9w8S0J҂UU`4Fnn{oZPYY)"(ݲ8֖!+ADG((2MbݘdBNn.KQL 87_PጓH'=8¡}^B?w W8(-P?pIVdx\4OiuLyz|Q^α5&hĊX&(suu gE @1<>/-RVX6abnxz|<W\}>9< w1%RaMNVfLI"2FXYxO VprmyxW}%+ 555ySK~_aU7op8HOo@]}ظFpTVV ,9`how 2 \% x "ұ[)mIVݾ:KMKC^~RRR8DDDJd< yxjw>&'>D/* ar֯^ĉ"""$Úg(mz} '%%!|d\='Ǔ(l!zDoeq6-CVfϟMx2H.KDDD0LΓ'!3zh1l1_)pz5B3$oO0.y2)@ZiM8}s}ghyqjݐ} ':s"_ͶQjg޻-/*Dx{zуB1I\CHHbۉTQQ1}//4Ǘh̀jaR6zQ[]a?_zz:֭[JU3.v8d ܫɾ1knRp8B@c(;]mYl^Y(""ĭ%ysow*4ӽ>ܸ0>7|ݐ4N*)'9٥u<+/w6suƅx{ͅ B{"6\=3{%\X|I;҅Q/hVNV&&CHK5Ⱥ{Jm܈=W mR#cYdh =19gsM禸y9|_@s9F<= "u+++hjbh1Lӂ jj.$ZVV)Cn{^ -X, fZSVILN l?{,|>#;M]mm;!k[/z'ql҈p:@b/.4oFV Nn-Ǒot7sAK$Qܼڇa= $4ItA\l\P!ќHs =Þ^Gֵ8OuXr@qxˋ%=`"Yrp~Oc1>1O>/ ~x6wfda+,4gWsy҅K_C<=>aCNLZnV ,kG"9hԮAmm}W1 WVV(}68oX47X p8B+ as͸$$""&U瓓qCiii<"""=au< M/{}lKBS8IN@ا[H >c7K ۞s}fK|0dHdڜCA~b2 ?bKp\羭Ќ'<[YuCdrΗx,I$9 p<=>awY A$ i䁫BEڋzz:C]]Bn[0ySSӬkh)+k2<IW\^-BjJ2/8DD$Iɂ,ŶCOJJ)+ 994"""J=:OcxԠZvG84--/Fq~XIV0MԆ`:wI?,{芁o93yOUry,ȹG?Hc .= ?k8yޅ'4hyccC1|y2N:]Bzod+[(& X+Ϟj;|yxgin&/b FV5?=H4jZC* _njrjOOOY<%%E7}--h\m0֯^5m5y}ɜ~8? ϟ)G1%+/zj#gԀyR'<Ͽr 8]-D73 ur!!"7\}vQ=g&&CO䴃OLjbLcoxdTrYV,-ٶR H5HZp2=^⊾!lf缧Wؠx,Kϳ$7<Ŕbb?7Djr{rYY&.(ш;Zw)k[uu{9@E <~A8["g[\hwߌ [$cr|NEsvIa8z&9|vNt]'j!x=  ϓ*}[pת8tEzi,dbr;j`T( -OKqǪϞ,mC۸>Øvb $RO%i񔓕9[at{#s4ixDAl9$DJ8$q0Oz Q__wĬֶSm_|:_[[󦻻[w<>>kЈ:UvG sqkI/,DD:U}"xʛ,X2,P\t7.߇\`Frr2'semR IMt>XujUVhr*Hm'7O@$@T>IQn;xyi1r3%RO% .'Ր?9բi57"=mA nia|.c2jQEEp>F<9[1>>JOOTk5Ms*@\锵-1[ro҈n/&}vW.w}) | {zyX&un OJJtN2 4l]Ce< zi M\N:]ZZ O"Y&\`䛇d;}r1BQr>J bӵKQ{ݲZѯ%lR ) I)(2XE|yiy'+ ycղ3HA\.bۮ8r[ ,l+{t?mmmhiyF5Q/S2 \% xA!"eEx4x${&E^V~^L&"$N. PMj<͓. W^ލmӜB~ɯ6EDsc+4KF㋪%_Y6 '+6T!7ۄvɟ+Ѣmeaɩ `+ Mq_"=>//-Ly6Ij<<_,zGJpC<TVHE'nOMM &prb||\moܸcVyۭȘ:|R1-t>𣶶VykEEDD?% FGg%%%!|d\=w< ?۪6rIm't|w{}qa1'Lo6铧Wh[GF/?PrdeJ^\m8:M0Mt!r3 [m>>>Jb"/$\-5gύ@ا 3lAxi8qc0# k޽.E~IཀྵI?fƺuRi~CALN >(P΋q蛛tnUl\շ-5DDD񒚒 k`̷{߇/όG~~>KN'"""aڇa= J ϓZ5B^s{?M[{ }}HҜfdd>}0 dY>Fc%~Ax"fů_mm8nϝNy&u|0TdIVaNA ,ar[$3!@rE}}Pm~"YnㅃH' }}ɬ_s},.4as0$䳕,0@̷;rvOl'"""xu7l'bx _bxհ/)ZUB?Ȩ%ANXT#L[ayb;>{d}D_儣GdJmA&<*94 t?g(7ۄTCsc ɺFEyB3A|G6aӆ*lq/bwLUVVbv+:ܒiR޽ʴzWTTZ eh?Șou~.RSr+Xp|x'N}xIH/p:Edq ]$ߞc?ǚG߮HH ̧RO8DDD M`veqR+I[VmMþ\kUt-dRe LJ;V1IbikWkv.;7<B ە o8;r"^Ww_?˥̘K eez q3xh_BCݨ[W|al'"ҧSjp>,'xi_7~트Ƭ  )]4n,Qw>N7# iHK?)/]("V*OOX1߫C4=_(bg`1;Z4Ezz:fY۩v2/g ]p8DSSmDDƱ3s IDATkkǾ(קGI|z$0<4,iKnBn~ny ny rxCxu 3Nj<^BSx5NQчǻlXnIr ~xd4?0yj}n޸좁lۄ6C_&&Ct!r3e͙@Vö &gI=^Tz(OCoĪW#dSL^][nIF@zL@dyB[ZhqfjH1aWjx~xd  <.]rΙbYO'{,5}<.ぺM XZZGwrT2~y"KzW:vQdUUU~.wP`b_NV`<$ΝXq8(+nZ`<qsmQ߷d {~}>G8|ߧ^{E!J9DiUpV0k/nV9!CZscE'r^/1~)<ԳZ=C[#zs7y,P*GDrU5, 긓ut,)ZNOOGUպK Erx^Eg.Npb8Ŕ-oㆼllPʼn"P(|DoBNP\y1fqpKNWc.%?ÊQ7׋fb2$i s1¶V4=p01B_1<2}p?-6e/-7ƋD?QL(:p8`4uB]]ߋ >jj6f܆ ]ՋP@ zކE]]b/14ODD "?Bn~*Ce~scxhX5<4o7ȃ(Jo uW[I3'MgVPc}]xS̅[u0uvDhՎw<}d5Q П*ss߫oOK5 Րr6˙ Mab2$k.D 6B_j2Ū_<=? Xo:;V-KxGF##_j^ ^6<3gFDQjG.WA`xd4ߓ Ztyus_~"y^ښw~EtTU]*R)؎^@a7GUODD$W^Q3NZ]@ZqaU. ^B'nbH공jǃ?:6g"?~9! 5K~W笜xeg ~}ODa<~,UVs׋qQxTj܉hirK0̏O8{]X!TpExnDD J-;{ZN|4=o};{A>i<4^""" ?Ž^p9% ϓ< 96:ColVݾCqX ].N dIkMdZ䄽'&=9M¢,2OŸ]N^Er y@nI5`z>U<Ҫ98aClS-xiw{CWNJ4Q4 q޽]ϺubֶS6 , CGbMyBo-ÿcEלZ@ ["@DD}}"jo:4?k`""9z2Է:OZ3j<Yːi2qIQCo.L jՎw<}d0(>rM<6_=[N|;Ѣiړ BNscIWB?|Lk<=X\ M21¶W^2<2A#8-YuwOUFee%_G(ݍ:c)6yG[6nɚgD}m?TPUF^G=7w./!5%""Ҕ  !'1n ]<9=.DDD>fzn#gy?k`9¾ڱ[8n_ rntwy\Mbӆ*N m.m+4{'5sikOXqr"#M^N0Z a"Y8<=>ܱʤkÐ<^`zX5[xGV;V-d(?/.j/-'sE(޼vm%W6׫ȱTVV6X 55Dh)+À}{ hhhm0_%9de&yF9;oLȘ&>DDD׶7j3NZ]@ըAsN87&ST)>[vQ,. A8iI~XSo* r>Wu "(֞(r)M^R e/^Re, Y {QGZdo򾚛mi%" Wx,?~qNMI%0Wȏ>(֢M| ߯RSyd+X$wSc͇_:N9)olvAߕN|41091mrbo [@DD$&9ݴY'-bxQ<:q) -=ꛉB])֮5n/ޠ,Ju4x9 D=>*&vuY΂^kUON6!'+Ss>~y")<mh4r}$LOO1^N{eebV$\[P<@o>!ƼЄní%y<ىH;;kXЉM·WO='e00wm[1|DDD31<46rI'oA'u! q)!Dm?{n <-/],KnI('*J(=!wGh&TBW,='o-zt#ebi9ߟ?XY4 'HHD(8L8cʕI⊒OBP 0|X\}.oE?V K]""ҏ\sYo[4m~굃|_^ jBzt69}xzx]w2-~ gjwi? FpkUqJp ˃/ThJ϶ :}Svs-E/ՐI ׆Ƅ&k]lf=ᑸ!m嶰]yB?|L>8޺˅=.9r2Q{Yue+}Ϟ(rM(/-|~t mrde }RLf`+4#-Հ҅Tbx6I΅EM /br'ۭLuUQOYY]'7ZI%HyF+Ʊ38r2s?+neq\VYsޞGp粢97ڧ$0B}9٥>p|yw+%DDk/>^֝$gy4?pjw>CoW,CJp Zs[ކMd_(:xOIkYN}Ia9PQmjT(XrxFmͭWscxgu[\גm0$V.5<"&oOl/?ۊ~ADDǓxu I?:iYw@#WCiTh ^klS…[n3R )B}=O^>$QBΉb+4K~-rBoWY,G\VrB3r)|꾃<d :Fr?_,X26$% !cBhLYSڥ6{6!f7Mi1mv.to!$VK{c@ I5)@3vcٖFsm@g:'!yF#ټ5#㸩 ovWeVZXu;7?v<& X K47^c'8uvvrhҔn6?uxWŢG_ݴ0V{konZzzMV%֯*gpTo\DcuFgY܁'v?,iO`_yADDiͼ+N鎝)]>t%[ %]tT.xBYx '${?{Y1ExMifʔ}M˔ܩ僵ޘc۫Rbn^V"D*|OgYLXL"?05Wn###ES!C""" CEǕ6jWb@r@Vf6,y;E y""Jkbpެ5Mc|t;usoŝW!V'4xNvh8i;lxم~oWT!օAˮThۃ;%/$)j<_ܥT5/RMZ<{]\Oi#QIp y * {OD%cAyO񠼚^kĐ|jM52,m%u󄘀H8y ""_k+ WyAY,;ҽ>Xz"`z"ed2SX_^kD;T[LvYOO& {Y>WY:J%㗆qwXrL, |7t}aH^ݔ<^o'p(NEƕͦLVi*vڅxRl)cCMEJ;i1GsbpXN M8<Y>ݾnADX/ݴ̑7[>ODDoϋRf8i X̛NZ`Ccԃ]gmJc#'5`H'5.kW<3BxWxM|;ǩ18?Ȁ 5߭ƆI}(mď+!վ=/DDDi㽓8vԭr WyҢoK\mR5;p V|vUW }s{DPD2'7yrj:FxHM* S!ap؉ny̱̱bv|+o¯?⑇6a7Kz]R*V .=nQNF(Q /81}k~hjOEk}ƴ8/֮z23%"9Ufd)2nj /0g%_/ 뙁{kouk'Q:{Z)<\qҚAY,|;ksK!t:*en eza|34Iy2y~"!,tDG''՛[R܂/pê9XշcjdgXDqR*p lMx~oZ"$::ϟNqaDtzGcx$DD6~+-+NZKxP> HEvp88D4aՊGFFuk9iHEU{x^@vOݴP7IDDs96ݹd*꿫ucۓrLiS~u9WUYkAtEDDDixNvhA#єˊJs,}>c!yG)5OCo%~OKt`/+F~a<0OEGFF ,A"^իRdcE(Y|r]o~s]zzDlAC6M94gygOCh85ڕ$""[vݜǦiGSWxI ߹t֯*Wgef`yGOy؛G'"oϋI $ xNZ<јB_ [:ý؅(˔֍DGUú?s XroOit¶wK>~`lSsd񾴸_Wp$*y.='yhx8>8ˇ@H *y?? [i_`-*T&")mo,uݨex&n###ظ;p:ÉN#(hf?<-0gb :MŽ9(eefǎ8zR?stX^aFpu_nySMiiSf!n.-Hu^4@|ǻ'눈RS>~fV=N<@w-FGqej O)]R$9&~e-7 UͼijVCgoxOٸ`-26? ߺᴽ~|v|~uϏ<  ]SfsX >MiZȸc:N0MXmmn݊EoooGCV44ld eutZTCVTWN^W- K q󏲏23B$""BCR=tBG'<8o[R@7lsH^%GڄbV~tgY3mKo³|muհ38Oi#?πF? nN.IVW즛f8-4]SN焿wdd$PE6ox>+sB28ODDt#)^m;cNJ _r QJj {V:.jVݿ%.:X_]UBϿxH EtQ~ɫ0w<Tu'pcژ !x|xq#Ѹ^3(;KGtyVx!sgP4aP'"DQ$C稯g> +f67/"u[8<εiRO+ycBkY^aƏ+Rv3ޢ?NDD)%|!7sՉl*2; `v}ڇ;[+p)-ĺ*`ߞcz. T.sHE;zj{'q޸JwKzL"fs?8$>ܱ"@˾FP\!7G}"ߏ&v & 3-;:Nzz;e&;&Ɇ ,0eef`~体+;Q* ~ЇR:Ot牮 Sn_HZBC8r r5Ϊ/WVaGˮمTpx-<mPx6eg0R(9 ~bxXrx>ֹ>ق..!]t-ZTk Y:l!J%"\Tw\"Jo>AS6-c%?@]4* ϯ_Wv[י˗?3z% Z0Ә<E?"-| :(E!ND] ڊşkǎFm"N(>_ix\m HRy_ȈW:#똑p':7JDW ׋fnIJ]xlP.{Sꩳ|̌E>D$5W .qH2ENWىիWcǎ^P1Qf8+16ԝ]\'"21_4DDDgH""kٷEZ) \ucxAUwE&C7|߱b ~wǼcMbu}wmDz"8bP33^V|YXCp @]>Qwjdd^7nDm6 [6`۶>oss3\.w 2e(ezz;e3]-[9)ƴ>W"@Hq-x= ""JK^v9-_ 5^:(z}TM7<';T2D7 ^:/h{^w O.@'*e%x%i;OiU֢d ‘u7̱⑇gK%ڨחt|~^.e%";K u4CVwxQ__E#رի H }CCp1TUrʆ9fgwW&|ß,zdxT(|!]<1Xp?4{k)g"""nT[{ 234Sso$""ٷEZ)ܱB]<tے wHUK߱b XH@oJ+%e >fu;kE"w|]>Qqj#?ţ MDٰc8C{{;qFoᦠ:%?fxxOy󥳍i(獈zYoLw!"" ~ЇR;A<Ǖ'1&n3urҽ(BWqI؅RKaZa/+,z);сHtk~]uϓKn"fs?8$q|bmMHbƺɇE?$^yD4ik؈Gss3ZZZp}(z_u~qut;pSquUg8 DD*;ݮr U'&Hsy'ZqK"mbzRKr{Y ~wతx|\,vd O^sC?oCw <4.zq!<퓸ϱ9񀼽TvtFp`}!pT:ADض!122;C Dxb1K~q_QDQP{Z+FFF$?:κHB0bstuMDD,x?R[{ 234\DDDgE$RwsՉaxH"AY,|A hu%t\|Ҽ_\ []IXq:{Y ^{;I.jpiH>4AnsG\lWex~e, {Y E+#Qe!tzOu,]ظUUUW1]_f jNW'%?rI~d\p̥݊1'~ݎ+J "$"""@4""Joݾn߳WK%o WHs7 ecWхͯZdbg/+tMB2;#Qz%2~v."e<4C|.Kg###zl "Mmm*@9N8N^]Z}C!`xx.W牷yE.mL5NL9-ٶq"HVux022kksٌ&pZ:bu IDAT=z;e!{?"6Y 2'ξ׭7 x+O$DۉPlˮxh\uK =< o{p=LSi3`1C @8?{1h?  8l:|"ؗED8.>!ttGSzOs\hh`xW]NFcE۶5`۶֢%rݲiX$}ss0qy^s:#η~ 1wm!v弴ڈ8B0'JB=J~]ħDax(&bn .2;Y]I]BrӪ{Y ^{njhncԍ3V,]i_;{%fsX ſ(!J+7tzOWE^7!l6\mظ;hooW:N8Nf֡fRSz'2<|^-R;<1G i@Z9DDDij TrW(~ M OY,|A lmíKk`7V+ =T.K;`}I,h:Mvb._|ٟk3/O|Xyko DTو&lD ^7hh؊f(ر;v4bzBmmW[[s*$/EN~_Bwy<j*8 $QRtwǎTӂ ŏy ۲y|{D.DK~L$: '-6\M`GFyӟ;jVD-a\=V.[[EEVlcO,$qb4ry"RVC6TUUHJsgg'mkm XkTz )<; +rL;|˟n1 :ODDDX^aNPfn\N%\B=]K%X^&yI]Poi~8n\'vOrn ;K9BɝՏԹ& k9zˏܻE0Ob7^x"k8D5ho_Hn%.v9gS7ntX׫1J;zRľ7nT|}9WH3""""}A- 9<0Q{,]&E&X Y%X!xN#; DTRGkk+wp"(a֬u1@P y0l 0O4BOrKvX\ bd2%8Krvg}-_ X ghk~2~f J}!x522u "Jْ]/%" XUUUJz[m[ wظ15nZ'2}CRBqWso-0KDD2" NAǜ[2KDD <';Tӂ Ƀy"ymVݷg/6?N4ABOrJuw<)Cs,(?8ē\v'J]/|ы7h\Vv6υbp˃eVDuuuhh ә6uJ_UU5ٸA|1hjjTy󥳍Qxˏ~jkCM;9:,0s"PBO HCiBŁ]Xev&bW%h<:;<9.v'5\l?vI=]=]>=;৳+Cy3pb;^#Qttq3# U `a5Wᱟ7~mm.@'%^Gc֎;;;Ӫ>Qt:70L/m^n=="|]]6ntL:8[tΩ>=)Twl+ v!ǴDD;ݎH8A<Õ'D `-{ V.A:")t:o-v =E2XDGM@xCDs.‘(FE~A̅ 0Xݶ\<0}pp(irl֭[122u^+L_^nCUUl6O8Ν*Mn377O2flMDDD:я7sٜ\""R\{'q[K%+O$/d&9`VjnͅQN0R3B;q|?Ћ@AX a-21$O"80]6ibg`V +Pp\?U2y"R:TWASSH}L,L8۲ePU6[9l6'}EHX x=GOqZOwq7Nc^V,y@u3`-sXw J Ob7^x]ҸL]& M&̙kl̟ ȵ6e(v+޹h"z=p8аuKV}ӧOfK@yU k)+{;̿{Ov'""KMe |S;yJ~IC\y"1׫ySVˬOe|"SgC|1x>AOAj*`)oZ:pJ}F H3j컹D'|Y Rb~B{ךXj.<Ѩǰ {c}j{_mDTiDn.yn@!RH8? H]>ChXk|hY93f`fLddd~xؿg"c755z O4"J)Ng ZZZ 'u3pշ~_y%;!+3ADDb"ǶgxT۲SȟU &""cGZ*%Aq剔DkZ)`klvL\y" =ioIi̽,(o-*D~ K$CtF8Ew=i)ATB \>2e F#F#|vJWy"K֡^Mp:#"_މbxxxz:tӦbCB\0QE OZ08ODDJhӭyl xhêB?88_ISb{ʄX ?H^@C_By\+, ̟3Rrg^Q`6[xrQmqME"^/ ڊO}QWWáy,_ 5  qĜ:;(X""]B;ݮA<'RD |sΰ-Ǟ^9V|q%WHfBOZQ؎kVqJCyD2t.vE_g^Ne2Qh20MlMBtݤ )?wVR$<hlR^F 6Ǝ477QbKqc?LX0ZT{Y r_D5?Ѓ@݁^ P o*Dل\C. Mڜ4eL13&222r^{>KD u( hmulAgg''F%35E%Wv<st ""4XuӦr }ÊDD$0{t~ybx(6xG+vǎ%\y"1_vUs\Cxg = uxq$ۘs,e%$$(<]B@.'Fbs (W2Y^ͦLш)󕯮S$<MMO0}lݺU-IE]9 ""4w"nͥ$b'dgvi͂ %Dɱfk(Zv=o;6p`nI1p SXtߚk~x<$g`P(Nc^BC?!NźǺ _)+;5kT$< \whmuIX f 3'bG1x>* UprH6=]k%.S\ycx( A'pb1ԛC[ND& }Lb;sO.umi++?>'7M?Ѓpd o oq\+A.&SZ#Q=za@|aل\C.r MÔ)S`0a41Sxb\Uxg e版>ffp\Vnntvvr(mstXr/@V&7.fpcJt/gpdZ+,\yax(Aedd`fL̘:?eUն<uTWAu0 SMKgᮥs`)sB2m<}\ N.Mھd,9>Q0<̳Z+%Ary"u 5;]:a*S&Q =Qx|Gz?3B/'FbX7y \  L3fgDFMƝի ϋuh"Ill{^tvz'/2扈(tuBȟU%":S3\}OD:9Z)xߞM`4&S!t:&###93fh4bgpBd`a Eucc#DD BUU4P/P}''$MKgt +F:A IDATH:%:/m~,vv'"I_O  ,fOj?t#s0&$Q4 z`Pkmw(ZJ$]M]ת72l[*e#' &5 ;IM LHB df?V?߼߷amж4"cl7A H2CcjmkWupO 4A/)K&PE3LcstL9; KR8>oR}EQB8v'{ śFnǝ;< YJV+{w8bko٪i B֮Su=Σ= h1Y)#ǭ)JqZ6&81QNfh|]Sg<<婨nIeg~8V4=0Ѵ$Mw('{|3ge4'<_4pY>V+{aD<KjR^Ӳr<'~ [ol_;sK-oFTk[Z:yGcaÁx6_n[nX%ף#>0Gk6H$jh#yyyt֦zo~U$Q$y $|0+t'Nr.#;B9r^Ò ?ޯ5+WY^IU} g #r( Tiޡmoi=E Gss\ޮ-[b ؼ\p|hhVב>Fs,l8?Mh'cfr3+@WY4K׿.SίyYJKcC$ ן% _LSS( &^ IRg68 kF9x}32~fʹf\eYrV|È| y F* ̗4*5o߲UyM7)R^4nx-pH]]G{֡ק@`BR__*1~Q2 OtM#ݔs ]HszQo3&>k?Y iYE9wC>?--}X=,"61uQ@3 n[9SrH͙ `N*qX+,,… n:q YiZPOpĭ_r7'G^Lw)o^tj:x֬\e{5q0"Z濶whuuOĩxB>ЬemHųouap+0AZ֡#=:dt r{r{xUtjbD9N>_UU4pFYYD3FoxfMH 3y>)\5+WijeWFwO8CTC@KJ۷lU^46q,Я7#`h>MG4HXp ~x$O[]˥ Ci6@*)yP}}}4BNr5F;8gu~dv4rn i.4|T;V^È< #y0/VvkZVQq-.UZ:NoQK[Zk`ͱIOxH.6MW.|1s$UWW}yyyZzJKKiy,( 8U]]J6$o[S' 6\ވ)^-5N 5+Wije5>a=ҭR-[?@ B[f$ ֶ֮u!XX#E>_>O)rqՌ?^މ^\4#.^flKIC:5O D,UW鉹j7x] Y'4"v4ٳh.`>V+*>:u]@0X&RI~Uso[1B?gU bj{@H1caÁ9~Mp+tjbD9lJ&?/}___y9EQUUU* YLp$׶5]Fܗ?h<ܭ~u)g׼e^E_ }̊[gw H0#ijٚuO7H0q^&8Rb<EZ:NoQK[Zk`ͱI~|?zCy].edfnӌ$ooKJJ>HPuuB7ݐ%%73 !=}3gLm4^hsh0`D~̳V:aDp0 eV*x˟&ײB?0xBM51Bua@ L|yG4ssx > azr'3uB~ TVVyyAUWVU P8ܤ_gҕB婤A555%d)S53? kMɗ2pv̔=Fz+{5 <$`0P%J5O$(+oYՋ~.1C䏩]m<ңCFG|~|~RLɕ9$v}(4rvXDg*;ߴg.Һuh4`Dф ;Əӓ?*P0+ճ5ߙ{oBcGcDln4Wkh2kᣏij/0o qyHFc,l8#!_I~2Lp:r+ym?.ukUXXH"--MZ|nK9%%7Q$<3jʹ7Nw9}!Sν>'<`D֬\e{CxH0< ̗'K}e3@uOovkj9n>f-oLB?Z2nɂqz|Z:z]'hMx; -55UnGNfX5-B@˥ puȵY*~`6ɔ>0EIC*)yHPe48xB{of~@ Q i||g;xu^ j_kVbU9<jkV)vfSmwܮile m?ֶvuH4R)}Jq83%Wn[noAll6y^y^ٮꝺm=v3 ^YrB1kf~:~'NjG9OYuf2͢ Zri7c{ #$&@2``?Z[*/V$[?oo{@H1c}C9~Mp8hƔnWFfRS゜8uh y@,ep1~7o$ݦKx:K kz+>$.@3Ȧ`0TW$u !C˟sf9ċAn 6up !>=Nx@tJWE30b>p&V4…aL?NOHJryJljʹNY4Ϋx֬\eWFd$.@/鐤t|瘶]p$[%M[D61uQ@3==n´E;qaD@b#<$8È| $RH2ɼch1CGzt1HSá)r{r{tēr)#3Cv;a-\XoGKJn&8ݣ~7kxOL;O3qKy FdM0#VvF-(`$[G57Zh>MG4 ssp8 5fj `< фa-s#@R3:lAqÎƈ{M9ledd9u}֩[K_kw |I{$[c=Ǵ:?0$!П1`PmC]GztͱI~|?zfdە4B0"A3E>[%<\L:f*~7KɁ<$ #r( TIZm?|eOUi B L|yG5G3Q!'_/-^&8x+>0"3@r <$È s$}Junب*!I-6AZ֡ h1HVΔ\=n=l"\Jwt Č .XiIͺq,Ìϟ[,%5pXo #.$@/J< } %Ane6;ЬA2:h }~ǀ_><˳lJMKSFfv; A̙}>}pYBZUVVYpbtF5ŗ~.oF<[%d9]ʊeJZ y FP0X!Ju7ۯʛ>!\"moi#}!jm8MG-m:ң#h ssxzCclxz]m!S>_Tt F&UYY٘\;%%7˛}u^nSF̭,TY4p_UksKoϙ aDI3Tw톍ZVQ..QccSu=Σ=j=ܮ8o8}r{4ݮ \4qyS?7״GF"ԌYX:8[5!'9xǔsW:u.I( $iѢ,f TԴo}n::[>Ͼ=.cjmkWk[ *|!G|~rqF72Lp:xJ3J}L]]l\Xg y`Y?3_MsO8qROOKSο>'[k_zFx.ZlX:$'6I0"{ IVf}"+]ݰ1Џvp^o6;ЬA2:F &}r84B.]r:4qysjSSUUWh9up~Aq>7XzOL Kҽup[4<I0"U``V{ۖ:eOɑg ɛ>MOU"n'Au&ߣuёc4†ٹ9r{1xB^Ӳr>`1>^ m?>Uc<ڣwC>O_n71`zzeFC>/I˗/W(:QV\PhL8_3`y{_UUEx0fyqZRr3[PN}3S֐'z mڹފiML1_n]aV,, 6uHt[p >;7GnG7q*QJJ @RhީۦL9?Zeee4,j,O gNSνq2OIW67j/M;S/K SN"@J}-C>H-'}ʹ8}r{4s6M.K^voo.i秦j֭ 4,<@8qRKWm34!?G+M'e-ljs # <`1``V{^M`RmGrJqq+gJ6n+j Bh Ҵfyy%3+J3YݽZo[pj V,=È13_n]a~Xc b =p } 5+ vedf(%-Zb ۢi6XX矘{州;3yIZZQhinjpWCy:y@J՝E?Y8-@|vn<^ssh &81QNf֬\ߺݴSSSаSiii4y3p⤖fϔަ`um[ukL˟W2IR~B-V,aD0,* 4junvW%;7G)|~||~6Vr(%%fNt vٳn: Ij7|ã%%78q;}5ٚ^PvN6 $K&+aD`G ˚/iՊ޶NSr2T/BIqq+gJ,fr3+Pp.f1Q[֩nd*8?3? }Ӕso1˲=5:zmkhު^Is<XX0Ti'}ZVQ8&9F3,n8$x 59v\z]m!EG3u|jjv*--@ 8NUL9{7 w A IDATjh/MS6Vk 2 &?cFdSX 3HU0#ik{6IAg˛>Mٹ9v>|b[ssx5|nWFf].\5Nx"}ڴkiZn $@p ؜,8qR/lzp^~8o.ykVjpM0_n{(/:Hp8TOW톍lO7}r{4EMp:51cN~\;f靺m߸ϴklZ-**@#8>1oxz9p՝2:_kZtMڹފj(/®:u],. TIZ)=U 9y > ow{ʙ{f<\tK46zTmݺU@cTaE 0)//&\gM@wL9{7[j|,ܢUXul@x$) 4juO>M.`\OBGR) o5 Qf"4_7tAABi6.*1d55 䇂2ϿET D`Up~Aqf#}W~/~c8-X7H.Z+aDx $bߧ!pQl=ޡfۇB.lWh`ZcoRi)f ÊD 555}寯ԃz5 FyԯQ?wf~@ -AŝdkK/0IYrz%]gϙ $UZGd|~?C`DB?& o &Ə/D].;u۴jӯeKh׫)p8/d2-_^F+PSS+b~]ٚM9{77fYA_|kyed3ۨf7&Dx=fXI~U3F-gxVΔ3 &81QNfce߸kL:Uuu[ivʟMJKK!UYY߀Bp򼲹Q;#~c8wkEs^@̞ 4 8c-5s$푔nޡolRN02CQ^tM#E>_m&}r84Kw!N31\?]755RUU+hxWCCw/.>-*)y\"eI>)gkwlnԞ;czi XrU%g=0"@V>P^te0F,;7GK+-~xk6yPqfvDYsqSn:ݭBUWE qyF"np$=wj/M9[Kھ>ةW65w3V2I[ؤ;Z|È|{0"kIߵZW=U #$ɾ~yO_n[> м%6ęGUGjmn1:eeUWUiii4=E"UWWW.iCMw(|߳8>DԷyz8\Z[o_jk #.S8HJR'Ovkzt% n[9SrlD3~xy'zr -(ײEKLF$˵n:[P! T] 茚rv2N;x[lnTw\.RvN6 P~]JV,*\u)|IXmwl-6G|~|~Mx*#J@"ٸUm\Ԩn>ƢѨwNuu[b \"JJ+1bٿɛoxQ˥ v$_kahxEQmQ]]nK|Vp 8NUL9ox OFgTln4mCH\/$I gZ ÈT1·< .I$[I~d1ۘ\&zO_n7&++6$:EKLtEZn d:ujk_ EHlfnROlcm^ ?jTN_ }ǩ)p!\T0#V~Gaier,Vcە4B@yT?^2:555**d80롤155U?ep""Cg&8;8:Əӯ{Om4s+$I?/}V-F$ FcV}^MZZU?ߖqMW]u]}˾^_>˕tfI<;MFjjv-|aB jc5P08-,yO:U3`ѨJJTSSSLKp`h͍=3? ۛx6/mWq0"UL!<`DKIV{#E* 0RSSzta b(م j hTuu[n]M̃@@P`PSNUZZ5<@{w ǔ)M+^KgkinѲEKZ{)0X0CҟX$O*Iw!N3i^U>kujkC*,,(kݺmI-SNԩy *((T0P f&!8?ӔYizIl_K-VWgtaD1 Fb-0Ry7 jCޮӬ{l6y^y^ٮ ]hLNUU jbpP>//OS ` TUUHw2n.zqp~/qm^"885+WY58/IU\ .aD@?jo߲U9Sr "ݮ  IἹSԤFZFjoXPP™*((T^^Ҹq*+[P(k}ݽq)g;ƏKo'N>;&R[ؤ;ZYW:u.$`&IX{#EOUBABN\Jwh4h٢%^#55U ; \M$bZuu[WE*,,<?*nݺ^<;x[Vz-YSv{5ŗq9]W55UEEwPEEwT Ep~f~@ i>(8qRNQSs YZRrs`C'q?0G?^AeUۭZZÈ,c \.[0NIViE|~?p6MW^Wm4%kinѲEKLFAAB-x O:U*)yobQ8wF߳5'ު'{;mMkөe*6Ob흺mZ|U?,&È|$\`00GXҊr9kv223r WlWqSQ[Ra5~FUUU9S!)2@ *)yP}}}1&ydz0+MϔWw_ګzL˟eʼ6!Nt [4&"<MbSOc &8x._LeeeIѫիUSr̶CO:U &MYrB]o88?!7jǿ__1~~OtҊrMY~hڂ `40I3Xͷ|K=0CnWFf].`ۨfjhؙp81 =e~R1@1y"<_))1-CжΛ+5NpQK-QksU0"l0jlw%[?enSSGi4>#_,ק>n]WmT%%eP6yqZPOp 9Ə]\k&BhmK/Y98XCy45l02IX{#E~X>A /QJJ W~k|0"2 F:È wHj< iOp0 l6\.y&ze@|ʼ6K`6`}>t#]c"-\XBp8 Ė}:gߞ0Զ]ڱ7/^Op:\ju}֩5+WYk 0" $no[zч0v].y^ٮqx.Z.SOP*g>X2Ah4يD"1||+M;kMwԞ;l\Ū5ML3`dK~o1 vedf(;u۴j+)Qu긭?{L9<`mhT%%)f$8;'Nٚ;0Ψ:?-22\g3tK/iZ~; #I`L HZjS)Z ;NM̘(mGٛw6@CaT,((*,1򀕕-W(q]\Ob?>ɵn!KϞ*o'up|ܙPae<4|T*r Fd ,. 4Ê=n-(`@\HwzB3$}{tL;?^G"fPujBT]]իcv-(f'@t_7ݐ'{JS0+MRg?3'etFetMmp>O-@U[aD0 DxMޕnNJ0`l6\.y&zei og}^%W|Njjʵpa)@Pbv=Bq'0##1iqWuI`&-`6ÈTeׇ 횘)7ܠIy_LWWW'ef.R}N$IpX1^0+<@YW*,"m76Y+ #. HPz%yEL0S߸nrotγB^7mn鉹jB OEUh݆΢Y4pZ[/Y{ #R$bcuXc=T5tK7L&tymϗxljjVfj//SAAESu<Đ8Z(ܬ`o׶6ф+4'\JMOCo6X #rIKj۷lU˧ ,v]Y^)7ܠ Bw}u=>Xוǀ-Z:vo ZP'{i<@mժzhxdޣZ᷺hw߷nr ~k0 bSN1 GROq_p0 `DƏ/D].YJ7UW#CuuuF4)2URbrLѽO1;//֙Eʼ6fF]Ks~^V~త #9 3``?Z-b\S3&t 5+WP:FUT4[H$&כЂ|0][/ôz䱹>ױsEe6|0"{cF Èl[i6Ar))|dp~8oWWWd kcf#wDYWjUV/'8`,2I7Ia?|eOUiLfn!p2geP(2[D8V(TUR iJUUbr`V{+MݽzOhHG՝Ehtoavr 3&XԩSt 7ImS)ZVQ.0`Qv}(4rv5YJ7B$F ժF UU!!B*++ɵ(Fk`ھzgVnA #9`,2IZ$O~XaBƏ/D].&Xri%6$V]!@DURJ=1V8K]Ј 4 4o6|0r IDAT"2 yq# ltUoGf N&fL`"cC_hTEEDbrcٚiyL˟G3i .Z+`aDF đ[??;) \ʽa&_7<@Y*~`i744n N`hTee5sfe%)[ >\Gp` &gߥ5/W_|6+`IrV3 $ &++ռbG7Fn]jj^V__3OZ:&׺,-)׶5]LwWYYK){_w͒;u۴j+WM94$7È+i{ 2 wQ_'2$d$$IE xZ+xjVc*Ekj P+LTi-!P|hJX2!?~ZAȞٓy>=y}>1p.Ktr򔒚Bqa[7}޲,UWWtۡY$=k,yCU%j~<VۋGuUZw5 CU?WMj9٢oQ4LH>_ƛ윱ZE"Paq8p@`eR;w <'A{@ 'R; [+^xK/ٺΔӕ?Anm?oަ9MSNY:lR:13Mi(p$/#$wf0B"!!A$3D7vUV h_e[!h8B0Tqjnnz?~le&<@'5h񆡚͛XLDn>j($x;i| zzJ_5Mk'QX>_=ވ .[&aRRSrcGnv&-YRf{W6mB|M t0ٲY{}?X;Guj>5-UcƎՄuRfGm A{L:iD8ϗQ)"ZqZEsp%%'+99Y17DO:Ukfu9*//Z34(Vܚ?AW чj9٢S'O-pA-'[['HՈnc,(mOhaiZ/r8ye)1ݫ?Z8arDJB1}!PM(ygAuttؾ/-Q|l jK xu CRG:чmtdn0)&]=Xh{q^X<th/TIt4>8iZ%͋ |[a 4:+SYr{<CYJMK }hmk?^UU~55'MFpʊm!n0=oS"t0X(L~ZJNDs]yQL&i]4gP!)&FnG9yaC#s@@`Pwm+O:UЎ;U\q !Y%:@l{BGھNat;wG{ i4D ӴJzW'p㇣LIQn^^\LjF,ݚ?5*Y]Wn})p&UTm34=?dڷNdҥKd`rEV=Mii)(4sݣM9 "%oWnI)) <={744nAL=Ѓz:{맧gPGD*//SGGk5(l j搬UtM ZV4c8* QL:-i^4gsںy o+C e&Lה~?A`0 M>M ~<"Bee/P ?6¤W_jPK5fl;1B^B]Ayi4$DӴIZ:tmhtV22@ ŞX777ASS _rBTYY9a#"[BS6U.B^=%ɥKd0~xaNPjNHCy@D2MT9oٳOLrrM0@JG>j~A%Kt5MHH /TF>FD,S!Y;n/-! =6=uTm&Ӵ^4DD9{Ozuwws<11ܼMCC~CpTR)@< bu^}ݣ ϭ0\.^&(~\1ЂE߷u O!:KO+TYBLFdL[aS!+KҲ2F@?<|>j(c(5M@$ |oJF4gP݇)wpQq0#|a}b&~?D`Fzz5Nך_5+c] D66l'*׌Y@?~j-cdxZ~Oaw} +x/6xJ/9fLóƳ9pp-ҥK~SKV=vIYiDj(|y6Fsq*]Dā8QrrbnY[Jm˵n hڴi }|azߦʗHkrL^֠#T(ߚ?AW>rE MӴ$CCiZ/JthSFuwws rM*'/W))1ovm|#.K)IWOjֳ/plq^֠VVs="8?fl~臏>lղ!Q01yex$)ib40~­ނتX===j?o[bcc5<6V#GȔ&042e c=pNlLp%zbיŷ8`֠66FT!)=ڷNtx/6X'OY===aQ5&=+ ۥu\;##C o dY$|"toeg/^{@pXۨVH׌7 =_lvU^߹;c8#iiZ9"0ԙuZҼhaӁ9Tjzݰ%u?>5))˕7Kq19]6%Ų,UVV2l/K)Wk1"}VQ1t8/I?]<_Lq^j4`xIk"d_?_jϓOk|6~hzכ B*5M1D ӴJ%13ѯ7riG^#I@>|^*)9I17c r~۶^=l_'otfߝK~3[/R֠bsaO<9'!_ɧ5p@?lUU!m2MEb-h6sO ϭ$]љӧ{.]S( C23Vn@CBlݚ?5 R~,iqÇ oδiK xiێjfap>xG)O:(5 PUL:/hჳuI$[?@=*3+Sa` E`JJJ  "} +G~hٗ xroL=216~zz }QЮAU(:iT9:k㈸?A"&F#SR+oW.PC֌YJMK};4u:դ4M p@o1*kMǠ~{ ft6~ZJ6CӴNhCy@T2MkMўC^S˟Or o.\ХK1ml`˥QJ}zbUVV0⪫eYk E h*KRKQ660fu߮Xx|h+V>5 w6jj?AHUI Q4Hjz{uuwws(06y`PFge*;gZʲ,=P~ 5e1cre&6+EkqSjVWO/ftO²>yd^ #ьJ=_Wo@`H6l!('/WY2 @P1cC5~M߯f[Hvi] J^n>xÀ9|U_j  ZJ]Ey@Ԣ< ꙦMҊhϡ'u cBALFhM7ɛ"E ònssT M"e~u+>/|;Ny7:I)^'Cx),S`^BNTjb LӪ2&IV4pMC+r{<s#(rD| Ut~[PyyUYBlaa3&gi\f2aԖat۸QqI_xl jh~//i_Uujcmo =P`֮һ4_J HzShb);g,Wλjc5 W7 yJ|ZOvz@mZYOǓOkF,6ЩuI˃D׿\ϗoD{OC=0_p%=|D.8tn\.RRSxf;]Uw=$$$(xUr 8H0Taa,ՏqO]t͸ôAez~&ch8|Uku|atMs=pNl!iiZ \Ig=C־7rÆ &)=##M8*trrx(KނaO'A6pY_ؙ}ii(_Z3f%9B]=ڲY_=3UkWUQs<\K|$)Ya}m \ŞYχt}ȑ9r$y@}f99Iaa D6&w_?|י ^o<)/Mm[KK_E52[QB\ IDAT@zrefSۦ@R,Ӵ\y >_UXfNc˵ڻe9PCcˮf=G|<רB-aeG)@Q~2M ўE;Rp{<̬L%$&葹i畚lejnnuIA 4p?5srm>|5A=9x:oZy(p֮ҩ-7b<`I$!:tm#ǣ\yӽ2 Ppcnz?'kWTT(dZ& MMMZo:ϞH}𔎿IHrBq^>o׃eGS*=61c +{l65ZJD9< iZ/JZAR7[λ<&F#SR'oW.PBXPOWo`fkP+{ fꙪUJp;wD˃@@yiZ^# iٳrɛոoRJjbn#:CلZa-5kjjdY&6lD;;WG}U|i\ؙO8\jSZR#K҂,T%2FQUkj?AYwy(`h'hݣ ϭWww7' 0)'/Wn@"CKhي7BS`zؾwfL}𔎿o;?6E{kt[{6XikʮB@W7 =]s~`uh9٢xe4MPkdyۣ= nG2 MsҘٶ>  ufLҸd\Q[{=a:qÇiq,KmFrL(Ҋ $1fl~yMp:/tjYRuuvFߠO@yiZG@烳u+}莉QN^^}f뙪> Ye8;+WGC2]{~DC;Ζ3[itoL=SJ CN-[BqvI.\#pLzSRIHKȔɛ"#$zn/w_@oB2a\6Iy3m6sڴxГOt#ZJNDy}yi$C֟M7ݫ\(>v/=aY쟥0cre&8zzegN#-(v>LfkqSRfbkWUz4m׏ RIGA f zQ)04:+S9yr{<aɥKo7(++SGGk$4\\U( 8-.=b2%*nAs{Ohe>L)ӧi݆ʶh &Ӵ*y$itvҐjMΞ%Qhlefe0x /vcݹٺFuu5A5`:"p;Ӧ,.=9}}넣k+ {v?6D $`QLOw6<^A:&FIII˕7ݫXBbstkۮuVAASSV}4.3W}ᢻrm)͎NnzzeWVVꜟgƌ ks$IeG 0L:"WTQ݄`p\ܼ<8J. +]Ķkwtth֭ P0Tyy$4\\F2w$;;2Uɱ3mZYO{v}[0STRl6 ArEʗ0PPu$!}p6< D<%oW9yJIMQ |IG>jkj  577۾|.ʺzzm:7|eOyIΣ?8g_>v j7 -[\KaQ Zg_ d4~&iJz$ [7o!)04:+S9yr{<BfVaOò, dv(ؾΌYL}%E#Adw-uRy;o_#[u_O/6T[{7Z~?z|!otqTH)ozՔTy9&-'[(|Ӵ$ BiJz$ [7oQw7l:nG9yʔa0-(|Z[ Sw>f۵_P0$d<י}w->b(G_0[ZR^/^rԽ}:m+3mlѲMrB<x/fg9|U+7::l sT}!@Q00M봤{HO;R0h.oW9yJJNR |t57soH01_i\C~!#A<Md"._v{"!б3mOЊ?qܽ1m[J6CM@P02MEIH;oq{q6@]Uw&̿lղ$>(ØM>8{N@4|0Ȕ&yӽr(ONn=}^@IyB]%:ڻem %&Kr泹ڝ7(0 n͆:tJ7 MP2MkM$烳u(%oWyyJIMQ |DݘU3uc M(K1AF'iݹ]Ov홓dZ[:'['YIN-[TNg_ paDdLoxr{Lo'p9ju}i vL66:rҼ;ҥK4ila?oiZ/8c=H:J }|[ Yʤ8~1ݫkkL8B4=2ѐ`0HHڹ34WX\|cy00fkж2SG|F=͛(kWUw34Mk1s1y4>_IG$IDڽc9)I_ra(%5Iݸf2%I }_۽^6uuvھV PSSWRDzXQոdB mnaA oeg/^rj|$vUUHތAoP&<giIHj'>lџM@$|،Ȕ&yӽqFgeY322k'=fP81lf?&GD*)y<$kNs pMЖNHq_[_jFG C}T6tujˮf=uSaZNLMF 9(@1Mk?Dzy+11r{<˕7+0 fҽ3CnMMT0dMMMC4sB\cg}-מv ~CAZz<5nx^O,Z(csIZNhYҐ2Bl2MEbBy"IG_>6<=11ܼJ81ГK(> o,K*F lJJeY7|D9r̞m~7tĦ5׽3Uyfbp zf wTM^͹<D>Ӵ^2&Iz4:bUt?QRrsW %3 gI֭ekǎ:YFl U0Ԃ%}ô +1 IDAT <]=MGy~%_}=|jZ,9/~"UUz\"y"L*2[t @$XJM405'-D񆡑)#e Z8@oYzXee*//gSp*++ոdB #[mm{l/͙oPr['h+{l6_DW4Jb< =HzS=ǣ$@Q8KƈZJ]a5kۡed\ Z4\B cgln?ei'- 2Eq^3Mk1C0u^}vL7[$ʛ89MW)>o!jnnVAA XSS***BV;N 0ڻ=%TTwWUWFJu쎀LδDŽضz6ʼnל5➸nsN:tglL@Lg _QReP/?BUŭ㜜$&{ uW$kLgIruOH61kæ,7wvIqs>Ҥ%-!> QC}!A fX,MIQ-b $IY\YTgꈮKeel2~N |2uuu|_քx=V2CQ|ױs!43 Jԧm5ioSgML=]V[+cBq%{2 Jy<.^R?m@gX6>MJIMQ22j&eeZU~L-[wza%3As({|/ϛ@k{6U'}fZQmڦܩ<HCq:%ͧ8ы&D1$ f6ЄVN 1r,,tuuiLG6n|J a'0/!mZcK}!>ncz@::{M\j.^ċvM/l"{u`% JQ(x_$p@K Iv&ee*cb `pцܴAeתx99AMkڱcGX垐E!)xd80I;vCGϚ*gah}m,W8v@$j;ݦM7ZJqyw$ 7qqqJNNdwƧiԨQaYjkzzmS!IjnnViixOGU t@Ȅb$Mϡ~!$uJ Cu9ڱ{gb BQWTyw(~DbhlJn9>NP4jl&yю;B~<=V2CQ|N4&EpOT>elSz^Vh @8[;)@<eFbzDOdwRRSwoYڱ{&eeb=LGIC ˾˓˙H yG5%o3g/L7m~GU{r u_8k;ZWC<戮P C&f(srv@X mڦy fMצ777sbHie_y*K't@HutA.S神K}l;:{/ 1TSrj.^ċ}[RF{(@Z/4?k_%FݮleL̐a\V'Je3{R׫/Vee%''ԼLyLR^(KRNF2ٶ_P:x^8\0M6reT`Ϝn#5J@<1x=FY\Ʀh;[idX#nvq6WkJ3?_(ܬҰ˚\4a7Bsc„q)ϛyϪ PvI^@ 1 Fy<2_w)#,)VJj yNfV6W뾹sLG)ף¶'~/(>}$I֘dnL&ć$[OO @8[SEyb}SRzKBBƧi;[Ɏd[31ukllau]Bz8IQkٲe ˓˙H EyRϥd f6?@;vd<Q-uD8(߄=Bf01Cd"Jj&eefM---;w9AnƧ}楫0/ad$me:m~}=i/RȖ 󷶄<<Z~'I܈=-ndw2&f0A"W8VmŏfM]]]*+ۨ9IZ555aٗ{B#t@XST{cצM;m>V/N̖ AlC I]" 7y;f+.NcSR4ٝiX,p"=]RYSCCgR__aٗ#ɪJf: Ԩ^;o~eB~_˖-SWWWXwQ2K} vs21mk{GHHy{=kl.^ϋ(Eqv^$ uL~*^Iq#&У?cƌфʘAq1+V~VMSrM&׫/Vee%'Ȅ֬YkUN蒔3w9 M^ǦMWUm8@8[Byp/;IFUIv&>%01/uS+˵'+e3{矯TIC$aٗ{B~PtFLkl'n|7&ttj[{BtXQmڦqN^DW^EquM(nQG\\Ʀ(P4Y,Bkse&eefM ϟzN> !ZfMXeMc%3bXyHy>vϯg٠_SH1o|mڮL Pm} n)i>y@h|u@$nVW|}6P4Mvg+n4 ŋjرCs #߯5 ΛJ` <ϟqұs!nNF-R^=ТMoL0t3Zj/:ԕg_y<=^>CRcƌфʘ$@a0*+acYF---a׼{5=Iޮ+B2ݚ -m:ztY,,Ў;;5Qm]+' @(x_\꽤N>$V =@0-\HOW#*ۨs!\S*{N~ptm|^dZz@@矓`P\$$n4:J+*Ob(%5Ec$*+DcWi֔UP@)UR򐺺B/kBQ~O˳lz=!YO(?f3k}M!ֵEzq_&KWͯ^<1|(`<I;IFL,6P˥l%b)^W?\e˖ptMXtT`|N#3= v4V/ks1eqiJq0L ˕č@onIvI2 09ؤ7lROwi4f-_B˗/Wb"Zl ˾)SsDSԧ+}9Θ̴W?BmK|.3MG/nzቋSݮlO8T<ؽS3 S WxjkIʰ )L)S%iilf,3mDq_y\vIoJJ7bȋS!á;g$ G굥TS%)??_7&'zᒰL?.)( L3?}/Ho^46%EnƧb CVZ+̈́7z^ _1u^UV1,r9HѝC]ۨ˲RꚼQw\ ?Uە;5 1tWĭuD&xoJZJ7@?tEiӔs7;xĪܩyڱ{r}^W?\bDURPXeMc%3dōd8b.˃GFLՖmZxa G굾tz f׊ljl!x_[@?86ЄVN $IhC+˵p]cCCslߩ+,zdIV^ք؜:虨8ahOVjse22y6Q5< G~`Iv&ee*cb ;nmERMTӮA*-]u%RCCCXHѝ19iz.]6]Ęѳrjxp>/bܡl%AP<5$q3 xcdMvg+m|FE(U5oH555K~?sv}kݓ#kT0u>ՙe J@8?w1B< <I;If诰X,l[ίb0(hC+V U555ϟʈ-777k͚+r&ꑢ;HF֪ʟU (ly@Xx<%@K\X,Jl(ޚYڱ{fե矯^$~_k}YX Fq5 Bзr&L~nפLeL̐a0m@hN֪횷`zUZZ|כv55&,zNd8d2y7[0_;v"^:x 矓 \7%}$n6:J+*'ݮY,N0vM[+tt[D7??_kUPP`5577ò¼t-Dž Xzn;A OUL&5y#b2|JN :b<`̗H 7 EcSRvq̬Lmڦ?Y)[< A?\5z=#߯˗e_.g)z.]6I֘"8o3 -JmFq܄(F #JKzSTҸYNX,JIMQI`J_#fk֔jJLL/[L׆|?քx=|\Xϥ>zꚼNDd8 @}>m'$Gu>oX2F\&Dq0(FERf2V Dm t"";fZeeòU''7P*dͻ'= Ey~۩JfDunϿrT-mv}SrNj4n(Fy@߿QQzхfS/nWJj, ' @Dj8RyX]wݥTPP}577r\Dz.x'$0/]NF} &5yrTaSfZjfqqۢ8?FIzMJv$SцVZ]/ifaե*.m:,yIzdy Ie?KIVϥ>0+HFeV=žYO3U6hse9y0CqC `*(+zah eNf IDATRNbF8ܴAOW<)y_oKKX7>%?m577lcXֽt^\D.8tӏDO{:/~6.~Tջw*V' hKy{Ay)Q@dk;[3dYS󴹲\OW7z Zѿc>;|*͏8 `(< bPDw~ Iv&>%S \+WzI͝cu!ԼvïoZZZB3Q?( A7lmX~ rӃ]GUQ` I(<>^},,PbJ8Z_|(">sRD +}Ifm=$IqqqJv8p8w@8?ӯ^eh2i!ߟ5!^OG$+BW{:aokTNCz'tOH?ʏ\z.]eSrNj;5 In_NgNQDC~`ο[k4fL"y!']z)w]w񨫫+Z MqrQ lz.ɫ=?{BqQ>A/t !ߏaZjfq1!8Dy(lfaV[ch`hlRa'Ewq!`ttX9? 9Ԓ6Bx^פ&oc^oPy@Ģ<X6)+S+) =W^ޥݙ ˿ɇw󫣳WSI6WN /zE ˾xFSQy@D'@x/\:sM׮@&0H˻QOwwTo=V2pP0k8?o|`XNi󆲘|0/$i)I޵}nXxvީy Gq~o)utrAuM^),.^D`Ni}:8 ( XRջ^Ҕܨ=κ&~?}M!,KU0d׊a8_I\%^$۳6W+3+0O?Tºϱ))QDcWDt¼t=l9t@jms 6ď#_=ТCGφm ?LCDq> Q< Pz듏?VvÏ^Ƒ2V'j NDW^ޥvO= ry}MkmSr IÑzm)8?Cyu(=ק=GL&avND|za{ީcDF(;o/M{==Bi3 ؽSh ڡl%A l}ф< *QzO?;u1b =DMZ^Q$yIzɿ2z|~myOa(wj48JqDFW?-%ꕏP`L]}q N֪ZѨ?ֺ&~?h[{jm"X-$ w9=Ѧþ?YIq QD-&]\D?1:-b@h;ݦ:s-&=!Y|7[9N> "x6Sa^)WcoN~p!o^ ۫=[OhFy(=oEoq .LLԜ'(>wKr2*K#J8@ Afa^i޷N1)+S+e6l)(y@L@y kŪms^裈Z_ebm $9KQ+Z;Xtetϯ5{dd8dM~\3qg?}hmЯBf3 ؽ<48 1}`x-קgoĭ/-M (}[zyW=jܚ©*{()}O[U?mNs;H, ( E='J)A9T{@Dq~`<@n^ @Lrg+9e;ﺋ1Z~RV氷p~U۵p=4Vꚼ\,&0=g\ȶ}O=GB>ˑde=e=zR.."CJyk9)p˕Dҋ$10~Um׿Gӯӑ2V=N@U:;?97Mح~=Q1͚94GЋT"473}tr2Af]W/ϦnsC34bDGguJG??r6uk?0@W b` |-\.^D޻liחh{+KMVn_NgN ݪ8FS^2{5=gIV.0ԧv#yзE16t-DžDC v=tOt9~v9kM׼{5I\@kѳIY\Q.cA B(p +}7E~@꓏?֟['#xE߸NMvgsbح#uj8R~ CYJT€Kv4%i۩¼tMqr2Ñd}/ú^}iN~p]+~ѳk򪣳@4o|X @TEq~Pǔ @,OuÏ}IvRRRiiDsޚ94H&:zNuM{~Ӝ|?Oy _uJZXg3 ^v7Dq~P(0 }(,KEUU]7jAn#8AsէGd fJ^V[q vMKEB]|<@TgozJY%z"HV]u=ٚwO6AK}kѳ%A~xxp>aA8?(2qS C+)nr^yyG1R^y|~y|w$Y }딎 iXi`H?xa{P`(0g3 ^V pC=:s-Z~)( 'LXO-0Tg_VS {[$P`(0H'J5 tIܥN'$kz`2=tY5yK CLŋ0Wi{"0 ˕>QISIc` ?ΟW/1;tS9.kPuM^Tgf+cA `HW<CDy!r2};G׭%@/vkCtw>fۚ 85mBRꚼ:x,S應I X xzCY<.(0  s9Z<ȡ9sr&j۩d@0e>8lY]\ܩyb֯]wP`(0LgRV6WStc_J#Eb|,,P* h7o(' Nǻ׭UfV&a}[{_g=?Xw$Y5-ǩ d$6_qէ&E1%_whrz>?蓋,)S;5O @Pnu&P H($W {$}4f3 m,@#:T{@| ɚqL::{uoEՔyGUs{Sdk j;ݦ|:s6u_m.Mʔa49KNS&g*wjC*8@Q \$$f3 ^E!;ΧC4k<~z @ԧ'}:x<>}Mٺ3esMS "i;}P+YY2F\@ g+ "p2yR.."0Fքxd\)Os;ee!QXOOT䍺csOH]licT"'DWi{"pew#1\ 3o|X 4[s9U7^sɑd%HWu^~v9ꎯ0/]~rBo?H[x_"<!D~p;G׭%@Мhlҡj8Rnʑdմfd1ՑFꚼ썺&;9ʘ=}[׮әm8yBJ_-y̤Lm(1 @t_VÑ:=NȗX5=g$#WZϩCy|L"%/lҾPD(`2.WK~L`VZISحMj8RtwPLL5!^9_|r&6B8*=~t\ ]2?H`>SPd(`Bᄍsbm "nǯNHpObB=zDkS=.wP)}[׮әm18K=KP\-'Mr T|A}(~BTgf*d<@?Ni2>yL<&r/"If\Y̬LD|j8RM:ؤnBp 7L IDATXM$+aH<>>W4y&lfaf)VaHWt(`b09 g3 ^~ƕzIgNH&LE~zX٫O>WϥjmPg&?H25{nfJ=VtJ' ̋<J/%II?YOrzz1/ q%X$I9Z9ҕB|g}SahvMқ@?(͝ j5WÑ:ؤ&Km׋ҍ{(kekM$I'?@X!2@x2% u_~ FIK((A(͔\=) zmtolҙmaqOHoWkP23QQcϥNwR[;n::{`FؔܫB0S,9x2qS 2P ¸\%4gb.<•H7F@v!03D<3[pA{B`41D㕨^dֹATr1tgG<*j v\TkW>i¡Zb?^7((Q[%ڷxfJj s9?y\u_Vlɵ7_o>w ӛoh&ƙ19x栢6ehTGk`Aơơ9mY˚s7W^x)[B'c<s}g83\{B`}8՚5̵7^%=v q,˾-2d<s\QT&C3s ץ},x=yHw^y Nm8se`2y~bVYoyzbV}{ex扢nIJ+[}͛^VSb՚չ+sU|2Ax_>sI `~0yĀ~b+|z1Fj9՝]y8cJj}V]+ҧBLW^x)[B$ʲ0?)ę3yx桢Kr0gK[v! Fj[]9zd|T?Z  Pckל.>.`~b燤x橢^ k83+V䛻vhͱӛ~aZ%W\>NY=ٽs߃M<c0E) PO'e<$7qf+oW'Ij#?ٟ0Ist;BL̓eٷEߌ`($w(q6n=7oG}񾷧5F֬ΊV!;w_bb+˾`3(;<ęr{橣]8ٟӛȈk,˚bʴ\Zޞc=bLʲo 0S-IQ3beKi>w@Fj1ghTҲ%׭̯l.)/`~/]4瞿Wiy˗g˳dRO^{7$ʲUuIƀ~B>чWq}=2=.͇W\2˖-ˊZAcccy ,]KRIcѠXOy<}Sp~H Xx`+@V3w ץ} O {Mmd{~Ϫ5SY(-yٲ4H`~/K$ml7M6'Կs.9}-4V=xFZ}}Ty-I<,\E) '`ʖ|sTUo쏽ӛZm$o.'1>$׍W?ڄ/U-_K?Y S7| 11Oe`a3$EQݛ%\co~k 0ӎvfT?p?]:=O̢>$-+W:0O?\즦|K&#ytܕZM]}m2E#6%&fݟko^`Ϊ;$;=5%̏o>2z,ZGmtr|zρ}O 1q_+˾2<EQݒkn.mۅN#dT^YY$jC@Fjع+o~XN,:>d<&ٛdgnʖ|sN O"D/| /&7wʱ^1&f8Ɇ;">#Q gXOo~,XHC?EIz֟|*(MI:\\suik. {x7CC.]MMYҼ4 "_Uk?X8Z:vʛc,˾-2<Euo;+[];SYTy;ylyg75eq,]4g7-NSSx}+o#i\vi.eBӛo>pĘʲC1>%Xڙ-b0o G?jᠾؘMMilC,]*.0g?4y^y'<>) 'P}G>-yEu]1kn.wm'E1?˔鬆\tE~XLS?!DUk?XZ}}TJp8S8S.ߐ`^}<='`N>5gIX~՗^usǚuksOL,i^*|ޞ|; '+.d<LHYO!kjḺC`NI~π;|Ҙ&Cx兗vĘ'˲o]Y ILğ|*RսIPb6n=7o9HWz~gN/W0~`~Km'͋re_3`Fk288gKrY~>~KoOocr,˾-2SxREQHMkT־=W\^ f|m|<0eqG  ?g>M?kА[cc(+/-!&keٷW`S([qٸy̸w~vxH-Oy,3,JLHLӗkƿT=̨ V\ޞHFk51&ɲ"0JQT;lSbr+ܵ\{b0+F3:Zh26~?s,Y4\xA,]*<_=!&rρ}O Q_+˾2<0EuKTbܵTU`N958>>MMieycys3_>睿܃DmG|8ouc򆓴eA)x.$՘+[}{ZVwg/\<vuh&u%R}GfHFraƿ$^IO|},˾ue7$0|0'E#6%ywnUS׃ߛ׽Ks/3Ğg;e^xӊ%IGjLWO[TUyp{i{UsץA|S8ٟGz$| s 'p$y`+$I.Pc5g[^F >X{ДY &OCӱsWFk51+!)xڔjͷgMBc@o8H-Oy,d6y`>0敢v$٦D}Z:m|21X?睷ccuŅdͺihhTz{z{~+˾xw%IGjL^cbr d\ti4 |j?әh&F} 'i-˾R<0/Eu]$Q_5wm[fH-;wQ?]oy(M_F}XْmӲE fѮ޹+bϓIʲoH `>2潢v$٦D}4V*mtk̈ʲC`>3nIґdq־=E1'CXO3,JwQuI:\F}4/kζYvL7N]Ĩ$ʲoH `!06e|@qٸy]m'_F\~oOeQE tܕQ_e|8?$P ^QTt$Ci^֜m۳z1T8t8;weVve_ Bg<pZQTے|[ڸlܼI>Qm'?"8y(jS$WQ?Jnۼ)7*I'eߐa< ڑdu־=E1yGrW,:d}@QT[MXiT־=W\^ g:Ĩ$ʲx(꺌תQ__5m ='ϏPX>WiLccc[ұsW|SDֲ;"@|F*˾$tQ}3ޚ]b_;?{CyC0:%Yg8P.Lv$٦ظlܼI`N/Аihh`sm~ZW}2L PY%ja5{+0g5V{l,'`;՝mwo5:'Wy<4(I:UcjBe?Z~9xj޾s._nڃ96Rv1uK,ZӨ(I)15VlɶiY"0VW}g54俷As;w@S><4+jkI15\暱{lz0G6?-N$i-˾#RLH0ʲ3ɺ$]jLʶMoOАK.T`ζO璬3~.̠v$٦hTrMV19~ÔO<nOʲCa<0ÊښdojLUkV}{]&0MMk=\vug]cH<2ڔ3jL W聹䝟'yll^/ʚuk=Xe\6O&i+˾!)f<,RIRbBccc9qD6: 4V=TE\`v0e!W15\暟?Ǐ痃?. /z0K6?ml)˾#RPQTMrSg՚չ{ҲE `N杷{;'џАihh`pm~N,]f%Sk۳q&!9ehh(??~"OWC/g54/6U<,aO_`2劢.Ig Ԙ:+Vd[vW9i6S̩JvSS?7Yiӕ,K0{EQmJґ5+|066ᡡpjr\tEYgz,v0!EQݒb5+|5Zhm?k$9<Y YZti75 kf8J071EQ0IgjL-W6RK]ybLl)˾!)y9(I)15g[^F `ztOdJW}2=sXQT7d b5Wnim7"0k6?2~ms<Wզ${ܬrM3O؝dGY I0wEQmKm%WO[vW1p?;wbL_`3G.Wת1+oW6O2>?.`<0E)Ɏ$Ԙz_>wm;.2=ٽsW1=.˾2/TQT[3~~SRm7[[9)!lj$ewD x`;}3jLUkV{I1I;՝;we@d`~2XږJLo͛&6Rv1=l)>9y(MV׼9ڷg5bc箌jbLג60,0EQHM[ZsM,|ybybLʲCx`*$I1+oW=?әwm~t%R}GXX6%ٛf5Ǫ5־=.HoOovܕc=bLIveߐ <W-I: hTrMV1&ill,Cۻ46VXiQ}g;Ř>IZ˲ <)Bcʖlkߞ-b8q"Q\1-_.ؐiơΞ2? y.0׊#CJLҚ6oJeQE ?❟'yl_.%Ld_r{RYTXp~~D~k>8ٟVQ1׉_?(g$(˾$&yM/ߑW^xI `yk{ځ}wk8?v'Yg8<g(mIvijy=iY" ،~C:՝;we@5kRp&^do՘^_5mޔʢpijj =Z:vʛc=)y&o+15έ䊫֋[3= %KzgVcz60iEQ]+k՘^֬N[4L `ޙߴޔ$Ѯ|g9+{-IkL<uSIRbm|{n嫩,J~543ۘ[oHm'wsjp0z{Z_+Br;x13\`0m\y7ߞnj**bsPY Yn<R=_c<\};d`0\Y˚q\{bsXt<~O\zei4 @*qmYxY(2~~3Rͷ[ʢ jZ޷?}S<<+3yYszOjJ?әh&qmYxYa՚չ{ҲE f]ٽsWĘY0'0gBߖd3][IeQE fx9(mIvռ9wn'W\^ +/'0`^)ꆌ/Pcf5/kΝ[WOg:Ęy]6D yWw$٦[fu6ޱ)׮u;w@3o8wH|c<UuBVw ͛|21H;X>*ZƯxy(;%Y۸tWSYT`8ٟϫ/,0,J|f<P 3~j5f^cޝko^ 6RS{3 s6?$< JQT$+Blkߞk׈0ϽK9oĘNd|4P  y6e|@ê5seeѮ޹h~vy8Ik,4,XEQݐdo ԘܶyS]&ӛcyGWƯx$1{l|{n嫩,0 _cN,:`!3$EQ]#jJnۼ)7*Pg)=әZM$mew\ :y-EQmK#b5feٸySz1f.'2>GE)$71{Z:ؔk׈0KK9oĘ]v'Q}CRo'(ꆌ/PcXful`΁'?;w}$f(0Nm\8t$՝wHO ۮb-0QNb؊GP۔x TXPoq٘& FxP㧿1zxFQԯ'oKO>4_}u'j8 ͵f͔gMN<o(R^`o\TVO:wן1F﹑ S_;(Lʈ5zǑJ%WV77{%jm3<Or=YTdҴ1>@w7ʭ5HoL2jm\7<My~Z|-xϿ^4ߛ6~-%c-G3Xs7?|}:1zϳ$ZyS($IF936| VWdxa 0yCEQ2F936kꉚ1n|+M\m6xAQԯ%5z'}ZD %|Lrژ3-<쓢Jy5z&Ͽw3Vk)``Eb$'{T*L.y*G+h/Oym)`EzkIYA# )9S*$IX7~͟w1z?\o6^xAQ/ǭћT*ꛯsc}a'|^v]S^d 8Xy8DEQzcMZ5L]6ГD}Yh~p8pȊ~<oѻD@dxa 8RI%9fvz1coM4W6SFs >SSI'%zm?\o6^xTQ//X7IZOMG<}(W&9f'|z2g _yEQ?ZFp$[YS@)WX?`uYs7o$/Lο0 < _Lя[?`t}q>/]IZOME<(WSFǬDD}Yh)`0`ExkIc'<ъAfƬ)``HETIF8Rʗ3"zQϔ S)Ŕk=v_n%jm<5 < _MџF=S+$גFO7_zf 8,Vkc0@~<FZ]^7Uc$If[&^)$sI.X|٧41cIyEbK">tfl4k=;ws|ךO\m6xxSEQ2?isfl4S3ui}Nc=So"VQԯ'5OV?ZDo͟ph=Krژ3W[)WZft.y*G+`D~n i3lVk9#IQO迵F:Rʗ3"zRy;/oLym^45<^~1eD>W|ꉚ1h+YsW4n柚xWylGsINZ}٧41c0PVWÍxe~h)%DQԯD/cgFs31y;wwߧ=KrU4<~=ɵ$Ǭѿjי4m Fw7,9S{E<칢O5ۑJ%W/>Oh vnݜym&m6ky`ETIF;Rdb\TO @Oh5sǟϿm&Mο0ێg\FO3ui:cP,->Uc IZOM'<p`~1% gF3ui:Snu ?|}:Ah8PymGIƭj.y.MrbTw7ʭ5`2g CS)/џF;Rdt|1ꉚA ϿcpC%~|٧41cN?ʪ1S IDATdz$ZySI<􌢨_Or-1k 3c4KOuYZ|>v YKszx)EQ?2jKӹ$Iy;ngݼv 286S^3K@O#J&&oND Cjuy% wן1`L2dxa׈VSI'h.y&&`H,ܹ7糾4`}A<֪発4ъALw7ʭ5`}E<:Rdb\TO k/L7\o6y/mGsI.Xc/?9c;wpnc0%ZQ/D/@Z5 weku?ɵVk)A#~8|٧41c챥ŇYs7=xhv?{x "pz_dbk?et 6<04P#J&&oND oiuy% wן1CG< %836Kә4m 7nu og}i'xj"qRԥ\b5z$͵fnSek'x "as4s<6<kDåZft>vhܺ9;w]y?~F ;wpncxH2jm<2~F;W֍柚oAD?\+CK4@D?\z+CM4(RFZcFV7Kr|ך>y$"uRԥ\b5z@4ךOYZ|L2dV4{@D?Όn_?ъA=f,|וᴙd6e4F<#kI&9frR\4F,->ȯ?b$y}P)#k#L}6KӮo󼝅ft g)9<#=Is4s2j,VkcG<p@~5$'1j><+_̤zfb͵fnSekᵜdV4p0LDOi3<ъA`t0oNcv?{88yCR$ג\pO31y>hiao[)/3_Ly^D?䪵j><+_̤zfc͵fnSekn4G<#~*eD58=/f21y>@LL3V7K0=xh2M2jm0@Orm%'G*L]ԥ4FC;w0/]$RŘ&<@ێgRI$Z5<R=Q3vnݜoiw ŽWL}(WS^;Όft&&ϧrbCݭnw4zqA<Ї~1% u|i&&gb1=uYZ|ŇCG7R^d "cEQ?2Hsi4 oaihek^d.e4I<0#I%9f^WU\b&5kk,ܹ;wɳF/(dzџtzϦ31yNHLL3}g'_Z|<4e3lVk9x`ExʀZT^]g)ϙ`XQԯ /X"-->|Ϳv ߹2g $ EQ2򗟧10J0;L22j&J_Kr"j'gҴ}#=|)?2F<[)gok'9;y>fٔ柚#Ex)џHsr+s]xoEQI_JH0<[Wou#{}`EQ?z$,»z=Kh(}N0L22j>x=S)INZsbz!=@ [,->ì.ekf$SspOr5eH"앏ϟ{WV :ۻWV ^ZNϙ"'Ebʈ5KGl:gΎ104ךYs7W4{i3|h98lyzJQOF5ѳǪj>Ιci4 Z3 wJךa V7KŇyt+yS/%9H?LLKD @h5J~<a\<}5zRVǓ_ݾ, WiwApe ``Fapo;ʪA8(0p $9 {uyٍ$0 ׮$9iҙLLϙci4 Z3->ì5 A{d6`PEQIy58hZ5gǶҟOh(0:fuy%/]pn a `l_Iy5zF&&Ͻ ?^^q]ô+ <C(S^#JF_]?ꉚQ`4ךyh%Kxe $If[G`X IQԏgE8LZE@y;+.̿vadژ3ElkWH㵘AGt۱<^^I1 YSs.<ϤX^qfl4g^ٹ*xy%kMKn L<o(꧒$E%?9;H vBG+yjzr$ s_;*ٔLcT2}^L﮹G+YZ| W=K2dxjx{yEQ2b z1TOԌىWn()/ϛޏx@QO%9izUV͙~t|LLg̦_>xXQ&:fzYV鑑ٱ4FF`Cϒ'm6xQQgRFWA?8RJ/.JObyf`~ڸgy8EQ?d&ɵ$_ӟ1SvbG+yjͭ|p~*5INZ~sfl4grf;fuy%+Y&_-'K?5<My~&1ЏN4^c=yJk<^^Z(g)/ϵZC<=(3)#oA?֪b10 oGۗiwB?n0pc~ZU0(n ME<=(RFW[Aqzd7o4R=Q3 5\+yfVW5 f9Ss@@*ٔ 3c9H#eL:=@j5dUy`x\QgRF3IYAuRX5rf|,TV p[H~-V\k*Ϡ{d>e0п0@ #i12[+Y|w0 6SyyP!$W09361x4ךyh%͵54 d'o6G<(dz{^HP Gizf`5ךYxe( #< < !=T*i42zv,GF`H`H WOi;BySRs$ΌGu'@X]^fPVv̿0 7<;Bz{gF/ӏGWݭnkkyvךY_kf{o ^V鑑4>jXjZ'jYy;͵fֲh%v;v06ϛ3yTiG#i4R=Qs啬?ingZގ`xgy_~ #Tk5W`4ךXQw. MD-H*G+>yN啴yvM>̳=<z-ETiG#jzݭnkkYL5<읝`~xd`}SIDp07ךyr`~^0<p C)cqxST_R=Q3vv/Kg7j`WS)$`8gFS=QKD-GFR=QKcaJ[ݬNan0A(dz_Lr*pjZFώR95Ih8+Oϵttn,?o0RCufl4Gj}^Xnu\[Ky;v;Vv],=sB<Mr5eH?n-zf[[yj=IRO"<~*Xzۛ^yNf-l& /L:<w~ IO~;͵f^vճ <*W, #T*}V=QK cTV[4|'IN1&0l6}Y>e,${C<~1eH?d"_~?zvoJhN군v^V7On~vcGyRٽJ?U`(-g|qC<pH~*1ň`P=e_zvL?ݘU/=v(2j'QEQ?_@oLG,г}1ى樓TQ/f7`7by ;YދX`TQw"YG 4<+OM0C(UP)CG -<I^_ }~~˿0 yި(UA}($xVcINZ,e,/ɣVkIxy[QOe:ٸN޻_aއx=Uٍ/&9fUPUyx}:=Uyx}UrHUyxCW w,зP>#W8lyzRQOe7?Uzf^SO@7_~[UG#_uzA=00 A={0 ?\ 0Ą <C(_?A=0x6SO +<(꧲_Lye>, 埚JyEQ?g[8D<ͮ#IDATv,jm3 5<\?2?e=,e$/e(xdxwyC]=`olf|/ʻ&{K<( [Ӕ埶ZOK<(;!E0'yP$}@<}d;?bʠT }ӈ/`ETv/տɺmch=I0>}X^@ yJd?'y5NXro۶[ p)ՌZ-~kExgIfB7k/yஔR5q[7lonm<fe^$MI^M ө`|ڶ[0'C5IL c 'ɲ7<$y&-u^=pmφ xmg\@)U!\.X[~?Ƿm1&I a$y3-;B?8k>y;PJ5n4eMa(^3<R:I=?'_Lx.ש0OUJL}ZՑuCmۭS#mc͙6|"ɓ _GvAsL;W%<C&/9_|vӶ?GqVIENDB`dep-0.3.2/docs/img/DigbyFlatScene2.svg000066400000000000000000001725151317166637100174440ustar00rootroot00000000000000BoyerFlatScene2dep-0.3.2/docs/img/DigbyScene2Flat.png000066400000000000000000022237331317166637100174320ustar00rootroot00000000000000PNG  IHDR 5 iB pHYs.#.#x?v IDATxp߅:emdk 6 {&iid\nt{weNxzigMvNI[2& v#[F +a[_Imd++>~?zz7>̔F$Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30D53J (Q30DZhsOQ[l_qM9IE>9rDȝI:L+Q30Eywbۏą[]}ۣL 4 Μ۞|aܙN=@hf<>DۛL C螑[T*=Fԓ(wͩEIcW2?#=}[ L湢(y3@mNmTz_fmVnI-RNʝI:L h@GS F޷(Q3BEQ'wpy s##Jw"jS@y|cIM cȹM{F~ U*FC Ӭ(ʝ9ay%&6/g$r۞{*#j:Ȧ_;tq4ylslz)!jPXy];b2|ȯ{2.zTz \Q3\BQwĶe΅[$IһhDk˝#IM)r"عg'6<0ωܙZ#6..ṧR12Q3sBQ/ܶ#y0GssOjc`.50\b$ͦ744x՟ {'2893Fg"IŚ_bUJJc_,>..07o4… psxSDf3wX=44tFiӚ('r&=FWf`(rK̛#bYMF6aѸ8"ӧOgxxalۓ $9?r>-Ωmr9 qfTQ;S wܚMjF,X*E.W\smdѢK3yth=$;Gn)ќ90SD*rKΏ;L>j߹ &6>_9:<4rw\<`Dt5S(;r.dd"@#8 7?ԑё[\{Jf9614`6hA344468QsFnOE"ݶ8"jl5Z۲k,Zݾ s5\ܖQ۝O>3gΌ-vl=f3p)f犢9ñvxyCW0\džsٜ={漷a \晢(&c3 dqUY=eZ<޹?NN:i@4[fds=8"jy`d62LCX+7"Zļ``-\Ѱ:rnstF"Jx`n_`*m&LYښn_tm`sݩ{Q3EQnI-`M~MWVjϲֶnoφ.C9h]wo^J7G՛◆THhG|"yOj'jY(ʛS ND.KtƮt禶t 7Жmwݑu}~xVzSUoT~՛_sܰ I=Ys.p1D0EyGmd0ڲtgul45 pohˍ7S2vߩS&wT~aQo;GnE]J>C (-mc M5_{A30)7ekCmt:SGFnEhmpm4DЀFBшy0ݖ45eCWASbX\mw/ HP|"DQ;SNm̘>Cß,d9뎱FC6:3  c00=:<=Jn5@ kzU{6JvwwOVizΟ?ya沱+oܘv/`JoF>CR'R w ~D0IBfR)ƶ0ojsyV޽$Uqږg?~꩏|΁9pzYkkz[>m۴0[ k7e`x:;imiin5˸eY`Az똸Ӝ$ ~Dp\tnagSN mc|ϟܷw͐dp9Z99v/s0wܾ-}Μ9g$I?ӧ?oڕK3ySɳ{_xpJ6]8Lc}9z;'s;'NOsSZT߹ c r gh9CCC3~nps7ɓc:\3L.CD,.F60fVDW󭧾svzz?o۶/4p愞رypÓ~a6m͐aZ<ӧ?X֖~ 3\!Q3\@Yښ ]]l_53?|fZ?z+6e4F58Xͱc} o\GUHfTձ.hQ)-z8 Bf.o4b6/UN;חշĉ ?448+ j{|P>Ccر7X6;r_#uJw0߉#2sZ+M|ܾqLY̅ys܆GϽfƽ=d`ݼ6 5\ŋԩ~>5 $}:|$]g+Q3JQ7\a"$Gİf,h%loONΏ曯w@nyc^{U`^8v͜>Apծ.Qs<ݟ+MR+Wre]ID$#>}4ɣg+Q3s^Q;|=BfFSO]غ5oρݓ><tamȣ^p߅Qr6:(dvQ3o43i .7wOLyG?~|L̅ι$Tz{L 42ߟVM&2-kmܾ͆ayVv=y՟cֱgl׫gt}۶@INg`=zaQ#7|  utuy2<<<rDΌ)I8TzF Q喜 51njm3)SW|͗w7n7ޛg {U==]]lou3O?bҚ[m)Pûk͂ tuSrDΌ8?dwj ff(?Z̼4ťRmƍ";/şޞ=eZ{m˷U=ϿyW:z{^\\bM~ʊ¼244T0LlkKEί8CGz\aɢ(Ijqnc`650+EyGjOl"m6dCo-'tܷU]=`4Mlk쒦|G?]{<ܽ695+gtttP@5¶˹0rmq>o}%y('RDһXmDEQޜs!s/}Cm.t8Yٽ/+z[kTxC%,gs^x]̩SUΡޜ:U~x~w.j*zEznk>>0ۚ/֖zF^9p0ɡ#=^ sGGǒ*n^ŋR|QsqS]&o]̟~?.$m͗R^2+M9tH^_#';{ j`JE39hMggGaG^womJֶ+W_Q%]^M$Җ >&lu zok~ܲ~ݬAS[֯;7ȡGjmq mDCr IDATS䇊|4ͻ*^)#jܒZ$Ldi_<[?9lln۲9]4ID8_|;j5Kz7ܰ,}^l3 Umdz.j?s-sOGǒcׯ隖sloϲּ?{tC~0e[oIrC`YxII?֡#=9tH֮Y='^ʁy EQޝJwPf&(ʝ9D接K-ml6K'o1}|'tnQ3L?)>*oyt[s=۶l6.d:cNyݾaQ]Hhp_Gjذy…YxIN:9ǚkۚ/Tʶ;nOu_>7t$ycBfƌ$LdvymWnٜoZ c^՞'tj5K.Ae170,Z(CC߄?5r`^>p0?}%/97$+ 5[璭[6=?+ d1.njj-M=}}żTڊ .,79^}s~<\N@я_6%y2EQޝ ۛ5S2nژ/~ggsuK )}ٻM lk'/Ջ9tNjiNPlo@ 0<|ܶeAАްyq60C~c֜|N@~_3ߤ.^8odpaPfyN 0 ӕl^=<ߒ&`Zh!cVli>+XgL~K}KS_Gj_|ԩSY|EnɓVu>L)ۛ)Q3f+30U=`ww_Q=. iiiKKsk., 0)l){u7SzG?~ZKyG?oٰx,_"\smZZMKKyv`5AEQ~82up yCWW;xv 5V7c;]\fą!c}y :5inYb솶YO%KwO%}G?sWCmk8?r|>A}DϜ9jN<ӧ?n\7?dWһXQ3QBc+30Ů$j޳wo|ケmJg_Z[]D&mp7}lcn>Z9O^qP5č72?}Yw=,^$ ~.\0K^K8ۓl/IvXf?Q3,WS֚u6hUz Y yj?ÏL9= }EO۪<~rEWC'/Ջ9tgZT߸s9ߟg'˖-qY9ɣI-өmom,`ȭDfѐ;or{yì)mؐ/ߟjn߸qJgww.W]9f||l$PQc}4(f6ok~ ?}^)R)_Mƛuy{Y /puv&Y9yXfQ3,Rp7npԜ$z;ö~/VKvz"t2d6nk~ŗʁ2;y|׿,^$ ,8*IKXQ${`v54($?דl2'df{m3 jp0?j}'tz&|Tmckl4V>q?ϻoDN@C 'k*5F~W// Ъ+r[s秶|l]^2;t/'7ܰC<<䡢($mohlfUB懓4Hc23_}{O=5G=jwh[tܷw\6$9:(۬ 4_7`exxxҏUm_o9-c˭s˭Yf}{ʁ9>PZZiҏ%p56%y2EQޕJXEB杦؄pۚZG+tk>Zۮy?o_U-6&nQQy|lT@`[`A.!5:|$/8X@㴵O:TWɢEY`AS<+4'y4ɣEQ~:ɮJw4Q3@(rKj!דtH*5nƬecmh uvpwA41|agOv]{dܾqc6v]:8>Y/?j~W3z{] V汾;6nrr~$G+ n[>;iLLlk~ sȑ:|$L׼vugԖܹ<ޚչc˭/񆇇':%_S'sɜ={7DؙdgQ&y"yXf`E37ܟ ߾qcn۰!/Uqpw{Ykk@ ^f~( oQ5?_KS7S~?0xwl5w)\Y}+uOᅲ,ZTҙ,\0_ߜoɓVQǓ|(ʻ|R1!jEQ?MqeCmژ[0c|WAy8-.s~Ϟ˯G:5--͗,Y*5eK~w7\nY=5χ O: ғT*+_bwu{Ǐgi5\k:8:u. &9CI*sITzw 5L($y8DSڮlskmژRSӬ8U+Wp̸%MMÏ/sNkpVVOep*pn ۓl/$O$U 5L(w&fSCY=~eCZfֺvQ3 =տpaܾq}N7EO֛ bѢX<>B^=RaV{Fs[Lc˭3Nyi`ttd_:wO)\sʹ)M#?T{ JZM3:T2$&ۚ[[KĶs秶T#yŗ9?E,Y%Kdxx8j5N!@39ɣI-ө{DuVSaT WT ٮ'gt_ؙm39u.+l|ǖ[s[vi}`^>p0ܦҥ5,X089s&ռ{9{o3΢(MJwԏܒV毧 c130=:?z;yai}ťR#5w~x-G+innMKsX*}b' S9C9ڡؖͷ_R|lP3h6lk^rE]ٴ~ݴne}:|$?yƛuJMY… tuY>ANߟ5/~%?}}o?I寻W5Z"wn5_Z[99tH^>p0pɲes5צڴZZ==5'y,cEQ$OT*ꈚBQO-fn56m]woKKB ycCWW<|Wܱuk|ケ1;u[ܚ'gh4TN+V1(70~~0o񆺄£*ͩSձvh..O<e[՝ei G1r`ik344jY?MMMijjpjOZ&9%y(ϥ76+#jEQ~87SkFiRmژ[-9-.5 .doMss[o[oKO__B~꫓zkrƍ{ֆ:ԔťRN u<7Ο~mͭ7'ߨbiNLƯ9?8'sZ {_Ba3yYzu~k]:MҔ?guppls#lcwhQ{,X0k^O ,Ȓ%Kdɒ9s&ռ{9{o=(M!Tz㉚>FQ[RZQ@ڮlskmژRhn\Wj;oωv/[z_zrւݷdUczU{+ުv׹*wV,o~g^pܼhQ)+_.!-+.NzfTnk^3IjڒʕYf}moW7ޜufxx8ikaV.\Kҥ{ep:=c:<䉢(?fq3\k?{}]#d'q0P)圐hr0ء۲Cak{[轮}w% [!Rq2bldɖ6p˲G|.uH[Bu֓Fbp究nf͑ķ0z]ygƌ9jk9yL^ivM_3qqPHg^ȜӘ~am߾}ؗRVV)Gر㮖 !YIEI 7 cʼ4FnSu ĪJc,cHcVӚ^.yhU\Uٳ:z⤎8y޷dڳWb}1%CEEHnn_]ROGoڣrn"_ õAIKHcUTUjvU̐4I,S*HfNk~-[@y9vWGOлË fiZb j|EGOn׬Ytȑa׫@\GJsCe|.uwwr"*K$}I [(5HsrJMIdt9T[7WYO ܜB9Є2}rz^#9Yvܥuk5C YdVӪ޺5kגژJ͒nرR;vqr:եP[`;f|Hz0\$m%R34Xf8DFWmUϜ %dm b^' fcZ=S'߭:wa$358tX{谎8'N&DF+2|RwMMbwGGSkV۫P((߯^S.9I õYӛ)7H;pUh`*z]e?0f L,-ӱimkQEy%t9لs e\ٵ3U=@PLknxU8tXPhs)+)VĉT\%%_njegeJ&L0t;H_.E9Q84t8$=+Yp(i}X J҂aJ ̣ff/[W)HH<tN[|B ['+wց<ƳͣiժXӦ {ڴfQV&{ BӚ;;}XOVMVM  ;l~ܼH:JR`y%1z**5nkf09\lթ/*';[9P(MQDڏ Ң`P?6*Ңy!'RӑG@_T2efeLpp|DbL'xOkBz?~~uxv1LVդ9jӸcU\XZefnUwwwLkiWaaQڞYYYRoo?C=ܼH*JRa6H(4FnSm\-XHAJscS\kO^Vl}n|bMQ-.y:XfХl(NͦҲę:OA$J{._irW;t%5&h H^ Tۯ`(hT5iDÞ|;9΁ߋyp8`0({Pb̓ә.uwI:r"r;@*,3oTNch*sm\H^}*h@K)';[z ǺA>x0%oP(Ά##m5{G;vǽ<Әo'`/GPVZ͟@OReddpJMoRWWz fKz0\4;s/x@* ˩DyT8T[7W09=?C~Z&Lpf$Fa+ǩuZm~ 9C:e ˯P7>xLcS9K]ڰו;z=/5,rsu( ; ^0\%m cduMy$_骭`~㩍jhd@K,ӚToK TKc;vzz>BPnCO)}?d|SU1ϜV=z'kxk5k,mN>=}tww)+++!Jnn39r3d IDATG@1 W~92s6_ ̌B󐖋 RwAHY .LRsF'3:|S3USr)Mi2&cR}|N'O3Ο??#GѡRN`z*7?k%mr/4 z>I`yU]7Gus #=?5,I99sCB;p:8qΞ=K0sZ=}wvd5v8N1yT\[nv_M$#HTZ*iդ_LeNN-[㟼lzUr2flDۏ#Lgc.4z=*,,dk7~uww hܼGw DD@,3o4ff/[W)$`.{7|`0(RbMT*6r/Ȳ4Lqg[Z4ј^YMYjuOߎQjE&/hL ּj2-[@v-q75;ЄhjQyNZLC|> 9aMbX_~A~|D0#c%:[>'$0\$mTCSm\ͮ#gA>ml5cy?'Uƭ<~*JKş*viu D(?&L0t;/~!Cyy<MAefRY._dfjՊI3V]Tw_Sjjo[l{=e CVS! * ΋Lquzs8RWWfdKz0\D( ̛4AEUfNfFjhȃ߈z?c5R\ɍQu! >_`nu8B 7(;wTZmZ æt>w֬y㕾>n \ik}B$2թszztu_sh&LUguedd(7סRj*77'`R3driŚ]7G66-#olɧ%IO5nXkhl~E_>0|>FH<Ǐ?'aj<}BJ~Yv\Ii^U+\N}ijzw8ה~vY6N8(BA (51ztUu H3QLM^t:^}a=FAN~~ _[ Jf&n#:t%S֪߷_.ݖz[ϫ+m5Ө?>yfӺ5;CyUTT GEWww~z \E0a6Y p M<_?$+r дf3C!{'ejՏ{z A&Miզ#uv8aGAFFsTRRBy0Tnnf>#f_[g'ZfaYm?7%eggEuكWVBDJ}2r5k֬[~o'TP0W`Z+ dNז_QSVwvˤdUPPReg(#?r371<:j!dCo֔ʨ.2!\1hm-gSLFbQff)kC!ڎx\ݹlCLݿ 3Oťr:4fPE(56̣`7&6&233USS{m&L??؜&w(uցC$d44)EkukU5´auuuq& eg稤TZb.yFEy2ЌizO|k_|6:VX!{2Tl.(Oh)&ю35KҎR2/L=ϣ~NcUXXReff)#?r3 @(3iYoIyOkJUek6Pje+x &_V/sjՊe_DeX_R:4fPCPjpGZJH\99ok"'D杦?fbi!H9ohJv|ojbZl~WR2ި/jrv `Pp6edd(7סRjy(7 /7pKZ*i%$)x]{~&?p"OE>燎)nvIu= R٬;9̗ӑ}hEþ|G8MGj:sFMљ3:r|>ψsF3]sZgx欪&ML||5wKGGٔp8.uww9͛$mr/l!7C (3e ȁ@-|ە8 k~/I%E>ʴ\Zh$iyYG1ǎˍwvοGoCI,##C9ގL|z}٪It|~giMedڔP Www)/ u nDZ\EyUTUjDC{߬' jⅪ{_DW4uZnTNC:<"fL|Tmi1)U:H9=艓9:%3?xr=qR^)nر8qbә\c*rIڣͻD$p͒YGLmĪJml -_K͒o|[-[6N@@*JK @RX,2uJJ/\Ré3:|pB琙>6N6402221e_ۑ2fIvqؗlZ*ߗf͚Ӌ1:::TTĻ$}-;;G9R WOG% _D/pUkâl:ݦں9z_ѣĪJBYΊ2Z!}o]{~&? iկ+uΞ \c̜ePY#Zh>~z{eww7'Bvvƌ1gQ׫w4sZu%+i 6eeeXwc~ w4Ťf B&II|6M-ւd[uObT [_?l}e--aR%OGkPf6_k[B$TTT*m r^LDbhR!|/7!ݔvtjUn\3g 4yW{afŸijjSoo:;}" Iv_h& lH#rj4iϙTm\x5O^V ?:.uxa5kR[[>Z[?Tk[PLk:yr:tȻZ| \n,#W`wvQhFPVV:;}} z׫}hՊ+ ϩU+]tj֟ {~y<*,,"aX_ 3O__ՒVEI(7i7Xf8DUQUfFi31 7֗y}ߎ>TU2ᘚ5̈tsEyJU\\&#i鼦Ϩ{zt` B˗LY~~-[i̓-\'~͚USYᰂGJPnC9  ͭ~ܼ% QjReU=s/_UX*$);;W?v?S׫(-FS pN5y snVxZm(TEy+U\?J -mմ52Ե~pN` 2X6YV BLkZ%I  ?i=]Vk2227ddd(++KYYYRwwe[/3,i3f uQjRa6H$4U[7GWӄk/7ڨƦJ~SbRR@ay~ގ{{u| ^Cj8}\ Key*/LI6+7q˗us?iZ%;1cG<H &7aڴ;5ol9 VDwe͚Us_>9KD**7!uv(7!YI)7)2Ȱmlf̌͡>yċڗ )']y;1\jA8}\TTkʔ)=h?ק|R9Y1w̨\? =9Yvܥuk%AxUSS۷Ǽ^ n}Ц ܄k [HVHZ203?Ous`"L {o7Tl~7}o|K7 $!\ιϤukkkQ[[}KEE5sLR^xϘһN'Ǘ9t HJyyjm5yCl|JJxpjLeG~%u;::TR A8"s9$`M6QnRC0\K õ[R(4ƙG׭3-pifI uS@| 2mo|KZ m-zG/}?% ֢7zUEq ?vZǏ5g?pgF"sIb(3ӼP|Cf2e^uvr }Ę $)pUh`2z0OqY,_ں6hC{?آW_c~Ysg"T zWуiAj8}\G.^)fsr ]liSoo͘1_u)L}v;STnC]xYgΪjDTVREiΟ^gOv]cǎ#\`j$k&7& Pja62**XUIHI%}Y_kϴkT.[\ttA*K|ᘶmJ9qѶ[eTw"ͻgf$us?qn!dx~9LN@)b(7a_ߡ?֙ff\xLM`y){q[r(77 <(5Ib̼q?23MNNV?ՂQtwXs?5K%.{Ν&}KᄋWu,Ғ+ IKzztR;,;;G_1V{fצmVN__!@kb^rFHGHڠ̔MR5my19 imY;{)kaǛr 9"|I[yˈOgv8t䩸L6MNg[O2s9ik ~yB$ioj޷Fdrc*+U^^Rlac( ܹ&yg▛?ʍIZrަ $-m*+_wUpm.%Ȕ挌 S&,7ס.BW;vҪ2v;V>yS/])ͦ`(DsHzVFpmt/l! 1QjaJڤ8" jj8}ܴ5VN)2J*+zk[Z֢sMjkkϹotJͻgQZK |NkTbZ>]NRرcf ?\<skliay͞UN/Ǧ+ * nsb=1عK&9$`M6HBH dդ+`#$eW?J"J(ԋ/}ߴoQQY)h9E*.*U5׵\ιόX9鍷^թcZF= Z:CM4nޕ)4,uvL OwiC*%nl?#ժ N`\DyN[VXNy%aHv_M$@b $p950i@$ (rjEiiJ\ֶm-<15etͻgQBO:eN!I<:wI:Z#\ltR+5lhT*np$|]|ɔv30 ϙٍX?m63L)6'4z_NIl% D.J(,3oA" ?p8:$ݿrt9sjfQ(TzMpCK=y,CCwv)'7뺯_fR3VV)عK<Me;nW|W~s-0uObo njm][n:`(D0Y/iarH{0\$(4cFӯ=Z,4fW9翢y,2h[jxH*/__`H`j U!iդ1cƨ <BRF maJ)196]KԒ+uཽ1?zPm-ZfsBb?؆rs2eƳ:zfNNɬ*efDRjT__&L ~]ta>}ZGQ{)33K Et.PwToD\ MnD<&5#0\NpmtVc6sl -sB^|jkkkf'7m 7EW'7ǢE/}Hx~=*5C8Ţ\iڎij/*Ϟ1*.,f_ -ToZ`QjFa6Ij4iflB`֫.4~xV?vD {}xoN5K &7EƤa֢m۷rR"i;j \vv22a׫}L6c,=.4),(PvV _ߵk/k2  昭t0\ $`d=`36km aqV+!(x)}*JKvm7уQ_jik5uʌ;={ߺGꆄ titཽ ck!RNn~An;AI&##C94g/Hffg韔j 28x-[^|N23L+#} -\}~~C!ܳ6k}a3q 0\4Pf^B!%\{c^4){󹦛jiFX|B$|Gtfw"WjÚу(T9 BB$;)y/S3oʕvBHBuuuo>`(KkZyOTYDS7v*T1%_O 9a 1qHz0\%mp/&0a"(4JtLSkdIwC/7҅fsǢu8ҋ?~^( SqQ?.&o۾5#wdrsjx.S37|1@a^߾-B`0` 0P_|FV,KqV.0\ UA@(512 &I͒֓& @۶}&tYE]8Ҷ[ %vfkkd}úޒ驷gpR3f {gej+H j W.jb]z FpL9&K$5 fp9>J03jr#UF&VURREi)!qtཽj8}<ģ,)o[[^|IQ]xV?6|m۾ '0Xf% 9艓jvfԗ{`/4KRk[KT۷荷^MkfVqp5ON4jn⻥ع+_o]4}m|ǃ.WӼᭁ?wEy3 Wa@ 4 I5𖂈< qwCw0mRrMmQa,O53ϹԞaGp۶oMH~zsJj"p䙶Vf{pep>og}`Nnd/530]cQmp kpZJ޶}&={DƤ.sཽIs)\l>ȍ0v׫}$+jxaq~oݚGM-vv $Sz\[n^`>7l䞖lDܚ % L@2vR2ef%IKٹ9! ċ"NEi[Z|QbW?V6=nx}&ˇ!m-BR'ku?ƛ۴W7$уj>פ2٬|9y}s$&B\FFsL[o͞JÚ:VØ`}-7P]W^wӎiWaa'1niClعK&;sHz0\$mt/&zk F Lf0|z<=efIdqq@ihl"c2XD(Ի2Kݧʸg%Eo?Ol6V?V?z=}\~ۘ ~TkKזJZ/lREnC]]]}o0ҎnͣIE_o&Nz=f:z6rpX_(`f(sjݚGjr͑Tom(77 0R30hpBf L@>`}dWc^?p$fHLJWp(<-Y2$])'E񷢼RYQ7)KͱI)zmU\4p-,=_53Owa-[8_lII|5\_mqvvde_òZRpm%; kMFnWf4mƍ%t.ybW ;)ͫ^<1ɶ[;ܻd}:p,Rw7>~튊Je(?H{v]VUpؔ^ymo&u&gNj)yo{ztbDk9j2Yo1󨠠nܼl|Ӧ05pa6H(5 m˩I#zS'߭'xLu 0ǤfHIјp uᘩk|l6.^m۷F|=o9*Trە&?;Wk0f #7ס˗/Vf=qR3U'u&'K?5WV'r%5WXOԇ[M9`0`0(;7ApϜՎ(7Y5 I G -k3;H#:S'߭>JSqqmh4[6ݿruܯkQ#uཽRs{{+ΩcGbu*|h}n6̗ch##.X0VMY2e_ۑ^=uRSkfrϕQUдxe*## jD==rsH:lHv_ @Z1 R Lg!(PaO64Ƽ\P(іY4*hڶ}W6GѶpH f, $ϒp]][/B}eP(ǣ*' 9rs yW;vҪ˓:+ϕ_xzzmU&j~S_>9s@' :?ݥ/];xZpmt/l! JH @y5iDg|A>*-Z0oT#ۑ#o*I$`4赽oE::TQZeshٜ7#ji=;Uٱܘt;'}o/$yTZ/Glv},=RP(ֶ|D}N4 ')ҒbQvv:;}Wo-\ -߁7-5{\޻\GO4eenWURסnvfRnC i} Qj@3 &I5K`D(n1SfL7g2i[Zޱc<3};~Luu۝8Ӥg޽}JY121_t|)r40f'_ݠm۷FU}n.^m۷Fm[[>ORN9nVb-A!%_vv)Ӛ^~m֭y43 Zrykm6yhKhqvttXHXC;w~~C<%E i eQj@2 RI[$F2vR2efSh2cYQi,MW0oo٢g}{}1UύPN|)^'S̐f;pH^֯Kr97E|mq`4O SFFFOo(-%P$h /y:rcO2CS&OW[rT Ѩ9Gދg :Iү=(4PomEmm- ]3=Ͻ>|>Oa2یcQ__/a1p:|)k5mֻ.Kuw8y@s^yM;֎s'~B~nͣZbvܥm.H7 ׋6DT@)ap*19*S'߭u#Rf4eqr)0/oDm۱L ݭ?_}F%#:Gb( p4_|IpdoUyg[G+.*Ñq\NTfZpoBt(T^G^ֶ &e f FVMv]9wtjU:8¡]{{Ͳ tI5m6eSn.Gr)sjݚGU7V;v2>Ka66f$5p95Pf^M:n}UR5r)3!sJm--7+?6IH/^j3Y4*͔f#礪W#Ou,ҞoEցjhGq۔QMkNRs,>^u=4 :CIq4A 9y;^{GV,O<~ef |ͱzrc&=)33K F4QOOM59_ߡ/-~LKz0\#DdųW$-pmIE볏Ң33$zMMJUY cokF 楋ob%WQmߪ/fKOM<=Rs&pmvE;Ϲf2gdfXPgϔ׼ٳULxU~xmWQLЍyvH ט eg(𫿿?浂vܥukMLYwՊzIӦ҆a~eNUZͮՎToiSӒ6k}a q Pj@0 SeL]߻T߻L[+,@¹Wk )Yvۨ\P(#~=~fNiRQ^s*K%rcR5EU8yr:wwMCk RMv84uʌ#wft!#OO)8tXukU5ib=v (ǙcݚGiuvdea$U+kSS! õAF"@2Y+/_7kӣQr>akd;$$&%3tόIed&}tSu?/i$-6lv,Wԇ;UDc]Z8 \GGkg\sf3{|@ y@Zth -IZI(?JwM_kfoII -F[p[<{zM-mAZIiCuFiEv{Չ@՗k;LrR22r<jgBŹsg18xAz[W 9\x0plCNLDIq\^̜iL$I()^ r702%+;:: CDDDDk"py 9U`y󥜤pqROi+bMl)$&d)Z ZGH +ᓭU_bfulNJJwڶ[}@?!aV5Ɇ}.+>}? FjX`1[!I+' HR~Ft>XDY,{ľˍpsݵ~8 [L]’I8Q[-X]Goơ kE~ f""""%E-^𛭤ffgቲUHm: t/IYﴴδZr~'~IskhjΘȖs3rj |^lj ֔?hG22,WDm)H4QdGЉ~]̰ l$IX]߅rh`0`32Wzj *RBSK+6mL& "obGGgGBDDDDzVHwE~0Ьʌ8{ͫ 4@ϙ^אLDkj.ʿwdk ylhzt[C[o۾OMkiiZO¨1^fdR}_45:?vrD1_u҄<^/困SSt˃"Vzj ~%dV8( CDDDD"'+1A1෿y6 2_[ UmvZ+{ 1?y'g)Lh l7kjOLKI2a2͗ 6-A@k"͔)S0}Yz~^W^yl~eBÙGX6^-Z0oJn-o(|DQDDDD "v⑇Jch6KQLTol#dseip]ilm5m?ٖs3r&v`tlNH,4$ IDATz۶v@T56q4iӦAG~6ŋA>$auJk. @ B$ %bT)Bf"""" )E)|{nq̝s~_cY2"z]<@}mgZS;5]59ܙ:6ӪZIJjnυO0j+j>WWfv9""Y܉]Mm;z,~?DnV.]>Ayh[-X]O )*)0GADDDDP3Epm4qxW/+̖vh[y_j6;CƯm:_}&s[' G&UK0'AQph4 [oוxaqt u.] $Ds@uOa}㈳xf+[QdBf"""" mG0@1DJ[HXˉ a ssɄtmHڵCOݷ,]o9nTŋAN$aՃ%Bt:l_y %EBO KQMf"""" EE8_(lCǏ'^C2x0Ѥ>>D#I(ɹ rrpGvdǟqP!_[v_f'wbW[BXԟVl'h+l=ߣ`ǰh|$ [ҥ`)*/ۯ0ndGE^qQ0LDDDDA(ng^io;oV!&&}Q5oG;ێh\c4/qRi &$ m:Xz{-g+Mu5ظÐjN>:!Msb cG׋OWr(/]%]ܹ,E%$KBO yE~_Qd ADDDDP3E = ;f__?gz!"mRbU51U|AءX ϕ=wഋυ\j cjM!@4_-/7+h&=w0k""Hg00m-֫;z M-f/UźPgavwE~ """@bFQ7[Ʉ'VwBfFzܯ3~&;To;jnrJ65Spy5m|‘jyX6|^lj573wKvII|E3-!E͸)۴3uEw-*;8x},EKXO6G3EBQdf""""NQ䥊"xK;o{" x(djRw4ݎ hhn:z[I2oG_b[`l|ݎfIm2sPiMB1qtE\orݨ :U]8X" 8+/a;9pDQ9 """"f""""FQdĉm;oV!&B?5e;΅hR4H5jãj ]n!&x%xAFgfjz'}^/O"(}/`!5?ύFqMU{` '&XN'Ы!LKڌ!Sy8""""f""""BQ46#>rfq Llu.lB#nnKCs悜jxy1hK3Wͫz'zP[WzE! 6;֔?W7`s0ڵ"d؉hxaky^lCGI2JLqDWQ)/q r%+&GADDDD"0LDDDD~1@1wBfFzTcM~Fb" ȏާy9d“+VhqPPtw Лր--wG&I&)ƯnҮD x"L/YI)S`tqo?tM-8V^/p4.7:]ߠr7] El48_PzfmudŠeXRxsalVs(?Ih98\Lv ning[xD ]k ]㟰ygU]Ux<^.osI2X`>wT)Ȭ&"""Ia4S9YQۙ4wmxW/`刉p{ k5y;ڈjO>휞ktChjj!Y%w߇`4Nyb㊈`|T`QtbYe/qu%*wUoMmx_xKWaVbw*&G@DDDDZ\ng>` 1 ,/W)OO;(@{<]>8699JU[Us;@(anFn^n>֬_!jx2EXFaUmQLե+߇/r.7v~mᄆ(/] $qM[`k3iP3(gk3w򈈈hLW3inF|*~\qegzim4,O»UoOSs}s3wtk֏7ç6nGH +aIὓ^cW[L"SNBhtГ ng[xLե+߇/r$T.ۆK[xDždFZ_(h, 5 Eyb, ~Wq\:gդ):t"R@}mgZ(ʿCuHx~):uu xBQ->X^6oDWtRx7G`6a&f0`6[wT`Ǒ\^rfq h5R氩;!(@a/Vnhf"W[{3|>pjj`cO>ؼC(D lѥK9>,l-׋_Wr0IJ,f/p䷦6͗᰾V *=ix ck3݀ƍbL&<'x΁0a!OázdZşYz@@ۆ[Klv6]e/r"ԩ7s~`4(!&&Vzmr2)l!8NXy """|'(\ng Ӹ9aVY,DAɅ}{\.\JU5Q?F@4f]nNeGdBvZfYq5X,qhhQjnkW ȉK e?]>ϧDP~PoCM76!3# łBxt{%֗?cuJ I9 p]Xxb:rvƾftpXQ:::8CDDDDQ'V?v5>r?s:yQX HJzH7ZBZZjNJJH͎5?}}X^'" KIe&hB֫;z M-HOMp`$.]?m2u5pk '$⃝"&![0}TigZ#UnV&r2t:144*saF<E~ """l 5E(E-" @'rsnok<*~+X'^C>!" z"澘545wu s76֫69[s5]vLWq*ihKd(z" LnF՞VI׬|E<&r.!kUNf)[Qd(B/"ۙc2ቲx (܀{DAj9i1 - "CZ >jj-g{~r54%~];wå;tX7 cW^BIqHknE#""" oS8"""(<0 ι 3s5LDPm0Lϕ=Ɩf $%TڶK>- ZZCxc=jj`xmZZBDDӷ!›`l+d=׋pHOMwb^q}0:f<(|\g/--)^ `OHkڎ/#""" O 5_'q ,s9pDQPmoCQ(ACs3׆,'q&+u@rIBPavZ4;ZMySsWu58R{Pu3(qXcS“h؎L"b`|>vyYHOMp=Pwnt:a%p=zLZ'Ou5V *=T?tQHDDD^j&""" 3>mw^Ĺx)yL!ck$v&-dBAN rrG~d1ҍ?{oVaəcdv9zzr8~9jfu߫7#ُ`(bn^^'@55N6wNH-Mf" ^'@{cKz[W`a$.]3+/ߨ67+ܳ V̭=O^j~o aj66v716@#s= OBfF:b"%CINg+Q4y:>QeebJ<imE6€ 34J8hgS3HɄ4d]=P_fG%f.H:`-އ&unۤu5!oeZ$~bW㉆l'Ҋ:Rk$GjӦ݂ҥB֫Uܬ,'PR G @:Nl 0 pڧ2 q-xܯU{AG|K/6ADDDo 5霢c8Oծ2wmX՘aD)MDDX99(@Á}~o5Ih_ ]ݎI5)7b ݌}.?P#Cl4JH!I&$옛3^w%px8 1 Xŧ+qwKW?.]39(rk &/hx)hjmSu{$D/ y맪T)ydCDDDD:u} Un/Wp:t_^ǯL'"I1'Y/,f+l66ں$LY-9?7cjwDۇ IDATf+lv$'f_ 3kxAuh H:~ YoוHOMaZDŽ6`41eJ~4>W^)ɈZܬLY,pݪ-Z0yYش3=ͣpXQ:::ADDD/H_E~@hӌqkl{ ,.(Dca`\CvB}}.MI|;X-A 4V,,(ߕ?_Pӵh~!Ȧ̖9 )S`ڴ[t/p*Bo6;tXS%,w0?$a}xgX}o([QdDDDD:z?# """Ea9Ә`V4b%ȳ8(l<=^\a6[Uckj:*׶ 8fs3rЖc--fU#":o00}|=>rb";xKWO5/ӧ9(P82$HИkѵSS b_G(8(xdCDDDD:($ԙ9#CС;^dbS+uā x<d99 ]E/Um[[W%wߧeXmX2zxGj%(s4%AƜls֖E| M`0`hh C., zzN [or_`mF#FVZC&IB]wrWZҊLK+qTW cEͣ(tj&""" !E-p4#>CСk(<9t';v76δZQ4d;1\{22rT }.z4hz|i/XTP9ِ$SPhji6%L4SqDahB;y U{J,ASKDN'l 8BU٫zŅ 5Cj(=5=,*w}ih6E#(4j&""" gop 4wmNxC Rzlm^]=\^]}ÿH\1Pu14Vh 9ي$%UuXXP(<0Bd6%˻ 5VmNM-s3r&vgz<ɖ(Ti,Vxa땻xIt%~ѿ [ҥpz?@M-hjmS}nV&LVxY?M&/ y맚c1Rdk3Q1LDDDdۙ.&&CЩHAidOLs3<׋-?z8Ѐ X{6OɛwPժښʯw|%LIJ*f?KD;Q49PHf0`6[r YbOQ)w)().xpYLv a*w}ie+Nաf`-T{ U{rW<^o*DDDDP3Q)<8I=CЩ3N(vvT9PvVkϿ>DonƣvCuڶfmvہfM "f`aA!l'׃m_mѼoC&MD@woe̝bcc10p>OzMm;z YJ1шSo#D˭Ymd?tܳlh[]y+ˎyTCDDDDA($#?-t65}cN}]ߡf"Ƿ;UmY-w ~pyV,>dɞ0,[kP({MQh4r!j 5]]^Cl~%UX_ÿkmu#֖wjŪõGaт1~imw0>2[Sak;::xd# """ ,EE>9[(>r>ٹCwf`e;BjaA!Faow-5Vķ;@s^n>T<:ruhwh"mz@; ;!PX2e O7 [b_`UZk^p#@ˍ>=%)#7+q+fтx~ #DDDD@ 5kהYzF2[U1Etflw9n$ɄE.n6[^X Izͱ@5jjߧ÷AIAg0 O7㦛}ߣUaтCΝp'% Z[KMzJQ9Ƕ@&IDZhn7\Q "[xT#""" E-"c oK{ ~~ 0, ,"ҭqI__imm6V.nֶo-}6˘GKנױtj\[W?RV,/HSohBCCCB:d8TV=OjmiX44=r2 pk<DDDD1LDDD$K1μ"Wbr23Eck$l%fZ'ک+i)9ʹ5̤ښ2flݬf+!(Zq@5}E o[{5^urD:a4J4Lե+944 S[Yp|=^;)#Q, aEADDD$CDDDD]~ ohEⷿyE339T,L$EtCk[>r_ױPWՖI54lv,)2Q9X,V >UJ)().sg903EBɣ)k: Q< Ew+QP3"'+pkzO< 11ÁEΦfx!Y~(ʿ#r-

ZPg&h N'fμUh w]x1"EcV,/ Ͻ^NJeahnkoƿ}_E v뵻'BWI2e M$t#ݢ󑛕)tsÓ;uj7IPq]w޶ .R8($~F{W̞ŁԱ&װDAK3^Qq/;zmQ7_GDrDޯ ܹalt3nIVBSJ%ː,tMǥ襥y8ET:"V9 """CDDDDcP٢(nopj9#ԩOĆ/"ӴU۵TjN +fqnvw;?l݈ Bd{z˜`b_Wrt9K/|uUww"GE~ """w{FPjLcMB֙ak$v(?W&mͻkhf'W}EDDDD7b:Ho,Nvdln 㸫ہoq%_!z2d%l; 9)-$%"" 5A+wUijvYX`5ϝ; s2Uo_Ps<OX_xPP CDDD7S8"""a"'@!NǏ~1#>Աu65S xز0jU >P߀ x).z _m$ؼqB}}.y/a1/7IIi! ہf]/СQŠe?H5uQ1 >,bϰqWK -l3HH z~8z`4Tf Ǒ$7+o6m,VŎ <j&"""(0 `;pZ|Ԭ["BDT'[* '۫UmC+P3/I2%}u5v;V$_7l77υnN%ן1'+AmDQ6x<|B֫;z M-HOMpU0I֯~_94439 w谦zZGeebm=^/z}(U{Fc;NJ"/bGGGE3()> N"0fNa/9=ԀDߡ:|aonV})v1'v9^#+ϳ49+!fDυں^w6 6;$6?k>xz=v$}.lb򲠇H'FAgX%lM[?k/<԰f8QR\]Ux<8w,M%fn_Qm[GSK[sc 5T][?ESk[5)"""V 5QRyۙ8o ?(խ3N!$>4I1jEK]@}= rrF cQM=Nw"‚BlvljKtw;xamm6;$ZfKy<؀!\E' '͖q_s芩Sof Yvj^/pU*)^V>H S`ҼpZ[cu,jAź9nE_ok%*𚙑au;MD`f5`kgihǣ:-*LIi9ٺMw><\ 4QD7<)F3m-&q]Uu9X KW  $U{j>-#2Uo{T:!'&{,Uf%&DX>Vy%DDDmj&""(EQ >C@=38H=c65 Z|_zۆCm5j5dBOʟl@&a`f(D!oŋ8c0'[?`5Zt5/k঱5./\0d0M\ f5D'<ȉxgQR\Yy/3އskj O`5(}Dx ̙3rhjmS}([Gޖf9]^^xKuvXQ "[xQc"oD X'[h h1#5'Wkf(Tr4o|ihLN9p dpl‚Bxu,,(d1Q0a"Ž=zJV$aj .]DwI[K30zUw<1!LGJ,a5nm#"w"Ɋ"PsX0/n>~~1#>N i~+ ɖ IDATX rrToOyՊXk?ΌcВk$_V,/Cf_dއ`I 1@B)i2m-BOp0^5QR\$tsBy^?tX)!oirUo8ŝr2+/!7+3zkyQ;~DDDE~Dy;B!~Qפ2hj5f1DDl#F0BqqyXfZŞzZyO^n>rsGjb4JHNJ܌$%Ymʔq Q?snHabKz[W`5()^ڣp{ v j^T/SQwmZ[L口j^Tm3E^ ŎN7"""$ 5QQ}Dy;2{^|v}H[E^cL&İWD%_" 4lhPm}sPsC} 3'-&`1[ zxmhkoF_Kf#fGrRڕODD!SތS]B`}x",84439\yVbrfz #7+  =Y" 0OQGx$Q`"oEGP5Q9Nχ.znqOޡc1QY ioLul~ps'Q`b*Flm {G9:q:W,[Ma-](J}血jK,Qc]nof3^mhK>cv\z'C˓nxްg;y浗Du@{>-Ш_: Hi*`2Мd;ʱ ?fNx4MhR9o2z0CazmMyJDDDqw%Jk 4x<#2^uM-֬.,I,nJ7nZ9{bb?!{ti5 a|x}t> 1QyܛWHq=ǟO5tvHj&"""MSUeJŲؽsk̽)l }m3fs0$Yf(D#x[# %4JDmLH'mnܸ"TBBL& z{ D5mfql3|WXpttCHI51{1psfYp{F;v z Q}~^.^}qVM/e`*۝Ύ&B""",i*FUU@&^2& yA[j[ ;5GUa/b?򰰱 PB$DDu$2w˭,lK988h ^/P烣mhbO tLuގu?hJuSwI%"""HsnzŌS1y"®7@5& CC1y LfXL9\?\L^ADDDDIGA(Y[ -Gxeagyxc6XAz}q5ҍP;aWSwK%"""HSTU/N|BVbv=}!bR w^@gVC(6S!VcQPv[&&&ޱ?\6a`}c7ŏ24sOeNdY32EJDDDU,E*| Mbz-q5޾XΓCFdD4n LfBQH3يf-bQR!ψmh>ׂ\7@e[[o z^ċI5 5f 6Fd]JZbN~t u,TUYtvl%""haFUxCs72*vcuA~l}޼t O ѩYff"-݄j? 7HJ~$,4 [U=26;b r\ƍ/1w\hhĄNTþb2tc 1paccQ'\r|%63a1e Klf'J Rb ,I(Tem8Ru<;O٦*7w*ECDDDqbR޹5oz7/[.8[j DqsHe羍oG 1uuGknCHI`_l&#|_Ɓ# {>ҸmV@DDDQ8bTU4췾_L9zzBcEwCm%,$iR,Gwx)$nX4xrdy$Mn'I2@qoyу\@aqo;Q•m,3XX" ,I؅ҍ%zJMQ81LDDDa3u;:OmYk{ >Uy5O0g{@D%˲<yA-^K/ 1\3lA, 2fF1,hn&"""ةSU~_xn3^Rwf@L˖:Q|fH-]sQp,Ή U'٭9X[6 {׃$K*+vtc^ @*9\}"""f"""FU*[O<^ H:Xg;5ŕ,BujHKPfB!"輽zY|"KLLDj^n~RAZ088cILĜȼtTNȒ.:4յHH+0yeX?P] ǘo1dҸLD/1e`Dœ߸L]$^(͝;E IMMÜ9q5wA(Y[ (l!DqƐe~Ͼ؆em9z(oFUUs 5QTUY Wdʳ&^BC3̷G@urvL:!S30I0ݧcuł_~ַ`0X0"""?E,|χc'Y Ȓe711~(-̊lcYPYKhGy;4u7W"""0LDDD!QUe/ZL^Yk{ >Uu+P%qLDDyyIœD,/K$ 6=|?^~{A\zj@NK7n|EY%%I\ [Y PTX l<׋Q='1OC<$EnM7/vBǝҤ;P3mm+-rgZqMx "l3ED_o2$\Rr25HɁ.n xXD؝gbbE #UY m*RRQxMh -GK@*ˉ( 5QTU1`췾_ ,)|M>OUVԩ;P3d6L^iYk{ >Usqw 71-<4uafiCm]]!ae픇|b$6#^zt`N?#2s> lZY -uxxHӝۓ$tI6PgeZ·pADy~ԸYylZ:CÖߋH]C>߬_;1>_?鈢ʕK,\Yh=Hd4 ת;-7@%*-wkS|M4l-̅D;MVmFyf$y@*#~j&""{bWPμdn?\p'bf15"cBFGFljod_7p< FDD"]f6^ۍba Kl*(^m_2/ȅ;O#Őۛm/"}U3XSX5؜VU< _DDD4UUVhD$KeKYHd`'K,ŝ,a(,&7kw}|51IFDD5#Eܹ 5U\Gk44APV/~Lxo `&Ι f iHImE_$C]bGabE~2ٸȑ uSw%""" IDATP3MQUŨ*Yl>+۹8wEb._b൫}lX"""@AKI9su:c'NJvyi{~ζ,ª챵^hR`wl GB7Mmtf"""QUŨ*Y UGc̷Y l`p(t /vctt[3SB!JMMÜ9ƫEoCog#xHT5/̸M-g§_w?oYvtԋ..6dy=KADD/|HGnTiV>޾[qx]ΐ`f"0H^nbL-Z%""Ҙ\@c6j.|m!w D5'I )5 XA54ƅuXږVU,~0LDDShjͤSWx"B-\IfȎoU!"""KJ |]\ [YXg[+ED[s"__.c3gxlfrHU},>0LDDSW0af]0Ӹ3pwC83F7YLDDwg涮.(ڿk:/뿭Iÿ7$TZ ޚ=Ru\5=RuG\Hwk6 }O_hѓti|l 16~Ϲ{zXRSw%""8P3QSUe/CQv"4X":5Kvi&d DDHX*11^sQ]sJ|نƠa?"ۭٶ,ˆyxQؖ2La"XccZy-O~3޷l&""o 51UU>:%7@ lZ!!XrOth5k}D1E[d(y^?ٵQ>;v¬uXKYw\U$4JUDDDf""82u&Lz(,ҧ+5OgX5Ȯf""C1""""JjjĽM[u:Zo A!K6lSm_SXn0 w5kR۫cçp$]5?4Ŝm4r;(~0LDD'DD3j8!ab4.Eqxqi/"""{ɏN]:\. 0؉5VńZloVj8/9x2z¸(궩*F(ff b*{!O{,R'k S3,oH#=vەK\""ҝd$%% 4:\ϙF?nH(V=Fdfϋ0 رc^~a=W]< )mQy/>xFiu 6žD(MRi+AlytW]_DDDDDqh4na;Qʊ]1_S iŏlS__[:qOLL`xxV߃,amUv䣐tcX[wk+椚֡s AzszLfsa@*Ύ&(61LDD47X +!u]0ڐXIa!E """3s>4 چ3 XSX|8RuZBls@5XSXN 2!%ear{ވ5kRQ/w:Ɏ۝ΎX""P3Q RU%敬Et zz{C _hvl-1wyG"""1dbFJ<`||LxNTce^.dI:x}>;KtV$TVb"5{^$''[Ϸ`|l'$Vt\puֶƹx< JUNga(0LDDcTUYnrxސHЩy~:̵&"٥X,HȽŒs`tRS,IHHhBou!y}>Tֲ1S R,kV :-[@Сf`2|l߾CX{04ΰzpNCs֗Cr:;DDDf""3C'zz#;;gZة(YX;dfz)3]uuqLBŸD9,#)) B;Ј5/i~gqDuH!!nQݚz!w?}^۷ ijzցr=ŚjE 'e6޾vϵ|0/rRU#Ng "" 5UU8fׂϵbm>2oш\-f9D.ىy6=\D}`*l&"">b*TaYF .egcnM9/sA\_~R35ZF]i՟ݖҍb;yrf MUØ8皝{v#7ͤ{B/LDDI]`辈 6?d >>6w,ũij?9BMu|:QR9˚ Kg>kebe^nPגŨ䴐n0-!xŹö<  qkK0چxv[l*v'X 6iCDDD@qpU>v(p{_5[fА˖'QzŌ-r٥fY 9EœDd;koLDDѕ"Q\2͸~>517χ}NWwclStLC#-(hmC]i`kƗ% E?|}>/&&&կB nؖ=W;ۣZPu:pͷAv)'Kdyq ""GDDA@G'6=woZl)7W8/~ܫLDDcVU̷-sriY>ő}H#D^$Ȳ,ls-p\nDK7`k@r+Vg߳ :Q㔬-2牉 x^uB3<pTq 4ߪwIf*Y """af"""QUe&i>W,oo~]r ]iy QEr۹ 1ༀN& ;5ѽ=d c#hRr=?AqޖFG}oGWY ")IB΢%(ztr-ap("`DDt?&]^;Rug: i. >*Kl*Ś‚>^]sjﭫ?Ű~?dDQa64- 4߁fitԇ  FG}, F$$$ 55 nn~Rҍ"> tU$TVb5ͯ1ϝ rDŽo2,uu^r`ш{s[]s 58>]m+OqjF#,&#dYb(V,=cn˟ǑtƏqTUDDDP3FL.暝׿WwuPV|bBן T(gf kaf"(–k!a/QwuᆏKH_@DD1))022",[]S܈B 4gY3b׌k?98o٧JSvos:5Ú:|Ԍۂ,8Lfvj&"5E&;f e&sfADD4$ ))0<<$d/|)##v b7>P3=},=Ą񎝨ʼܰu9 5\7!n )fukj5?{Æ;{0 EEra6u\p\nřƠK{WcX\cֲP8v784|ձMDDy 5ETW5,W^Z3n ɽ7"l~(jy ID+7,uzЦqn1dm1,&Ty_Ԫ8&"","LU@f5; X gqYc\"ű, uct7|>܈7<iPrr2x!UU`3Qd%DDD*MAE Cן_:^ޒ: ,S3`bl c EܹDDDg2Yw기B 4WV5|LlS7mNU'zFTNl-TV%kQYY֌//T% bⵗuƈCJECDDDzueQ\{bzQ.,<]lv}իh`f"7t9ёx",)I4 ADDqHMrۍS!B4+V}LC#644ݖ# o~^.Fv}93<񱱰>^՟Gh^jފ]*>N~tO.DȒ^܃"_m 6E_(TUZ늋2At/?g[xXWFxx&K\"wu90rWf!HIh V?],UJ<`|\5(*,\`a_5܊At"KMyAy |n,A a9.Ybe@Odmqytj'YV+m1=ea1Q]SKMU8nX""a(h62^%J#w/~ME{vqǺ".ga4ƪdDq+[dB]]\`6xb,ZBDD4=,ťf\~MؘGbWPh&.}?K7:vJk6pXP!X$aw x:SZO0~ Kq1ҍ`6pDuP ug(|j&"" [myfga =M:J$/b545Yƺ"[["Չb0;zp M)iC-X(zaMY ? $Aex^!9ZPI=J}G=мeK7`Ɉ,kᡰ|%.4ߺN˟_mhD L$К(֌cJL;M\m"""j&"" W,[{v`h& H,Kv ן>Ň5u3Vg9ة(2s/~ti: q .aG-^s/^r).Y""0:: !UbBȒןنƀ@ÑdI kݒ6 IDAT8Zu\{ch NT} 4d_l]I=6ɅbĊՊW_܃Gߋ7l&""f"""TU18 x׋{GyoQéZ乑`{G9;g{gXﶀv^\?8;BC[łE k}L1o ʡ4b~ .~֯=Јڀ#@󾃿 *eSbe^.jtOx@_}[f7=4k642!f#;bS˅\cfY3^Ɉp{Auz׸4Lq:;I` ę 4A@3tբ,n03w?Q=},sKŋA,zz(0 WGN#3'6Dʖn!v~>1)ݘ(֤ܹ\ ϵk:\. [o$Eaʒ$<,(CaGC$>!9 8._PhYډokf( ;x!UUtvJf"""TUY@sZ< xf F nHyR6]pwÚ:]n>6N:57/ߘ7,|^DDDDDwzE "`2CB|8ѩGՖMa4),mp |!3xkP:Vw\n \InŻBǔ% 5c+ w4P'ґU,kyTCr:;rBP3QhVwn[Q=EY]v)vdyֽc0xRxWGdO<O<^/w=}?kYSsĻ7ۇ;ѩY Hx$E2x7m]]x"Xnw NDDDDwe,+>'?:5P 4hW5@3hMa 7%kd@B.׌\ ;#SPE:s,nb2bo.8^Сq 6uNggQ`X""%s5h7?!]׋_7Wg1?WWU|Q-Z.8JŌ?{Gn WG}N7C_7޿gAQK<c<  C໭%""""c& ?=f6L~_5[6uGh./@3U_:^sAޢBMս}k&ɮP4Kg@*FD""S3QTU!7};ʱHsl_g55xA1۵̧ 8i[P,ΚvX]NjϚGB: XkaMsEvVx~ly I@_Ț x:(/d!(n EjϦ`;Ru6:ʒ/ڭHq;ީl3h v1y۳rrE54e/USxl- Ɉx`3;6f""rxA+/AVlHۆfOcX>o+-|.5GAƺ"+.&l<_YƊ[̚]݄3,䟱9K0o^]˖W#],$żf@Ww ";w.@1'%e^FGGvGPByl@3Q χͲ,uj^.6Cb(lJ7ndѪ6ڦM\i""1LDD'=쬘ͦ[틉\pࡣBމ_/f~'/-y24 M_ev[[ѩYfikFʇX ,#|3|e9 Q-0~.]ŸsSsD> ADD$dAwE՟ʼ\<|^̝Z6þv߱44E fY3 0w\puF#F dny>/ u;Z[S~^kjM_)),b͸ϛ:63LDD4 f> *a0Ț?X 5aM1=^oXXۛzzaM>AQXի8x'M8}s5un=,D} K1L|҈EtiNe.^vu%KX }/"ʼnDapp@ؘG㵗U':ݵ9?/%ŏm>tMoZP {|>_@v\Kݖ"N[6jl_?bb'y;% ""@s&o ^\TU</}`?{GYvwx,>?wQ t0n [-B@",3`hG%Tv֮]w&ܺݩwdI@ʮ9Z lU ;Fou$›[}?Az }9QV8{ Wlc*[A8O8ٳ,,g!3u742wtژO;hFݵ&;N2Ύ{7 ҐKs}xBK;vuZlC$g3` zy/-шo,I͆ٽ3# )捶:朜l"ԻN w?yE2Z\˖>u((jՊ-z={ΣǕOBq@wl/nreYQ m")4cp3],Ҟٳ>҂e1XÑȤCV4K;ek8ѧG[ﻮ}}QYRdPsO [>LOuo{?8<Ʀ|mz{߽y͚N$ןq=1%jG"ij׺E+;nۃ҃#Ink"54 f&@FpFYN]mC 1Xw^*+-Ij:Ң#-jowyya't zm*+W-T>pK88̳]r\z4{>? iCo EZuQYAUъ3u7޺?~0 U|k\RT{.8UP˅i8u68?yhkx:;Cy"ruhڱ05pt4{nOX 2]BazmOJ{붝0K r 9бvS¿1g> ZB&ܞfz{Jv9f,`ϧs&`tvk`pPFAД =j:r˟;~Buhٳ]mMmQQ큃1BO׬ϟ=ks"' 9XBom;= ]b9&_OMh:z, K(BI@sN_/f+rX5T֬|ÿ~ieUjԇ;zuNm܉ˡu?ҹr$޻~Ϲ!S¤Ky=V¼?fBa|}w7.5 ?s:uG[3n붝ZTQF2eOX.]4m=oתӛܽ'ΒB[Xk҂ei<n&| baEQdސFA~/:js・XT.,ײKn||_~SHnV< X[t[ wYeKN[u]'<.㓺ﱶMSyp_T󃿰C:y˟yyzX3>=>"?[too*9D"a?۫g$6 w?y宿|q9 _^C3uꗦD]?{qS;N4f~ W= &tZ]ݠ'?8/TG"I> l` f@339yK/<@}6\X-EFA0`s(d[r rҾվח.Փ NDe%ZZPXcd9Λ;G˞x\'OS3L4$?僸ǻ ڍ7.Sa^R\, :#522sٳDFv?}S++'oֽo/״ 7a?υVS`LN6͘f8MFFrrrtywWU[<h۱_vl G":a>>l@5kU2(=q僧45%<&ݽ}Q|sM,5Z:tۼNP(sKl{AmټQlkTy9ݍFuVk[54&x)j9Z<[ߎ7E%{~t ;~B[5_TQ~߀s M..!Ebh_Rᓦ#Wo_?.M0 rW{{Uj7y0@ 77XNT(|F>CqܹLM5O2 L2U3fd…Y{Jn U!5kIxL˥E*)*T좘7U֨Z(0 6f@J@sڰ~@ļ' 4[TQUw>: ( U+n8nnQScOSdfuu.Utdj4l\e%w4LȋU_wFݫEVp%k?'ۯ .]P(я3)XqMڱWYvojL{jΞռXfugLl0gƌ,a]icؽWv˗~M,v 3^I:?{7?RIQ>}䭍QO_-v '[w_M-" Hci)ѴfF=}(u<85u1I}-C:iuNzmV-Wժl4 :|E>XǎHʾ78Kּ*׼SvvSsGh0* /gO OH~{z~߾LxٺB^_uOlF~5EZ _urD0{ٳ742깍sKs~ W5OU[~>njV'*Tɤ>f,[ںѨ0iǕt\c$3`6f@" H;|YҋNֆ4 ۖҴfuuAYǭU˵w#- \3ŜlVPժ֡c y*k[j[Khjo_{_P8|YQcc>Q[#{z-sNcr蓦#x'MSQ^~|>`95d]8 є)S5cF.\8oژ-G[U{}}z5{fתO{ޮ;x//>57biObDŽ^tp ƃ>rf@Z1vI:?ۭo)+-qǴ7 WZQy[ڵ<3(j6_-:S7_׮]3m$].IKKؽ7 Sr~zUWVXn߉JrEN&\yq#<,f?_]sƳ4L5҂͒tunn!ԜDbꢅ}W-:z=ϹֲK408PCeۛiL $ӏ~Y o~jrUZqz衇ic^V<5˵Z J57n\ 1 '٪Mw38ߊMވ΋WV(+[E;.׫jՊb@owqp Rvvu7*@k9ZImN_֯ӆtQ[tR 3L¡HX{o?`R ۚժZBpspk^i-,0gLE"4yNriK-3EQ;NTe}}=p0Yגzf|OuH+C&nͽ@"!B2WvIJ9a?59ݦ͍["|/99{l 6oS m:v?]IZ{[ڛ79L9a=fu֬֡F?ۛ|UZE < UZήnQ~߉x'#=!^uw'O*4ja^lV|u1'GJq.Ms)Cg{iɛ}5z5kVd$+?0SLe6222s>3硩S_HTVzy-1>ؽI!(_Ʀ樾Z|~Yʎ7孿y_W>fso;#иm.[ϫ<; 6ٽ4΁fɹmͭm4<~z#Ȗzn$ę9ٖxSTk[׫HKG[VIcMF(j6_-:|EM-I 80%zZ\P~h<{̶s?x@}4Oi>'-= s*y^FXi\1#K.7uϿBK*+tZKfy6&t≯EjoS=@sIQJf%x'$Nh1w\zi˳zu.wvdIfAl8 f{y\z-{qޞ3 ]z=av3Dz][UϽh`pH{߬ }#-j:r#\V:G*$|}UY7\r=tI *?.Z@w|'MЎ.Vyy: huJn Ϻ鿓R E&aƌ,a]665+Պ'|HD;vUV6.Lovgcޘ.ְ! p Ϳ Z=ymF,!f{C>'ۯ6oS_F(WUV$c Β408ֶf>riqX.[`|~cω󅿈{| ӧgj9Q'vDQĹtuӁ '%ңF$zʚbH_C\LVvv>_׮]3u=+ۭ++R6>ݾEfKUlן`T{च/[h{LG#l{^//>G隵j=ޮ .9iZBAC֮ttA +ȏ*jVpX[-N [kVWkjjhTI wvGuq5DesTVZ" нYt-]"iLWYcq} vo%8)W+G*-OW9zW2x173]b}4O,, =C58xw+I) 6Ԭ=oN*=kW~񫘾_?o=]VL;S=~L!;sKO׬MJptz GZ# pB[3`7D ucjhLJ ndKQ۶kQEy\zҢSʿ%ֻ2 UoJryhEn˘Ic}}ƅeFxHק+Wʕ/Lw<7 km?աWwZH$iu{ىImT^ůzU>L )Sw_{&XVWVXbM^sKߣ()*EH.[# %LWڵkqVo`NN}f^iɍiak{~)@$iꔆl-[2Aήuv胛ǹsYchz&0lg:O$شi.i/##C3g>guꗦD_-Ϛl>anRԌYz!gv61FFT-7^FRY}5'tgc{l}m3gX j؎S5s#tiKF[sgW~1Ѵ0G=z-1K:vD_O#YPC֬cUZgYiJK;tcjhLI{;~B:~■sNFQ,#xG`܏%6}yy, 9a+{É[D,Gq+PNNΝ̔gM/h۵jljNL2U^7.XV;w5mI9v28bv! q: vIv9L'9L{l/Q:YD%g>v{iؽWO׬ksz.3fdiƌ<'ƃfr隵*_Nh4d7w@HZ1`3v5l#~ЌY4efu)cBajXu-LeKDj]ՙ7,IFAMգOKvu/צ6ju:ܢGZܢdf i]ŋyŇXrs#^&oʔM{fM*]4Szu篓ޛ2e~L]\=qmq19HSsJtG`+nqp)muUjE\mC{54Z:L*ʕ)AC[4D oֶvuvLz}ciNyWZhaQEyt/BNԜ1OOkb¼|6, {{FX^cdfJRB;wU׫E1}MI զвՃ+WzԆ﬛0О.rkQE-As:֮3]=LJf }Ӹ(5~:z{(u776ln9ڪG>|H999q78KVfHdیьxL`CNYK! љ>aSBV4W.,עr-ZXS 3udM`#t814}>64n}dv)lXf@99|ǘɇX83;yR_).NzA>>b5mK>_msӧ?,U:fϔq}^6: f^:$we)@̙LwL9'ۯU˵b,3Gǭ5fu54]ƚs(ȗQTYi9|ШUZU+7p^~yJYL N=n+yҥǘ]?v2¼[[/G,Ü=۫Y,,EXØUPL}yDeKgFF|dӀ ͷRqq{ܬ`: e{zuD0%]@hۭ ]vͶk,ֶ;ffNDѾ7kn6K(־UzmX5tu=FQ a* ]ԜvIy[~GO/0갘Gvw,K0.#&ի_?=Cє)S,D6]?Ezqw_l)A9>.mk%$QdXZUVh{AC%)k붝f֬&|f|汐@FLhOFŋ75ӽ=q1χq3*`\1ǴiӔ=35#4PscijZ{GGc,d P3 4&? 9 Ey^APFFstg9&'S~ֲdv'CY=88{VAB}.i)7l~_*b;Ĉ`3 %5Ɂf'S^/)-nt֮VN6++-Q^ԡF{V&a`pH^߫}o;G+8Ǵ=풗L*|Kf45̿ߝ<Ϥ.>J^4mK3fd…)?/[l ,/D6=;^H HTدW鲴IG4N4'aڴibWznUZU+hMC˖.ѢPu [0@k9ZZ<3]=q8)jFSs&Muل; x}ǃ`3u)y ͜Lfr&׌Dx,&'f%ipdDCi_xpxDC##,AT3H '|A]Ν;+it{4kUX$LW-_VZ“"f Jyܬ HIDpN4KիWu[,lg2pQ=3]IZoNNf&)T{+q}9j2;D>9|Dna=n:Ң#-{QԬ|+-Q. IDAT- '$īxMyI蓦#qvQl8"-E="p/zSLՌYp|ɔ# 3qZv>{^m8Dh͘HA=kzЌl$f@B9= IރќlWxзHֻ9l-/\0eJڌnL F=i蓤afSITS.WLMm(QO_M}H" HB! 1U9:Ov~}?Ja({2˓w/I??Y8:ō.˓:)3 =w'o 0?g;unhXb ])m}ӱF>X8O?8VFF|Lc|rzƦĆGQc6ׅMͦ%l$f@BhDN+oq2m{MsE?JxkVⶵ\\YŖ#˭GiNW233uy]cO2U~_SLem&&߉#u{7#GFv}g?S8&tvvRF`:&$<~ڵG_gހf ٖ:O9i9icGHdgm)ϝZVO,m|f?< b>3fpXmi*qCq`И8_~y5!v?slČP3 &zK(xD}{HޣOM1! fHo KR^ Wn{¿w\=F^@n+mי`3 jDũ'4onI? Ğ)@ rknC©l'Ɲ6 f}95мfWV>E YY)(a phCRtabDan>LP3 #6/Q8Qoo aAVP!-6c2+M>|14}^}R~cNlTwE0!>#iENEC#ac@d.öy\/|^cHt@pW>EY[)$?9mMLmv0P3.yh8 ; 4;m^NfWV8a* #H%М_4`3i5@# =Y9a* #; P31z%!u :a*`gQH_ M%r/kr-sJyfH_ h^yh#'x8S8϶B}vyI;;>hj48jlΒTo*BF #]&'͉@3G`W\~U4@DPo_ݧr^Ragg FS3$WVh`lll #pҜWVh}:6{6/fpml& 6Dlh,м)q\z~˳\RO}S++>`7~~:6b2Xk&Gv샦f@sSCY_ ͛ # 6aB2n@ Z_NEEv&>n=j0WrPy}Z.bsOoP^ Fׯ `aczI 25k‘~T*:;`]45, .='46Fp!; E,0%mr|I،r<,(Xf($WVjl,6g 6P3XaN Y`c $ճ`=b #\6̇@3Α7} #k! bp|SdcpEZ_dM_*F+鴤,''/|On{rL&{ݧ{; GS3XX^M,7V>iil33&fzI 0˥7h T|R++> #" )frP-5lΒTORP3a_ s4l,if}:y YFn@jj13^t|C:OoP^ SX  )`咶9e>kel,ir-߳}0MH>Bd\( g}Z-dc.6o eil2&$fH"z5z,'gqefp ϧ\n@j$0vI脹r 4,vB;tP3$a_ s -ߓ޷IRX@P3$aN4U|R++<8 A #PN[ccYy 2vvP3$a %k#g .k)/k)ls7ddJzC 4YKr-߳{yan5ސ Y_V++Q`˥7ry #jFp?t\-f~Ooy,IcwP30/I䄹,з& &?Yg)ljFے s).*z{leZ_SX evGd;a.y\m~z fqeI;Oaa 6@5@nRۉؚ['ZWVy /Fv&P3Lh)fM}mɎ\eIq=ӱc)ˣNM;Δlw2;vRlo%V%qoOM$qIKuG=VcKXrDDzL)/ IxIEyzSTkKwfXB8 rؗ$N}&c]h58`52F`'a_s:oA%tO}RNӪEAFP3, ϕþt~WbP@Ң|zwaaIfȒa$)}&=tTP6ʻ̊,j,FeA/-%t~a+sH5@v$mNx=}&ɈKȝVYyF`+# # K0I{NS~IOþ|A>֖f6",P3,`fُa_O4Ks9zO?)uWi.FGa6IGa_au~; ,3o`#3+@`ht~>rTP66{.y *~jmijά,P37AM/ai{60bfVvZwUgVF#6Z}'s:o3o`󁙕bT,tIzymz3H8p8czgBӱWpj >G//h.:/ik0hP5X3vˀ,HX#?+!' K8 Q@E" ",FZZd<-r\E_ө y-4TXʮ:dr};G74TI:)ހ9nڒM^[ZD .UxVweEcMk{4TB*am-JmhickcPڲ K»fX30wU<g0m`I@ FK#@~YiD1d+{7r B9@67YV{o38pQIm`_P 5xR V~mi].Zs.ϕM%WN3g{@a]x]͕W}kTA`({tJ@@E0.I/JtN["U}^|YQer.e%{z]K_y0`ojP #&餤z`i-r9]6nN^:  fc5t~`~  fe0IG$m7P}5J>K!Vt;;B7(W5tIzōJ ʑ.P #4<4H:8r9BʒavI:=2E@9" FMAze葙5hzVPn N " wd B̲ ^š)zF` -F6ۚ_UU%cdWYr}dLN乒ɤ2L^#)MNNZPv0طW4# #&餦g &<:^x1qh4pxت4bXfgXyVdg*f+J+N)x;J -~1իRdjllԊM+;(*B,0]>5jl\9U,d~+HpXX6_iRqMζp8| d~^`/("V`Y'm6|>fX+ \HR /ۧɲۧT+&fSiV- ʝW*5h{K%Q`ETj`I*UGcz9H+r%LN*J)Lj;NḰּ53!ċXrBj-'tBI&'544hbC_ aX fc]fYWuukP@Um[7hIϫ/׏QWVwYS*RiөiOS9,V\ػ,&ŵ"X0wQ`%Lw`Ee@sm@3ć %߷m$tkJr5*ɒ X' e6Qea٥iɶV$|;Dp8x. N23|bg$>5ˮ@R caZ)~*Z~%JiR { =@cjrrRXjMo{# 5 'i+fScz.RWHtXXVEHTAt,5śQp%rhD RӫUWWơxJ&%={[$Q`|` he /NZWLf (*&FW8 4M:bLӆ(E$.M/{aY ^,Y*}R *XA/(jxxH}}A )RpK #((5tR3^+C]Zn(@+XX"W&.jLӔi %Fn[NKĬp5FWHjMo [EJJO[y</ 2LLT{IE"a40ЯQVWU֪֒F#0@0Gӳ,fod0XT*%4K}䤒IZ.Kn[v{ WbK ӌ*N+JZ6[N'籒TJSSvL ^?Y>nv 85rr:]XL4U8<\ߠħ'3}>ֺvLĘ"Kd2n.TҼHҺueOTJdRxVA5Mf$ ]8XԔET!*ʉDBRtL\_n?]:Z 齂?# {ɲ/5]wRRX.KNg-Y 0MͳH: iGb[22@.+^#`_Y񸩡566Y7cL3D"A4Msm*@ʕJ* Jihh(tZjÆk,D".4/_sx +Nzw8EѲ'4eFGr:]Zv-%(hd"1  B2@2dظQDR) %&HhbbLuuho4U<[0T⚽5M. .A*$  %fjjR5!SL,t:5妜[e2bQbQ5[Kd"N8``I@1P48+,_'`_4ђ5R),7kq䤒/Vse :@#ZRT~ORS,%aa ̵ :,-JUdrRFGê[Z7u4ct$uF`W0 OEEa$=a}xr8 & @j隚iFrެ|/cLFDj9\ :F+fLrv v:R[]4hllTccukڵ)80-HGW(4B 0mnխe0QPK_,f\?Te+M:R,R,^prXKd] G4LFi^Zk6p8t (i^'*pI41a}]tB+b8*,neQp$RɤK= I2 -e%J'J=% IW×*8n@J3+ŝ6UNP8lɾH$$܌Rr0'tB! #p@TXf%J*~V;LN*fUk 8!\. "t7 0Iz`Y0=7:wJd'(P4:!N^NL3L&CG`ISSSkL&d;7w\^ݱCءiXi;}Zǻ-7^?\I$+v 0muuk͗ԒWUU:c @,[ %*+UT`bb˖LN…w5h@QRs[k w\ڽSuJ>cݧӣ!rH$R]Z74  7SrPRXe,~bUBʃJRxqP֭3T2jwy~ӟJ'P95VjjjJCCji@g *(\vVi^1PH/8B%_ŢoP]Z  NP33M/GaI6M~# x\DBP0L@.y4Լf:e!N+3*͒.U~t$i0ݻcݱCu:]}N488(á&&q:yzzCJ[I$c fyc6I]V+T\\H>UdX)VT"_66]>mu.ـs"Ѕ 﨩Em׷mPۥZ6m$m٬:rLn>b#`_# 4O5%ֺUWQ ٺ6*U~WUU)Ns`UIBI$Mymm%pӏkwڮo~urm`K9>ad2@p8jnZzɩL&wz] t"IiΞ]-? &o&Z֭_T+O~c*Nb1S:N$.XrS)} cr2m:jk-=^ݱCءPH/8W,^{BDBTjܯO}Uј)n1`IF@.) #t^`,9.xCn{pA55L`^KW KM =φ+"4 6/.7u~Vf\vߡmr6l)N1Sy)=~.ŊSSS 4 rQuCIK[k^=ѽ3E[d||L^b}믾wVk8 d fvPLXR]ZnF$mucKgC!z(2hۗO{7*nuP9YVU-ϯ02h=m^ِ]8\a߹PVUU1hHSFG N۽Suj0<=Z͓\Џ~՚e`_/ 5<# {kxH5z(.OW=  夊k⳾ $2<߾|B|\'n: TjFFk] Ƀi∂g*LND"m^^}Xia _&aqg}Lg{/=Vjv new:aJzڪl1({Mt`QA-s~?@H!@*@*ŋJ8QUU<\[/yhҵ.˥΃⦩g{={.@q\ _߯gXqM@5[]`ߥoEG,'M5%XJnRcOgGs=XЗگ1K7bggAEFYWhV57^ :z|o@F4>>c鴆tFnHXzNx^Wom(<VM:xmUժ_^ct:O˂ο?sVo9կ5:6N'JdrhzvYkUѡ=p^v.}zߴZӟ6``5Hȅ.I-{BXV.QXҍ7t:AD"aMLds:+߿N1v`@٩gk B({7pnzI?@KW_onoח{,/Xغy=uVkA}FJa}ZC@I/+<+hhhPHXL@Ys]3)Ok+PBկn~ޮ7q2$%۶}ܥ-7[8otaDX1BV0[%&@IKRZ6&&50/4P%-[ Cv'T*mĵ}1g۪[L^ O헻reFI.+Ejtiz%d6ҕd4<|QSSSV:𐆇J\W—mUjC(tz'|iȉ9ٖV*eҗoŦ}P",WoaHb72JV%c Z$wi*Hd*w^1ȿL&9W&3t:%>>KeJ}N[nE~;eҜ%d;PGl[~ߒcL&UUU-mUlk*5u&{#/. "XB0Izªw8o` +ŗLfEgfD%r|_쪪VuuvUW gbhΏ"Ѩ<O'g4TQVn83w2{22cNUUU _^v紳7~d|'Ad#q{JUUe+|O׃Iј&h>b`Ad4:(ɲeu5,lŗҴ/~i4MIaUUUvMC?}^^;qtjhN3pAq&&EfVyCn`n69]ӓ]~`s=}FetvZB<9벪7ypnĹ xֵ,PyrW:Χt:X,X,pXr\r:k2\vOד_՚e`_/A @ #𤤝Vm}}CїFv_b~1f9_F566*áz\T{:fB Ijnޠu񆎼|`;#/V"qJʱr8u<_ 7 o0[cݺuk,/un~=oZ #5#\`AXaU__G4Lt.rͳgxԑ'OgX)O~ML3P` Yĸ+z؝N::h~487y}FG ;́PDtJFߗ7Z7j",P3FMRUp8T_@B˜ :"_ɰ4*jL`+ǎR@"_Q&&K섫okdxDoѫ/g{8ȱT*a:"I;s C֭r5x7<{pnĹ(fIlP)FF}SV50j"$Y2l72@H&'5:#PQV.50+ǎj{z|Z[-B %"f~|/kS_U4R #5Hp%*5aӪz%(WP@TN@E9ΩN9E`&&-4ĸsv3b2ן*,Iv՗j% Q%/}.ַU,`pnds#*6[W.*5rY@(ѧ/<՚  **in\"c%I'ȋ=9NJ3gNwN> +HR|t:Aֺx:p,{epBy>?GáUUժήb^S1'&9QPNN7$[Unok ;dFdtE555SBe^-vޢC?ŋVjN< =P3F# φkx^4|8fgr>ډZҏ'fá--zEzE`81M!택j r%94_8J{{Dpe(z]w8 (4stT}ܒ`s2WKsNo3,"d;;Qn =p^~K=-=i N2fjpg$mbm6u`MMM |OζԔ]Pk'r!EF40RbhζGҽ;vܡCݟL&!\.yWYM !]Շ٣>Й6cl`~U:^/ǜmg{}Uۥ/yr:]j +77]hX40R2-bSv}1BKNFO@~.QFq.*͵NҧسG:CtN40Яo׷+3auo"9ܽhFd2:>șę 849]:jNx{zv肺{z >喬cCf΍|nd2 K|4N \n];iΒeZy6|MMmTW;}}rd[[j[9Թ]g֓_ݠ邌1@e# T8Izƪxykp8jnjZx|jh;Z5پ>Jk' P58NrTW0.Ua .[!0x EFCmEuéoߑu|ϥ VLqp9*͍^ٱc]_G>\O$_eA.1}R +.]d{mu~)Z`B6)Q(^j95]>nbxXI.NO2zYIRmK5IkuQ87*sxOo9C?}^7QhnZŧhxY*Ù7۰tJ&'rqsȥ\ViĞ=+Yv={s]d2T}}s?ri_~~X/b7n9^X.ӌ 2͆s*s_1 }72y9TNE*藳;};3Qպ\u ۶hWLNr0Y܈IT&)z;b񸎜8#'Nڵsvo,BE_ ur>lݼI?]E^|WkS_U4flB 4neDP*i_%QX;wf\ƍ7ty`3 xψDF~leYW\i2Xr^9{}cܡC>66D".1/={t6]߮>Y2njͶ`QtNk6mnozl9Ykg 6H0UkbxN*3//;ߞ|M=GhWEK!|pnĹJ޻RDɵs=z\;t`՛OJsSWˮzt`\쾏iS͍>}W_;+5{a aP #&KoR(w/Mk^@EF:G!_Pd49՘7tmcncY۞ Q77fjj I9 4KUsiNmܡ~rHGN(X$ >/}c N+22>Mw߿7g7Mz9^v3_ Bd)C!12T6߯L_#YUd}{XO>z7՛pndstPs)IR9fMMM\bNFWC;6eRAw[F=pW{wڮxnѿ7u×/gi6nlsVs|ϲ@yd2ɶrUJnK}!֩o<} t:H$t{u{Qx$wBL9k]8n{}v~09:2L甉/}4<_~+"FDX%$Wv}ޮ>C᰺~rH]?9V֙Ӏsw=; 5>sR׮ #+0@ TncQv6-0xT\Gx>y>]{=NOuNvBI41<:s1:b1SzV;K路O>q(s\]{CnD 5oܡڽS/8p$B9 8BMt<.}g5+5{ 7>F0I/K,57o9NײVh^mY=<7Hcc9N4_r{kZ˵f:8ʯ񸒄I,ggLSg2PF$Y*bԪj{Gǥ֩g>Xـg/=Cˮ|*EQv][뭳Ǧ #YmH)B*K+6-,9Y L2 Etijt4̀Xi9/JZ[}^?8|`UN:X,Fg9vn{zt޾zW 2!osQ=12AgaG_zED['MO=FXDΪ4 4ϵ{[voTwO?| +B G%I7ks&u/ ](Mmt„ʛ}٩Wɑ.l "@# T'i^UU- l-' TTj.VyP&&ru4{h{G 1Pa֭k˖o^3)JQ7ww_#'NG>TML\NpY>]WJ=Ū --#K@&Q,P=;v,c7ώ#'Nl?ww_v{uΛ/Ԍǿh2+lt!=j*af>-iݺul $Hr%mcvyD"D"mJ ;s/mֆ45]ЈX)jgWׂzC!gg,>gX)㠳R 4ϊLrMJ(#Ki9׵k7m{6Ή^< X/`f+s_}콆/;P3P$5X kAJdZy!o9o Bd;No(}js]@)kE7_ѧߌui<>-ۺݗW<{& YrX<=ZIzhTN[tJM%=7-qq f}4dx 4i!+CA>BجҼb  ۻpDj!B7J2eK\fp 3_8{rd/^2oQɛ3&=9٤4 h@eYp[!}˅&L&;>> >u]Vʜ,,_EdPdO<~UqU\7NB!v2FueXWZɄw5՛ ښ-BR-5=B bJe ^>n{\\4t:&<w.kjbbϯ %&$S6ϔ\+7=\O>?qįurմت UTpID"\5տN!e+Pu#72͊o?GbIєkI'mzi1j@4aEŌf54z{ط>4ĉrFf|ܟx:>>:.iO^Dp:,J9D fh??)OWtÆ@ dvB`XYOyQkT jöA'[iXxG{O]Tf?n4vD=HHtP3!ѭ޻xG*M6]{"t<RvGCx<~ Bl\\BShJBBH&eEc )KpŐ;5UF;,!1a.hUrJʋp@#.LE'U'DAuQhTSUc{85 Jcs˷`]i4r:!&1@g_᫕ز^ž?-Ja{e@wg 7· 6&nj_8Hb"=!jxx+-c}$"D^-8Ҍ> IH* 5[7m`Ri$$P(Tf.CC%4@x``ېa !d pHsK=&xڐsR3!1i`Mk8~%"ٵ pDvI2-_PCBp74]²}1eUK{7/J8ОڏvsҰJ(s9x<7& \#!+4a0 D"ҴgC%5wIbBtz=z-f,VdAPR_m`2dK3Z[)LbZ֍L׆xS$B{D 5OuinhhRqIXb[P(!SrwWj1rzeEP!+nU͔)RS"/!=cb`uHCeP)W:QTBM ᛢTF4qhTQ N=ڬli-3gD 8 U=n. .\8^5 "&tE.\5=jtEE,QCVv\ykUGSk+.\S.wj๗̧ޫTfm4v j&$({SKB̈́3WIIMZhoףCN-m>eEQQjvfBU`XY@ DRDBbu QT~{տfv B2 LH 1 [Z~!N KI < 4Xxrtto IDATr6V0nCBE*,j'B΅K(/*By*****`cz멐_jl,<>jn&[zAgD23:0l&c~U')Wl _USU("ņ7]}W%ƫ0 IXy2H#'.0BDSj&$Sy\NVFuՆnuky咕h&1aefYT9B>OHEFJuGCPՀD$ M{])W ]T~6;ofYTf?n4vDGHt:BK59 5(6“l1:0kd_`+:(]ZqwWLyL(ᇾtj NHx<>>WiUP)__O; !T|`ڿ1 Q >Z٩صuP§r:ig㰋geNIԚ\tFUf_9{;bR2E,ƱQBBgԿQp9̴#E!6x/!=!1hhhՊI||ue5 B$$3>~[ ~Nk1YMv_Zï~w5Dx| Sqn7l6~L dke,Ϡc#7.g8ҨTQر1hkusD 5OSK}NV Z!"T_ 0\rɜcP woƿ+K2+KDT"!9`h{/iV*6;P_j&(f.jbUE@ DR 5D6׿QPEq@53 dXVPDAw|**2a0paa!1#Z@ !Lr40w(Lz-f^ns(/| 1bOZ&ÖRpp880 C '=.2@R C<6k0 o0L__(/*¦5P),vklSefԽqO]z& JQKDXRE,\:*+eav\'ɳ}] ng/% QN6aw7bG>ӵQ#DX؛Zu![d¡18@ s^b#x`& X( s 7;%4:6">s8쬬'GtxΝUo~W/_ANbc%QfFsyu}XK=GQfBxJN"EFF\1xKz\UC r>d"EP媩bP(B8Aڍf]V +vzj8Bk<,~V׹i!G!$C"z-_Pyzht>7~;*KKg=tDʋXG' U-VRΎ 0 Nfv#!!v \ &!Q(B`B''m0kҪ5O).^v{pA͇c]Y38(V{vc{f߇췍3{ ᯽rqqTHDP(B8櫜ܾ,Ų",UoBw zt00`Fff!r+XYZpJˢN4vB|,}xA\nK_ D[F!jDBHW@cS+-ӯu~Qw/|ُx[[FЯyߌ嫸~ƎijeNayACMEft:`p0 \.WL@:,'=W=bfpT T ʋmN߆f̳D"O]vGZjQ`Snsp@wey,ܺ^}O]z3BxḪDtr:Ѡ}Lqp""l{a?q +)W@FR B~>RSHI-oX9BH8XìW`^uk1ôB3 L܅,`>P~R2ñ4|^6]*|_Ej>?b#Q[7m#ɚa`袝|ӟUyW4YPotme]0vtg7ܵXL[naxxnjs:t,ɔ'g1 fpWFԙapYY/ƃΛ**ƎM[GSk딙AJJ 5O֬ӡYCTmף\S4Mx8 {) ޷8{7b2{عz~P3!W5Ɩf\mo*z<7\S4jW)sç|Ab3h.^Ys|֑wZnװ$T;𻃯"lZG_z1<0<< a$|nːO{L|9:ϟ}LEbR!]*LǛEEع  '[!Xe!}} 0֕ᾊiG{v#O=7cO+og 5?{R3L' VWe!I gː>d"oa1h3ܼņ?9ޠONP\L~-k{r(zpЂ3N(L!!f6YZVP`QNhpZ$IH Ѱ$0Ifvl&7Pda q0~3nW[OE^s_x!뉨O,ayAo_rʿ|cG'lvfJz<K5Hx*^1/*ӟ#:3 X= !(sK2Vl6V8NjU'M[{3J_w/>8v2SO\|R3>b\O E`k;6nbS)ع `s0]SCO6ÁZ-j(\Ʀ% 2eNhҵlT B11BU;r{E0@xzr;Npr۵?ky4 ^ې]3׫'Umr6 CCu_^-71$IgcQ7[<-<6B̀ 96``1}Af2jfe= ($ねX)Nɖf4 pMt//Ą6Gͭ|b2{عz~P3!RS'R*C* yi!b.L݃Šr 1q!0Bt:X`1WBlA\! lv\ xZ~h3{ͰW ]Sg/=N, ʚ"w%yAMKg?iP}j&OG{ |EP\R\}>Nv`h!$42tX,O;[[=کbơB' ¤ЍŸV u_&3M nx_}ID"Vo/_kտui?*s "h`4Sg>6 CCGb rCBnb-* :t:iG Dp d蘐_ߟlf8%ɦۊRR!GթRvnU8́HHV댮`33]6дwy/u.c3xi"h`3t:000tHU%NgD:FGx<%Y˗@6 @Z3[&~ 6ƒvR(X Q(x%k3 ,7jh@Sk+'6A^ m.ps~^У3o,3ytw?7{췍N!EfB8N 'b!,ǃ̳aσi$z=ׂc t:n9B ;y*T ,+(F'$@=&=B AH<,~VYDMQV:ޯi !D (:r4Xn({\XζCO|qDʋhggZ.ۃq&O _:n7-߸U K4(,)83}X Z\#fJJy|&BSvC+Yy3<$g!JN8k(?C*Cmv638҂gDpB>ӵ]-z,x{נf }(9 I"ž;MNd%!EfB8L.4߃<][7FmU晔汲A53.]nϺ^+cA& v&RZ3&``h z ZQaA<k ^mua!gN"UQAknuukƙ 7+|~Jss0IUj"e:0X(DyofHxW/}wᙋ}Ҽ+w@,:Ogwn&Aso~sP!| 9YPdSs:AVC)WUE 1O%IV]oj=N3FP,_QJ #. ?~̖\Fq6;7iXY>! ]8kU)A'@4c3j8 &O/pͱSXYs7Dx䩲4 |pv֍|*oB8B̈́pR@1߶{߇o+*EŹfȯXm 56&MA}ɻSX(Lb{ n\5s~Z}5rmz~U}xˊE"ܾjPk ;xꆯVb{(Mo^pAcG:.l7j΋}ՙs*V܁[u2u$l ^M]X=u_W^!5Ҳ/JIԏ*_'|U|x^_,Oیg(M>~{5_ﭿ;?C(CK?{Ek&Qb?!d. &>7u`2Mۮa`؊3`۩1ʏ0ǍE+Gr͓ID"+-ú2z:m,X[Wϵ⪡+fhYC2䞜IM&C8 IDATa_vJevYGp Mu\JwEu$ച\0> qqqm@̤U"œNDfO.Wpƫk7EGͭt),ǃ   )U $"$"QUnj=QD1nTm7as'[.*$.QCoy׿tɾ!;?~cr>rfku(]}I’"P3!āသ7^yy3zfA0cJ_,? )7 (o4hFFFŌlVj\8AS(<%2mszP3!Tf?`-߶["bϣ;bS54ʼn5@H Q_*cBO g'=&)W 5U) wRY(OM%OކɏݺLu!gnCC![d®=gv=?>ں,X7nNH!\{贡ڧh Hy/>31T鳠{86-CͶL xK3&UT\&S5> ]yQpMhjm+uak8z>/ ]| 6_҆~Hh `xxےVa=#f*2.ઙ\#E}>F>"Y LǧQRRUa/+)m _s ؟9{szl[/ςZ_||qժv{5|E ÁC'ssuG]Jyg=~_{X kC~߯P[Gry3l6kdI(< yS/:t: n2TZj>s,!KU8nfC?Iz &F>S\쮁$ |Ym4LRTfh|nP3!Rdz;ˊlEwN|`  ιOUY,cgpۆ7{*oCyu!Zt:zQ[u%pB 5BbtiX7023;m.| 7㍣-^%T֯-tWiNVۀ#rT}^(e _7gEi2l|/[~`g|;gj@sZ{nš:cͫ"Qr`tz Y;nslY+V@(~:8fp0m_!1q!o uIVi$!O ٬gF KYoJ8:2[e4vPSyj&#X˷했莘b0=weQn`SzP(}4i&X>r֮BBvchh0҂^߯մ'[gaF*Mcm KyR(1rb9Es.!S* <^cށt KZa} fjj=\^Tvn@Sk_U54Fhw?qүzEi2|}|~Uk|k6>`}\^ϐaa!s$4++eug<ܾjeHOWҕ6t XFaPχX"=[ǚ됞AܼKİ(c>\[d'CvsVB1qc54Љbv>n6̡;a0stw@ Hzu4y(b$+霜cJeFcg#5!EW :x;ˊlEtR8yq HǠҬ˳uBK(xe)W޼z`2/S#vq)j҄!Tj\ dVpħ15LɁШwPCkUtslSϹ.+b}*$"55z~bLbB-5MFӱ ngЅ={E UP[%fnϻB7@a >7uL`X $L& Q^Tx1;GSk+WB**pT9 ␋Ҽt ~vv?T[6e y'N"u>?fM'I7Nr5>rBO&KD"( \#u2&džQ7/]q7Y\' ...;9\RG qPCD:2h $rJ!TfWvKBytGLBܹ0I 03L:P;qF  )RSSp2!ᓒ"E\UjdD̳OQ2ۍANlӯj+-d{h?`m})ƫuEYYZ[[g䓘 HL\8_" Q8fW$tZӥXU:>E>3{ m.V_ܱS͸j³{^}f˔pkzn@cK Z[OLT*&UˋB ^>u:Z̜oXr\U?=s,J͹.6,/Dzy>Wk9 5QP3 ۱(\FZ B 1fcgl*TǍ{z!>7u@>e+&γIԹY\c1C.쥦 $r!Tf[wSwꉒ38d"93 B {?yCN<,M ic!2 ʐ"0 Y!bgm5֕b}}__ɄwQ`gH$tA8Zpp߻\#pN_@@@@ AvBͣ.'F]Nkls/בglzٹfLM[>3ڠm>36Bvyyzo-kstzDhbFق>Y""r8zf7r`t4@cFc4Ϩq `4;_/K2MK'n̾CDrlm}ϙiŇ^c+'IDBX w:%׀QJev {S}%L`7D3 I3Ռ +<n7M%pK QUWЮG{v={LQrU.y0P(\T{sUV&;&V)xOWZi+oD0*"v(j*B36ު: * tDC. 7oL9=t0l}fykl z?m>:U '[|.9mUdK 6UT #V_bqΛ6ܵ;O>_[$O?}(]}5.33 aكZȈTt Ej5e҉/an;cl KByQQضiB f0}%L&ٳxfףP)"wv΍j99J@q*Y[5$&.\I MbB{/#Dό|_Pٺ޻6,cM2lA֍xSx詠.=򟑧ʢov]jj"W8)Vk>Bkceߡ9녫J^79kxpÚO߄8IB"yq.B :69L\iyBvXXYVC"=d3s(1 ;!rMBT8gcY[w6y2C[\e4W*N9 2{/bmeEOU EHG|Unx0wvڦj{\r_q Pڍצ<&+ &33UZ%/u,4`xۧ~ Z00`uf Og+uNBVoۡQ07OUUӂffXB3DHKʕ+AWW/ѾDHx\޿V;O} =j{\@pDYVPӪ>w~/*z=`25uO>)7?f\}U 5"|d%cj'T9 WjN9LBBXc烺_זfh'YTfuG>q]xNݳ{GXifTq\1٦k 1Q!D }Ly`^V]U5V_}}M4'%FucLII&(rݰZ 3;}nFB79hlu , b~{Xm d^;Z->/[DD*ƎN]^mݏ0%?B\FuNYm ܼŬ'5% KFݣay-z.Lxnp_<h޸ xKJev*] #2ZmeEX]"fi ~.9f83OF b\\c#B!DjEP~=GPTYӯ`m|6cJsRm#FKNL%%%!{ajtBgc;:>?O.ůrv|)I"³O=ڇ&{v2j¹k1u|Y^ Ud M$φx?՞ñ fp33 ^Z]|5{O ]lw:tBVY[=AyHտƖ^`2'^FmNvfջp̙{tt0z) rOS*뽵}k!N5D崳X(J1]L զeRk8[Zu>/R(j`dHeP)>uz}D:'^w93>n zҞ/_ƗW :|iwdb ݽԐaZRS@w@2)4juHnc ŢsK V{l\3ͣm>>KX_[.{bce=U:>e>/{|fK97 seOŨkB5^H;}!F{JЄ.#S#9 ._Ю\5 .!,~x<W=(_[Rhv|UT`*ی4o{ =ti.]s_ cH$!$}f|Ŀ>=OqV{k}~-hqUNJX<)Q,R(8.6U9e=5l0(Aׯն-͛]v?{SǗ_lio6V*}^*1uQCI"B`p> ׀Ɩlnkj&˸vlfqJl̤'i#~kl{Mз?kpgY,oQ@E{"!a8ף& $Jm 1_] d9$f\18]CN<,S@J\B }t$Z> pGy2 jtpr v5Ҟ@6j$am fjm#]&Ç|TNjjXפk*A[b=ggo !yMLHxL\0O5>婆  IDAT 6|뽵ӰxRdM"+\ (,6Z~2 Op4% 61fN(^x.Z62't ?sSs)Gn`BrTA*$t.\W>cXr`tz4ay6BlTz'x)"RSYt7Tf5;^IHhQS*S[W$b!AgrKUlv;a]G*+p\QپތCoJ;!!t:p\ ΞkAJ[x\5UpC==&0gb Sx`;ueXOɄ'_|Y jh`e=Z9V,K կޅ}_s8jxBBXcӔ;:0sX.my\x)>x)LRlظ WrUSj ))'lp01Mi3N00h:>yعpJOr v|AoɖfYΉ*ͱ9m۪gΰ;mG$zD˴Vog}D,ijO=@\rD=o7=W\9{v`m J4y Ͻgc;P1l[{\Sg/O$Z`&TiZG\:3vvv;v37{v^fmh;S;tD%X5(D`$$7\ 䲲׫"$OzJ.D{6A\Fn`2vťڱq9϶sp|5=Ã9o>h}BPg@(Ό4Bdx08N^tHt Sh#:-VTVbWeNS*hq!J fsv BB̈́2 l\G[n~hǠi_x0xn[,Z%%*_){zhimBWWD!|HC ;pPqiZ㱸T:V* ͆;T9Hg7XrӦcR)~go^"$۝_ sت% rZB4MN`"!H"*drVwmޜYOOj9s Oμ\FfBDpLE㇋NMY U7 I`(UKj`zmU3+ BأP3!AVgnW,oLރ]a1plmP(Wzjo7Wru]vA")U!!鱅BfKGXj0`#%L,3P`wyU(~ *͑eHJNbI&>OS$OPɛ~ߎA+0^yyy@wuЄDu&tELsGQEteb6&-ob_%$}\Gf(7ǯ*#p6*֛Kl|>-ar111C,|Mw$X_cbdnٮ5_Y 2{0L-gюN֝#!Ei$ȼpvTHDA]A{j&$$[: eQ}5Cc0<#<@ fY4!žaAmc#6Y Han.^J~;ko˅]{HM /_qe367S3Ȏ@3F;[irLOŬY9|џq68!f }}J>W\-Ow:.jcHYaHT(hG # @mk\|<7_m [(,8:FB^ xa:8.n*bbB|SbԸqD@Y3 Pu^I$X1Fbz|L>x>ؕ4.UVbJNz (-. :ln - 5!r[DR9F> @XB>^ \.:$BX|Za{}͆z=6YV‹OlÇPU_ϫȹW5%%2 4DLrzNԩ:w'G< xA\zŋ)LH01>\ZT JYXd!|p8R D,q }eyzƮ;l( g zC#N:_|8ez*drv~]! OF}UHXݳdU};)@1>W0-.ĂHgmUR7aL,Жl(n>5%wp`J_9=URB%p]D4zCvvFlشf- rtCxWk<n^f0.MTTYdr͜)lMOhh8{ߥ&$L*jID-/+ѪZ}'EyY)D$$Dd VPGYʴd\w wԯ%̚}̚7'z6 H30M ˥ "8ȫHCS*tX|#fB}O;]IO<`4aۛ$̬Ө̅iƨڨՙ[涭C8Bث)XHzr,+}^ z LhEaBLu,ʴi)λxױd1 ҪTx qa 17LND4^ݻD7!$p+ BV--G)L"\*RqehU*$ciU*.)@sLgjnjLuv, T9`z,1ygiyx"jviArL;cO%XkWg<\DDf~UF#tј`jzL*Ō1Z0`g.ysF-I9Uz>X =;t 洞,#VS rr#BD5w>^V)aۙSP?bbb+L-ayʪZ8#8uʖaAlQ͘% Eju7?QW}SNX.Tvr$ޞ*KTY"~t\AO,n^ zC:BHPMfVmimFkk3::Ձ^uRi"))I h4:(LfeڦOw6<׾W>o܌g~:V?RFan.v^ν<2*52T MB 4YN72"Piq!fsjM"?u~1c@Z՗RՒLDp c=>m8Xqof6N_qVh0.\.Y$vʿ2.!0mL_KʤC!~e2Kp^/iW:eJs+T<~Oo{e fc"&HUՙZwVg~J"QOi'?Yhgb}- %Q}Z͗ECP"0ZZn.]@O p]rKeJJJFbs<-_HOπdsJ$[օ2X ;؀%%(ۇپ:lZz.\\f.Ҽr!,m6R҂־oR¥тBR fίQ^3XՕ[EX_@;%aF==2睧mn+R}z! }Tip80_8I?[g~lJ41HDj5][vG8M7~,<>3i{<FQH8\N&uE游w| ЇefR%E(-.4*Z}`+  5“ZVigJ\<䊯1~Gx݁iThyv&,fw A$-A::F/\N&ag%] $8zTLKG~nhU*aޯp`v@+xUtL+J">>OԥW ' AzENMH;eoLRdF*![Ps0*6 z;DD|5=5ߟ7g(zH8:P.L&zz5 KWD'Om;O>zomہsɞ$LFtlDxwv6 sQWlVׄ ,G#9:--ό5uxB^;@Oՙfs[m9BGfBۊ6$ zܰ\OWyjzq ! ̥N!0z 6oZZ ,νh~cs3buIIȥR.)AqA>:dٸ:%ڠ C}/\AC]%$pVrmچc)Ӓ9>ǀb/Z[z[v0]N˻Pz'$Z|>&*Rt2 5lwd:Gy,ZP($$(LHGGa VkW9A.E7#!jcƯv%OGgWu 2 f QfԢGjj/_8t XH שǓp5k#oLvǶ wN)B=7zQԀ~g`}mݼBcХ-B%ANNeS@aK~3O%ؼqzįs?\~WOϤLqt{?z'*ly45{^ڰ 9lf-/EG;_5MXOwo TSe3@q:!RU#h\&^1Sº Y 7FޟqqSiz/B8@WWk>D|Z̅FjڄrNiFύ=ϼ:V,2aKJPBe6QU_|.)UD.bk+뮻HBgwl$H\*B;<#[8\'#Gw p8z P׻ov8º/Iw_O7v;g!eZh?4~0_e5ϩ_eI0<Ј\fY:d-N7МyP+`>d cK5o0]øt~;nUً_c>Ն㉈'.n*U&rP_Eke0/' y,)& r)l\Py;?,T{~5[oډ*ģex[MWjS Z/]~p\ﲠte8̏&K˻ȹWFFtl$>IfJūөSJ3d!lmb`6pI!s̭fsVڻ  n{X툉 _фʪZ|n@m(Bd8ƫhr9!⮛&6FCP9)Q1pLtvgW 6@f<ױ`GJ ^yEع]T3Qg4BP`a!現؝N_s2L \N;&\zry_;Q9(F荄?p gM1R%cSc9s?ӸK`xX":z8zP ZdR)Ӈed2hgBF>& 4Oj'5Wo=m­+hj0t#74ʏMCͬ*c.K؝aѾV_ >c1#_4|N0}? 9eLtPy9oٸyU ߬VgVm-G 5Zh:/5Nl{[1ijƞxL^F45]W%$ڍ[͗~Q!u )!RBv]lDՏ{Q~f2ob|aub,3r\f.,6l8|@Gan.:ݤRXVi@3w^2Eg琯σd䶏CIBMcss@3OxG r/^V.t\88eZ2qcK38p5spٸޜ*3n+5W5ߌ*}5 HIIzz&)Ӑ2].| wvl7lcϟ1bw'ۄ_'Od-N7z%Ƿ6}I[)iJ">^ﭖ悐`s (Ջ漅xT&wځTV׍n$5h0LF"T?&MPoK(L$['oه)qajiǶ]uJv }Jtx"L!2̛֬VKlv\8|GjN`uI  W,t w8ޯ9,\Gwysp9Q.of¬Ĺ53ffp{GW+o9 2ל K5jϟ ~s%ɚ;<4 &>IJ5iahsqqSi$A5tƘ\&A6_Q&#=5y(,"O\^Vsfs" :ln;$!ێ3Q.j276N`Sb B^}}Lgh<J~kEZx^lصw/?EXj0@.buI qTZ::nYfNH111s[E.Mϻ!BDjËp k8]4ak}_ͺ% p)T[ϛo_ wuWoy1O?y缂Z^2j&lxzT76xr+!HylpLS3`ssfOS9/szj2ҕp..!(LbG۝@UVbjEzoEj!n] I$شfmHƋOlÇ-6}8T07KJHƦ5k({Ge 6HUɝ\ꄡf;u!$*Zts.1Wp;ϡpsʴdaR9pӆ80_y&lxpϦӍf/!v-͚,-x<K\.6&&+KB]&44phB:ՀYgED6TVk 2 Bĩ4Go'J p\ U SbcퟄBô+V@,r֬VÇBU}=s QK6:;~[Pfrcv =7ztwҸwۺoylg[;u!&M'bwh@5~ɤؼ{ūGV|(w)Ӓql̚ C/\j[գ'1 Yf:6`| >|zX#0*T,*5+ hU*Q5w\wx;w[ PBtLa?;FMaa.WR,m C5k|yY)V %LYά0Z[ё=!wVgn07ZSѤu,bt]}kkÅơ9;'Zv\RӦ)ڀή9[.4RBtV{uX_9 tع]tt0[h܌=C(E>!TzP"$¤+ 5$t8TjNOM#zz&_6ǞV)1VLp8R|oclmg%ȡi"Z454"'{Vez*drv~c)Lȝ4T9qqSoLS345cJ/+ y9ܲfl?Lh0Unne$Jv'ȥx|%^yBD }329:'6$[yVI&:-V4M0rnɨ<qqSv=I$ǙШE̝qW]Zz ,Gh8[BE__/d 6 l YJ׾;~>E3Jiɐd =Yc~Kگ=~|ɤRB^) trKJP\}Ǐ>d@3@UI`znVjGB@p 57vbT9j{͌]3 3#:V._>gdR)V.^Dܖ2=L*Dμ\/(džpOkLWWv斀^+q]WD%$ڹ̒T(v5//5eJ,bc;X.ԁץ`R鳐B#՜;-VxC_Oď_}[`;rrGfBnVg& i™/O֝4<5'u##ю4\&S+ǍjQ"/4Pg&> /, -MIK萔DvGn <l> $$N'NvS+ .) r*iZ.) y9J3}2MC9q׋nd9ZZ$ھ:YwSu7 !_~ux٧q%1Ο1هWiEzO1!7s:L Iu?elj󇒩硦v8嫬C6CLF2 flw#M-Xqig1Vu^P00{|Zsل|pj+FÈѪZ e--ª%ELK!IxHz< 5k5:KRl=IPt WVn5_ŘHJJFz ii* aF|>lnmnZ606\UWkNBLwS'"0Y~9ZU+ꛏ\=TK;!il7 k8eY|%H& _Y3EΎ~;6cʀ- yf9r5ÔTޡrBcuP/sӉ3GGzm {uo<}bpb6QE FC~Z@(߀lٸyUȣ/Q1<Ou;Yi'` M@ْ"q:`Z3߃EgRi"(4zL )!jVeD҇ii3!A__/j!# aH,5Pklđ&Á4>C7u!`6*7 Wsk&QV XZvgٴsBGffcl\gPS0_mLK0<(̄6v~A KUx,T~ŗ88Sy;b1;L"AaxB,4GYͭ_iTYՀwTF'0rf$&:-ѼPŊNu>Rte2ʖ}+ՙfs[ P3!mJKr(-.ܗ\* M&jL WB>h2j6pii*H%HOπ$^d$&*ƟQgB.`֞RGJ|(bQ~ל@mc7Sf~:EAй !‘@R.ͯWVՊRžJN_eX@ iX",~xw[q%|z,>p A-POf|gRTF||Mwq〞+hea<K5+pgy/ [^!/0ڌؙN?RsL-8pu<ԌuYHҕɷl/[RK;L-~_K Rv:Ofs[푄PQju7Sy ټ';8b` |jbc5$)wkkFIBp˜N S%\Io"◑0B !b-dG Z ֬סuFcDoxNs:2ƁN:ZZ$bM-n>Tl^B25n-⚍f#*\ﶢ6^mjagT d2hg@==ffC&i͑ft).LO彜>^7,!XEFn3iP/Ps#J͑\ygAvul\76m\UKm;s'{URY`&owd9ԝ4U0myr6K]`+ʹwBfBjufDZCʖÉE$$ga^NYnֱhgPzzWE K iGgWNz_BCX֙Nnk>gx'C!8@!#՛N'jp*̈́y=7: YP3vX!Qq˖N5C,68Zym<'sNJWWk>DxǮL",rt4 0^nFmc#,С*̈́`cb&$HҕɘÙ&niGHS*FEih4ycB!f-u^UMߎ>9tU>~n`ѱa`RPBlf#*JQYU˩J3@Xm\7z'UT޼Q$]3W=U F aR"vj&VgjA\fi3gPy$f+d&#/' HW&t9t)Xn"g DV|} ?jkpcAK@E KHT:U["BHDa{fubȥ.07X|٬m4lWhtr IDAT˩J3ai 7Bli]`ﮟFͪ`Xg%/+ʾKi -!2)| ~l<~GM6PK砄 4/SarkaTsjcu?q>XPSwB$(ҕ([ZDŽEju7?і#bFfB̮ZZUK`4ɄK-B4NB\ $Ȥ#JNzj2P3@N1$)ha zzmuz y9`IU$c0N-hlnFKG;ACU K BBoAl)cw«mt},Mr5| ",נLOSߏ-zk%D 7x<2WN\U#͡fSKP^Ow_iR(LDBDb+O0B vZfEC ׬bE/#r5A.}pj |RȫP3LRI B褥AA"EàL"kϴ**N'ͣaKVxU"*̈́fwפR"JʛgQQX]pU !DiEuD 5^cCoxktZޡdMrӽ2Bx^&^г2Ps$Tiɺs~?V.`Ւ"ޯ՚M-j&Au.!,Fj6mFĊBDS/]teGϣ? AO+d&Ox :IbP@6.5B/$ZH$/$%*8 tGxD^|>"U!r(R~2P3Ui&;&fQ"Ņ8ZUG 䨪P|H5*8=gn.j4B|i 5K5'ˠɚs4/|k_3'/ɲ{<($$T\.'v ssEoFUȩ|F<---.Ǘ`6P&&AC f:lnk-GĈ.Drs'  </|>|aw <6]Kk3z{m鱢9$a4Ci]]jtsBq:p:ӪTX]R">q8\lWJ3!/+\fs4z+jg||e1ȹWǤ!T(`р+BȐVSK@]'@s P2.b)iJr2^ Bop& )S(2ΤB=m=U FW/j"i1#<"JjufJ'5eX==IAƆG&ir@kk3zzm@WW\5pSV# !eu3msӚk6+0i+U#z !*6,āNpz^4+jG׃UKFc, bw:E75Sy=Hz|AFѬzxxS׋nldj뜝̪=FŴD3O LF"T?&}|Zsm9"c<"R[14 ;MB37GitDn C,ÜD"V rgWzz@gW\.'Z͗n7>^5eHOS1 5K/$*tڢ*͑')YA@e;. +ov'V--:W NByYiD[/b,-h ]_4j֫p8ÿoIId3_mì٢[o{C͚Ȯhmnoa9rqWC3% 60X)]߱սkq!3?_J$Jqu0  5Q3ia/[;z#$JOS!=MfzurN8 ))sS'B"B f) ~D}zfEU}=]L,iZ2u!"D[\/ܝL-TRN8:ϕ$زq( |1NS $8 ^"hjh*rzNeP2[Mw^ HԜNv 5Ti"R 3JͬgTx|%~BX":lnFĄBD胞D$S RY(zzB flUBτɬV{֬TTB[$bY(/[P:n2g(KvlN>U2׏J !DwT5+#˰afLtvnGR+Psz%Ps:`NP3 ̦"[?m=X]K"*juf1"[q9%TB!zL*E? 'Ui&.e(-*]װ`DN'[kK PZ\() ,ׂھq^έ7ׯ,AtY4Y3vhg&t9*/]525GRH%LH(mٸN( 5.ÏU%7#Щ!B& Y{2֬}RwR3u!$jm*_ F|pk6ʪڈX k6P9#Bm\Ys~=%OritZIfJTE̦@A$WjNWMYXqMOM73 UKtB VbD,(LDAL;m4 nN4M;XN&& 5,HxwߝFױZ nfܫ"N{xeUi&BG/!" ]hyg$VYU;frcu": ol݄v]qB"OSC#h9qO G?'8Q1~sZhfmٔ驼2:6"|4@ 5ViJ!\$ȥX_V*}\,F V Z!>@w8( \Zaw8{-F@BxPlNJD!};j Ƌ܆E__/d 6]#~5673L=)!޺ͭڲ;\8 t `6Ld94M8ZU(̆J !DYyz[_s MTݙo5++4U"/'YM؈`Na^t} ̺J3\* ԝæ_bEeuߏ7̦72 B ihGfL-Iws#hE M;}|+= lf17>!QJ4 by3jLTo >Y{ E7D?ά- 4pm)=\A).n*bb 9UmʔXNo3SL'W=|$ؼwI]#6[;ځ IB6y9Yf1Di M&6 gExn:zBX))Өxp9?''/=>Y'Om;s?)aSA_F}>|>CDEfB!, IDҕɐ$~wYl8pz7ε L^¢ՙfs[m5(L@PrV9Yw;*,{' Ņ?] jfB)PN]X^I08NfSV+*rvVVНKvuu2?OɹnѮ{||<'1HKΊ8 m.|R8>6 Fxy"B3 N *nZ:T@x^tu}/:r RL뿩|%Yض띠,$زqtܖDKG٬Xާzd;2}_:_~r陜=+`T׻\; 6^gB6&b^0P)4 'oA[&GG :'<٬z?cՆP,JCNv؅#P0P[w⍭8_`z9kjD|꡴|%j΅d bpbJ%~*LX(L‚d!ZP0yYl45Gzau?X()KPzTסc7  ss`:321LMez/\SQc}ֺp8pۊ \̇La݁?|ocaט03<ܦ*W:J*PsR!N.JBb#JdrAv k(/[UK 9`ф9.Ih1 r)֗bo$ݬVgnj$ZQD-:\!-S+~LB4di3x=H[ߘ8 "xi"L?{w} F$[Ʊ,#9`W^ q! Ӳ]iK{^]^ɖtݻY.HnlRLb$X61#%st>@{s/"$5f6cYXOxJXLiVw%)(ʭ<ޱ/?FבakjH zX Cwv.Z8ىÝWT`ss3\0y6-3>^9p ?>[{xTТ~`2s~  㟾^}(X$m׻ڋGKpThi!ms#ZH$d2)yzUODRRMF=צ闰pgc=9WiɨGۃQ/Z=*-xWB",tg;#65S^٪Ca)w6֣6 Qx{\(%M^/7 5"??շ# "eX(/ {μhnnb.19qޔ5,hqZpWZEw6cOLgΰau]湸ā}`oyOB<5gcq?ÿh,],>E#:Ww~ kֹ{>Az;ыS=Sfv%yns#UZ=UW;w2Ԭjܾ .jݽ娮@[k_$+~!J_Ik^|æfW{1=+E]S|]CIK8핒Ǹ|9w" +-+a:`aƵXaUNۺ:حaQEn@D$Xa9eLk&B 4P$"4xV;riDDכin>_ᑯ!չOkkiczwfC39ǟGRH}N/DZ+GX8Πg@=vKWX' 35b1̔Bq\_Mʜ8o|FCmM|l[-hvR6w?&5S^٪Z|^Iۼk[l.}_W;IκOf+gծn'%߈rTWHHL![ q\82$L'u BBoխrfN)L%"""91hkmB[kF}~.^8֕;ܸw5U^"p{cy08p4o?;pφF}w;X<%(h0G;_KipM{`0eMյ5yݖ("s :,jR'ݗ[-xcwN>ZLuS >Vf;4t15lj|ӡ]WTJ<ޱKdhJ#6N{%LJeCQ2ySSٻP$y(HL_ԷUWLCL&11:;XXL4?Ҝ.?S'{LSkԧ7ց%> Rr[7`q{D}b5XrDCS̙Pf2U ##xޙfJUo¸?{LFV;kG֍ͥ+=_I#ʤ/s#JG<~Y1Ɔfr Ga3}ll޺nn/`RQ=?6f?4t"65Sް٪~@yNi91:qQZ{%E*PN0w<ҥneu%GL#L o4ÝG\DfJrKN~؏?nf= Xk <ә[RMDJUn| LOx#\0|˭啼xGFX E"rLxs|-66,Fjg ?;_K {e F>w*yvύHviq\ljԜfV1?'@T :iPVDhkmӇ_b, %65S>QT~[K.J5sy*b!ux9V IDAT(*I6|Ynwu|;ŢB6aYXOi6KXTZ(a9ﺆk`txG?^J:psUt=jj,6ɖɨNWҘܾ5!ʶ//6Rؔ\LF|?⯞v}$L;kH$PXȶ?"t:U&5"!&/8ٷjïb/ Om^W?ľZi{J+i^5t<{`UP5t]R΋fkqB%:{.y^2:W{fțv92z.YOEz FHtVku3 +;;?pOc#\rWrcCPSQ {Ew5Ϟsxjo$|5 bKK,(2zeլWZ}[xͷrVCc/`]MYS|60 ’ƙbSs>+*ZH$ v99]DJ3p,N}6WϿuO9:vmk J>?(?Cw6K^m=K:!;)V ߶&[-ΞCJ3sW1tv_<ɷfl++q3s>p0qe;{.}=Cxa\jx,i4U>hTS}_ȱM&о w׻ʼn>O +f47E[kSLA45fzlh\))+fok3S2Q]Ai$Sj3DDnRϟ`RTXO5;'LO$O˘w|t:lw# {E4ܰLi{/?:<~<_chNu;B䡣ǻ޷6`swD|dQ о@_>"˕^~ԯ%Q9}o8)d|KkT3'6Z-b<(B!1QM.65 Hjf&|ոw500<:GO(/YHʭo~I V5R2$E٪njV=zRs١C22Yjnq]eԜ%f۷'UfqTGBW-DZZwll/}9r8?OvS?7⡏ac1rYjgG8B_O/=^j\s#ZH4*QY)@v $ q"QLF=VY02zA {w9IlW6=N=hKJc$S, @DY8Y.,D]-٥F޸>olgSblbF#OӱC@ZQ7g?&QdZ3˴ #97Ua65+"9X,kʀ_ؔcY)Ҕl,/ ڙNgHDJP `/MͤTJi޶&2f:xtɈ")dchaa,_f'ZԄ:Wgp&EH&6a*4/[ffJJ\Un[M7>\mu!|\H)"V @GN!_%+@EsK&BVԳWTD~l L`HE6(-tR^MͤDJ]UX,/"=uz%}|W5{Y R 65lUhkm⎣Es+%HLDD_TYtLhf>-:;,Uwv7%Li3啙K4n>ZDDD4[:Mj1n|HJHZFI%XP oUUn(zsך[k@UiͶ)7p"/=;ѫI&h4,)V4*&MޥyGF\ <H: lj&Ű٪Caq)0e*z "Rpa!nXц;fŚzѺaCFRܔ*ׄ|rUFRstNȵnڷDD 1pZ =6dl[677Rn:9zآ}0Ӡ<5f0z'4ZKK{[::ҚI"TO//N`W5_eidD]C=?F8$3 V2ʔd2)$^Q ]Rt GiIDDW|f?4tKAJfRm \Hj/--e:GDٕH$wqXZ,> M{]LNNϠEH_>",Yfs|φ^""Z,TH_] ANJ"ۛq0MjJk&ipӋS=nŠg@roT;kPN;5:;xƯ܈2BDC34ԻrWoN^ "%2)VeR?zyɈ#)qϏ`\+ͧzOEb ƅk˖6<(XÝ+.^Ƣ*fp"9XHE9!HijnИimܐrS/wdvM,Hj^IjLàg}=nŧ0W;Xvkm`k75' EԊFSSbn,&& ^aC+jG"-fjeZ3)I):mܪe[>dON,г oeB4tn?KArƦfRǔy3IIN GTƷSpg\4XT ҥn[_E.mvpX1ƅ\q(3j4 F+}MDs9wҼc ԩrFhHg7B: uYۮ&W=ā+*}%զfʹ֜nIzS1aӋw)`4YXYɘkwH#L"Lf~Q&D"a!yE^chZqZ#>J&0sRzTe Y$g6[U+-JV3nfJ3%"(IEEEǸ8Ϡ癈 ~ث,Nuk8Li&%D"D"ƳWT`ƍ,UhP\EUl#"\ ҋi^a5_wdԣvkSAvM9|j镈HjNXr]7ǩOoFU& o oѥ\\A ֛$753&31ɥަ^ch4هͧσ/(i5Y 22jPX(Isk[[^$94i<~-HDd46_ ҥ F_F0xIxV^%`ߡC+.^F’u@RnUHs~o7Jgl++az`@٫qM⥛̳c׿)MYI̥+v^[5 .؝50ۛ2c EdTB!"Y=v.65S٪cZ3Ilv딲w6665z'}􅚂~QJ$x)4(*qˇ#e+VTy&H~|#'QrhTS)9(Xf,SŜu:;|/oUu0] $7{m[qiIͲjy)6Ip}S// 3$B!7V9ps3 {': l,V+!""k릻qWZy E>A6K6qlL*dc0x s&"ʌ $aZΞo%+70iLO7Inj(JiPH8M.654A,JAZ#A5+dJJ^l [7%`rErSs,/h:&% H?;I$&&.-[Xk0KXT 9Djg2r [I΂uf`(,2PpH>USY>^stQH}},-mRhz&1ADw,ZcFp t:U'5w{ Em|ee4ƴfʊlUc)HLr7 ۵M):Dc%1j)]Nj$}>z~jw8Ʉ[< IDATZRhVSs 0ɢ"H&~Ƭ64(žg `02%]t,!"i]k=;YF0I3թWs;2ꆋ\K8MVllK7¸oɔFT;|6&żF\H$xnD_(cHDRV(*Z.1ʦfʦ,% 9PbJs[k7dF,'& \RHj?bQ! 3f3o^nxG4Fi4/cQPPKZDtk$]>j E_BHˑ@w)pI7ڴnZ3>ϦfuSLscs6u &#wF2P($dlX_@z!/>ǤQwA?ߤ) 1fjeZ3\t@A)͏~!U씫l(JcqHk<.LL&{NH6ɴ)D7PXX"QF[- N4+=n:5i4{Gm$YAb09ewn}=65LJ/3dKT0EKI]n!!ԥPk%+L5Y5JuuEܰp+%'5{ËZ2OJ&H&K&NKqgQ޻t)G#QD"QdmrrBh fU'}N! tɴEtQ$ ""-"(\: "NX*(Lj^}s4`߸.G.?c>Ξ`X`eŤ52.Vlh-mkU;J#BݹPh{NDBuF Fz?Wh40ϫ\)Xɔ Lk&Y5A6v׶61 QAPXZ\<~9c_E$ ??{5H9&/Xx2K3t~FHuK=\̜%riqNs9Dž,Q)3KOr/fa5S JΔ[*Z$y ~k|>p*޾6<2?G;`d5S =祿^z娐dӣh;pw=kgLrSs<~ 5|XYF JiW{R[zRN'pFd2%ei T.G&)2P.rJJ畲w6+fYRcp{оǩ88'I"z沨/Dav`p A)4b# hj7>D;v:F={ᨘBFT#or^Q#u;vfhwwʏL.UZbAi %@S‘~_aqn?)75K}i*pMhlnmb3o%ix2ύH>$~CKM]BƑ"bVKQnE&cZgyjϺ1l2nV>4tn?KA¦fʵ%mzGWԜH$XH""Wx7w MNNIr>c.ޑ;~\x /.Qv5קhwql߸QHJ>ve,jU;`)Q"r-RUyVѱ65=`t̏}Vֻ(ZWi}ZEܤ)eyl)侙soQrFi)m-fY^,y ͳ$(˓g)M4cHAqE :vmg KzU """"O4:?oߕmy3%ífҖI9.lB6 0Y4$[_C]'zˁ$}u+D j5[RHj.*ZFÃr=n~U=ͯ;Ya5q-nnarUL%U)=n98~,B6CYʹfw8rC)j4оMQŵ,_#,59%HLelp'j$3IAd):}}MbS*w?Έ |E%"""Ea3i~(3[P*nGw ߎǻ& n߸;P1_/r ǚIkNg^z(ẅhLxYH\My+RoSX_ y=WWۃ/~'lhy_z5|;5jd0ߌB)ߤ)Rk U.,TXaUĽ-w8rfjR)t =+#eҏéDƶODߏ'<@RHT57s+H(8SʁY9cǏLІp9Y*%:nB>ysgIk7~Ý%EEK$qꤛj]xˤqIeVeS U9_!""\xQxwQ rsfV VǢIDDDo˲jl[e~W!\‘Ȃiͥ%Қ{L[!ɹAILlJhTgDFUױWL>3YwFwoη9(:9OzJh֚9bgՂE3M͔JKi`|Q~Za~⛩%H~/9A>:YBS}= ;ǻ%,*"h47DDdc˦uLӆglSHknlk#Nn^\S c,Xo.<W܊DBiw~14M^Pxl$^W#_C¸;/!AF4HpHLedxR4IuC+d7 :<ޱ[7/ڄpTd_?F}>(9Y7Aq#8~%95>1ljlPʆ[J3Y .#Y=SKjX :RDDD / ]yn77s q#MK8Q6=`o\Q'd(Arws3~uÆN_v=FY|"COs嘈&,Hjܽ2}xnѰq]UԜ~JLC^ϔ[-xcwڍͿ:Qr #!8~VWϜKxi'Qzl߸7nwd c@~/;%]2x+a﷟L#A,+V(o*CdrlQPkueIV*j0ӿ Ep+dԣvfr%k+=} hMDR٫yC($I\(v;v¨g \~6ɴ ~U,JոEZ)J׃hgݧ(-)?¸F(5ߨz!$ QV$I!VefuŬj5zA QȄ\X7 Ă_b}w0MQM-0d?b&H(ULhWݪHi ܔI?v|nϏpby:799!sb oqm/\+`[YV#3>f <ܔJCxnDT_ZvJOjj K3*Gɹ? 曱0} SJXWݎr'&}T]NE`Z3I("QڷbH&bRjȏ/DDyNcbQg{Nz{wF,*oXsk-VL)9}y] |-q3)Ԧs$/&'M܉t<2f NJKoM$ղhX8lhTuCHo>KՒr?y_@HIEm׎L^QI_x IӚIMF"(H)3J.iVX͒OZG w-ŋb/Flw#\g:QF}Y3 WQܥ"FDsSi5/y-NrCINjXH\&yj*s#ʈd2)$j6:oW8:A_ip9Fwjޏ{.jwʏ7thkmx^MLa*ոIwm\wƒh<$HH%AJ̐޹iDy32usgsƺ88ƚlfn:앓HSwF7rݲlR!IDX$B$A$e=@OU*D4~sw~gu|Y5^ Af`F ht'5gYf[j@%>ك!)tܻڳX,(-}Ir67kbnЮko흟AOn?Η5GsQ=CGщ11y*ѲfKOqCAi%&K?d},^x+/&rY6)UvoӉ(Z!@R3MMU~pArjo?zay"Aj )cT 0rbyUӣ jjjd`#SaᎣaB3 k%A+]wu+|&8@pjl6++oot: O|s{с16!%;˞ԌJ+I[>GsccLvpfJ]rj4}@>KRӅ_g>dJ~1eIҲgf*v,vUj]Iͪj-^oеk7Ǡx JAn<,+DE--VTV"DLY{n>]ߞ>ͬ-@G5 \&?_K 雯"YTD)*(?hfW?}L^H}y<t9@Mi),kmcҎ$IXLlJ3-@X,810tB3}UNjt6m 4t_}r+~tRQrH78J\jW8H $Em ݊d*lNnYlAabӨE2ߣy70r+GR2Mh~ c.!a<-6 l;FU81vQHLqB3ѷ^}gwIq˜]_75mYSW(`RMK\>`!aӿHb A@qTw;Xl<]V*E[ö6{Gc6[JaR7Wm?}?$4?rH3NU<9q\GnW˝$IlvYq;> )S$@64<"mBŏzL},&V>GR&ADDYq,!uT2?b dS%DbuZ`77v+O\o19n"Tc/\EIڃ{(fXA(#,l5qI$wIv,Y$1~M^Rȅ*U|J׮y=Ct\UhFՙLFm$Irf-]x6XX,8!t.fs ݥX|s)܀n?+=tR-R3K՚Aː 8Y$5:PJa(\>Xli{6XΌ0kfc"J"-"t-fY3Gf_yndTJ~o'، VzkH/>'JX,99B WS(kʓ XJ&,~>I o׾*ڭ-ёaŬ tPI˩"-Cf !9Pycm&M?Tj&j`#,+Q,64]~?uwt 8z$@uuNJ捰&<ƓzZ[<~,EC__{癵{oFywY*b*5o<ʛSF6E$1yxީ (As޽+ jORKU(h9/k PQ[ 뺇LGmuq{|"^rܼkS80숢H"J6AAvcc4qY{55eH V{1l{J?:2LForJ, "p9Uޠ_7mV+믾B[6k;ٌulL"0n2|cu_6mVFN},GLQ{ؽn+}{oHJW"ϩ*U~m*|=r(4o[/I7YQS[)#S,v+Ac5%EsY{Fj3[=n^ (M('ۡ_W׃lM?+`{8(9o:!IekcoEEzknGA! r !kp;鏇^FE$(honod2PJ<Ӫ/]~?uwt 832B <VEnu޳Ёv:o] MQ"yDhtYKIWPYrT@P Jl? jCuS_7+(II#\-jP0dAQKO4t= ޔB4]3 u: (|>O<6y6o]GOd֖`Z' PAF#Xrح ^Wab>e,}yda%Y:*C綻ʗXL&M*y,J&$5wwu16I͂8Kn HDwMDh> q]s+T&!o!TkIlHMU6Esc!jCoH=E3i V,6Z۾A`1:6FpTcW fPB '%b>9Tѿif$hhR\wwv Vl4VGB_g$|:.3xމkP |nl|R (Dc@rg>PCfߵk7B1XB!TS^$nEv9[B8TfHH($2L"   H"{4FԠJlL@5ݼ* z@k.GG[zWЬq&A`=6Yȸi-$,%?î <+%XUiݥXQ*<1ϊ:(XX֬G[$5C!p\ELD U=xkRF6E 3mQcgFF(1kB|s}U8Vy͗lv2};O@uhT^K MZ[f3+-mۘf(OޭXƘfГ{{nx?̗fz փfXէ syxV?(R.')n';qitl @OPI͠/TiwS*Df-lz7=D$[V(̪s "A7(7$z77ETt}ͦft:}BW"wZkl4os+ͅll6268?bNwGc)VU@՚A5ւ*͸YXTj֮v kC JnWtn{pH/Af9xezTinnAP-]o ~ifm͂٬<6H"Ddd ϒ`hf/lu%9Ǖ'JX=#y40Ƥ$5\+u!IUkkAR3Ue^lԬe['`Yl| "e0?aUlO(1UF" b>\aӿGk;`P,2= Kve&5Tmj5LV\d\pOv$f@SB*ɣ;6ጀUm#]j8֞ǰGzI0fx/ 1t(V"d{  89&s"16!QLJc: ~ՋILDq֐Vh&OM}<5 Tm+7+n#dISL@P8LĂ=_8VVTRpIͰ#j9С-lR lQ+I9.B IZ%IL<wua:32¬=Պ hu.$įTX{Smά)az\k!OM Tk:lA͵[kۦx<pom|D 6A'ww>_զ HDL$IͰu!ݩҬ:]̒t;nKf>y"zI NJ* n/s9$5ȕ.S<ȴ͡'ǃ#)tܻ3MTSSBŢ10Ja`@O`}MЋ F0E"!rr"xʹm#䲕fwE1Nb7(wKh2(D6̤Df" 0iGl89WHpިZs 5ÃPz tD-* .Z *5㆗뛒L&C`jLAX `;*/S4ʶjVzwNS*f֞˅q/TÆ1  cODA?} *܎%k)p|Y{FI͙LǬJ3 LڱZ1^Mpψh^:0Go $5]^osJ.T6<TԆ$aHX;CmYE&9V47 IDAT A:"V+vpQ\X*pFjxBC[<y<`om%z ol),v98F_ζ͏`*X,-&Äf"~m!RlݥXƢ +OZXCq `mm&ު8vy}׮8"$5@Eo)pF@24%KLYg,( J]i)Cע7'E2eLfX_*`N4c]*n|o]/Tz;[@fժ@Go)J"?3YY WX9qZڶi*e(J^W &Ϗ"%Lh&"XO6eT}5I&td9F1&X6k1+#׮t>NCm"5+4jX˷k#:T[D$Emvсn`tli"fB.a@v<+ԩsk%Ih^q tN$4ˌl6+n#H&^[y:Ÿv66ۡ<\$|H`}Ij F*՚A-uDDGpU 功1 is&4<0n )L !@-xo !z\_+/ PqDHwq g(){U܍nm(yVfXӨlveݥx&E.1dfP9ӳ]۪!XE@R}ؐ\8 !7TRӏIqQL&@"_d2i}Al3XST=JMM-$9dB@3#Q##!}Թs<1P^%JZ4A[J3іzmd2|H!hMfݎ`BE,p-8j͵jͺpD-o/zF|?*(nu+jB ɤ)_d澞L`  ҙfY,r8XN(|0D:PDRD@3 DR/.kGb&Q{O-t-*/y DDlX9SlIDclEC@6LdAb3TP_7m97$5ID)I/]uJ` A{|>O(DIڃ'E9T2EcƢztc׮k{ ŢY]#i)#+9Z(۱6my+L2Itw;xP]B)L& @R3T؁}ܧ xC)BRT5+I<D 9kb&j8xoR~A՚a WӡCdFN;ǴQd{YlT+EimCm(XuatҾ:j^UI1-%b犍R󊴔R:!R-mfq'z:Ť}LD4ʋXPNUC#)R%z}D"_Ԭ}- N*{ I92+sVJ4&R[ʝd2I"xڃjE#b֞hZ_C.y @ݘ(HvNǏ1IH۽}c}H_?/P8L(;cl_dIDK$ES1r֞c_ZNZvl.+AEU^i$I戻;(ƘcurͲP&éDrv&,eQ*a3}_lz]q=?Ԭ_C4'] L ߄(UJ P=߀r,H|MV:g['N2IXQW$CaYj D={_V+uwtVT@*Dh.]s"(3t{#*^UcʓFv.Rph՚UaAO\GD @fm{ߦ IH",pRi\ Vd   ڳX,dŶ |yzIEmooǯ=~I$8ifE2\h*ID[y&W_J'Mx.ʫJR %&< sƢ{AMOZkVnփONE_zNi> [&7 Qr9$5d2#Cq\pQIQ'O tnF`T UwʣZ*PP8LN.m@C=OW̼_SQɵS\M#M8AdlR*5"ZX#wc6 nWfq.AZ LAR3Vs470QUc4@af7 @ڿ 3 !ɤlYu0M"6~T(Щ1Ա&k(ga 4cs=)w.r;:darr"@ޑt⡿O-"fo$'07btlLq,ص2?VK5m>TLE[y?̗fzK_Ԭ3^o rqRJļX/ev:ix`-@ 3##3h`8;TyPl>V30奄Ŏ)tfʯIQ<~}==ݯ~kő?2wlEe.6[T̞mp"198`UWZkizM#:aO*CTQy=1B;],Qovlv݉o-9<0Hv$:L۫CP>ikͨr[i,*l!Ŏ@Cbzy`=|ѯ{@0+38@#a%4߽9mLDQdRσ9#"6UV)B+M#U="ϐ͹HT 65Tk>6a`]zʓacm&ee4[Z8$Sv&E҄ ldBRHK拾,esيaWF&AuLL2ion0Y"6.&#G?|_șH~_#GR`氳X.ܲKvBIP!1>Ё~m~=xX j͉V󪳽Mq/uN@b̷b&8\\fzڂi[;؄J yl@ט/X`($T*[܊2%I&N򷶢<{XVUF)7ߤ\` |XL#EԿ"*aҁ}f܉>\ajX D_7 e%Vy1$gycڦA@T~[QcHOl> @ 2uMbGpIR_<vNbS9@#')+AR^qL3tI;(|v,,G#Gi&R71>K ٿ,5{.a!:۫Df=]" *5smW;[r,]RBЪl63qA,kY dRc\E55X 'cu>`"#~Tl@v|wO832"{Mh&"JPin^;S| ͹[K`=|$Duk7zf-Q? cʑKlLUO_|:n^6[چfzHjFfo:f]\ E}"lrz`;[m=uuu,h+6.OVYkHp>G`"#TFF'E Ƣts۽ MN1g cnA(@Ua'w T~ަ,RB@uUإ .&?fp2\Rr.e_H$=1>K,v_(8L!L5,8F 96r'jf3f)_dڦ㡃{ :32B6G5(bG79kM=mOsLt;4<0h6Se75܌w@{MOaAOr4Fٿw+/QzPKt.'ٞ/]#%6fw#fX-e{kifǃ] LARsi?u߱~:wh^}7_~墒/R|X/o\<yR&Al'pIQ!?RԬ]BYoITk3LQh2 b癶C4>MtY{55d0`hflAXC(z=@*4h\$ZxB餃{[D'q`4Qk J${~nTԜɤѩLJs)ʟ5 ZyH~ /TsO|<-}Vs(sm\\{C|m4xCm"ZD ƠRTj >_XبsN#IgP7"テO! 5:6F*|Z,r8Xc@KnJb[^e1XKab]nzUܼ6V>\n|XA*mLNHN+nCS˲efcw wƢ +aqZS6~tdXVЁ~zkN\t$\N-z"/ o^۸_Pr==Hj&TiY6-Hj JRkaԺw+gt[RHK6L8ɡeJfIQcff](q+-En=>+1< (9Z"w,Jinn^!s' ITjJ~V61ĪJswGv"V ,DR ;?:2\TB_7 _- >sSR32\ !v! Q3Tfl jFV   2zEbkjjKZ@ORXZDY_k@+jjԉI+WHNHj&"&|ӱqMRs%vvH/kJЁaK[ y Jȫx>iYS.[y G"b0tC%! Y%jE5Ń|>Tbg o{̓P8LgFFg4F`tJOϮجq IDATDŽfP+εAU26)n#J\ki)nCEdsPIVt%Ȥ8K$ n' PxHF)M=M)8ݝ*wu~S!6%DQ,&y[lchhPMg0Pݠwd2iJ$ٷ{7uwtoOfڞb%,ؘ͇Hjϣ|LJ맲U$˭BDDNFO@ ĤRs0@rl jxVMtI;z`c4J S 6[;m.lwd*{r 'ƁbzJ;X[(jͨ7՚, A`𙝞B @P ^Ԭ>$X>չ )xRO1I$Ћ(ҩs TW0&EV>G'tU.@l1U]5P'ѤKc$Z|ې1TI;]~?;qW ؅\E' =1*VOcL`+?Å4WT@ ZsCOi6Q-"a,8\c9E*(̪k8&=ѓ'(N3k։ lT8bٜ[R{8&HX,6uhD @uL&+92I&$5? aݎ`2`Ru6ަ~2I$_Mv;AOik412 MTjAVע"*R:J$bymoo{ 2A0kb`[ßY`kDGeO.qjE,ByܫSX(*ĢRG$;; dLv uwt  Z/M}NlFwY Tk~mCO5m#]Z<0HN:_3##75 ’ZCCKZN!:Th5Pxq\y V*g'рko潲<Nz*#3us_Oz}bՊſZc/baR/ yOTN 7h\ު I!X= eVmL(zF":g6WɼW:^6Ldsn-[yt'gZ :FjIDDM-dD4qs}JZ ""> l}vS>(gYm@*l>5x})uCRF Jo[TkƖZhl(n#4D @3(JnX8ɴ= @*h ""Gd)`6\VjX K5xP򸝸DƽUR|0I*˺?ȶO`!X ,5ON\E 9kƤBv3M8R$vv=FT⾡,E`):1tgZEH֬1BjCj8HIzrWj. & ?(?'/.j]-V67DT]?٬d"@r氓ͮ`^q^xBRwJs`6WahlgP9JZ(=B,tIH/R.'1k&4<0ŋڳX,ĺQN 2 Y DD 冤f(JQvܓi~烵p9&5M)jlj!~/6C$ZTkfJeLN'uw {CQ 啚V+ ^H}V=s<,?Q#W&Zy=1BZGpX4@yLR3X|$)@l4X!@e2iJ$ypӨUcf^]*w (RV~K!I&V[h [k낿:opR,V_HMVٿH~\[.UHR3Zv(Oj$ T%6sHh~h`I;`C0a8thQu(엿;=]U$&JM"y5?*0zJԬB^osq&LPiض#BeR5+_Ɉ>FTjJ 2:wiZ&@[Pgcb|%6/iY#@6,8;g4vӳ&\e&o+=g+@[BW"s7+n+ecX2z[@>[.މH?YvRcP-:!z;q֩ DTAv"pbkTk_61QCgm4k` JL\aӡ!VX~1+f&f沿ffx"e%6nUDu]5a'o/..MV&F͏>F*E2*5ͧl6{#5k&L|;]FǔWj6d2!%>nV.}otd4HgϏW&8t2ɒ[?ۉKҸwRFv~֬BP#j8H$#S.+[Azc$)W\DR3!IS"ĴA*ӧ)f7rP4ŷBWJ]Q])uvo[y2 lw  ڊ@HR1V 2MdwTS2H\UL"<۶)n#S>/\JSLA懍1+^)vQoH.]jp;n-DJ$EEy'[+V)z1\ u+3+׮X@oGD-fG2J9'QARR *%S469Wѱ10kj" te'.NȤFPQCF5h$_Β$4Gh!:`CE 9$MyyUc>A1o`]g"1<\08^DD_75͡Y*PAVWҼAeY(_om>O<_>F WQW-@AE$fN!SR; L u"P&<|9e3"a6}9!=$"<NKbwTS#$O] $ j|۹˯l6@ݻK*Fa4lB0+C8^`P oPeuI*6KbF`E`( ڇ s,VIICbhTc24%KLtΌP$c^MM-L&"h|9(ltU%7Hꑓ| ҳ(cts^1c= d4|md*MĩkATg.-[6#E`Q)I|soW܆$I[F懅a&VW}EVX$T#gtClzSꁧꢊU69iCUl]hth&l`.c` l R>hm}==omEpe ò 6b6WQv(e1 d'rCavgcQDcjx T,vsQڲYյNjn't#Hh.1j4f'5c^C=$Ib_6A$5?h,dҎ" %a`W#G)8Y眭-z/4эRrحEg?a&-u@R ~v;zJ.H=oSOCw;M^XQ3aWoQ&F)cWt EӧWWWBT;@5yhces{Waf<_H/^$ tk+ 0H!W"sI"M%]ΐZlji1ISP,2ɱ~mر#dW$6Zpح#eOl|W}kHh:$5k}'5?6]BoI*6@D-š*n %I9R#XMJ&f5"ֻ/^P<7Jt\G"B7ן*&9N/70(4v`e_fJaEPk,*5yd0P--_~r7,Nb%o,{oS kOE*0DDG[ݵz mTivp[NvĒK c,Q%e;Aq=*IR*jjjX(\ ȴ,nF@Ͱ-<;+{)JY=DR3X$5ydLvt;`Ƙ|YIl~&#ޫfv`_/8^R$5#y?NN&Sizpy!bu$TVcLnL&W<:g[cT:ͬ=s3@}pF)Ƨ}{+[Il^1jOh& A6)ns_qٔdI;z`btMR;+ri^雯R/*~Nz1@CKy=B 0WidAʠqTj]۩&jtPU鴈@+*/]x|il xwnq.&KvIQ6A$%2u-HSׂGf(C E湙9V՚YdE6~smX,<[XE%:OgvЁ[^$gڕAK3!pX {$i覴^yRs"j|DbfLH2͔dhPgC>F dvBS{PH9ʹ=s3 ' H'") lhhmFoWWկQӅssSkIFnjҬNym*.HaI)wjW7E f$<EZŮJ TFЁ~DFM)Njtq=v Љzgχ6]Bo I͜St8YUJh UrHVWZC$bj@%fx=l~12B0kEMM-LmxDМ85bPx$<b!kJT]D$X%kJ:}UBW'vv*ޮPyKKKLӃ`b4&YP@m.ڿYx l>A|a:lp綶Ż;w4dOMfiIu{m?v6ة1 ~`~!|%}}=|yLn5pj|~ IQW1 +[wxY)vp$,fu&(l iT).: 5göDD)ya{M:ݝT!Yܢ(sω(w!4\Rl2ɖ_&.Tl[ܭԣt1Rb"B0=`1%Dž\gnr}>z=Z KDDDD=u9y=~V+Pkm񭎃Bz }1u.s*bٹmJ7hڛ hefm ʮA幑lqҼ^W8FL;Z w7 _]8_<\)IX#5V{9 UMO‚$: 1??H1?¦!Hh4(/7:$""ceaabߝB_{dEg.47q;0l2ĥsss!v5dR!/_e!%g~Jqynna] 5ק<ԬhP_Ec\ T6je:Za MRwZ>ϲM,Ja)n\<==ͮy Cc h9փ(nޜ'[Zxy:j1'ϤNڳ|p!- X,ռFM3305&=¦a42zWZeeYXZw~JJYʪ쇚v~ Ը<36*S%\Nh惱ʌ\[I>4D#ˠ?BJn{KܹX>xL8Ҽ^O8z̲ ~! eFY(im}\%91,!`4\,$M,Jc;&&Q&&4t.UTT&ىLu""CU4, IDATw0[#,>u2R!QN[Dtj2$ߏ :ݚR:P8Z$) hj^H\u7s(j;RaYNhknk~rVz^ \שl#Z^"*d_ ,>58G#n ϿZGMDURb"B0=`1%Dž!U']vSQ| G!nfb8MC IGxZ6BRa9830EFY4L1W*oTke[y3YRW-C6 `h3A3h^[Wyt__ ȗ%;JraY"wZK[qƤvvOӮ&ߣ:!(w˕J$J"D :>EM?tw ~ 5s QIu ; #ƭe!x<Ƃ<𞗅1fgXH Dbh4j^r9Vyu! *j;R`Y.rh4 w\6;&[3;5ODL]aЖrzZ@GQa} _x0p/lMʹcY׃(6.̭ON,ZII1PDtj}q&W^/NNkyHx؆#jws"Z5*Ƀft>ANMf5gSsXv1CWX 1LH$~ >I1yLNl6 h<=eeYX""""Ja~NVׄ|~? )G_e( R5᱋|,D`zZ.<7Jg斐p9k*5)|&{ CSQ>Cf6(*T5Ѡy6[+%S%a`}72@eYv  nms!U.e\x_9MM}ya c'n9]QaCD$; .,XR~)wM)9vlv1Լ8"ʛhZTQx>𸒥BUff٧6"i\iWvUlR</姾ߡ.B&&#zO 튬b7oN 䂧L^綁uG7C;>MDDȭ[ 0fnMcn׍IDOn#MokKkN\4;-FrJ)U~'xe&"p ܌FGZy4AyE(fP4?쬐{M.lܰ3}h4l!(w!ܰ+^ꇇ6[^T1,xrY\;5Gc Xkob7MEY)\xEX _ 3˺V nû틨2qtA 6^YFvR{QaH{dV""*c|ȝ2x.0xO)/R<w5͝i14,*Z$E{=,;JP}:Mn 5ODf^|㰫{ ]S;Ndzߎ|OIqt:IFN)l\b9lVvqƜ}oKC͹$?/PNͥXX*xA^_H8qsx LXFºec݈%QYu""""Z0(NyWXfnq'G"? e!%'" ,VʲG[0rUzżqwp""O`, t?p",?[w5"6p>ϧoovep[6D\S'ߎ|)VY\dfɛo ~mwj0XXL.׃dZξ> E fṋi JKKY}Kw6NȅFDҼ/t' u,O}rr{НV{egYF.V{U >L+*TM?:'%+3M)~?.ߏ4bg]xx/0rptžysR֋D>*{ .IxG^6FAEְD$&ʭ8E^Xr즓G7D.^*`~JZs[[f\E+d?b P\\en?;kwW稑n6 ]; sk/r?+d~6WY ʻB,Jši'&xH &< m .<0H11$#c3؜"⎱MYaHJXE !Dө(..f!(/pGaT)c!`+.sѩl2Tbw/dPR˜W6#c㰘"TW܅z2OY\߱9?ffnqUΡO(ADWYMNFnzv8NNXywjN yg_ (8t0/,L}"r 6'g42zWZ;b|m """"Jc,Fsy/ Bfwꝝc!hvvVHwf77*a\peh55sLj+Mpg 9b:}72PDDŔA9`;\F!8:!_(P^nBڰFgggE2|h<#] O`ӦrRy }t GX<\+{`!6e!U`N.^PvMzvvZ-k ".jm>fFÐ?-ansiaVje%>v/Z{`h4|ZzPm6)cq[-~8%"-m }Ƭ7'ss GgPHfcvZ\^"Ƣ1R :5^Yv.ͫspq:p~`u4ױ3*6R/Rû!٥VgCDYVOD2 +;iGq~|pm@q'l;ᰧwROŢXȽ0mr ,96j?U$qTTT.uv ~qC>E gYj+*MT[Q]mRr…3>]liYwժ(}bRftS +LeW4 ,=Dt%BYD"ʭ3g?`mA&|Ũ >t[Zmbj+t:=***WJ$xԉti^Ni9 ṗ^w9Vk^k>?Iyᙈ ;k)fԳ'P70D);CUC͋;T|}ʽM|Uk0Jl@fߏb5rXUt׫<\ZMڝVJ0w3{5? g!zWV%"z7(0e\xt- "y 8totag>rWw;>!a$0F!Uws./7-:~s5^PT@9U#B8٥htX$X"^~ _ۿ؉naci4Kp,e$Rn&0 JK7 W\UlR<µr!ǍB_^-8- SLtzޤqoqۥmժqWխebmW)jCC\c9Klڽecqq ѺoJv H8tWproz:w{=x׃j+iĶm{j+,V\טOLF011ϓ}edNenIYM&{'kݙ>6۷QaG&^|畮.~ o~7]Քmd' ""lOEYfHfWC!NNUAucαSzӓrp{߹vO8FY=寖2nr2v!yRIy\ Pt 㱦, o.n%B"0E벘[.YHjpa8_LO'pC.}<,tkE x c$$4?5IN&|xH;K$/v<ҢE'l<V_8"""""41LD\/Ec,J؝Ecf!%N#<<NjG 4pŏ_;psWufҲGP3Э c5;:dPUu5S:0tsFÂђN7VK(7Ny U"H8&&dG4, 6֠DwߧD7|A@Hg?1?JNDDDD3*zWuyR8{eJ54Ό[ 7{ ڲ^3}B3eA4XU橖:F,^s/|dx^Hߴ7Zl"6 "Q>jV4Ft*Bcf*cf6J:;eS=VGGpDq!?#DD8!ɕ3C rwJN2#9mj )CRZx'9P<l־_,҉ߏݍM~&lG_M;<FF#8~GxxTTⅠ({.Y" x~c~ e[p07 !9{Cs,dص;J2NgAa03s*6"2 I=򇚟CŻBW n%lBxLY'0P![ju,^.TznkV+>^|O@RyKxݞ׎F16\B|sХYtcTB{bBԜyM1Fƅ5g"~2}xo`aŹY :9mQj:G 8yVq=eF=>oNqVjeCd`<Ƙ IDATyPZEI+\MŸv♪JgaqnK\H8JՅ@(|^cn/e(CTA_~r c*_kBSxFw{\ KU,3F.3dH౦z4'x`кhm9  W*3j,4F%mFSa<ִŔz'bG4=.ߏ#(*U^n£ 8s!ݼ9)dV"4Bg'=Dq`s]Zi1HD7z^>?]8uw O`Ӧr݇VU< 5Ńf\)m/[^/(A_;*Ϸޜed-'c7Duif(y!Bܵkۖ(cdtQ{iSCG2fUi0𤒒L"ZNs-?X(/7뇟3b#?47K~1fNσ1 2On6p23G.zJ$2Uީ3۷Y, ,eEE _|i|11K^|pɋGOQ[а ;i>v<֑ɖT*Co}5n ‹ӕy]N'>~٩ޞV"B!jADDDDI+*\lRH԰;QjuPQ7.^);%@hdgS[?  !,<X$c^sB%Dtj...AI #HDD$ΞfdXL"s?` 2Nͅ!s%.@YPvnN灠yNK >܂ :WW[&j*M\s >܂D"@Џ~,k#ض͝ߥ7'ظxpX8 xiݘBWpQw?գhWx嗰6<Ғtwt.t<If*e'#6T*MDAc#BSf-fcH"krMz=vuR~tgM胄>_΀z=4gKiLOOD5pڭ*eC`:3x'֛R *gfntD"7:W=#eӥycb2"]X[xtz<͍z$B0H8p;;3d^4??/B<nlߍz=̡ͱD/v_ۿ׶p_=~pv4[Nl6se\2o(ݱH nIө0 ]u|jjV᷏9ɝR\l6-yN|!+]])ٓ>.&>q#`pGvR2#j'Zq'uz6[ޡkJ;ؙ!} ` %b*I 4xGof!.kMO'fT[瞘PJ:~)lh1010&&# ;njk~ODmXe.JJW|~N}SqH?I'8pXůhd{6^qq 6򗊈RRTP3Q_"گ#, 86K3vkcJjy{^fPsqq JK7S0\u,儈T8j 5 PsV)9Jl65006S=ɽ~D"BBkB!EjoNf6fl;eci>%G9=vH`0>`9u=N܄rwwYT:VKAL$5B~K tZ}zEP\d- 6B!}>qzz=/Qj&""cU^/E>D2}mm8ߗtj>'dz RfC@'WJ}LJlu(~≡fљH***0&tK^YŰbnwBӧRNUQ*+?&NʱD/vo[w@Պ}8v'=?c,S=xsNQ9HjhP.Io""""R" nϗ̕DDkёtc¾|&,$/۵E}mmx+'{z4 hQF=ִFXB)> bYO``'S(CjadTTTE@or2'9Z,w:/wɖ65OXw7b>?ߏout.>t;]nz]ȶ{+ͭM2%z{2s()@"""!pR"65t)6XYUm-c7NDFSj˔[/**۷Y\$xt<f PXDyF rz(Z ~x 0 PZ6󗃈HR@PT4w߯qXk0pb!~@Z׈ ߯`Y"KR;z8VB/"|_L0Lk"x&sv;? iH'wjW 5!u:W)3PjXK< m˧}@,>'sl,۶8J B(ZP8pD|ݯIL'022פR3Y4iYՊ}aggRvWK$ßtɖ{m͋F^ڜ[͙~jœ--hvW?tw }EE_tHYHQ-U,Fy&}VkF)Zz|~1! Qn c! Df< aY2ONh4rHR|֛C^Cx~vZ-̻ e6퐜*S%!;э3isA׋ou\jŏMx;BBx hv#`d K7Q#"1Y$iXI QZ-P:-U0 Ec,$!;^l֠ϗ{q!iNDD?؅#?ӳl CCscYv/rq9@ #c 5:^g wJB*MR͹UDnl2QPeS=i3๗_¾۰mݯ}ײؽ٠a^F @KCDDD9PT4۷y{򗹒(󮏌*0pދRfUs;7ww^4w ύb~#XCЁͤR۸q#Wpڭ=92Ps!cE%pLs-\s*Z. do1QZ G^WAZbzwczzvR^K$/| u2HG#2!冈coa(nЩy(Ӌ_&N ,ENNgg.z*Ra+މ \ 5yc j+<nb4'#c,ZN *sjNU=eBL١NDre$vG5;;m7׎ɖ{ u.ƺN|!񞞌\Eh4$""""fh3=# 5DD<@>NR ^y;Z!|/ye jwϣqEz6 mu}^Ec0wThm9lj[J)P{e $BO. d>NDT]ew9c'q_X'=vnlZkw76awc-9Eݢ3w"(c Rd6~ R# 5b98xwX,2tYJ t&KаPs J|Q<NgLtfޣ$ cM;T)v8ÕRf15 58B:5B-BP* s6LE?A8@韋thv3=z=?Ӊc݊. Յ>~ dK Nz Ep*C9$y[e!}m?NЫ YIzz=4~ "xYPsVwh/RcU9 3c S3CYofc$**x%S&'#&T`Ԡ܄j+,VtܙH1!x`rwi^aG&^χ>֖tt?Nze%/*QFm vt"ԍ]P3QueldfK ~؁TjdJnWO{萢93ov>T3f%bp_kAhLݕ`Y}DѹYu+f72mNwewrv',VTW[:#N_3iG!h :|O: |g؈ݍMv0xOtNgm;E^Vǃ2h5=IDD+-݀[`9Z1L:q9IwNǑqxꮃ5s^̠P! 񅭥i>'j>;4tm+jv!!h4L( YEYHrݻ,Dh4EǸ>2Ba!|}xϋ1ҒO|!P3p80&8v;@3zZ]A!""im9 ,tkJf 2en?,L62PZMfvۖw]Ap 4;Q]mN_7ܪ6XF"Yzq͒aP˝c˨[HWDZn4hv qW*qv|^/z}ޔ.'cӦr^P&""JTۊ)ϹN;\a]/]Gp ,Hn1F]<|]It;V8֔}>}{ݴahd>? :v76UG}*NfؔvGoM&kkKzBv0)!q^ʒ=2vkNC}FD#ST4?:F ⅿ]Xo탧/aOk:Av"RBnQN5r:qpoy H'=귿q7m*r#(KLDD t!ʖ"6jd`B!z3t^ #/w8Pg×Gװ}V.2 byةyldN9.vucמݰm?] 5\SϽ?˷:gO NgAEDDҨsivgsPNZ%juyWWgz1262[5xyk#2o J]dT4Ҵ{Z]hpթc:`Y!#JWֆ֦F}_lTwA$VYR9fU/]ƗXJ]1e䕝 #-}ZC$N*X| 1/WTy Fa{D2z7$bA c;d5 s+W*5 5C Ƽ*Yx,~s0thp:4ɅRj_+p1~ÿLc``a tWj9Nsv< IDAT&\V1/wh!""""uhfX3QݍYT[03sKocdzjh1l {#zʌxڌ1**d@փͭK;]'=!s <pڭ,@s%vk2ht1Ԝxݑ,q/~wbs%5TUbfG;% ~yc|AQGW<5/q!o|JnAZ2F`zCT݊Q-lT΃ čq` ""ʡyܾ͎m}9`"FSy"6] /}<eؾCUkmfYE:q?^/,$Nؤh8!5MNʝ}T,49j%Q#uH}]W*vlkTjNV.yuiU<ƅw'wik02f}ɜ =_r]J(NE08F!~C 09럝 dBILoyΡ'ז&nG/r#"XQ,ndCDH CD1. .v[^[hu/} s 1oͻjdT nkNtc,R[v!âؼWT_8>ظHv+ʌzz'z.aXv?seQrk2Oq/ح9% 5C 孙?6K,t k&4ZvŚ?z}-yS]mE8&N Ӈj&&#FpߥyMdJ]۝W?hd'=C,ۮz1ˇ]rh.#[p҄+<\MIIvnt#Ye@tZ^˃f?ꆽn3\0/ŹO~W΍2Qf.'=9'Zd¾6ݙ;'d7_"󷅏9 q90,Ebګ[aVG FD4zyfY7W}DjNsK2OtC>PWCÈWN+MlhLkՙ^t A9e1+iB2Oq/ح9i 5C  j.3?~s)<``O2zۡw{'yhuRIbCp؝,DYL$3՚wDߏ+1Ght oOO ^zz=j!JG"wwX:8:yg""4iX,)ΠRAygja0~x< cflopĦ8iկ86^i3'8,wz?x稴̨2wkCIc95{e^ێm;hofN㪍Pw&vihWOu%4.R"G _[]m ZNaz:Xw.~N: 4k4L #Jw\^<6pُeRYt|reHfq6o7P1uLjx/<ٺ{`3wkY *Ѡ3R\Un`} s`{;']WͻM/ν} 3}B()y>CKC;mZеWx$]9t^k{Z/TP rڜ{v5cߞhи~Cw+/72-T[h vئB0aak?Q0LCD?h^)pُ|C 6Qֱ UQť}v:??0JDl2a_[v76\ F#8-\_p%lvx!ύ#!{|fH +# .'"bH}݇s`f=ݞٓn9iZX71[ppb`#H.H#@B X2F~3?6bwo=(1k?6f0`e܉J-y< o|];n8,Pj:~B:5~J.t bv&;_\ҕ0]jw[W LXļ Bsl6%''ӡƈ|~}SU岈f`5Ps6q#NIv5zDXC66GCaFybWt[}<\QV0&5p_oܫ_n_<7z0@=+zzq޸ 7oVC.lrәT96۬?}k 5YF$^}` q|~gV|W^՞7_ukoF x)8YyŒ sB6r9}h%tD?> CTͿfg)PF/.TrJJ*ʔu%l=gTa_^cV\Ӛ;w. 23!lnX'X*)i[Ml՚D98fn~\++#ʹ=}9ӧ. :֥a/`V{Ժet%xϙU(+Djs[5@o\n?wR}ըؓtB,k+4lѷ~*ʴeF-pJ뵫m:rpTErv LlQ 7eD8Ӓf¶& 48եCjmt]>?bș|Mp99%YŅ~a&d*͉s8uV^)\ W)W]*+O|:1!xg`MYi!_03hPUij͛EyJ̍cُ~ fenڧb/R Ο>+3ar9͉7Ln@P64EVݡ7l~mzmns\n&-`t׵ dy4̚uI/H8 œ\641a9Y)*yLWz~:Avjeb闯1b\Ɋ+Δd,R.B9SbHV{s^+ռ'߰/b;?3Cw?t>^`4ҜBxVqAVOd=b΍LU\XCDLNux0ukLj^ttt1R#<'BRp8(Dܐ+5kl&pnqTmjko [و0j@m~V {u^[ߨ"Ka_Om&_؊iiiϥn=3t1kL"V]ܴ4#V#{=9k\7+j[Gga^Dtq@G}0U{rjy/|>#6^Uy5&7sFw[ӽ{_gSn;QպX= QUY)<~5ZfYVڞ<ɧ֥o5vi1d*)iװϴo՚oP6q6U>k*.5]h^|\Q%s||h Dy=UUzloYy URKIFZJ'ۦؼ3UN`fiLHGX̙>!V5ya?Ws,]6zO=~~:r}u!UOn?sslY!odE u}joi{(ӝwu]/8 rъTiF(n,ז2e`*eŪ(+փܩB '20V+"sp4u"|S̍rGtމ6.-33s/7:0G& Cw4USzG-W 4'&Α1%+K_jڛ=4F8ppoOp(sAr4ouf1O'LtQOh:~"!]xaKSV&wךГ?ΒֆݲU|>xg~˽z T[sXypDۙwNw?x2Ld9 o ,IN'UEQ~lWp{涮 l) \z֘:Լ+lcnPMxeeP!JVG0++؂)ͩnU߱AK\8+3G? aȠm}eZ#*$7ۼްgN۝4peĖa.=ݭ3?^AʲqϭYtr.2Ph6\9.fS[z}?~s:;y˺K_X@cٞ31z{ΨjJwޱ!fEwӧei9& q~eF:}jjD!-- bJKNysS"Sz;g{NGƤ׆KI v3")EOuґ30 M\y;kWcL秧+YUkoX_Nc!Wj鍩>ion[h[ڢ=;k20QXozU0{tQʋ<מg*klP󍄣(Ya?):mn23bOU5odrܸX0 Rajz@xtEA>O#{6߿QVUE f._r+)fDwP'Z_Grsdw:pؕ.)avG 8o~.mhM*11,]eIX#>\a;ݲXy޲ؐбc>} }tr.dVXjޓot]UZ#>«dO*VYQ֔kMLUhnREY1qǁYԡO^AGGg#u-B7UH7s'07B0Zy%2p* D6[.E}Sm.m#Lma 4;eR!⪊M4L+ͭ%E*Y^N6in3j8,T }wjFӮ?~ʋ\>1LjʍhwСw>|C*돶<΀ &8'mv[/<bf5q%+tzmr$3)1_tNN]kMp~q^4apE9dU.3xm՚ÑŴl6xE`j87#¶=Ynt*V ge0`ݙlm}Us7 ~_ tflY!o앚}CjknUӱ5W Qo }Zn2D EQt\p^_Y+#r=:gtθ4JI0(p4ujj3uʋ0ܐu6rvj8IG"6N$yR#nn IDATzg<Juְm6f1(jAM4;JsdE );/3`\jm0m/afKztyV.qpXܼ h죋So|֘zMͅcEXv?tJ.Z{jtr:ebݺrnX@q?|[9Ξ='Ir:u劰TF|0RӽL=gt^mm2bPuUUZ3O!|fnN&}At,1vTjffMwBP6W|=ȣZS^v޾=,mt:P ĘhgVΊJOIOwLoL|S]^j޼*_L[!]teeQCK5˜QALuptBW1-1qFFFB[gcƣZi9X %X~-GѮUު;9f3®ܫJ3bdDQm g]2%;f=Q*eF)bXs[*ʊ9Ь;:"È }Z"qff o '&Qffkp|{s=aô>}g63YiiL@ uwzU)3íӽt$]k/6p(/;Ksje:ڌ wc/>lfp\uR`8l:֠c 1W33TAfI9};JmCjT{~uecVӝ=;@^yEpsBLS4ujj@aZFTeeYqc=}tIɭ;tF9X}ޢ;#$!m4B5o^קWm{:ߧ-oTr֭UZbā4B͘}~><٪YY4zIg9u٩$Pp&RAcӀ?pR%%% 7_T0Q9z֭1uy# Bx\6y0 Pz ֥2/qDA~!qsW Hĝ$2340/o8wNm^ZT扉s [өuw~tv)-[QZD8%>xaH/pU._Vy{{`^2+tAT>C3GHZdJ*UYF%Ȳ5ޞ3:{^/1}NW5J9kW{q^C2{v֝D BN}]knn2$ ZP+RcU.3dT'oSGGˌ櫙:n j`Tj>khv4@)\>X[C S72222cڴt%%u|.] oء7}-*+Z3n;e\J<}?zEKMg<.>X8: q7]|]yvΞP$QAJAq!WHl@C_)sћV?Ǎw՘K*TZQnvx^o_y0gvhWMW6nnhiQo1jKe i*6 lKeީ"QUij̈́Eӓ´X'#'aۇ&C L橹RYB8meN sŏ^@@#h;wWi & \H?yzhQ0"gW`y.httT>@~@/jpe.j7Ɩ6:$ lTH&:W'C 3|3OZٳp`fNh|,W!fgu*U{9LwNTHl0eQ Lacͪ(+3oˆB 焜zw[cP3Dj8ԌZXs24 2DR]##.iaD@4s#+ ۉHB2340ЯE޾] --zGS۷\il622PNJVWdEJVnTwW'Za8I+Dc$|h._ll:" z5$ ڂX8թ[W.7g=Kf`ftdEJW+r!qw# h<٢oY.*uޘF,.;TjZ3sP+jV̉(5u&-ɫ<ULU3ufA'XҢzzXjkOťw4tFdGF lu.Bͧ#j/j^iTjF'[st|.]:PW6W?QáU9h, ;/Gy9ZJ&BUWO׵v]YyZZJ:TIPy.^H'TʋB{#B>BSfyF ,\tq ܕY PŅ*(S~qe?K{sڽ__'߰CF.k.]ŋittT/^ JFi<٢Ɠ-zq^=a֔+zCrl6e3`Dm]t*~847$t|3iz_zw$;t{ey+fI_q"|C`/Pj6FOovzK5^#*@[pTO^rCx=p#ɚ3'Q}}}aO|H/JJ3@`9-Hs 9r~jMy9yFϞ=gt!i l6KdE*#kDf O[ژ1*1quc?]0nd$Yo޾]wު;vcnJ\~?fDPspN}:aω3drC͛DPU'#K0bٍ }9>}za{csef,C@[tgiT8}|\PFx%&QFп/÷;o^*KkJ-pAto@48xAGGg3"n<)UmCCH8 թ$>lH[oYR{QDӶ-@Δd,3%Y*(.3%vgU{9߼s8f>WyhBd8K.O\g<Cr8\f 7mԍTﶾu$i=c92e>_NgxyΟ.jn:~BUkoci ^33`ϥ+TX-K7ܪc yOM70 qS6M)~~Ρr8JHa,n'ۮ145{54ۼf\-Pslߤ/ރQfX1ba_@m]<k:ج.mh 5X_[{ux2s~?}:2" 5hfDD2euYK\HNLtH'PFstBzׅklM8vOudⰶ3#=9'p`fNXhHμcj:֠j:V/߰Nc###!=Lp8p8&*8|Cg %Ƅ;FR<-ڲΌܜU$V7jcW F4,-6syj6 L\֟֟( ЃnOnEO$;x~s|JqF\CSϙaNurO^B,)Oo2"r'T9󧽆mk2E!WzmdׂY:w=;A 0 z:Y&Ix.~|͆2-+Y9sxj>5s<(U 5߲tBs}8)<9sv5~ &а֫ΞgW?yyv |a ٳpP4T/~t,/^? T1׿4{-m^=uϻzΆ4\mn:x FTYniF\s7p!mlnVa+lPǓW!)9iZT۵zۼO` sSR;oWNvjԩE9T ˕&Wnde(5ʼEѐr偁3 H@PGfoOV7߉fe٘T@WX7Y@L/jp4U}*U,Y4skunFikMY9ܜCgφ9|Ȼ8?8#O>l#" 1qNײjޓb|Czk~ռ֘Lv-U1yZMBBKռy՛x}:hѱ)Sm#abې}bU*}UsAd%m1` CCڹ˸?S'gfJ[V#*HOs;Ju =}ګ[aA}c=:Al6ghpϛmn%&aBC5?or}4:=(3'&\*Mׅя~W[oEU+Vha&+68|oJ_P2ܡp~3t:,UǩЪ~9q }6|>սV-f>3Aqwܵ^^Δdvp8p84:: -~MNb>ӯA_߅V yoPLϙd8}H.#c̤a1 \~5׮ן7:(>?O._&nj볟҅ )7קzANT5P*Y8j:~B%K34y{yLcާS1JV-bQBB\.\.54t!o |b,eǓcxu'%iD?!oLjm-!KMux0B2.)jU~_T/l6%$$NfŎ`Q6aWwplGٙ}5?;?4ZLZڻdG?<-4$ ?Ұ DܑOsN>^ީpZXN +՚~ 99 UPs}檹,]=o`Ѐ(^C5_,b*S{2?Yb?!ߵo< ?UfNә/ X^b✐J,Xc/kסw_@/ӒEq=k˵\Nʋ֚r!(UIg:X#>`Ѐ(HJkh!j-Nx C]ɫ|ImlcS! QuǓ犧Wf'@ 9Pί IDATL. [j7,:>lB  2247%]0-tbNQaa|V/owqV9Bfnܟ!.VAe@]ݦjS8SΒ<\\Dxm ZNFxbWwH;̺_zR*X@ʅ_ Ypn/U7̤rmjyhO3;+gpz> ̦hQC͛D9fTqJK6ޘbutu~䣏t9KsS3V`R-Pm2sÊM07P^Z^5k6Iz,-XwR,2k=X5{|Ywܾ*/-]yD9j0S`AUKkT44wNv*WRyi ga;Oƛ9.aB;w*ow6{v;&vr`ͫrκ|eI7cKK{ JZN9j0pu7vo;^2W|O mC@|e>ry@RVj}X#G}~ FxIM y ia9:1]z'/`tmKOuZeԻLQPCyδtf2'.knǖ0[d_sK >-Z'"""""R3B?߇7Rm:Ϭg+@!N@ɀ)Fd$YokQSkCMml՘xxhnNJ%"""" ` q^4D^SϾWd_5~R9,PP 5 ^5or&aE2#@`Fn f ըRuV;jjm=f:-)s),؁fVgR XGDDDDDDJ]؉oU6PCMb6lBFߍDDDDDDCP[9˔fTc,R;=Vf*8\.YM-{O8@`Edey d$d6pTUor&Ӊ0!#Cf)b?> Pɔ Nf۪4gPR qJt^**QQYIUo߁O܌{-q@|@sʸX<0 <2[Q:]{CDDDDDD QyAaTj.Vkt:nNJ⻑hoj 3S=j//*XH*ϔBRj;Q$ z].Y6\..)3GM4֯ɿ!R$fZQ+8N&"""""RjP56>!f"""""޾Ʊ$2%`#3nd.+JrIJa|mhniQt?;I,/+ds.RC;Hf*ΖƙL)֬Pɔ Mz.\3-k ci{d&LKj;l&""""mWyxQ.N-3-]։G>`'Lb57N핚Uy:7'%GDDDDD7Vtt^;UKeCj8l&""""O+_E;|]U Qkw"""""ptsRt:ZWcOJ3Qs/jE%h5XLސ@v{|6AkDDDDDC_;_'͡'/ˈ,S,v\LDDDDD$3gLo 5iBCDDDDDD.[Z ֖݁Tc,;}z]$V/-N Zl&""""OtwTt 4LٶԤd"""""piɔƩ6l2HScf""""""G>AsKa7sg`#3a6\.@shN3Vj E"""""ptsRWֆE|>!\8ia?X{dl7‡`3Qw~ W#՚DDDDDD2Ryb6LNݭLDDDDDxoWc90z]$֖݁]Wi<DDaLtprW…%C[$:ݠ ,AƑ#Gv)bQ]q4""""""yMIZL͡<54"""""p܌c'OɾK h@c*NE`3:Ǜ[rR Eki}I!AB c?&RVl 4u:Y%""""":iRŢt^;Z&8kn_%?<QDDjp|@EcVAw0ytAз;zr!hpsAmJ+Jr#鲄U2ш2!#C_yjlZCy`>ADDDDDc'NʶmA[N^+g=«;vb/V2DD~wb!d"~}J7.9&> cT}N13&hD].NE2./byK5'*J.\6#"""""Qrx.]F.h IDATRnef""""" sTUEf'drlyeh].\߿+%woUF4 ZS99i<A :CgP^3yZ ֖.8pgXԉHFr T|ʶL)KA5INƋz""""" wNW9˔yݥ`,, 5570V0@Y=/Yһҳs3+<;A݁; 4PQy V'He1#7)Dj$"""""ʯTSX9OU(̉.WϲrXQ2$+JrV*c'OAE ydֻrrg0*22 :$'%$?ȾJ ;ߜߤf+jjz&5ՁfmAtw-e\,0#7eβ lrC;HFNj]Puy]5:FDDDDDa훪*ٶ=gZ: q;9D /wP.54@tTQŎ"tq]r;'3)"~LKrՎ-'`kg_#1^@Ia sl soQ]D^rxx,S̖&Iy2CDDDJ4JSdɰ`KNA|2ćh(đH9rUiTl~|wOE";칑ܬH`(T]n WMUuOeg7${Ν=,SJ :w|>hhأ^WT=O%ewjs/iC<$"p:_gCV_rHDD3R,jiB&SJ<4RQȚ6ݢ6%GB Q].}Nπ^NV`O㬢HazrͲK =Efdrp…~A?C}ȾA{* 4\| 4/;y 6eJe_ɢCO.Lv?CDD< 5トF5,QuSK^-?bz<%?9/9Ĝi`Q:rꎝX\F ύ;9(ɈS8o :>:"V/-t2cQݫ[sϑ~=<=>aɈHz4f45K p;h$(ZPs; cjn}OeJ)lpoe2 .2Qh(Hnl8As:w|'`4kX̝:k[@FS8vԈsOH1*\!+(4lhs8hք6465p\=A}=AgVs_}`҂!SSݹJIa&LKW,|l|{JUV4iO; :SEV VN%"""TCCTj6R8.8NPЖVpݝR~9haEI.(l)8DDD~_n39Kηfdpʼno˾% !Zng#3Pjk%&\SP3D].\jhx;;U+Q+Cv ސVN>d*b=0LDDD=˅oMUuO5 HN[onɀӱBG>Asy[$AL |ބÁDz9,RC\ӦòPDJDDDDDX- QSˆ(~c=9]>泯둝0d|EI.vgg܅ 8wT|Ƙ1c0& c@aVݜ$yx}9*k qJMzM]YfK_iniW˲mV%""""" R3Evᖬxmo%RCזݎ;`(@mXËr>_<+W ;MjxVolye/OH܅ \"""""g2Y,ݐ5ɔ よ(|d J5'x;>u^eCв LKi!Nx} : QqZq<(,ZADDDDDD0T%`ظ}eEw'ڲlw|>`E8""ZOƒUjw' 'iOGM fKL AcUxydT `7B """""0PaiW:/good v:plU!N@^1 wM"CDDDDDD$+Vjえ(u=ZE,>~Ǥ;=fKNn;;ڲ;}Lv/k{+y d6P+;u*=eI_zc@w0EsakD*eD^QVTcU}&>Z ֖!dSoKIDDDDDDDF%Ԝ@DDDDD>XaK:{Ş#g}\wvXQ2-WKB-MxuO%V)m2TMDn7S 1q͘hlvT]u:: " Z JHݚZۀEw'6W'H:k,É9DDDDDDD2R-lF Á79Hl4aö#([pv|Wu=DwV/-1+JrakuIDjRB@ՍS}28ap@U==g:+|WR)y*bKA.; *DDDDDDD(p0 PCfVi&""""" 38=;!@=Dw'v o^=يfa^Z;`G"R@ !'%os￉[ʸX̝!5Wþ< 5N"""P5)7{njD>}th^{΂v3N8(=P ::TfGZZގ!.B/jjhs:|~?V+DF xv7ׯ_MCDDD4$3Df߁f[ xxQQj2ԬEbEI.6A%"1Pc.r@ &y0bMmw5W'LNJM!U'+5.#"""M0 e; }>'{>ܽvu\GDD ::1PU]juSgL'Wm}JͱcAI֖f8mjF]Z"##mvI?KI!*y<fYIq 1qׯF ")q<~RPŅ 6 rc._mPE[ڜm8SkVE[N9p""" ]WIf+LKN[%f1+J&5C'L|c+%T%h0@gOjGc[3(M"eeB5Pᙬ 5tuHN<\5*Z?l y$T)& 'h=.K߇CwhM]]][ގ1>~SSM@>J'Wb]#jzr%Hl[1vfVPsɔn_ VjA.Gž1tt\ x;I㱸paXe>E`skk3FDdhƅَ3G1?)Eo046gjjϪ-ǫOpeY8T4IFf +*/aEI.mVeDIa&9F2&P'3LDjjE1_Sѹwj*JH͊zRbFn~p""xS. c'b1Qm hL͟C÷|]Psz'ljXFj --p:e~-xbïU\WQ]Y#n7nYRp1X;jdJ)VQjP(Js#ؙ1ؼ`躺ԄcɾB(Uf.)\(YZ*ԇzp`_c1xITh45j9F+6_%0hYj| <fjiHP!NxϿ%"CDv_e[OliBcKwع;;;T0S_^1V@҉LNW,;9*Y2V'"_u˛ U&p 7W}u寿+Y_nVDG 66Nԍe;k]=ՌGUZsw~@֌\ws ^*sE8q]lg]xɞICc1O[ȿ4q v{+ a悉SpE]0 1($[#`Wx%M7E >>^A64˲h}4ӖZa;$֨Q$%%ٟs5gs\Y N8]"$B ˂VewxxxQ.6n?*ie=7t0!7$O8SA9 ADD4xعwUZ:jZ LKV\'t^N]/x,.#yZ-w_qcbqi1vvL?pqqc>;:&;,X2?,Ɠ>ZUOƵd{nhێ QTT9C̓P*h::2pKaGo '"ZuJ,g iYO[P%ju~ 0sRx[g-Drb߸DD!fqB,.\psG5\(Ǐuf(_o @39qfـuz'DQ*X)rAR*)Č C,_H^Z;>=<@bXū&ȡ~ }=n7::vW Oh>񿉈؞@dIa&*t`;=cszϿZEl)?7+d|Z[R*sD[RUąok!9Ztݿ)Zu$nVUOG zW>~d> 5l@|Yvvvdn\A͟vcg݋xO9m Q}EyCjԑ ut\ x?Z4"fH:xn8c91iY:yjnAM8(vԤ0sIB[0*Tj 7;pDf97˔+l|tdD)d1")̝!ɶR(/!g(IH6`noo#h5H5GbSiSy?L,,WY"Ϲ`Ujj@7W[ 'zJ8DrFJ>?/gDI>/P,6;އu=6u͟w ~߱_BtJ>v͍؀DkkZC7I({fF*5n7+AllU`5Ki&T}uއz-T=3d*>t|w(=(')dJɳXOcߚ xij<  >Y:{$N_ڽm@so{|삁݋ ɖI*Ǝ5}<{7˔{Ya""nkfoWWd @3=qlݥѮrMH9..V '3rSPSۄϾu?GA՗nDQ(H:e!" =!sj#$y9Nl:mY9\tw69p|AA^QdkeyJ}M}+!k"#G#"&лzKZ:u:/1`x)8Yª'W &+ɖIhUWWZZt͟gb1DD#G[OUE--Ͳ% $?w>?GG,&7}A<x[+yxP/a#m$%Grb҈ꗚZO!M;^4 t/~֌'KF :;;a7ZE(iY|s =3{ccf, 4=zp8mK P@H)7 uVǾ Fx+%YWWn7D Keb z뮼Yqhd|4IThsۆ Z)XAg[,6 c}zM3xSF_v .nLS6YT?ܽo@sogC"<|L͖d̸.FFVJA3\ցԌpS'~ٴx5!ø<fYiBrVoRxZȀQ[\ faŽ 8wk{{;A,5Ǡ$Y C!j+d`ka8|UH(~{BKgbTүLjjEv'P e|ZEPSۤ\(~oVJCeٶ>57c(1~)bFv|c=sАт%q}*YDQhU{{;VխP4&l>21O'_[F-(Enp?::YLN寿ck/aT?n.O0<P XyԬ )ތM#OWĉ3|~^0} 6>jɂZ]]]a4򂷵YuaY(LęDDwcKVb=A 7_މWCtt bc| .Y.zhY % 5xrMllq2P8]ڑsS()[eݿAF\NneeJ!NTc +/O͖&v0o^Ь-5| ^C\fbKAej椲L5JÎ%/?+ݏ`Mp>裣Vk_ j|dmhު,nIłG|#Qwc]8(_7(殮.4C.466Jަ@phQ8E h4_t9M*ecs%9RNk2)b?~5Azx "#G P!촑Sw(&yw!Ņ q- 2r4`hSM&%Ǫ%Y d߭I:ZT A0fasT+#D7sZps fV+V!NU}y*I-Mؼs_YSQEظN8m^& 2K^T]2%2MvdUr\G5tt\цQ4AsWWl.A2|lv, LM+ݝH5VNj͡jŞ[n+mJrz&|o~^BU׮I{Fdy*SM_*EFV(I!/8ާO5f-g%k{SScڬ ނSPv]P7 -91 ǫObӎ$(p/ZYEU1.76`mCp8Գ jʐZQavA=_݁(տhkf4~Pk_݉W|ew`\< Y{uuuAE8-* (TxN7<6DFFTTt:A rV;=c_^v{yƘNȲ]sc?j\R>ZNQ Tm@[[j&S' (?ㄈ:XA,|O8^|᪎kCVmv][%U39SgL x\qGR J7Xbѣ99Td2G!TGסKܬ@Jq,N盄$3uR>z lB!V_ VY %].'D}M iP?G(15TK5͒[pδ!>ޔ )z LZUIIcdz?~ՃւuԤ{ib3EDDҞso-;Umn|_߅KKs=6ޕpuyVaG|FVGT?s,ԯJiYxrٯGL. DDz.Y߻;ZV_)K֌/o1_ވlS,j9djQP*׵RMͧjc^NWǰyk5Ȟc^RS5Vu wRuzB_DDD#Cξpz&-9nLD)A**enU{\7EFB6j>ZUOӏˈyMrt}ș<d3y"wo&cfםibՓ+%۞}vKjȍ ).h:ITjr0vPs jj~U||l_Jy8gNt1LDDJ%+xBlzㅀTm5j_.鶋gt~1M;^5$CDtuu&\J5M 5yYF-Oxmo%jjP:oH(Gem>Jr]hoo%f*Ys ""Pwcȹwٛp 84CtzU':c5^79]î)F^N\e,DlpM0g݋x/_DD Egbڌ|e|howH~o7h矖l{U_9h}HD$ hjEguHy9k3)b?>5AxxxNRc}…l‚56(ؒM8^}^ހ+_,S&6r,mDgNrcCH|KUQ㚤yQ4 7[l@!f`ϑ^Uz6_ڲ;jN[ek[WWm;V`Dgg'6([տP'h5=40yub@v%Af+jjmmuP""DQDkkt:p%O.o+,f⵽-e\*CryY 5vEY"CWgP]YrmgMغiߧRG X_I*=g9L!7'5K}G ""B Tr HUbf W|~δI7FÚ1daf""R ۰7CrP>]>sjj!}_0qJ_tu}uHVuVjNW̖&Y?Tjy #.%^Ew'3plҠ(ÆYQp qLd%(0yYƞrnMmېAWWv8툈^~DQ4 #MUĞ#}ڲUٿ(v |cRg^f'"i8N꩕x}^>Xf&""kLOO⿶)pk,_ $SyĐ뻴 &ޮ!DFFv2g`0Lqϙ*Af8<>b%+xBlzh$8vea|쏮.#:;;pAEɗ UKgH% qNW"Tr+ _DKK3f%~."fZ{*M 4[pl\A[mr:4󹻠gXaK3WDDJz,]~FmN%W?(vkYZ "9 NVz5Yl9 &Nt1MXU'ੲ5!h""":)o=v.6ն3˔'Ⱥ6g:ɁkɗTU S@@|u=>"ۜik^ec/ ;=bKhpqouuuAE8ΘW ;̀,Sw9c"""Zǰp>mUXTN^6[QQYX#D,c]C 8(zr%l_#9$ Ub]<8DDrqӓ6|H% e>Hդl EFZdJ)X*?/.@;^c4Q4:).ΏvYL-Yųb7uU͈GcoȾ~TiNJ}Lp `kZYnWT+^Y@soV{// /k< `d+J&cö#jZZ1vo:: .(y?ԤŔlcOBmFnA\Y8mT58K%˔ 5@EeW*|Eץx NW}pb>ɜ,ێ q2NhV {V]V=R*5 R{ۥhd).%<ڙ&/NZ?$%j sMgq$tMXX\o""Q7[wt]]Hp}`RAHP `KAӏPsMM@sozi() c;Y92p fղvQQQC>Sh m(3 2z̬GDD42cjEIafOJζ7tiyYFkkq **/ u w-D4s G A&`|t|ՉhDG|uojש] 'ۊW~p>QddZW U4tXeg)<|r1S0q &cڤ|L$ݦ`S v=G>P|hSv "" /yS-wbvA"C>?gWlP5A,vEw^[x8v;=Cu7a+Yp:E"K 31#7&gG)sg X;=c0Z[!"""U+ efxзs@O*o8w TMWT֖>=q{E%%=FRJ3tߤD;>*އ Jyt}U$""R7w-ibeAj2ju 5{DFʐҤ(^SkFvZlmls/<5`UgNęS=A,S&-\S8CM^.ΟZREDD} ^\ =q^YLT:[O3CK +q(Ge{]]][?ö*31P N3t^NOEf+̖&v-EZ^]yIRl)̝>mbO9 ⢻[OEMUZ$+R5J E-+57t8m8^ƞ@!ôuӶTmG xbïdǡ}ߋ HAŅy'+3dxWri Lxl KDDfR9'=[}}rז8>&<9n GEEEЧ҄:]֠UĖ2t^ qWR2ljkyn{}B r&6vUSbJyYFVc&"""̝3tuT $d:L|gr}ĄI94I=cK*|lJ^7)EW4J&o*$GE64"A9KPU(K߇K@DDa)m qCPVJuU_Aޙ/ 誹0ɔRlTC - M ǫO}^otaZ/cՓ+e SP7E ""BExT~Q!]t]jl}?6N9Zp?ڜmx0[ S ʋDDDr:)o=6xѯ?̖oGaL!Z.!}ϾYaݝxk5NXQ2YUjVYCz]$^w~7C51%ۈ,S(x&PQQY/K]5y>ۛ-OƔCɆ֦vlv{Y'zֆϾm1"IQ(6PsWg_^gʚ>D9'"gDL[X}ݒ 剈n4֘?hfgCb$Uk`)$yVcҕڑb|7QZlr)xOp!*5bѨ֌G}5NbLJ""" b1:`ֽQjӁ5/#]'HyCvZV6g[X47SXje4aö#(Ǎ-fkQQY/k{ 2*Vz$0 =՘Xh XAY=U*qE8vyYFMRd?s:*Yq%hLMk_[)zVi&Iqo.⪵ѯ W~hOqxߧx 1u͟ԝ'6<,j)O¥H"""+>?'!zpFvZ6^ wNWGX~N[O(ցf =GևBj@3 3-=>rh&"""H5Ƣ0Wv|$ي-'_ >7g >&e\,JMu8vsDZ[۰YYaQhx]Ej~$%*!8xx}˟p=g?>^@sLl46o 4yi1q~н\C?ܽ(A5uQ *v3_Ps{:""A$NMYYe_PxxI܎半߼\l֠U&"" U1f^e;щ3<$*[w@Hˍ a9V#""d$;qEڞfP}6[qQYWSz7m"9+k;HfKbpcٛ :QaNU[cr͝>ľ;oK3Evc"Z58)&W}uƯ4">|cIl}nmס}GghUnETL^UE(-]~}H%U5Zmx}Gơ}G0Ui*5GDUs^)E jhVi.))5- 8s ܏SdG ~)hǵ8DDD(8E54^A?/xEˍ 8q+8ɉI!yJdtH(BUTظ(yϿ+jN5z09p"**emaQo8 2H; g_cؼ!ϡSXʸXZm@"8' t>Ƶdž'U寿.{Un6%csOI=QJ`Ƃ)ϗێm ~6?䏕<F"fEJL)jeF(d''%+%o۽ 'PpNlنGY E DZp!77[ŸNE8V}]YBI5N^O,CᳲܨO5'Ⱥ_ /ʕ 4NOk{+a]SkÁcql2/)*[:oE}e1#7f""""_ {Ō̙|?;̀=>5k+3 C^+4^[)ill;$!E|gh+kq1)7Z)KE{XT׽?#3 7$`(izC$b҄%169M5yڣ|~Zb_xh5Z5!i"iDaè Cǚ 0{Y{zek>+WъԽz#sڏ3h&""NÌ~ ٷy8fUu~~(n105/Vu(/𺍠2?wUJ̓EHLӝI*T( 8N~#sR,|s=>@3 b׼1U[[:j!*+%x&Q)E_[e`wUJW؜`t I>=s/,bն^4ؾTeFo ~mH+2QYg%W,QyUz6<ܚ`@rAѱgMo|k|$y"%PW+,LVc\mv)h65X} &xf""" 9ݲPeƱϧCu'+wJVf^ G1Tj^@i%3\°~wPvQqy Y%~uzLDD$I#B܇56۫Taa͜HNHtJIϨ`Z4{hZ44hdm)M);ɈQPU5}m=[[ di|ˠȴ)X;q-mؾڎ;/O6C過+~Z 8 I6bp7?""""|s͉R+WTJW}mEV$ 3-񎫠;=`HC+mxۉ2$ -,1|Q!~{0}q83v mXmŎ=3LDD$h=kB鱓rE4Mxmb̚?co[9h[g89ma㘸hgEʠSW'݌F] UYJrI߬Gq.* ʩ[Tc,ڰL}?tl!ta7/ډ~--nl}f%,>Zݭ SJ~LhׇlJyTT;d0TPUCE-CLKR[yP56-ZWPI뿔MDDD&61&/xe߅o+-j_a"3-S]d2X9RzRa͉My'dߎN ZK Aswc#%}ObU wS3JzT`nh U&"" UT ga;{N_`K?wJ<p ?ᣇ`,IW",80M-97(6]`a4e GŬ0 YVJ../?B?ËG~4a N99 dlrh2bYݭҜ(<֟:KpCRBNU2Sώ ז;A2QQ@-AR+MLwwK K 3b1:.N51LDDD &*x _UT5a3 Q)+C܍GHLᷜ\)wKa|F(XBBz{ٮGVy1' >2৳"i :/^3~v1=Ee>ٽv[ݭҬ b?]P^Zѭ(. o-~V&YHj -9(`q3;;[#0MwZzւ|--W;F)8wã&q"LSJ\j.{_5oVbt^DDD> ÔF_>)OgþP[9jً eP;Ǽ=zzh4hooG[[,{>k$s4+qxp{Φ֛yr"!<ܶ: ChkE 'M=CSMDsWzFDDD$d#q=-m~5)r*-qĂ:GqᲄklNמ~#q"ۺh+;>9(ɢGhjryNp`# E^hkS{RkЅj1sO1yƓ DDDyFىS?ѯ1z-ؼjݚP3bЈolsڂ-{-(:%K+Q́h` ~ڂ˗/x9W̝AYW\fӓvػQQUQWWu;㇎Ú+|vFغˮww,ܰLm:~PjDDD} rdV9Xg> 0X׭hy jӅa0<]ѪsrxjGϞA7'!6TZΣUTeGoV}voUl6DhawnP3WKN2btI%VZnCpͩH`o){h Z\.T{W7F}9mVuFm AecբQٷ bѪpWnn[[} ~s?-_$s̛>ሮtbS^- ~+pN SM/NDDDDWcsbgpBI>LKje@ 4b1oy^W2 11,LKf͟􌱊'xDWeOg{#"""ֽGdߖV˗qR=3_=9+E6yƪo{Jrq/j_ (j> ]7+L( f(bm vV1q#Q^"9!)Jܚm{˾sBw'sݩJsEu%KpŧJLi?}!]Kc9֯~(]jzNXefgg˶f)E޽{Cr+ٳ'pw_ۅTӅaʃOO|d=u $8' %'$aLHhT9X+on^ >F9[Kmކ(1,ڰ p nw@~56gsgЌ:G_? 3ek҆oj/ڋֵ!A2SD3#8'oBDDDD*zn$9ꏫ+m(,B;+~p;\b1"/?<>.Q1w)=3::hIhkkC[[41fO%&.'ƢFU{a߯//L"""~ښfl焨 pO?<96e$}$ftt\=1w+_ոfxB+hEr\^s}s,b"v}^DDD~݈,yߕgaXarNgY1x聻;z/Y*3rԊώ͆-FNrޯ$#}0$9g+(h@xxI1p8쒴qӋSn-{p8a\tO?"""꾝[~31c}3z1Ncw8hnZ,9r5.wy{5&&!!S/K٤m"rU[srR%ܾuz,{q!& KHDDgݹwr,$(cJhC0o[V5wK+Wl)$`?!A/5GDDDDҪ938^YygNU;]- IfDwK6T6Ŷ׉Z\kʏ{g<)UkCyi/jw`\!$d,ZWm|+[}E*% Iu!:^5oS{5>ޤh)pm,7.jf@̊z__$^DDD~CXaFHIPsmYhS^hoojj… Ya Ǽ?ZJ6PUb?  3"xpDN5*3Qrx yU~S_Pf[[ 9bh4CPP/ RT+Bַ6\v֭E!>y[V}ڂu+rQᣇ`,>}$qFc{)- y~,kږ;|pe_{ B߾|Q5{,ܰ y|?̉ZxJ,ܰLU#xyw%oW:](1yj<8?MLԶ ݿ> T_$<:_x """Cu+ CHN0`pQE[-5T޹e>ٕӪP-z y9ˍu+sQ\UsрA1)x^ىSX67^㫼2baCWDMV !|rj5{z)a` 4Fw#,S=]B<>2I!Z7f?X*F_: yO*LKDfZb7'""""qԊώaf%`pQj̷&|h^xȷvZ[[nGj]na{8DmG  4[~w5055#&. % 1׺Ƣ nfڣXB^pDDDjlۻ/M*R=i4ǛZV!A7}$Åj<&tcSl8e1mop̛CzfADDDDwt҆R+WdK 56'<(PV"577KҖ5{8-kSlI{aѪׄ}<-k^_BH4)`.>_8II5PK,k j~n{3Pe HM`3DDDg%$񍵲D1Piʮ/g܎f~1+xuů_p*hTroWț_~RГE G͉~91 Z\,[W"cdW>߼ -Mh&""">mW"|cdVT{ B߾>ˋ/j4`Xe(g9b{3..AAA|3 Zz\jwb\ٷ39xgx3\n#ɜ?#s_qy ~$mr&455dKO-mؾE_[ܿ C}s44U{whCw#3-7""""Yx <#DF"jT'Ux N$ FËr5 5|ywŅp=|̞@3]XrVh#F1C|~y##ׇXNX,r4,gy'DM [kk sInYI/ek_-o"""RVEu%nX&Ibuz 0:<E|t_Y78v+ JJJ-`/˅/Sl8e-m+gGϨ ꩁw0M߾}08Ɉѩ&Vg&""""|v Wy聻18ɨc(,bGoW ..f+u-|>tܡqc0{~/0"""3Ⱥ(.m4GOg`B!UftQJb]9C #CBB7Ig'Ms>Fw#$dif"""ӳ7_:v`c-Q'\WP_~e Z<8?CDDDDSfZUL-$sd%"9+B^h4ONgIڊ6o K_] Yfd\?vuZgEHWRVij0b|~LVEpb=(ur؋z}"#R2}}ᗮ;D@3u ːWuz$}b.4K ̛>JZz& I6b28Uu"LKT_؉H6!Ju03l+EVŷ@3՚} }I;ڐ ni[[*LY過+),ADDDDx ~{ڐ L }9^cDj|!}+[Qh&""*>Ru+s%L|+F Ƽ!M*={ox!ᰣYK,kԍj~&{QgeB IDAT}E|L_!oۧ¦ޕm I鋣%$R6T`Te[(BBB W? Fs[~S+t=҇UGCۤ2~^2 =p7#u""""RH$1:wK; n_PhC0 S秢ځ(;}S+6@3J=pVjpu2AʠB_i ~s%of"""Fd q?N_Yv[=F`YM * Lδ"vg0w+knT#Ύ{ FE72JYFwϏCXm,m3LDDDRxi oؚ#Y[njӅ*-빫&3-?ʋFo¯_2SaвCH Z_<iІo=?SM~qN KXhnmW|۞h&5 @ϞҽPvϏn!DDD${X5$Om?u+s<ʗYM*g,*H e"`D$ <.,|gO eZ}sh&"""$'$dÂQiy6$7/)ڪ`T^} 3ȅaf""""wLKo_U?jæRl7HFXTK  w.7V-z[@dH1^f~Q'x,(H fxq9v i*сZttHڬ0iFL}9GFe/-U9?ZUEuDa:׈03|I͈ڄkQQ~y mm`)QB؜xk>&QD( ZWPGC;/dRs kwCO 4B3݆VE^ɱZ6 ݄{aѪנTw~.7Μ|ݩ2h@FDDD]ne.}VyM E>\źF%5_K^&P7/^͜9a7% >d,~[BW+S7]nI2'"Zc">߉%ؼ~W.fvqϞA7c\ Ќ89g@] 3SEyU> v׃##3-Bg͉My>w1LF<53^DZe{d>1\}ڂ&[e'm4  :z5_n.e'NaټH^\\ϟwn2b#erI3Fluhk$Y{z__X߅!O'b OueOhX>v+_k} IHNHD.?DD3i+n$$~2|=\[Sxkʼnblv᭭ `3DDDDDp6$ix聻ܿ6l;rh&u\9kLgUd+7Jޮ.T,U'l^W=\}wS5] c4R g"" l7NnwVLE~B*t6lqY,R6(G9b{d =cFo8滲U}'ܶFv̉ZY^../?Ϣ^H6'b@Bՠ9QP<3I3ag؀!0]\xBJNit7b;plUyNɎU;v9I'0މ;\ Yn 3u͆-, |HWP*mfgp_"{u,}ua_]V&{է-_ڃ5051q oL#""LݕDݸڀtOvc˺?־RUv9wbFJ٠E^0+w0YzIv:=>-~WTWRJ rW 0#CrB"ʊDDTVDmY:9$s"tz8 a:=}%ߖ\Px侾VJ5=ViKϡCm5 JQo?DDDDDWQ@a?T5FdĴ)>[ڰRl{`Cs");vd C-|뗒jzT͂3-(;q*]pO? rfEg""q8u=\v.dUyE >{*< PNVx䩉OI&rfZaQTj> A^j0bJ;~8Bz sNJpm 0K/ɜb_ 9):U8Z~ *j3l>p$ag9Rإ$Oy°tE+NTu%s]lN@rBRl^5nX .W#.^6&lN2AfZPKN ZLIL>^iæhnm1`a\EE^4ؼne.SnZ)TWU)E 9=)'" t̞ sb`j2kF¿\ ;w5#%X;SKnU]kXH՘f4{`VOl yR ,}q!O{,bY0z_ 9cg"Tj2ܫi,DDwzwQv ;,Ϫ׃7,gYŢUutglY>ٽO"#׫#o;b/UcR,L&3ܹ:tttHCfngquü(Tg"S?,GK$ nrV[y\ߝ+Y{pR:)lN2KI|lqhC5c Zk"5sV 9!S曳q씴:=v.0FagGYVmYlO 2ѽK,ljt7b/IZ\MKڐ ̛>BJ+:Mx|\bCDDDDD 5ug|>T &&x@΢UP-fNKwnك?jA "=c,q7r8ZXO ܻmBʳrr=hk[}'XSU[kUsN`XJѐԡ+"Vxx# ; uz,>=z'CXqɫ?d=D7<+lOK)0<;iO_5nl{h㉑Iss3ՆA-mQ)Wڄ=OI>LKdyh"""""RNayU‡Mx!3O-mX+QBLL,Wt"&\G/G=&n dOD7P(.A]pO?,gWުI?q R]_6k/X,R4$Yl6  +ʄStttn?Kmvd%RD9~A{""UTWb8p'W[B9ی8V]tԇv"Wڰ)OKC&&""""7+vᑙGw[[1tbΟwnɘ7 vXAm4 =c,~tU*fq(sN!}r.j4DDD!44Q(/ =gAa=ɧeO2LD99vnê$Yg"=cl'e%~LL,BBzZ[[`qת-k)2Լړ=mm`ɾ$s"$$Â$HgnW.x$o{{߶OHm!Z'Aar/Mz;ڐ 9/zu$sd%~/GC36@弰}}h^h6[._wr.TN`Dv]dW>MKp VYxQWW+Y,R#e t:J`+Ae7꺑#G~))!"˳;zF~~pDd%B;Q+,b243tӇ+If5j4Ox9Fd\ 8E߿sS1yƓu H6 3E^=oQ\ۋEHHo;݆Vw)źF$ 5ͦ41,2_?#Gi`Yʁ_]q8,>%"IZ3a<x:{ϱZ]m3ߔgه,g)_!ALKCݭﯱ9v1!3'A0DZ'""""r᳣go:+%IfyyTV}Xɓ'QVv555(+;U|uZ}nX5>-CQQ*F~:'>f(/h"'s 3'ܯ &S?_ $?<է-xmbI3Fc_t6lq>X^ʒ*Ԝ `d2Ol OyԨHIIb+**BYIP5g'Mìc "rurT{ )))HIȑzp"E :=]"W/IڶFA\\_ z/Vmv44;z)\?>8?2̋:ځʅH-8 hɬqr;;Fy=SgEy|`j2f/B1'H =ԛ.sK>iG< x Zly1z(~>}XvbBko,q;ѷ})))9rԵ (EQQ:=Q8v+l}s7h+ xx&xj\q+shjvQ&2ޮjsa DsMLA?c8/$"""""_~*;RBʼnD ~mm7.Fٮ3^{UM+YIi =V> 0{sҀg"'4 ""*gf#wv 6 6 5 \*.$$11\.CfOyԨQ5jt@t:w(**޽ p1l,"GI#?,űS_>秃at^(vDZ%3-]`[ڰRelui"""""p! =W+BGG;Z[[ Aפ=I3 Yaaa4a5 &=p{21,<3}x6`]0]O韰rS0eTZ;vb >zG**xՙH *Q) BWxx#xT B싧ǔ)Syb}Yh yBDىSX26OósSj\fuPcU[k3!xwYP{o67Dƙt/guzl|}-x2T݈,üϑVoށB''Hv8hkwǖdiSXT҆*|vP C4xڂz;>x<軜N'6niyH˓Ar;SqO}vh sdۄ\zUl6ErޘX. E]0de̜pdgg,ŅxwXzp+j4d~ֹbfw 5p@^i_/C}]&+4aӊ _|L{^\ȓ@"|[sr6̤pϞ=a4F MMMhh Lb LDDDDD~! yUBWu"W=e|*o=hku<D*Q}ڂz'gnfOqcOrJ7o8 "o-~lWL&3_E\F\蛢0)Sy"ȫla + I ʭ9ضwe:kǎc>`0 8OHikC0o:3r^} !EbUs+'OĒ%?ѣG+477 2fXwzjX 1tGpf"9V|٢$s"]<Djt7bN;D'OAvK| pu(d .=LDDDDD` ͭBFAT!?4'5_bȋUP-f1Cye{d>ŷ;rH̝*Fœ@U<yeKDܵo6ԼHHHbb|ՠ;Pg ߫NErBO@*+p2TZ]sȑX:oW|nBѧ'"577*tƃ##3-@.7=?v˄իsf&:+X!bzj> ] @xx_-|$g+s٫f YD"_/~/uQGG;Z[[/C?(9XKbLB FÓC$/Vŋ=oRZW^h?&xO$ˍ.Gkۦgs_ U<4 h>?{/k,|+"Fdd0JM555N'V^ms xڣ|"c,ڰLmΝ $;ի7k4"8OB?!ep?DDDDD qzADkkېSL mܘիWQD>T}ڂzrY&B@r媼mj)ź;PlpAވ =uŋr5*0ʫ9ÂU.l&#G9"N'6nEn)GT< .8}цaN5]WP*aԄ gW^Exx8ODVֿ+cwO[p7)yW%pN>}cS]bfw 5p@ވ7q'p^F$^/ 5Uj3D[5nWd[Cd ;;{ݮ^(?v ϟW|9ӛ1ņ)`}G͉Mys ?:]("#%D^}7%%Vc0`3򊏔`\͜C)\Z톄`1A]b};MyD Wv9B Xd)&MzOB**ٻථ;?CHR[m+iyk%֎-@mm!o3UU5VY"ǪBHݵ3df7n=8mm$v,rȲM,z]!EL D(tdEATRs/~^{t~Ilsț'e[TgY?Eݶee+I"׵rwm][8(3UmOjjj80@6)MM]NboP. @yO~> 3OgI&*zl-XNRsXD-rm| @DOh_ɿwYM0==,nhHf3ì?'dbbBn"d2iM5r ]o#Jtv"!?Rsyfƍ'u` \}_'3#{,$630aVlr{n"9?]^b]ڼ?,''"-q\5fɿiK貼{07k׮=+ewI:aisP`r|ZF)Sφ +; zioS>A"/̀vJhv8}ߗ#=nDr5pXV8|DP&DAwJ_:;4ӫhHOepp@ i *6#{*1 5_i^*6&%Iqz&'«5%5w~%6 %aV*VTzzšn[OۿN5#{*tu׼udYI&G]}$ad߭ȥ+bUtz'X;=)VJ25uA:%iJJlN$3ɩo\i'6 iaaA#G䅊%q8mߑ6JϾԧyB3:T'׫vAyfg'4o\_/;%tÝʶGXd2aցf@wĴ Ќd``H\mݑ{X'g4Ohnk ͨ.W;6"wjd2!l"V[[k]۶?ZkcfUѪSX|h!:(>Du;d``HL.#*q-yyUMu/^t:e``H]fsff/9472qPgK*5'33  LB ۠qݚm ħ{{ncNFס"= QM 2TVbImXܘl8 #n[GpT]WY\F?IX'ޒgf;7FEi%ټ}\ȡ^isP ?r|T67t?r\zEH3IhbUVK=mħXħ)l^mF$!بh~ntҎHe$6֙u^5yF#aeP{nt4Mhv2: _=4 ?5r;}@sSw>*۶6V}Л MM.Xh_fq ,#sߍjм4y' ب KTFbf3~6q[800Z2EO d@~3W&lVvvtn qCv~XAb08gvm4@`t<`]dYMVߥ iI.#G&'>2M_Z};6NS">i'6]-vj`Ys``-pHX"> eb'ޒBsi9w$hj$4mZW(233Rf2==C{w1`y?r|оhW$J2Ь@ nZ&6O|vA{6J[s?,yi5&uw76撖tn]Ywmj`Ik)́JLZY"-Nl~忖Oh׾rn&mHߥK$6giȘw֤:YˁF*5ghkk7w iˡ^iߵH&23;T\y Lu9>E#ɏ&mnV#nxd``H\lUU]YLL7?]Kh"(͙\FUoɛ'Ҥm^zVo>gPRc33 I ۾kS%ܷվklZs,PŢ$q͒Az{#JebsFeI5餼i6 < hVъ55̺kWlQ,%4LP:-M *8'ht ,9J&&ffD!ڻC6m(zŵɸ\.+W^\e0fdBeY}X=sټ<ݨ29䯎|OrټIhVjV[n۴A$5@z8x[FjJ֦R9 @NlMJ>'Њ,M~42}* uvTFڻCmm4l[rc@D$ i<~DQu{6*IhJubs>٤%ba̺kWYְiv6,^5h&_}O./dTo\_Q. iجejlT,kk@` Pg7߷{XI>TjNIhU#0ۯ>VnSf`NldҒf- niqZ3aj٬6Kt r5ke[}AQ~ZT>:vIhHb(333TZ*3Fn\_/z G-r ]kk >Ͱ-&P'=I׋L_`T'g_:FIhtʱc#H "27DfˬaUc :ssڔoF (x$=sٗHDe;y]Z@y7੆~•+ {qÝJs#/Zl(zŵɘѓ{RS&IB3REKsټ>=gՏRP#dNXxOz{#}yU9yFEJro+oeuLlJRɖSKzT 2͍N9wlmǐ/%6 8+ IDAT0YmA {0V]BQ{6*PP{"yqqAiS~f]ӴRfeY"@[`ߩ[9Pywr6YPO$%2:}ʁ*PgC{{e,%S^ADXЊ_O' 0*ۯ>V.Ll. J͙Wef1iRsmm-W#,pGJۼ"?x-JpQQ8Իe/ - /Ud4zUwm@DDd_{delְMN9( 57C6Ӈ$F.Ԝvj&δfDpaiNʏ6H4zTy|ޔEZUr \gq ;<"WSt)~Y{7wG .pGr|""333WMh޶Q! uv$ uv9wrd2 PНz{#x.`Yy.Ћ?!羫Z4z <|>&jrIlz6V}B2Pt$G0-*KT5oK&Qx iUJLh=$4V.[ KlML]h% ʋV8ڈL|vAi!|0@0ءhUX4]*VjUT.9ŵ2 m)~n ꥊM%w>:.XiGtR9)UeLLhnߵErbʲUzҘe.%bRV^iQCjƕWokKwwD6ͬ\gXE8‚J8Cpq_/ " .,!K翣Ep-%6fz02'[}Nh;[]$6b~op84y<}J zY9) xQekjr10h45]aGL֪*5)+5rYX2b% W^&~X^J& T(#G`Z3*FzUv8JluGFm d2iQq:0#Ams?\&Gpaz'?%yViH;$NESfˬ\gXETjR|^ ^D"jgԻr43zang'ï*\ggAmiFLh>KB3@3͍N9Kb3*+vw\:;_MO_!0\&'܏(_q~~d2i?[Uj6:2 *2;!2NSyuDZstNwI=viZ1: "m57:噮]ڤ4˚bPan.t^-! U?2}5N`aZ?}mDWՍ[p+Фh‚f3mJ}%U42TdҲ!&'"07N%XNlA8NU;,3z`TB$4 0$yv6)l $+kpH4O` ТhՋ)M_ˏq#j.ZU,en.i2k׆R~M\.P4^zTK}QmΥ^P&^<9Vf*5 Ý ]Cݰd2Ab3ʢz5pG\f XU'?Xb!0 Ax<01-Vy)lm%*?:y!:HC\F^>*|U^":;*kX,lbS(\3,Pg$b)Km،J攮`z'䌜@ ^W:;,`ZR=)p֭1R3tU(\BC3z_~j0K+s"DG岆Ua~$qݷKB3,첯fXBXLF؋PZ~\f *k/R:ў`-V-..H*5g穩1mRcRII--mf6BTB X\F~Z{-*\FY{GTbTJ "v|U.ӟKXu[[!`:$6 R9r">q:.q{YvaGޓӿ<+)-ZɤeaabR~weM6U4Q(t\fzZY{/* , u)~Y<G` R*AP젣Q ;\rhf) 3[XXPZ/~n XB< 9>ATVif^TJP, +Zevlʥ&5o6'Yd/R-]!ijR95`*AáTU]GF&4ko$QssIT: >OT&kq|=_M(kxk׫\.kHĕK*lf*5[G&VZ$QwMy-50g')`qNS}nqQmEXVyI}K}vq;5Uf^=ʊyPFSXYV&u vf J kjHjb4bNx< >OL'5(}I]`߭>ɤ-QfJEb3Lx܉键GfEeP.W   KRL6n2p(`Tk՝<}J>:X' jAQVfdb&PC5) ]7PCR՚a ]]O/PA:;v+kOR֚2-- ,[:+nsꄋpB\W*ts.*P9+2,,, ڐ L*PB A*yBA,Aa˥&5Xb-TViz vT=ʪX~-I,??X\*+WECfbf&AB3e0"y~:PZ $x,׫Մ>9CPp)-Ψخ~ecoJ͵u\=&JswA T8өe&JP^*k)k+˚ZLBr9}g DF%6'LzZ\f T8yTk^TViz&@RYqqqAj6iS[qWfNO*mm~&Dgg_!ܥey[Jr8EP USUkNHh@!# $~RYŻnJ|}g ]L@#PTgwlwݺƽtfq+Ǯ*4TryCQ)U4U@uf3, fuO&P Hl$6W!UBﺁ*2{:)eU)T}.$MM.%mYfYCm_(%y?vW;+ KUFe^{B3\Z踒\ vT \r2ZyI&$PMvuf.uidkaaA \j/Wk#ڢ@#P=B¾Vùb>r)Iɬ\p8~)՚/ǯӧ*4W%聓P]ex2a՚篓 ~=ud*r.uIia5CN_U v(S(P>֙5JMf󲸸yjͯxB%P>*'EC5_uM&PLR3ԢJ3TVkN_f˔qliq=v. (Tit:%*i@@̥eJ~T3՚3.<;4$ ؼ ӟ\a٬,..(i/"_q eTUzTi <\VfdK͸V-]ɊŢ\WV J3Qrq %^>vU*Zu)iI岺ŇfU\O.I_ArvX`CLy#J|į&J+kR=u*n?ڬzrX5ye `լl>zBO@ifU˅.׶^ՠED6'ڻC\.KbsXXXB-vL***4|> T9՚5w;flN K5N57O%\,oxK2WA @if)*I2-&5r fVPg=9IW{P5Kf ;erSe|u՚$kJ̸v;f3?]@~neCfwAI;Lp3UxDn$6~O$ŢFJs#(Rbm3LHp[wH2)~n%mQR$7|vɤ1- IeQLK^!XK53yU&0>)EDŢhRy9$4z uv9.5m3++z}ye{x @|,Lb~ڈv@{]PMqݺKvmfin vMMtf5yL@&ovnx< KBvUJ\ɧl%5jntʡ^ 5rv8< ~pbM&>ՄV`UUĻƴI͛6+6D٬,NTV|q5y?Y^gr$tOhD ͍N9خK"1M-X,J>`q|=5QUI<jycsߝђZR]fjU^?Ī8'Wnp0Tv%D3f3o}P6SO궽B 33 o"!p_qU;*ߌ{₲\\WJj`ƝYa*gA |>MKdx:߭^WszpMfgrI-|59Vcu1KRu `%NSJRqS˖G@h~sUײmZ(bRXĪ|DxUc6*YV]κu5f ݲWJj?~7WI%QTi늪:8'WnvS7Bɿ_,effF69u@5ުkbs"_55t: (Zw (J7.rV⽓Kj6%fBb&/p< +rYf B6(X\TTEeRun0ZZ@EٛSRN3hay"9yep{|t6^8N `MTL kk@`; TC]!5l/Lu3UP.'vN.=7|Q,Wk6cjĤe\x&x<%ߟ$O'%-?Lex<2sIj4XxL.# &CIͼլWB!Bvן/ JtP ٨Z3:'0wjXRI69F+)pwLʋʡ7^f){  sTjNٸ#`cTq.u_QPL*eJڱTn[WwnsW@Ƿ/j;MM.xqv><}JtןPىseL )JRs2>>.tvt,$ ~Sc}mYp4ozU_)ͷHҐqnJy>beAfhqNPj%SԲ׹XzxOj9/$ 2<<,dlllU_;-^O|>\Dzfp ]6``a uvvv nX,J"1-H5`.q(dIeJMnx㋫J_G vG3,sܨyvZ*y:r1Tw|Mj>7y^ҹ8򡂤굀Jb1brh8wK0 w;59V*t<(Ohq|kn e||KQ5fY*v6NJL^Y\esRAu^XߥeRv;TR) Ȟ=/uŋS^qmrʞo<=mk.J$R, B*v)X@+nw-*YQ&w&,oxmt:m> O# X\ RIQH*Њ3$䬢`6ѣ؟t:$7UF,]*SOkU Ţ$ sЊ"Tj29)JJ$ꖧҥ2s)dϞtt܌+nm,L58-af*R)ƗMr\r5a FFj$I9;q6Xf388 LoKY٣Р)@`l\_A5e_{Kc/,h|>/LZ~w^HpaJR9b)nqE Ԝej\m=Z~(<_J#}hccc~ٿSBôT_b(6[ym,7Jċ'B%QXl|MpC|L`M"\Z 0f#ovJBFFl(p0"۶6ffff{7]]fj VckNbU,X,&GGҼ^oȯ>?#v8;м$NOwI p,MM篗l߭d5=,fƝ!(**5l니'ѣJo) ׾P[.pvىssi2 Ey0o}@ަpԓОoŵI$2;$eư\^@tuuΝ> +KhU:Aٳ'(%$iN*7OL!JݖJhРttd|| SQS(\+ +M]nOs:A}Ǘ訄BݲsO"%2!oàeYNWy`q&4~ٽMRK_V@9. uvUR_}!\.+|]V-M*P!uccc_$7Q16}%N g` ]]%Y3b11(*~ Vfˤ_qTd@,-gOP ݗt:^>NsssmRsU;yTmPFKRY1gD㟫;PY jPgl+LA_JX&y!n566&O+3 usJ\~#*vi@0rh)}NIl)zrmrʞo<оklmG d|u8rVK+<2]2o]*,AEU+qYT{Dzzr\/-XE$>éX{~zg?ʞl6n xLM]PRKg,%^G"}jU8yV|\vTjzM?>O X,&ђW%XJlAx@Ξ=vkkd_{4Աr;/,h٤֊~7A/AP( v[__R/^ qx0Tr%ŲJKj~7+e"0y.S/Ar0@Eγ dRq8$ft:رٿqݫŤk\tIl(?r?Xm][4uM,.LabIK(s%j.(8wecr)%W_Q;9r$#2>>΅C4Xnfpl2Bᚢf ,͠>z">OOOXFGG9hn.JRrmF`pϚf;*ybؘ%8֑ SOrq"[[|;LZe%+ eخ<Œb1 pqT|L_*W)Ho`s*4[`f+$-zYJh yZ[l3d4]~R3K(Ѩ9|> k{!pOɿ>P.)ۥJa|;333JVTb:r`>Р "H_M*4}榦]u~jꂌ b_ 9.yŋS usk) vrs9kkk-%5o66剘 ,%4bl/NRъT|sY.*Լ~z C Ñ#=eW]^M/LxAintram\_/|; JeV ^"7%MzJr2**577W=,c`gP{0}`LZX&XX(?fϬ NS:;$헁/K0رNѣ25u} yM'Uz}L S1TD߽xqJ"Uq{zšogk=#saU۶Q7kL&-5~*V9ztpKcCj\,NS4 blWN*Rs5k^߯^p>Н|&fv۬pf@EfU-@̘t:;$ȑ~6Fdt] H$MR3`ъzpquh􅊟skk@`;X][ĵID\"L0]f'c QٿKc^Wd(3b|k:w›JtYmmj| xqJ\HЕrMLRsM IFP1\O pJJVv8cFJ 6T,Orv2Wnc5%@̤VqToT܉>}}]m?, uv.*f uvުvŢ$ ~ ۪1kttt p`Ic^^W~{XڦhFd'gdQQZ4~`0zBC4՚9_s|Yo%5SKT% zРnH7W0ve``8^<6Ks +39UMN>eF.(PFt< MTz5;5uAjٿs))yhh$.JV˅HYȑjtjЕjY娘 ittTՈFyvHo>ƋL'O*j cMM]t:]qk)vk &yek=o'LT~)& u[SBpG\opp&Tj6:(f<::j>Pz[Kq[_|63u $Rw݆$WTAupa425n_Z}^Et-U\P@R_bQ5 մ o__DLO<!Ph#fB|3Pf_T9h-@o*&S3qRRsKk)wvg4:r┩KI;,5< "Pgl|;LZ k+\wFG?d@ň_MBnIe}xO)gޚԼS*.%*gj)J`.h*ع7EdhhpŤ#dyX̺r_ܔbFy9Ynon|;333J 7YQP(RaZ &R#NjEEejYi|*V[*ѭI +=، EAJi{,BR3v\ Br`CCo<#LY2nQTkktp=pk+-..nu3@U|R K'xJ'xqJ *b1t*b+14oxݺhr:6+xTI/^=`퐞m_i={JMLRh ]֙LZɊAV0>>.߯v?>&##ڮ@Q_[#O=I ׾k6i6?]RJ֤:̼ ȍccceP;Xl#\.`TJFGGJnMjFHX_:H>z6"<r A"\ nJ$k}KC¾v'_g2iYXX օT9R֊n/N}r`yT`+qBcK닂6+u5p843>nY5'V J_=3Xs ,Dz)MmklHi47:}MQ,%Llu=7B`@8N9My|6i;m}S춻iqsv}5t6yͥO nK][4W8 &.c0~"`H#sNNߌ4;q8֭[xgW"yg8 sd08 D1`lll6.NB5'$0!DSxwӦ عiVf&T!qa6b9:L&_RDDDDDDD8Wxa qg(ߍ35jlvcӦ Q&"b$XODsefHICVO=Mn<9H}F#'!=] DN6)߮b FUI>uZh&""",.k9%##9 XFlͶeee"//FcN<mfh$D _( ˋCbe~u!>pJyc$ IDATz.GFFC݀~8vuuuX,0XVptn?;Ѭfp"`5s_knq"n A 2i",ڃe""ɵnIW;)Յ8F8#"""""""69_RYcll /^d]P3L&NBaQ8/ibb7  N " eeekV"v%Yxyw"""""""ZX^%cV!0 Ihq>'hukL&\@CyŇ'̀l$\p88 D*Jn'7~S[[ 'c(} K/rUw;C\^WZ 38 UUY9 lܸ@edbĞT$PTSj;qUUYyݎf񹕋;6Q&'bjy82r~"l$ޤN@3P vg%RPrNE xIDv8 m"j|CMM㧧EQ8wm(_ cxqUdhSYAD--v ?"RPfɍxcdp"(H6)C׋=+,>(ed;U 0K11_ inbYI4nb65@4Keee5vZDIJ\qD4&@f4TftJ͉$bSQc˖[6~&A""""""""HEHO7&(E C͜R.yH9غu+םHnQqQR{#XI @D3w|M<~ AQd۱sgqߝQ$ie{xxly,OQVVƉ H@rq"lܸ z^A%&T\\l~Cn977p88 $+a&x.YhN$ب\_]U""""""""%X^EY>ؘ:ֿ5`2g[(iuZc 5`֭Onkjj)%&&qsHrjʐkT<a4qtJЭIDQGՅ&'r''"""""""U:/v~[ZXϚU?xXR[zٴI$JL&kC$+ޮA7j6DDDDDDDDJV\EY>D81OIfI8~B* ,jlM01nz ;)f$&&rsQ42[T޹FXpQ_ȉT"ch',&& uu lv$cl;6MH$60n^~ iQkiRu38NS 38*S8_ Z]]=z}̭WCyQ)\SWz\4dcML<onμ-'D:GJS[ &)fd2q"~//BqA:wj"""""""Rfz066U󒘘(y 55V4)7RQ,im1N۷G"gJ{n^oZIa0PS+ssظq74D\ɛÉT! .{< ;b^a0l6^6~&7qg&"""""""s+!=-E\Sݼ(&j+M))2XF45347aÆ1.۷1[C1GD Y#73 -[l6b]|}.)s39*$Wy^Ɲ(++Se}w&tDDDDDDDDF(E~/ښE|+15Z tf3u| [U^@èf§Vk"b6KߜL('3GOj^Lmv].놯O^WHxb9s&d2azwh@w||n">ለX^:/cccx,$cRYaFY] _4HD|f5P 46Z%`raJmCDSmO=5f }---aS*hռwz%@tED xq' b>M&' KDDDDDDD4 `HCBVet:b6[`XID4VYD45b`@Clڴ!j#@3)Vh`DܡE ?xwJռ|@`ÓOn#֭FM8B"y5od[ZޏO\.w|fÆ ~Sˋ3]G^;I< HOόHLLeIcv` oLz԰Kwk"{)|pQظ3*F44`MEt"2JKJհLDo(Rjkv3d2P]]Í{.kL-)>vrwL\RǞT+ jۅd}CK~Y 2/AIV\bbn ?W1.}Dmw5^3clڴAw5<PxY UJ+W}p8xŒ&7zp\ao!XV.Yǎ?fN13!SW3hSI5WJjz'R vyܛ-[j6"6lDMMb0Nt#"DW:;H]p" 9mzy6YR,NfyeeesN󧲴Lr2s$].14<O؁o'gf3,U!gQWivY?IOKV.F%"""""""EY(_(9ƻ`^lnJE 5ޔfhCCvo=ac;K0:#"lsT+9Ѷ2'Ɵ-hFbd*Q!&'Mj&;ǽА$Qx|id2lbL9`.˺Wh֯. ^Gѡf1"hM0u|_^^ƝɎH,aY2fH ˋAh{p8ر6^̪*+V+uFv"G`y9wyrUrg"ۉCw{Rfht!gARV լ%m )obC82L4cFǕ=G8x樸 ;IO\NWjms8 ^cX`5c-d2azn7nKH13+bnj+镕@p믕;h{H{**A h7G|$K#BW^--v\..6/M uf ʄ\T_ȉV9QM;v4L{њIw\XVjb\U۶}_e|)7 D)- TY`xxXnFcmF}}|& ;`IQE]xMJ8*Wp{:?tI@TWLRȉljؘҦi9P3)n7˳F5bh( y̒"NddCKg۶ZN&Q|hnM!d2j]*ė7MM6/@qA:7Di)Xo8%ccc}0 N'uܙAU۶}_1WO>۸q((*=I\!9,*dO2V&&&JRiCTv;NDDCT#|1C̈́'q"TttFXV[>߮_Ɖ'"""""""s+?~QY}lkNH`ظMM]ssgH)u`I>'P8}n Nx9R'D, hBw?Yri)l""""""""AɉT, wƍq㦰z=n} 5D-ZP3e%+oJ D$w+KcnWUvsl_v\p:l_&iuȎ:_|89zn:g5*.(&EuH q7yd_m͉`!vMMعI5bӦMزe+ 'n2iYIMLL,L ;H6. 5SXN|v.nryMDR`P9^>~]b'*JVo/s2c2>/8MDwߝH&W?,c X ]Q,*`aX͐bbAm6a`%}gkbjպL1EL JOL3] "ډ3ґEiaZVT6jj&:-21wNqD$kBXF ,CB$ plpt2LDB,lmoCk{NtvdWzxGO VB1tȆNZ5\R4 JeR#>pJ@`C4 %t:juD0vrs@ј{t?~ߺ'ڢ-㽶a쌅lZTފQ?1Ԭ 'CZݤ`_G٬76us<=Ћg(=--DDDDDDDDaP\:/JlkNJJB 0(i D$ͶW82z 'ppEh$?8_&)0-+A]XZ6jCT n?<ѴOD$ 5eRjp~qyw$ IlϞbϞr2Hq # ݇7 mYf^ :VQ ,-vmBCʡ-ܨ5fF-|ZjB4ՅjkNLSwD$ &"*y lژ 1>V`mݨ\^ (nj&"D.*lu9aHff?YC';;WxnU~mVLE @աZ;zNfrz.*ڼI:V?:ug';OHQ wl̬Յl& w'h3]_Nvv3({?Nj헊 7,ක1IգZ(9 nl J IDATV;/imoÉʠ3["#/Fe|5k$èCDBl6!+7g|)2lZV_qv;6ndq2L: j쌅Ȟh `IJqb0l_!M%+d^zjo&n~oa Lei9Ǣs<zt%/|> gj6ʐvg V>mqVۙwk:?t 旱.ʻ%}>lZqdvRǏW`y9w!$!',,[YZ2hr3}nz3K;p[xj<ȝ-N&(OmO..(x5Q(.(BqADݣWz [ O4:4'o&<`0d=#f ǴDu ?l@.nvyֈ-f1Ԭ2E/$XD{իWoKLLBVB s\XQQ99(/aHnݏGG%~xk ]Zl_{.b擝OH(>^=؞Ly=xu~3}f""""""8\2(d. /k<|wTdꐦKJ?Wgwe_MUD[ŋ$?;  s.ENnyyƉ8` M#W&dd^W˶ ^/dF5UwE4/F\N ǓSύɚIOb|o59Ck e 5#)11 qqq4fS]ntrt0`27 =所V0lX8q7x D21,͇r{rɡfhjjDY6n̛^|T )jK2}77X'Lw)Tqqq](ԩP3E7҂%E(.(XPfݣ%sOa-0S+TK5gH^x%fK8{_uA)JTX-ʘh f-(jwM{ W1zED7MepTޖSۚ~t:}4;d(Y0p8t:n! ܧ &Sٵ2շ;{Y٦MMA]b2 4Ǟ]iY6SMMUWp^{z&CgTp|!]`9x8vV7\{y5b"rN%+3Ѿ ՛ń?[)&\ 4'%%byiHJUVg~ [b?ǽb-tZ0G@0o؍ށϖ9±#єzKੂ*v' >mpRb<nL>"㈳ 4<<:8x5v`>ˋx!Rbz.lkx[srVwn8iom`f)<;Rcf+dQX4/\97{0|y/_E ?j-Who."iuZTZ$`;/J ({<8;P ?OfovLN֪r2L9CE k˅FqA7Q, ^~!c[F݇w5(7{aTZd_;s8wރ/呈}aoCDtS';;uJXR=BZ{gz[VD6fQYXX@gW:;{ptl߄5ԬqO׶_Xc哚(Zp1Əs!;ywo?円Gmxcew胫f fGyttǞgřQrypp[?&Yw6-m^6^An7 s(7:755 g*zaYLC)U0l2;NuNʫ7+Ǎ1Ic^d >Bƪ½k,SXq,|5__8 )/!O63}&jB֮0HbB<5c)+Mٜ""""9әgtm痷ayQbt3?~zDchhH8sN-ÁFl61IWlyӦ B.BxKo~YCu 0*nDp󚪻{aDH[OnAmin^t3ڎV:|ꢇR#;;<| +qz,991:Ni[w GI 4\';\9tWPT8#d#ma5[oy`7CD$:Jni>?>ӏ12z;_L4:1heb0Q4IL?}0<:ΣvtܱVZf,m~/dPͶ7neml ix%"󡥥eRX6Z1kҚ}d 4X^ai!c:zTU.$8)FT#9Eu&ٌg`XMIѪz~j9h%7 %zK!|Q@H{u+Օ1{JK_N}>[FH#[yQQ y_ՅY`cɮs8$щ/DDDDD$PL .<8\gY;=PPe _FyNII ٱAhAfs:essX[M2I~!#+%zHw aJ/IRR"̟Y`΅}V*˩@`PE=>MM7(TKK 6oވ\#Ŝ$'|rZ7f"FY!ch}mu[swe̶3pWW~I=q,~oZdg,OxNOKhK3C̤#Weșh8{xxRyKoCǐ1_l|b[f׃Ȅh0<, %ٕ Sp{7Yo)2mabhtwb>HUCͅK fu\{tlㇻguäx 9[}w """""?O<#* 9|{AN;ߊ^"EݹHP0FF.#11)"󙒢Ȳlزevo.455QHCBǩ:Zl .Z?Hg0L?<%YنfمE4ڪ"5TV>r\[Uw 53LD{r$ErVrob6CD4Ek{6=*>,;: }x&cjxn! D43^˧JOKF!bhxRhȹv4-g̷cq>'Tc{'ދ 0L430wql,KÂmߊg?ٌB^6^455;udd#3+'̅PTSCAwx~@9L2^jbL4{^44$1T%d_0SՁ 2lZVtFQHMMU0L^4~x5'&yu/po㴶K=NEYn(B/CDa 헲/WKs_rS,~GC\-gDDDDD 3IWbkeA itBB02rY8=p8mku8ر6^|>v`8yƴ:O:~n$'T!\#, =E4@3ߚ_[u7~ʛ|Ҵg%qK}"vW%a$CJJ#o_JD^׶_XV^Wz.)rh5_j86Ts ٻGGMKi4|z.H]ƮN8=|0V"'piDNż#^쵟 3LD emkz=kkNMMŋ%s_N;v4tn - UEIm><ӅA`hUn7vl|v  ҢJG@.Z+Cjjxcjx(x͎ysIy0a$KNJ5@P3Mxac=VŬ#ܸ|c,4 ґsmtccc}0>/;66tuu>Tp{ c|,WM#}.y g&g\)65+W,UyۚSSbO/wokwcma]bYcekd IDAT%+#O-Кy5սmmV 212zg""""R]Dk{//8D uϋ8(=7!=Ʒw^dYqw⍥@sFV:-·iY h:BwM>* =3<{k *80;"lNa 7 #+7ڤژRT3z?y +D7%%`HI%,y쌅S'Hzz/ Kkl'$cn]od}E˷{mݟHmߔmPiAf0`x$N/\(eע4_;,m0~zXo1466n\ׯҥ0-+23Er.INu]s.S^u""""Rs!wNф[bb@X0 #qcll,Mbw#3+;+F94ՃwxT 5`󡰭Gy0-+A|Db_Aُ)))HOόz*fBt~[ 9ٜ\" Ɨl2V@/?d[X6:Չ[<"\QmD {^N+cdq Z<+M<%"""R .w1" 錬RCiiE%h$Y%.]#IԠ'D')8&d,V?MF8yo^ \\2ή@vvfTo`CRpsM߅1/]xh.\a?1HZvr"H0w?~KGQDDDDgVU?R?RŘ7? #G 2=\(s}/߭hؗtW/~|k+LȚG_}`oA͇046[&4qo?Z n kޭe*W 5?{U% a(%oeXJu-V鷔^Dӭߪ.-45b^238  y9g >|X,CS?<6"IS*Kw?nf#j9סhhWWW;*9$ךO9(H٣jjk.=pcYJjd5SW߀Kװ%iWyv9 JʆFWFfHй;:wY__'Psxv$^0qbȎ:wFHX0 }Omo};`?:t5Z$9G!P TׁB=dv&,cN /mauk/^^^v۩vjn%X @t8h j@g-[4FXSR$16&9P@֚ZL>Nu lZsMm 1fA vnƹ "\c#UB`_uIإkC8 D$y >5*1r#xo)\@Lh9Zycf|ʪj= \"C_YZ!";1Wdf R_Ecc#zuA!"""K%װvi<}af"r*ɼE߂  ?f3 }rO: 9C% ֶU7&n® q!2 [SS#I?!\^B{ľ͕U}Q;1q3e:quuBgK 5Cl-l2jDHVEL,twmzT- F\x T** pMM-2rt'TUY*~w0ZLvݣRᇔC"\.kq+C  3k9 D%nطZ]xo?P'3G#$E<+7 Zvq6H5lUYUsyhXE+UMՙOץfo eZ SvV./q33soiK wwwCͭPs3 g&ãHp!SyC98_p)M"'2%nNxŬ/O~Z׮D?&]}p$ }oDw1gBF]}._ޓPaƀ@ 1LDI}}=ԩhaXD5G3 fVe&rbv{koĸ96/wqhK@f~<+o}>]%bjv.5#(՚lČwQS+/V!ߪ,q:|uxӎe}}** ɽK*tB'pV"5e]:?<6Hncu(T8D$ p3UdH@:C6|o3LDRmm-|| E݅h t P"'vPJ} 0Vbf[Sd+%p 8?/W葕#G+% .6<1|`GN#vm6GDwG g nCܩJ3t$Vbٹgf"zT"ڛLB_x?͸ԢjYs:6kjjsyUH|n46.3y_ W#[%:C !bS-;w{gd?x$j,y[.cjShhQHg]K_~*DII]G.?+!?Ndv; `ߺ]𑵮RA*3މ,^WaHb| ۬0RS ]0IY=2ލBOs6灦NDG Q w>$a~xy(}8 DDDDf{ *ȡ B&󆟟R`Ƭ30r]DFUPų fšE; U1X>oTE;ֈ RI\.\ Ma &١ĦTߚmv"Z ļ6^:_j0}qBDPPPh ^V:Jd3fs]ޫͦ6W$"U!_+PS[#Xy.C nkf#f Ch^y3yzv񯪲d2F{ FLfֽ^Axg[^qc@`s<OI>u<~c!p6/OS9D4Xu=;ӡճ23u,Uk6hl2‚"a."b6v0\.XC&u܈\юuQ۫qX񯩩d`݊ L&ËUy{yb͂O޽A8s(;k-w6>"2 ?MգoS|Z *̀t+53L6[.#"LjOV `TXoxuI_%|QWh6-Ȱ MaQC̅K6;^AX3%e@$e{21=Zû ~ 3 uXjs-¦]a0]Sjn߃BDDDtC?]?PG#3H\]]ӣMsuqEmmDc6Wb'\\\k`*:+9 ֞ P羝oAQ̙\< LX͑A~mh?F?O"a1t (nSN*(B@Amm /aܵ~siK gz!H5)4(Gֳ.]|ѥ/?NbFyv}1孍|"'}vm~jkv;֋rcbI\_ ^ w`Kb 쟞x mk770LZF‡+{ndť`Qw> , ҝy˼T62O@TDmlLwڷ:^څbL>.ـ2ݯ׍EkW?Aڲ62o/|} dRI$y'ӱv̴Izj^!=y(ϋN$-Xn$g^Xvq=eZ,~u_[>DX[)}$H[1{^p2L6NWn]7]<'Hr%XZU㹷d~'a\\]ݶomO/[e`swODYEmKxHnU{r|d>CE8~af"jn&""Lg†P\y::wwdp}B!]߮|5h CH7K.˻Ԏ# # 3y$L gxPpy_%P].b\2l?ލJs'J́?-J''گ۾?60^DDNl2㿞y ,> O'CͭP~R sI[*3މ4HϽaR{ 4s{_ܮʵ- 6r)ժ񻹓ϨA#~j^HԮ|{l/9Daxya⣽=9DDD!l* ye2֎§9삐n", 9Wq҂W`2s憮]hk \D&F-{1¤@KX/D)䬄}V 6r3Ļs"'l;=/H[R H7%KR뙇$tk2٣3Hþ]y/$@dSJXZf^ &-om @\^"lU#߻WaqxVngI-\UtAQ.cߺ]IZ`\]]ЫGcݮ׺u0pcrI9A3:Sq0ȩٞ pOU _>EY8JQPŹ| ~fйpqqR;;Ge^`VH",TvWmzazj!V&s5}]?tWh<.ŪZmMf,2ǘf7!"^777/CͭP(//j _ISN r#iG1w" 3UINwdža ?9v7P'a@tC޿XlnuiiflڵYc"rf]Gҏ; xwFn * /C"2ԟsia0U#gTVYCϬܱtzah9C?]Ws3pwGp"S-k\^ 4Z@@@m]x`H@{ ,"3x}|+miOZBi,lb.\)ôF9؍-ץ(ª# D}QUPZZ"Ů1LB*/Wd6 x mf#.6^{AԉٮC)y(ET&f̷r 9k>-X{Qaޚ|Aq~C"cxPPhfzk: Bo^ f*l2cUP].^XVoGRKf|@r} WF!Pph?(Z6n vdb^@$BCBzE\ 5ͤjQF`3pd zb%VRYUPų ~L{NoND.Z@@@6MTJJ$L}vGCd's-DR1mk#iG1w"|63# PLJa\\]*ZۢX7 ֞bCa[e/d*|ЫG@A2 qE:T8(N S|Cs0alOA^QB" S ñӑ]>|J8(~]/]x,B1#ٝy<1..SdLj^IB`[uQN5C6yScc#zHL3Xj"P34!V`񽂷; XJB^+d@T,xIR$͑DZy^V۾M¶=I58f ͯ7xrd&A1?Y }eboBkq0;* ~a|(;|:gqg=v"Qa~xy(}8DDDd7~砡;8Po=A肔rxzqZXɹSA3Z!J۶TY/ժ񻹓GRm洛]/DE`d~'6h <4 ~$NU#HI`HHWCa8yE:T8  @?;ADDD`ufpuuAhps),7WXVV*Q]SǓ}'rxGSݵ]U{fٹ|~c2E$1ͶVY}|hte۪9݁2s -Er{ /<m{i[++K.L.bfVWj C>6xrd&7kL̚­"fJBVMR vdBVk^7]<Ҧ6ĸZ1Lb۱ o`8z.n]`1WEΣ`."=:=/7Pף+ڌՙ/F r sarazzc5O@  O)+>;+[\?K. D@n M~lf0'x=tzyrXLv1L$ɌEVj CeEe1܀!}U 4 QYɹjl3nMDY/cs;BS1xQfZ`8 11jhoVc&ɲVqCiwO ""V[3IP7? ߍ4UjhtLX!Ar; `\,+!Psy_]"h`iO8D63,ܘ/^ضjNTL x*56#f8f"qum/Suۧo}qطn|d>LP󑴣l 3 4; ~{I0X]>xwFd(hM[[+5MWjK ^`nRzo 8"ط^9<c EHPJs?v /? ]'e?1y˼0U[љP6T4eNFҠ7VCoFyiRK iڼ{) Kx(ׯ qz7ow@ `f6,&`a)c_Gemז*(BxdM2 Q>sX>oD:zfCdZkxu {kLf &Y*DfL$ؼp1A?*#x;B7mT.,mZNJ[WA1[ݭXξ>^qCH`t{C((`r._hU6|<ꂨ!ݣKz)UBֳ+TP6 UMt`_IA'Ic`.\#Pճ'!d:T{K߷ ,QG%vyւ6@$ o/OL~ꈦ<> $Ι6_/bS? 6 zܺ3`$'?'BeZYlڹBu×~jAMrm*׸6c\@S8W|f3_G2Q]S΄kF *I2BsD9|U G`1XnR5|TYX}Wވ!Q4di1T!PBm3)+]|e:qNb->ۛ+o u gb񬥂gy\VH=E 4?3i 4w\ j#XF{KEط`3?_ظZ{$ f?ӎ"-`mnڵ1zH0=Hh(Ub!}ΑTv*y+6Eg0 -<4fj-Vg/ύn֭5J{g >ߪs]x"H  Nw7wy%Qm]=6>3K`aWR.'C!(wwIGdfĜSg*0\Y!P$ؾ'2 pMoI0<3i|T]. az`{p QZ7Nds;f@  9öPrvV"˴]7l&jO7~&"$.& x}˿_<4AŠV 7I^h5y&zt mN;&H;S5Q703ljC8#91xAV 6ӽ!ܸՙE&ۭњ7YљXN[V<R%Wav"C11M VQ#2ePף+gQ~2(,5 GesΖ!>=n :K7G@ЭoIH=.hXd߮/LʰD؁^@>g<6.JO~7P3T5{L,J$DmO;pDj&^-Gs˿©sd65p%Ȍf#fG^Qh1 5EJi6剸^XCtLtxYċr{҈&H4se-l:(ZBdbڻ#H;XHPL.Ò{f-ད?b.qf[Fb#qeX,6 gm>gB$߃cb[yZ(ժ1gBBVUMqX$^q6 X%=WЅ>7 E?tyX8""}\ K(TXQx"W8YKM O|X8(}8DDD܆ҐWF<}%1߫!PjdW~r ElT文OЩ$ {?_x?|mغsAOaUJ&3>'f!?{3& T*m^ +Ц6F.X%TEX>o(fq 6^)n ׯp$Uv]l֭{ozV__.]|\z۪6< 0M[V1G$) b"/`?:^%jK.\CE5.+Cɂ:nnTԡLgj:jKЛ6Hͼ<;cH0Lzlz5+y2dǑ4<Ы{WQ;3TaGǠ+6 ~ yC{zc52p+%t͜TVՠgcܲ\_N câ' +k΀F.h,CЈ7|wH PZ,3:d9{g&3[󢽇 󗿁 vP RUz\\,L9,a7/b>#Q[+:$9 @t gC . dXl.f+O";eBͳ̼cxʣb£=(!≤{ .GgA(Tlj#PB &r+JWj* ^ ? %/HUcPW<^CteC?|A9J~6p;M +CR zɆG?SU46UIc#p*#g.fG -\jXwѳc~b 29~ ?K%ךv'rܲLgr|eQF\QF>xxC7|-vHN:-hU<õ(-V#nC|TEX>%쩤 i&LK[óY6 IDAT /Rϊ~mmN% Db3 6&nu0lPK`2y4m^ż`ܻk%ԜtA$ԡ%n_5⅔f1*?970b @IglV뇧G^>zxt* zm{}7x'QxVAfHʤp!TY5T(-VǽI6b(dٽ3""pIK2-āxF]= 4@UPlSJf<8/er + a- gy$jam/cEC+5e&d!-G֛-Pf#[(fbf#ZW e~诰RZ~x%G] Lf|j̚2Fp8(Bxh@$?PjҡTVe)"P rsx}"0Pok,dd[nۤRĭ0>.GEs@P>;kf-u+2UxBiU!3O< <>JD8ԉC0u>ȓJ ůQ3Ӟ۾8b0r#xPn v= 4Rm. yUն]E]Yd3uDG֍s CT]'N2kK& 3މǖ770LB*s/$|'bC*#xQP e%v6ڌUV gKUcڲt uU`l4$њW+>&QH@D/b"w{i `Tx",5V%7UuODDDR5's0Z=S'qg!Gk^THԞp DlT _̺8||w4?WBC}>xgΥ_+}@Sˋ90#0X}?G7; 61v&A+J>lNM>Va™~JUP>@# HuG~VerPnN"ɱo.]۱ $X/hM;7cӮ6+4A7_ln#c[[ӐW/gz+ \ron\>̶ED@<36\r u.ACo"Qx"&\鰇ҷ[抹/>zt`Iܮ\O.@#UfhM8uZCv.9_w.-(bקPXRJ!ݰw42Zm-{CSu13ksec@sAZjs;;r'/j6?C kT?zfgzGR*(yDg<<(1~݀ Rhe˖aݺ^!uO544hnSDޏGU Lsjjkp2+ <ԮF, =p$(\QCahx IYSfڭY)ī3T`A Gϐ^$_/¿|.tOq$@tμ%P%&)ye(ә%?FF^jȽ!;O={(1aD? Õנ^զ 4"9u !""5Sp|)<#`Ib-uHV98Y2 u g!vP1W@W[wcӚ-4Jɦ6 $+Ӎ3rPmGA@}~ &=jkp*'Mf /j&3_õ铛7"Ů}P3YMfmV}pU2P`3;O6=[jljcԃЧW^$tg 5{tBkbsMm ~H9وZ5&/|ds0fWaQI_ 27I-Pkt&\3 ._CF^F[DDDR3TaGPZn`#G K8VgR5.N%Vor  <=2wd7` FA}E p!i])/bqI^fHN:\QEB78s.ۖgO.\ >;bvl2cUPh$կzg_jvMj9U +njv fiشk]kԠXjS}n"CxP#W{v%dc;RaɿVRc`#B u܆XWr*> W"6*A_ꏄYQa0]).D=Jque,(^""";sQOBm]=CjK2ʐr*j{5##}hmwLDA}#<)w؈WnĹ x/bf6iy$StlL sep ҭiN㚪oJ"dg1{L > +@r1 ,.Bҡ溺:1wM#[`2 [ifrv<$|BԪ-M|tBs^rl_ȉ/7 6㹷aԹx x'wVm%5Z2ʐ7;7뎘%>v퇟 ^psUY?`椁ڗOW𿇲ݹGuާњp|) ," X!?{!H}ÿtwt1eao4jC-uL0j $ب@!#CϿ=çt}p13?}KEOl&gg61qU[{bŐ6X]W\Y>')V9W(ҎaM KrJ}=C]Hm۷c˛ߦ 7Yٳ:3@P2O^0tb۷$ wlX^fل%ԣNWyoӑ@]gsPV-cT*h 7M#>+ZL6|2] O^< ~ySCʹZ[I >^qCH9H):< _IV~ 63wufXJR =Qx%!);+^I#yIZsoM 콒R9PTPC)7DG~!VTDf1rtX9{Nژkf]^ US_e@EshYi[rܿB 5uMa:x< 24 dcp=EXjjx2n\i{9> |!Nɩ>v # 39nՂ}9cE_࠺\ųiOxSژ]ke G' W?|)x 6F]3er0C[hsRW̚2!,/ L~F C!q)9@*afye+IT5?c`tps۔_3?`#Dg’s; 8vߥ:/ZrO(|5Ql&gp lݪ3bzN~_ t,JE1Xv1[e _o'YXf"?P3 u {mIRӑr\&ǖ77 :<'ڝۈgG'G&GG+`C^VmGq.>(~*3QU O`@T]73zuxG0s@ !""ؙj|]w-'<1jI+BfÏ{Ar+FRnEED(oR=4JL(T:Ii* {)l y???K%Xo}G#;+Wl&*/b͢\w2k |dntRg}GKx#ðX}.~Ll2Ӎh~f^^Ԯ,:< ޶5ؼ9Jj޶IQaMFlO[R5zHly33މKe"ğ%{29puuAllČV%2رKlڵ= X8udͱӆƁ-EE'~B~.Iyž?9{Li D֪ʪQ\/w#_~aafkծB- n%k eP9"/Af; ;MWepNY}˪X~~ +x"4 fa2=ܯ]ꑔp  !N9sB^f݇C/'-o/Uj9=p_m mή+󖿁@IylP8%C)v}ؘY3bpyeH4 ŪrCڋ`X$ׯN 5C/l1B@SpɹEH)ɱ~jQNt;ߋ;>iBBwc12gie5N-4X}=k 덅S)VI^n~x#_vݭe5*A5c4Jb@TFukçtV຋2Ň`)+b[_s6dz#B7mf9s1/nsǵFFv!x 3ӞM>"1]W[wj )y"՘x=*l_DɄoeغs N'Fe@󒵋oy撒"IP[[P3[܀ċl6=24I/$m6-4E[n-"DEEWpegfUafvQa TGZ.m\zbzOh m{ʥmNsN˗'9''|+6= Ϭ3S*(+:JwUfchn2˧,^Hֲu)ZVlz ғϳ5Wk^~Zlf|Dxlݘs~qEh1uЛ1|^PH}/txy F5oS)5KAWPVCasnxQS7 IX?OyrA*| յ:[`0VcͶ}  b"B.osH[[WNc9XF^#ofx"Q֞_6@h @qX كs?[ORj#溪뛯Bl`= *L;.Z|u wX1Sch!r;ͭx\i$߃HW3GeP+_B/3u(5j2R#r||yMuHs`K`ľ]pܦ6Cر~KZs]g\\tzk!H5ZjΕ.M#*J)X^[_[D Vei朚Tk91m!Y~@pLyxij gF8; W.bͻ{67tg*t6;g@9>RP"լ :g0ҖX$wi06b֗V ~x"} 6aAꈛJxpN]F:^\ZCu x{{CPaZL8VXJZ7cJQj&VkF:#ΩZgW"2477'edĬafgUJb{6R|jN! :Cι?c3j)Of´wںrHI3 5; #C̀[O}k>Ov<~~K"1V-\'җp'?,\.Uk#T1'1]Y/"!x$}:c7%:|t0ڨ)x9ՕXFT\p6Pxy ::3JJ_&7#%#v{MW 3L!fj!gG/Z@m^]JA!Qzxd̹g^#gyx!ib-loLժҾhƎ"Al6 rHs"TZRN3a ΍Y&bSH6l-RC91M D <0n$i]un1+_wl?qÿ́qP}֮3@3S,6bjj&bl=Y5auTihA& {ht~J52%'WW1 ӨOk9=~4|#KnIYe׫4yV||tS?+_x{{CPHt0 *?R~ZK]C+~jl]ŭn ji6)3! gWHnk@9,P3`3\O? HBƅ5=s'8d3=6FzrA*| u7w HVq~uI@ K7J/n~ˊ N!tk^~zm%P( mZ%i1fGg@ŮsSRj=&khAUn(.ӡT[ ݰ7(L!:t'Kj#`zGklgH S4AጎΞkg=?``THnuAQfK6˞}ru -*3 9Y'a44bZy]F U`7v-q௭Ej0[:`hnqTi`7vbƬX,:>3@3SG1sMMjkm!PC` 6+e l|f=x9x>?%#ՄC5q kKYov3wY\÷*C,&{8q"1[UV5h%___A dD2V%yPQjTRDT0ԁr]3uF?CTֈ>'h@].t_aj:BK@Y.rz5 #,4j%3r8JMMﰆ$Ƴ.-Afbb`#}Kz\M؟}k!!akOc5#7afkh@{V*nŲV/'GETgʜq5@,r磪Z=2Gv_10^7]Ɩ~QRfB69* hfzE1P3qfC{w#*k.85̜R&]A rCKs/-] H»?xֿ64j ȥ[p܏5좃2Տxy\݈bŽ̝^V5WT 4_/ Rՙ5 ,LzdUs: 1l兇j94@fB!GkSڥ:s/p{A@kUf{B#+ ?Wg%^HtϘGnT$X-B"SbK+]7xnF۔KSTm3B(,ŕ6\U|٥l 8=/J\"|Lxc՚6OJPP8w`% ~YQ)m& ۂdg6*e l|f==|W¢IIblf'G/}y;6paݻXS*5a$9ݿh~/xC-IsxWЂj[9wQjTRZ5wakvwsTiXI!^l4]t ܻ1g]>λȹʯT\l=c>z4PWph0̖P"o,^yx>l߼dzN1QX$UfK9/ "3Ϻ}[F|qS^[6Kӗ`v$" 4h06XA>?qռbxijC|P"/` 3:@IUzC fgQG\;?{gS&R@HŨ5Թrww\.Uufx SG>wt \= /BJJfk@C. NUFfB!|@f`h|t::p S+~Hժ(0bbC(tD"FGG`d믯\81jG~zɫѿ^Ggg' xcޢ4̝@:%,f`Af` lgg,<\x (UgXȹVTQU"QbT ,&NOi HNE!_ef94l=_JKʱmjBcPs1xm%l6Mm\+`}|d6io29G; )4Xa ʊmaCLFMKKg}pϞ^K~i((+ºw7|3@*B 痤"J=fɫlu( 5/!\كr]3+ V!=9bTGr\~PBzG䍕΂66 ]X͙(0[FU ]C 5\gt BA& DPPШ~ʕ0̘$dD[L#~>477ʕ+48Zer 9AuU N2W_6Rz.k27Y:'&kl'78eg*XQ; N,){M\`",`8v>eqyvMM]Ps6֥') l6w7lqLo.U䲊3[+ތ&l^Z<ӯGu-܉G8y;l>ތo] E&tZGFvww7c (ŌCw\ 'ƼEiQUb Z,&Ux(V#t83 vUx5&>@+8U(uny òg[jv 5l.p/6j Fkx-En؈"TTW|)|k s#t??~755ʕ+.9˺Rb(ze0\ZRNUbűNa۾ENlg0u)Ux(oYKů2p83s^[)np:X1>Vy+=|r3,l4nr=2L<O/>܉wz!HD4v bBZVc`oR_+6//VG~~>[,c30[BՕxcVN(r H%gW4{zzBPӓ%^XݿS]Dșx!icjUvw~ 츘Z:@!+x{1Ώ@3[Zb{GGk|Mp}E6M0sEP:[rVuDKjФ7 FNVa 3n]ꈛE[[ۨ~f 99ytyy(heʭbx)Ξ{4(-)G"Wd߲!jnj2ue_xm[OON6LwmU.(+ºw7ȍ`ba05Z@%eJ^Tt6YLc#q Fμ/EaYFUDiERR2n2HBͷ!.-=vS6Oՙ|CyᓈnVٕ bW.JB6n+klDDeHlp#!\׌u9& UK{O2 3Cl$:(!®CgqG䍕΂66v'/!& |#Hjj)z{Ьݾ>\tiԕ>zd˥ylEG,*"lX૮Ue0 Lˌ5\20uZU!!1w\$''#9y|}}[rXy6,Z</ˠNn~]$*-)GuUJ l_%'tqnkM26mCfv`s5lŵͣe >[M2{B?/]§p̜seE\%؜6wfw?0K977mVXx&l/~~Otj{هSKמ;mKpcaxa}!L5 fғ#R|-crq@fB!lઁfE8o1Ώ=ؓua椉!vFaBܓooooh%|O:Un{ zww5xx_Wyfۅ F4;.ę3FG1U111xG[b::>zvGj,ϗ~K6*;P'q83zn"YWGJ ήnkƏgP( l~Tm& t<0kuarŒ;cN56u8]qӪf8!كy5H'p.@DLVqb.^hs۝E__K}6dĮ?@.٬QnlUZR- Skyܹ*(xjx#qzNK@tZY,f ufo* +l8՗o'qZ©jnll@o/kL?b ,CUTW[05m<8WT`ݻa9111x 2Ps^^}aڐF^j 80Qa0;1&bGb=?N P( {3DAY#*v\\ 7{y$-`ޱ.s̈́Bnn<4nd̙X=.FzV3MZ%_.W>CR3L&?fɦvP[[l$¶_l]pxtQ갎d0bp荄#<~x+:; d3ڀ*< TarZVrs9Y'q,VXVCУQZR~-f 'N IDATՙsřP|}Ƕ O5$"~֏[h !7%T LVo}sBBcŊ{#|5ko0P巡ցFLq%O#{PYs:<== www&CafB؅+f{U x?ϛBfB!t;~g7V>: Pͬ]GCVeh2UDo_?]Tf^6zf` 4(;SAiS6:]Gsj% ~<#=gƧ_ʲ7턊6%:Y3MzAVMz:Y+SyTJjj&ׇScM$Y`У˦6?m;gi9.d[|*n& xp|NLALI)HNGb=K0%ILL>Ѡ!N`3`ƱT}@afB_ⅅ$O Ƒ*[Y-|jUHժkw~ .,Ẍ́BrlZ::{p8"&*<🇷u,'#~vx3< T$TVVamB(}}>%c⣰~Z 7RL3a UDoYط% a@ e` *BNI@Cny]fbx]gǣEbGnvMJs#U$XhH{Xy2Z~@zZՕ8x>?q7@ @pp0D"׭T!=9̄pB&5 jԌ0z~ٴzvQr]=?UR;eCM !0|yƥL7?ϧ{=B\Ɠq(p 5VnP(DLL,PQQUD ^GggK`3p}pf\0uZ'PXJ@윬9ze& ֎D"B.q9`D"|E \26: P̖"f ba=.:N3d.H'җ%8Vo Xak’& 35ZK"UQif'Q8'V!U:؟!\=<dU3\6cgEHO`t .Ƕ]_5py`a4 !09^_77Z4sXɫBGWk_⅌  57{w 8sZ7TC,̙ OOO~mpͱEiyL|bd0b߮(8Uv:hxf 778YN:,Y_?P3۞/Ciк@ aޢ4TW Id몋03;pauz$F'؈_RfӄM3cvb ePfkS0[` ʊPPVe(,L|__QL^^.?y4KKWXq|[C|> @ p}x!=9Qj) Bxbr#?[jVj:zp ?5b^r8c˞kcC-[5@`3!mye͞e.p$ Y^B$M AVE=Dn5~2= H$sOΟ?KcjC  Vlnkksqю=ԻeXf,,8[ßeb-<%K1uZR΀*":2,{q,{qTWՠ|? L2sH,$UD1[psh␋D 3Ѳ|VSSW68&lKLV`TeC"1fkS05: Ѳ-|f+ F445`P^]Voc~9{f| JK" `(RRz7!4)5rdV*`%zf,L@!38?^a!|\=C!AO!d~==.>"oBca^Gg ͬGx&ą{~((kD} GEE9jkDS(pwwGs3_78Y"'H, KU&%:.STc˨CxLUD`u]U jpls`D`6&> _|:s:bX 8جHI(^[ rm+Oa,5da?BU&N5SH:ą˔)=%hB 8X\b_x{ 4gز2!.g?# yRXPX___TTTgl\T www_u^ތ-o䷾&PIvS"&> 1Qa9DbX Ѐu" 9$Kq4͠Jͮ\Z|,Ƶ0FU&OQ!fk^B͖J L9<Η41uՕ sPYs:gKOzzz~~HO`**!;%^X fɫBՃ9/,_3KfB!cYT\vrlZ+ 8Sɫ7ǘ60@{Q?]a)%(,,sB bn;^eBX 0Ga OBC&5W[x#qz_UDuq!ojz{{h$s}u((+BAY&(B̄5'%%!??d21Lj:eD4XhLӵkqѨOOOB >{yJ(Qj) 5UK*Xalcۮ]&'U4 !7%.FckHnճb%^H@O& wqY[Y"{PRRylD".HՍտ~>|}?k 8/{qTWՠBXv uD`^ 1b_L-6#Bexxy~ 6. 'rCͭx`1ynn<4nd̙H{z+aUg&8B2(e䟫g]fP$GCCØ܅|&["eg*[xT83.}R/*d`&LH,\%꺐sU M"b}?$NO@ܵBLoOO ܿpa#{zz~pD$N`PՕFWWȫ&l$"1THD /2 111jHj!UO"/58KRHRW/!R*$M O)w/$2x '#~+ 0Tn0p%ƿ?W}Kb<8Omxtu޿ŕ:tON!ֿs}}4 z}2Vrûxé:3!:/ĽS7_tXsY$_>x/w|c$ LJEr݌m䌴` 97hyv2e^&#Ο?osj:Ή> D4JA_a}Ii/~rͥP3D4 v `lDCSMʫ+5`8f6j @uXCۑ 'F~~~~:g> 4+ gJӍ|.Uː rB = ݅MR&ƙ z BPPbbbq%466c۪klŎ",/V/p`ZD),K!gߞ^^#Ӂ 8?!DFj$RȄz=}ھXTV\s )5c?i9VaK[j TZFCJ X40aE!fBBM!ZmkBFVFcJ MIar+ ,Y5J!h& &SeW+F7QWWKpG`A@ BX| \y \F83/y-'nBF["d\-M`=PL7րs{{;jjHS> M`*w?~ 6BMW,GOٌ ]XRː̄ !=9eh4YmaaapwTs7Dy˛ 9#ĢP`c䡕0 UDǺZFVe>=&duuuzݴ^OjplEug䣘(EPE N>"MjjB(L-Q'HM+2h@~~mz:ZɝG: ϼO@$mC `-۸~j+=&3,^>#wʠIPXx۪Cy{{#22 w5556;z'<ғ#4)X \"g7gW+ 1OPUҹ+yyU1Bl. yR~2UUʁIln7YjC*M:ބxVM  Dt#֐IC?zBt\/5Z-90'S^xzқE!0!&&)K 5@? oysmS;ߗz?:3!dFhxj3BG ,LXH^ba*3V.H Ӌ ;O/@!.ti#Vz 4wt@N%uF| S5P4 !׻+42Ѩ'Gp ^x 뷬2J3!?S dPWV)XLTd~qDB!$aض_(RsU'z%b vMhs[ߝgo3BFm\Cj3p} 6mKIzO-c1g"B~ضk^;{xuU*b[g穭L Nݧx鞏2b=]M'f%%[YJe0b ߿{B^4 1&*qivrJ!%\7;B)"U!djm/4tSnZ~Gm/P}R9#}4QFZJr[w 2_9$nBfN}lkcccmzb_`(,7D!7wɭLF3v|V@|+J{>BȘt;UJ?̜?Oɭ"sylǎ;a44ADZ^l5U%pLί''7?)ÏuW !۟]ʚ˼?|y]{vQqx%IoOӷ_Y aS&P{H!<esLr\۠J̈́cwwkMr+5RM:;;!d?>$F'Р"vu4ɟyq2p+O>N忊CҤЄsz'. yRMK BCT@NcP^a!~=[`!:]ڈ#U?&ͺz(UL#!WNK*!.j\e4SU ɟy 4X@Kb6!fw%}m% 1Კ#`'ߣ"Bvw@_ar,!Į:̬ݶBl^݇7$^~pjֿomYWU=Pe{uuNV~UL#!q` !#Ju8<'@X$k?~^ sމf81*Qj) `B<|X-J\(M($l 6:l{z'AD!ڇ߽}b6qb~n(db봴zeb̜`sPp nxSf .AEG1HRԶgLJ̈́Nl+E5E7u!Bbt#NN^%F%@"[btvur$b woXa;_QjZG !/pRaNڦ3f̄X,."荶W+{B8}h5^M66涜hyy iB/Dzr|< 涁{D 6D?6*Bx P.vٮ0* 5Bx.Tw8Sh2:* "xGA[[󨯯j&zM5r$b 2B4jUXC !rgQ桘x`- QlGW> f77/ɒZ.mB8ti#+ /&}!z{W tdbMW0lB,_Ⴎn?ЁE0bѣG8Ll3Sծ !vB!M ĹjLmo" 9_rhbIZ,R*ƹ =XmB[0M"<<|?tyxl~`1["knm{㡹ws>Мi4P !Nn‰t <)ıʼns9Ȱ5, /`{G!8+֎?0L6o !zzzY]55ubӤNUB8J[ZNs[[#3y"1"UDFFnhxa%CV h6Qfml(o}}x\:!;^Ș3vhNd)AJqvn@/k܂o0lݘ:+T@!T(7??`sLL̨-ٻf&dlC6I +$EZ*V} >V\kbEmmZ}h>UB(֠()[H6YH2dL2dP\2s̽y#&wΜ$ss{*~DD$.+~xwILںd1W^yY'yŨrMtOo{XN ),f*RMN\"(Z6}NÌ)gt\xth4lfbtJ.,"0Cht(n\W̚[ ng$ + GV}.<$`Hؼ⡻V5ԃqqؘe3ϬTj!]PQQ!SJs8HrDyćE/.RDDD$.ވSIlƽmjj/Y战NW~FKƥV=yi5D$MNVnj)Y뢂Lj44,΂=-\\DDaxS'>9Шqdj;AV" N9;-% ؉fV(.c˟"Y.ݎo ݡȑ#GYDo nqX~[±cp%3Dyhm_NPbݸDlXD6ؤqjNV"0d7w/Ny`ϝy(9{:~g;dXbYg5=@#i#㢋DKh,^WrҐ`7>x+\nuDOh67G$9JO”NX"ԨPZ*(YфEbsq;?ml(D%"a{[PС1cjH(9V|fOZb3Aͷ-[IEW~=L]q\Q۳Xz{=.\UTšwwwcݺ0o\Vi&"e)3! _UMCCSU8ܫj #"`Ћndz>p`۶c׮]X-<Ø?.. iT—y}Sϒ7%+DmlʗXvds0%r69===םMlٝǰ|d(NNR"ՇWU1*,]4SpB߷U^Ջ &E5xk6,L>EE(..FFF&Fb9r_>/F"9rv=$qz'+Vj&Z-kpϻr6h kq"8p:B:DnWxB.J\E 5ڨ>Umާ3ʪwy#h$b'6x]s|b^|9.2"Z V>}?&0D8Ljܒ| \%DD${Fs= O0%4 F{z5Lh&"R1 z̘(*6k,=X .a['jFG+5t`Ou '(Qwak5$4o(cB309VN-5BGktn+)9 <jZ1sх7^YEF$Ca nτf"R,1~y#}5o~A% Ɓ%"" %%0{LLy mlܱIQc2dzofo_/zq[C:yLh&* F%6Og7_Zw (3D\:_p;N@]hw cB3Y߇fY!Vœ39Zxei3Jq5滰ZڹЈdfL ݺÂUDD#9VqPdDD+ao'1$Ȳ߯jHMwUg1†Ғ\Xmmln†:/)Ēkf(x> HbkRxb1xI\UlubD ['gBVj\证T|ׯ :#4s۲ŸT1s+=EF$C_3oWaL "`±JɌz#@DW~7[© ѣ1=s*̙vm>n :q6#ǩq0sjqu$6Ϲp5EQҍOqI[?=*,]4qzAZ{LD$]՚0uDm6l߼׫Z#Ԫ <~MUܲutWsЊG@|.{\&f.AD$',dJjg`ݜ]#1DD"c?Y@˚pk" ޶wE7мvӫ(qxSWUQ Nl7.@]+j-˂Rd(Ꜭw ڻ$J($ʒkf8SP6y mok?"R.GQZTĄx4[ ;vkQ*t1jԨ{w`Pz]X-\hD27e01nޠ "E+\ ;ӎy""`ƕlOV? ПeԢ)x` QrdKHDΔ ؜pb$6HWC/#"ݧhVxf^P9NԆ߷U3HM_);-_)y)PF}Oǡ#_ZF6k$""wak3,]]lQKGOk?"R~6b3nl~ڏ"IQ;:wq}YL5JXmpB\u?Ʀ*EF$SٹYxO!{\ǪaB3Ez=Y|ypi$""+--n@I3cB3 vsv)f$pbND">6t69TgRsCC-,/}^p""FE<{*EUmN3ٻW{Qo&A>RxfX6_ D$G>>;b;R}9HMNT̹Xwq*QHX8g6./xNwh$d$NF"(}v+E)ިEIA*:lرk_E1jԨJJNŠV̹x\dD2wݭ GQ8)_1c^Y5,d"" C@=A "KJfa˳eܜfJ}7ߍ-n%%xbIV/G"ƒ?9Q|gW rLLh&"rEPf`dԵi}(:fⒹʸv{'Ȉ357 ~K $َCs'u!O,E<}l s_,@8efceN"n.vlyvnReSgⱟĖg77dh}~ʨjDms=XΫ!CJ g1䫯qc死N.߉qz,]4j2otcOu !QsxZ?'+$}EkpeELh&aooTܸP|/Q:hQAu?CTECu=| HfͽϿ4w*7gĭwބ_{ww;Ƥx2Q{<#k V닃>/4"QoooޣϏ7 4S*J KpAT\R2$Z-pGS<Ԥ375!?&"%y'4*L4c_Z:ȑ#:~cy-RMBRRyO»;qA\PƅHD4 kRFkMCns;*IuÉ膳E<z^4a-U@6Ew_p) Oyrd}ԃᕍB#RYs/ƬbŖÞOjiccP4E PݩLb&"gEzfE©(- `%jaGs BfJE) c1֔©Ϟ$f >r;1܄9.޾^l89a;6d}_˄f"w4#J &ZQ*-LCU 7\Ш ~tRrV4^~sKyyx{EmWWcOސUHiFH[J]nr & z>?Z \DDx 5t~tyvAX:B{YIHD h7.׏574U'`jCw_gE-{;dTj~ק`JIB#'P=Yhk~|]L /hr}6y/>Ƙ1ju#~h IDATkCCӨs^km 7MiHz2X[ߟWX#Kqzm&4 ۊL؉7j1}X|\7%%Jl6tK#|>yob$":MHhVUXhv:yLh&"턽tE+J̩Y`G=r IJ ]T Dw?ÁChϏ3ZQ(\d"" /bTw\#,7Ag Lj&"""H+8|~ǡV=$n 9Y7?X18 DHΈ=J Rq6Y9zԘmiµ)"}./6r!oQ8]< %řڨ@]kH[cճ8oRܸ4*L8QUHo_E:'hb0jԨzOZ-]Ec\dDDDD$pv!}cpL#"""0`o>E+ni^o_/|uupV>r9)H|^w'6gʼn|a0FDDDD|aw5@PQ[z"Ƒ͇^z#$]mHzmAvZR!n/6)0Yf"V#X"Wl8)1*^=.2"""\j܆g ifs8vE߿ُCbc/MROKlNH"R&"<]\.Wjo x# r4L"""k uE-GjxUwكw>$pln;LD՚?3yB2bnbVT {Iq&;5_=D7uXCQ8>s.7s;*IG HDgOb--L)>4쫨B&ZsRr~d{Ϗǖ?FDDDDJc*ƆBͨ72DDD4,+8| ضqf \ٵw ϯ[uX`'#E qҨ0sj(A 7yh @tw(P^HDm{X} i6./6wTLO#"Oc+N=h|n/6>5`sQ~v-8FDDDp`o>ُh0⏿|N6WC5"NH"86 xF( 'EFs'OF3ۋ upV9m'HDiSht~KDb^PowN;Xq""t+zRuph_5Q:F]#w!ǯ).."""% dx֪1S>= }ǠVfDm߆>$_8Qk0Z n'&&%%&6[:zeIAǒkf>~?n: HDid?PR)Can钼h n[̉GD$׍63=r Mӈ n翸K4Ac\`DDDD#@o4Î,x4R¸9)[߀K]>c&M(Z{GNVևrQHDnUJ70i|vF#=@]+j%Ϲp g>:p"ʆZC>ԆDyehh]IܡHdg/͊>, +>'ZT縸(k-bkC%5h|>/g~݋CFZ߲EkO:$}ˉHD |n|fRAٺlv릙FG:5QVqRcXh6NB=DDR[rt)rl癐ٱGj9zhµmCCyxڈ(ml}" +z %ǡ8SPtHy‰GD$&TZ.J9چ'Wk.WsaIuq&4efs8vrr)Pwl8\c&wc[zEkpӼ"n;LD 6 ~SFAqqX:zP^Y/}\8%Φqw@EcFGc9h 7|(4>t7*2Jc_^aڌR\PV*븻Z..""""x܊~웲Lj&""""eZ/\iޙ6=47n[x>EiT1%Kp;FyyW6(GUX V#P^GDv| bN~5zvh%" ۩kx'> [xr`uw K%N{DDDD4vǠVDmsիp:$ls" @|.ިEIAv01o_ +}.)o8ɉGDՇc C ̹p6+a葼rj2pa*rliqJ}l6g.YG""""Ay,)DqߏWr"=ufmt4I4cr^*pf= ɈJ>[\*i3JQKmt}΂>N<"RMhtz W]:qzAml( e8鈈FPW["Ҩ0}XDiO?SCuA6x?sQHz,}j3+rl(J/-IJN?F19TjDDDD4gg_&5 l%"""" v$o6-?[8,&'!Qzmxݬ{VQ+ƵFZªXιp g::XCUji6lv'+yGDI<^;9tYqǰχCw9k6V; Z3Ԡ[s:*SKDDDk6,M=so~^~0;c9t3ۨ1[QcVꮛfB-')ܫ4O)AnIPktK[5''-DDanѥȱMXhPi5|޻Pղ75Fmxr59pJ 1 ~ WHx gq u;[Y+X߸Z3luNWKK:mo#"Y{X} /#s;-&5X8;( u7U( %iH[_->.׽':|ƻ= |^@CCy˶R3s"""n~]Y:&L"N@""\Y+bܸNHHĘ1Ƀc;Q^)9(x˽)t4AwX^+y?GQ GD>t9x9&G5ypjDj""""/ȹp2t""""ۣ>Oj/=so~^~.F HD$V VQI7nOl>w4jlgf"5WiH 'jNy rL(I#" c^6"6>3i2&&{ʫt n^,xۗ a\vP6_murQ{~%ٜ|DD"Rre`e q!۸NW`&L)̑uY+jnLPT>-i?u,FD$]=[|#%%l-y?icSekKVk&"""Pmx+p lqŕBDDD$SrҜ/Vzm[%.Z9$u;ahf 0 z]TЯ?qCc;'-_<ƹӁ=-pD$+r<0&AmluB~.V GD$]mҨ0}X:v]sj/x(|^EW>dRsCCSIUj5VhlæOޕ g#ި#"H \F+\ Zsye=Z*t4Y-8HV\Yjs rL(Id#"%4&A GLL vNGvceZڹ~?\6䅏J΁xܜ}DDDD2#*="L0Q֋p8RDDyyh0) ' '#Eqsy})N8"Wiҩ^ty%Ҭ`t7*r`MkF!3t"][Zo'ɂ4'p\+tKi5lDD2Ѭȇe4*I>mMhmv}y .mkձZ3De n9ޭ^$$"""WiGEkϯ[#yo[DD!u;@|YYît$i”ƸŞN6" kr/z݉ç%#w!"R>,oԢPS111`vn[I35IGo n#T].l<ܤfs8vrȌQod"4geˮ S'ENz<'Q9{:ep0ܸnfۋ-N sm7d#&*9)()Vgc?KrxN,[yw],*w΍KmYUCCSP:eRdDDDJUWhmx-7ިlN<" í|fa]uTƸӁMlDڻ`ifZۮ-x hK~/.=DD gR؄3\t ߼\q?^}"TAKeIͶp<+5ɇ4,I&H煳xChu+r`{z՚^9/]\miߧ 7$;$cNZp)Lw{")3\j?~}tʟ6ΕU\DDDDD"͒E?~vmX҇\J!"""9WiVXy/Dk[`n'ENz<'`` >'p5[PU+l]}lcjDڻpC׃*,z6* gs)ިȱ g7\fAJjnhh*& Q^Y]%+DkN}^8+:(8{:{:&$l oO %߃Z-ZLDCM- JQq4nn"u>q,';*ؗ|c'Ηe>?=.""""F@Rs8s""" ؚ /˶hxΛ(!i rLI#" CFx} 1 zHuƍֱكQbS sd嵜hD^|~<4LV6NKe|(}(|iFww.]՚׿O."""""gWj @w%d[vVi6%pe׊nzU5X8+(u1Ƶ^҇U:)K.j:$z"y5-U?lJsNZ $nIDDnUJ Ӥۃ}߻Xu:P{s*a\dj8-GrblmAsg7k놝xl6F?]r:*iY(ntҨ0iBrP,PYY9q5f+Ͷw1Hcœ*ŷM\xD4b>>W}Ue^o;qU>.IFDazmhcFCVԸZHNޣ͆3MV$gnOwTr./e݇:4[[PS_چc葠rrI KHvv{\h42niUiśKߜ8LO'"6 bs;d)>V[`ΡoxWcqIp˂R|.(eBp|XY/~'1  igd#b/DDCw{"-<τfkNdQ)Ҽ_7.3x?eG ]s8)=sYb%""" 1}khh*q HDDD*=5u=^|O) ڼs+:䥷˂(],uEIa 7?Ovy UA|H՚~n;\tDrǛ:e߯lK]Yc9Ɉ" QYɢQJ RqUdrqIt-[m˲ZJу~y,~w*&0ə( 2 l)'""" /vV~݁}1 ";/&L޾^l]I ]DDVPX]g$9*Q1117nN<9%5߲;Ԣ'H3hDl,eŨ,BpE^ژPk51 z hH&de@\5VKΦ$\pT̚w1s """|Ï, IDATk;{*8RBDDDXqexǙ,Jᔮ:YQ ]DD2@m_!ٝMWNel=^>IFD!wCZlK$=CDDʹnoTJ QI־C ڸmbhZN X-ز}9I%m :[>Z+VaÿGʀQXƄuCMJ́6Je}W?o_!"f7_/i_g,:4""f80>#!i4yEӂ(jMnwq6e& zU'ѥqI#+5N8uQ_j~,>u#=Jvn6,m8ZVj  ;~ڳ7?E]1$DĬaI4u>q,OxY">Qd3t%:a1k~wB#"Iw)mt4nYP*͒O%%Y`DD4E3yBrPׇu 6AmLN@ @ ADDD"Uqњ{B*59e¨72DDDmOo{1Q4oJ\4""jQ sLA#mv'j%6˵Z4s6<~{eE^o;Qcn{tCDDCy݊|HVp8:*߹vjNB Y-x|*u#ADDD4pΣmhh2@!XHx3zY8zJs[t7sPēFD`]mHH*roLN8^hPTT z\zLO s.߇N]Vqx}ؾ.vIBOQp"">ZhD >oBWK{{h<֌qcz}RrN;{v$'`ţˠ7 6m忛Z1^tnMQQNRTFhrr$_=sCMN|"-?lKrpIaYrRzYō˨7 ;O(-G1iH7qAbgYyU7$UH|^7z:1:)30iB2*u3&mmg#'fOu <^m{/Fuowr""f$)n\&$F?Q} yzoǾE8 %v`-_V<,dɍ4O41K:lnCgǗ.k{{cg!kF>6&蟇$P&0~*+59XI>)vl> 6p fJ K¢Fa/~ +_z>@14o޹U*͓Rj2EgO'1El Mc`b;5j.nYŵӁ>$p=-SUݗ[7Zb$k5t ؘ$]FGOlt+򻉭VpLaIͬLDDvaBo4)j\cH3b&Pjeq3'aX-xlxhL$ rP ɎO62DArT>2M*yz*ڡN\O jC_}p'a9憆 L"X[bm >U S%E?~n τ'fM+Y?u\R?E&$F@昂ƥhPTT xن"Jvq}j.hVnhD }.r{&GygҨQZgV\v:d)9H EY[Yk@3Zqג&$K |V9c||>߹ܷ!SLbpϪ>P3}HDrC=0TgP;X2@cRMrŘ@Mbx܈0e`" SHpI8g;EtԘkQcEqn>t7g,:4" )1 5'''c̘dz,|˂R|Zv՚?&O}lS\Ҳ<^<ޯ'@M~~kQ_&>gY3=;H5q\=]+-Zgf""r-ٌ19W. 9I8jnVA^W4Zs <$@N68LDKb)%霉б Ti TE` """"9SE?·MD<^En`5@qq1v{3sKZ=H55ؾxS'?E?ggCmx=bSʚ9'#EPf8tZJ3 rtAΠqLNxlmi"oyWzyx?q,} "`j9X{?=w@O3qɕm&z~ݧPUg=.<Lv>[93e4r3`cyoDIq6K?Vi&""1n,W 3G7o/F#HւIF+ET]ZT4 d\7LDDDD%** <^_FDD𺝊=\B5@qq1vJAӘ]t\=]vIyqzw"v]m(m!Vvk@]C|z⋪LtxS|Eł^onfwJ7Vi&""19V Pk5œ$TִJҶFAzz:zѣ HDDD429zpM&YCUj E  ޤˊ*))IICANOz,GCuTkh47.uuChUEPRsb9)07Ydi=-رn&1/:5Y>#/+N;ݧ˫6: LFf*DD$=͈qeᨹ]j͙YA'5_&6Q50x"\.R=Hp 9R3E J%*BHcZ9++ mmg튢6ULmזa6*Ǜ:[wǡgB?0q΂: ~1_<,$0P^v}pplv'jVI*DD$nguE 5_b4?LDDDDp\.Ϩ#,"'5744Ueeepf<8@Be 7Ѝ>FwdS$MREi-ZKcs5hv|LL8¡صOxw¶f#fWr̆r5X˶L%5%H>F.U(UB ge&D(D/_*#""E gO֩%<6w͡f8~~7YYNDT:1{fM[xo"E.G:sm^N>O-ϿiYۿu}FJ3"Yk~vЀfdYN>""""(z.#""""]innE?YRa7n]bf[(A:'ApYk'=/}5]|N❛Q|q簴z̤JS,bՐsoЍV>?uN^Exd^\<h2fԬɄJN'GDDDDu+޷Jn"""" QDzϿt/Z61Upn~xtVVPLd˯Owg 8~u ~_~^D}>>666#Oƛ7"oho""7Tpf斖WShhh#"""zZ-Z9&""""=cVi&"%18ֺo ]mng35aىP4tN7_T+WߞďeJSh25.*8'2Ed%]ug[=CqU&V ""ګBe)8a[55D"f9t(hͺY_haA>U~Bs.$vڬ f9Dޏ=L&D]nX,"r[;4&5OimfQCH7Os~;H{LC'Z |T{, ,*DD$oHơFUJ$ %p[sy85TK *&2E|[Wq'DۛO-;o{oM¿ 8DL1<JC*HVD!39NWn*n0.+vjuDaw^(hK{ u)Vn yDqAr+[ խZ(m&U5Us,QHR DDd8Z 3d*?sj#Gpzv'0҅gVi&""%mhhh}1c"/8ׇ{oFd=n;:~cLDۦJ 3nibYKof1VV_cg/ȫr}+Po rrсVXaw vf\.l6ۺaN|N뾷]:"9\LDDg~% nNSHnRzӬ7j'bbbb ꫣdUijC1}1Ń 3)XS)t6k讔;޽)'|NNh"":P+՚p*՚}>j 5 Ʉ>ˁ "}Ux*8=ҩjV&ӡdNM*ODDDvteʻê'FOPEDD)X" Iu55WkJ`Hkm= ݆BQ7t`߸1TpXvZG#ꮮ͗t5Fgu>K>zlxbb6j}qmlN>SSSh}j_~ꥯ7,--qTmX N\pz3(M!ûZr+5k$I(J ""=xRvR7FFTų|HQ4Gfvk7|뮼P3=у3KHdm[XZbh޻_{u-\PZOjV(J߬fx9qHrqؚ}|CĈ[ZZ`2Ӆ=_S?|wStd|bRѠGp(ID[Vm P\][Cj~LN9шD< %""L8`6n{7Q*SUH JtPvrCĵ1;;0:z{[89 Ӻ 5˯|f_uK=~u ?:]|cd?#Z!3ƻcHV4RTN#vz5jW$)"""-Yf0Mt(ڮ(D"=ojpfr$SwCDDDGmF0NHf HHK\m` IDAT.>6'ͩ\V.7LDDY69 L&tuuabbb{ގ 5׾n3/!):ӫSǷ@p;7z[f|IYmRʹ W!""-*dbƪ!*j[7Gj 5@ow7n߹ GDDDDlWz' 4Z7l5DDDDADA@oOvnTogBJ Y|owH;@pױd$͏_:]˯3c)_ 4ip_~-$2=m7u}]+!{;JߎvV""&)Bb ‚`SMQqg|Lm0}'I  l;*8ŢKDDD."4gn#θ:7f"""uAM&a~j|6nATR`f!"}soj[\Ūp6)QS~1|>):3K|_]F"S\ot/yℬRBqUvFDDWZȢ, ?]mTkuޞn8\Wg3AU,JZ횬bɲBtHDDDDF'^΍Ui]|hv>"u_{[^rvmf>Wߞed%|jᥗ~/lPJs DDL06!y⊕P9шHIv-$g:pUR$Z"""wV+oRv3,Y^'Ml"":0RM*\6 ~ʱd霼kMgOtb6f,k`i=_+BG̿GZ9H7VZ ,Kj 6?%N}f"""2d*\8*DDDڹف9{6nWHDDt`*e R!e\EjiA7%wDDX?>?~_vwiU֣pHc\09a6)֞ffPaCF{7DDDd4TZ XPGEIt"""2((p@cc#~΍ 5 .+xBс%#XZ~?d2~mK0DD6òژ˯ʿ`ER6[,՚Tmz9{7DDDd03ѨfOloJͩt3]O6'eU&"wob6n Ym2rr,)?vD',ED΀_vhFDDOL0)*JX6g.q (r P4\ jF'"""c On֋ϻvHDD LPն66(ҖϷ>$w+f_W '"yX:p""+)2`S=AShllDx߆ (jdW#V"@DDGTk]'5+!+lҚ-@BdCDDDtN?AG<) 4 .+r&ZâH[]뾾Jn=)eUvJ|o7 DDD<Ԉ&StIYSrW @ADDD2>16РX8hߝ<~>%Yg2YLMOҷV@DDIR՚ \e]NB""<{6&#,FdOʧT5ľ\gm827DE1"4DDDdDEIӹXM u$ &""}gZqiw9*s8y7k]p7j&""-%m?j 66H[(X,n6%NDڳ`ij\=`bRwK Wb4b6' TA,>'/B1CΠω&S+\.׺'pО9v(x-N2<L4ծeF}hqsC*eV )P(jNkuR4ThBiΜ>%kL&*}; DDDWH jp)q& J0@̱.|dj!t6XrXynۺi^}{yup "R9 2Tm"ꜷ;ADD%ܥ`t(ʰX{j f32'Ν=A """CJRZZHF 5]]Ir&Ѿ3w{JfJcj6aH+_$""ҼjB:fӛQfuKKjۡ8Y}kÜdjjBǁ-8w~6&#Tj |PB玂ˢت>뾾3>Ǐ@[+8$ Ν9Á """CDgڵU6J)҉Ν9CVkVIM#7Uۑ_ "" #-#7}>jY*W0ϣ笹=݆BPL\]&Σo6܌bz.b +UZ"Ēyp"""éVʐ )CԪ>N㑱BgOfYa~ i&r.+шfMu)|_o=-oL&*}{d/醑ތR7=ϺGcxNFp'<iAǁVȹM+_$"yܝ ^@T`ՁW EԹ*DDdT yCZZj3>R żv; u@4aUsJ/xJk4>9əLDDDc1 ;^cUVF""`j>ѮjQWWddya5j%pxp -iVUG& :ع]E3􍕚Ȩ*e e)U?\gy"lkfAppP(p)?A """rpxzXv 5:XT Q&""_U_| Q nJߎv{ZsD%m-7c<9 Zs{gOt'4uvVb6ͪ:$FILF-tS 8{Sv;LDDwLLsE%u:BS{5@G0wp=8s}<#"""h7|U"ԜJj&""E|Kx?`([^EL&*}h DDDdj Y8~?FGo~d0t*Mٹ$'q;-oS8F#c)qu $2EuU&4FfVi&""[ Vh4u]mnEB6}w'5s1eZJ3[2jBJ5X9աxDDDt>%ܸy,CffTಢ DDDto|*fo/ 5l6l6E @әc]6Cj%q@ءq]!g0lJߎv{IVW(w-e.x?cC=kÜ|*YL8{4 3mkcQs3H|!NvnC*+5Q}(-d$VuO]j~{= ÁB V'.8=!T4N`I fFuj1qh-U!R|ޏfɄJ;t= ;`{=?< /bP$g4iB_/.=~O8aj jUi\V|HwB_c`H>ZϥH<j@tO!n p0HQ/\<:޹kH*gsB"ڝtNB:~5DRZ:_z`[ .+sAل6(f5E;L X,jr[=:"nS;'cy6|M-Wj/+ՖҡV-J#" jSWJn/_"ړxReEDRiq64لGql7_@3b߉kcs1Lp:]s[wxB6j!>̴/VqNᕷ&D}0-TA,|7 Dt@Tχzxs?F1tfٞn ˂{9r@RFi!]>³YmlufsO\ЀϼYCDDD!P]%SR&RiHF858(Ԍ*}h DTG ,~T򕻐J!Nkmjk&,HEa5Լxl~m C-u8 t u8kg0zZdCdryYHcRyv[:hTth^33\\);l$T;5=ǏAppP(pr 1BDDDu%l$dcujD_/g6i@3A'o9ùydsY%h5$_=^s#vmedVZ3xtշ n!4>}NM˿'LMM~}+5lF\ۥpa~~A1߿fsXZQȥeV jIM0#Iк=.WffpnqA-JT+e]?TຮI n߹ɵ @DDDu%j.+٘px:Ց+w+"]ԦTiڠr:WB:F^[= E2:PKB+ O>ѮHV(.+ 'f&=9!?AoOGWb>A\3Pl_D{ ]z^w pb$FJאMDDDbPFWojzZeH TLbX2ҘW 8l>CUk[k( f`9,X_+f:[{v^Au{v7עEvRJE6/n1\\--UQ.fau=O;qmlNV& NoO7QV9h+5ӗlOPsHLEp""":P,.y OMͨү=>8D=Y|?r3sפ=7xKfjJW %dϞDcc%N,&Oá^#cZ<6?\;$Xy{O݆UWh1\]U$ }i5;M[ -܆B*Zڊl4\H5n UY/,CDDDD:%k;h74H$sjDRie @UkvEטFp{%~=S|R]8!s/>D_קxFpMۼ Jo3̬V6K㦟=Vr{WVLZ=ϗyOihpJY;³'LM|on>R żjޥhl9tujFqr˻)(95xPKU1vd5./N=~mss(Y] 0*uŒX*?>J=\ '""""rBJ7aOimg89BMMSUIfUg՛j-ǭWkj61VRTH&916-:J\ގɪBwa|YLwCv źW]|G#ot;-=(bT;(J\Yo&lJVq|bOсIݼQ'|4ecD^JtZqfiҴZn:a5//yʇV(Kyƨ\+apq65? xvs/>D?|jnb6㖿$ZyY=hPdf[w,xk~+Ah7L>s|SwpO,b 5=uefحMYL@A^ ۓoaiuEA=\I .+ØDksᓃzPsSZ=W&""z0lfUrª\-/wuuhrHDDDhlrR6}^/>%|KFΕ_CxWOJe6~Jf\1 .+n 2-J]WZw %ij>P.o}>zZwF ;L~^o(,He_bYK;7Z^ ^ ͫ+#8} _LŲeοf?*DOw_wpn^O!R!'˾:O.]|rOt 1N?+?mI(I$̫ͮP(OLOs1hGG2#Ĥtp8dmV_LjEҘMM S}yвBpYB.foamaA j(HR'+Б=wa|rE;73ЬX&0Nb*E"ݥ"玖t6y6g?Wߞ_Qk6w(Ҏm^'"CGZqNjDUȽ*J X~lk;޸ϊl.L& {Ǻ=hllDZmš><~lݿ_g\B2DDDDZD=݅C`Yå8U8Qē__X=DDb둵*be!+0<[œIݗV6K#zre LʧpdN١fӵ8+nC*Wޖvm(, 5o))۳ 'qnB az.,޼0b‘n/Zq.=H/z}op6Ԩ WX-&^;!BJf`9ԼJ>+'pОkvt"d¿`0E 4\GHK;|S;$%DDDt Ń -hp 0|nBvYOM+_7I1nϛYm~IB#sa$ՆͶ}o#(ni6TfybYqmã1MWbV윩Th ã1˕Oi@+8P?'gO-j;}ۘMTTZbiF'$o9"\T,n?ShT*DDDDZqH- uYY"jDDDDQcՈZ.EtzšWO4Dr ߎi6мVvl]ܬLDZ j\Y՚].׎?sut\Љ]- 43\a6L=Y7ATrOs=8}ug{W l"?dl5j&""ڂTH~ѮJ\SS3} ܹqKn.%ለȰfVj:c 5с$/ղE(<1{jvjJ(+5q uUۼ]툈RR!Ctܸ66' Ӆ|>W4/>wi2мwo\צ1Nr06WGWG04Њ w`h?݋Ͽb}q; "W9l:8و 哺 5@D4v(n[I?>nP?x-]n/s@"YELE툈ȸ>vRj`X]]}DDDzN^`>ŘfYY'ۿ!k˂ e%",dj~f1 d~W档&S#7󍲛צ*^ 0<mǞ8 wpP6 ~{:Lpx6Q!>%TE[a/k 5djz7ncu3fݭ6d*?+51h;Rap]pJkH""""G{hqqQc˫VRsLڲಲ2JYBYl&Sfjnrb~~w=n;,f3J.Ǵ!o? 76V̯=ij%)o;Yy ۆ.;oz?N>^@*+>VN4""m)<;/~_1bٹ ؈j1'vL0ІIE7Qi8Z }; 5\ LDPz\UR\V>ݜ$njqBl^.՘] S )݇XWVtc<^8]a|'wfVX"Sq]|c8#HCwP*}\N2""mYAamaAPRR.tw+4\HӚݮiPJDDDdL3VjV0_∎OL3AZ4Of>ͫ'./Lr]<ӅP$Jq=˜D5R>&amUiخBtYplǕtNwcN;c ã1|79* '_ >S?XTuN6fj~=Wkm`ʻӻ"Լ!ʟ/*]H+4\7Oj\PeQMSCDDD' y݌Ym3Ӫd&yso}a\ExblZ - s""])8OnA4beiۊy]ܛZͺħb "柯ax4R_<}|xݏmß 6;TKȸu"R^:'e5xQ+=ݭV*p㽛8{fhǟnجV~Zm5VWȰjiDq '>ퟢ|5ZjSՂ'mGpY!xak91`CD jn25޺k_=ee`[W@ֆGc򷮢Xp0 a*YحMu=z 6˜MsCzΕK> J뫗KUĒyM]6.˺ N+5c`vRZ^amBD4*A _fjڑH+u$S)H*PWWGh47,V,J/Y2y ""2B V} js#<("JytN+w܅u߿t0t1nC 4o߿@ps/gm?똊eu"& *r"X9] 6 rD~\1 u{'Ș-UQZbwjl.y?in5k1VULf"""2[u]yeڨB!_nԲ|<1s5o[*)76W' jkb&Saɷn`h w V4?f "q$C 6ǟ m},H$He+W"mWk+&KʺjB7һse\ܷZVí I*~Y]>'&yOj>5Hܮ~=P<="""2j{!5P _KuC"""JҪ[KE}NjvN*J2DDDB*Z)d6|X?EBi۸\N;8~c}@*xK X_ ߸Ͻ(CGzZd VwDa!DRiyb+g m_amAtY|BXoՀBzrK*yS39ٌrē_xufnl\x3 ٬FV+-T1Sڥkon|!eP3l~|dٝ߫Jܔ}F/\X+8XUzwB8@kݎJP;}H8mٲrޱ|I ws.Uؙ!ڕY]-x*mϣgZ~?dwwPo/^Q$(IYY(IZ> TKOwuuhrt'&& """GE ݌YG{ܼaf"cڸW []@YFXVoVK$oF7-U!R:DCk]C*Ο\11ZTf}.?PE?-f"dr?dvF;g!"SDF< e?[\V ]W} 6Wlv}{ [jS=D0"""ҽHDӫP^xJ]pJk%HHj,Ѧ%=5o)&kEP"RƠ0r*WZbRƤAof*RIÅ`_ʭTsў;n()ߐR,U3{.|:~|wyDzY`yce"4\MpZ!c5g{KU2|X{SN3lgzz0|ǨR V2LDDD069]VWy 5Kd*ADDDtIRj͡޽_*Ԕ:rya"%ycJuS&/j6n_ڷkeEAԈ+#Q,VwIl#j_},y>o[h֡7OGz(Ӯ%KG2l|hv.+P]zu/JŬnCk 2Ҿnӥ1Z\5`M.?T"QVj!NYH ebQ7M/ɩ(i:9dX ,TS^[eAe"cF#Ƃiq{p?dj+!_=$9aO[+ygTKX5<Ûקug `IͿvE$htd~|u5w+{@#Z[HPdQ(ah4ogN!赕."m:/Zي=jUcCxE?TH+'4%j]]whB &"""P):OU *Պ.ƬmK%+®PNO16|/nE;x1_djRR1[_WtP9,a4<~xBNmJdLk˳RYHHG`2tB Bi599djNƦSպ\.'5//VjxludiN8'oܼ/ Gch凷\:X÷cQJ>fՖ9CDW\.kJ:XMg#pj OX>&ۚ6Lp7n/sQj$)r&Ź3|H" 5{W49"QADDD+J@G{PS}t}/@E ؉@mJ[;[ IZvcĒu*vwK{ܤqrI4N׷rob9IR즮I&%I"  ކA$q@[KWf55LT/߀D$D"T*V5Yj5_Ȯ}<$;ҬK}v|'w{nހ_ 6O:zQ]X-F bpś~6 Xo`jZ8`m5TAČuUlDDDT~@Kf#Cb(CDDD$F$Ծ-_s^Q}{80 8@4|39&"=֭yVU7\X#x75T>>?zv̇MdF'~~GXp۷4U|3ي~}3ql?FHgg 'g\&"Z[[Μ2Wxۆw?޾:ZGj&""""ws 5/zaVH4T: J7D^t8NFB`8DkcccUjVϧjj ~ۇFjI;لawe45:q]^>F.Q&DYCc2$"җH$PHoTկ_T~<LjHFj}`tt w """/:տаH*E֯_{扉IշN\$DTR8Jli5̺ΎH4┙@scc=>uZ{NwnPnԬMN{q煐@3| '9?M4fq*8EhnPs*]iwސ ^HdTtf) ~CDDD N}Ͳ63շj1`&U0LDjt oBH]@G'o. O [l¿{a6xPF' _~h CQDDt CDTqƪ}7jd'^4U!h6CDDDc^re 5_p?O """RSLamSQOLNV|'68VT4PXZ j6.QNdE߁@Xrf~~"9jڄqmK&۴K# b3SHgHV A%Ps.wz>^ݷJtmr14cf9cbB;m MN Fܬ.s[3&Xg]< 'pbh,.U>oH&?H^O*UELDDT -%DJ:LE"D܁eH˕c^Vt:Hd!!""""5˹p- $K30(f"[{ZY ͤs Y}"!!`!?%Dt[XEFHgg 'ux7^,|ׇ9~5w~mlhj-u!FԎ*ĕ1SiY$k*AFbtf|t&O˕# COn裫F'ۼ(#""- le\3%;CՋf""㮻f!V^մ^rhK@ϝC*#Z>ăHo-c|&0 U[|e c '"R0t!AP(`0`]InHBf z8}Vz~s}UadtWƐZ!\_LҴ4aڄ-f3A~ yU@`GSz#xWf2O$C Nv'T$zge\N}ך~.$S3Ճf""E85/j6إec=tϿҏށu8hvb!e!yg#x졝Z_5Tfb;,yW:'k-V1?O/tΏy$ҙfJrr7~($8w6–8Z[+c֚H$Rݳ;~񘷹YPsZWN63jBļ26&iotLjU8L 5O*|bKVyq_UÓNB;oƒ1L:tWn[X|z%D~&''j^}lTݝ9bf1N 愭cd|'xc9)N ~\,|÷ũN:,I HHUe|'+O\4dZM+Ňs/>O,郪 5҉u*zBOE"D<*y_ĆPk!" tZP,q dŴBIҚL Gq;5, F '1N"8@h*x<6|H$VeZn㮻 xm#Ipꍋٯ4Y_4C6lbWO?~ȴu2 ~1£V3 Mjt4=Z3&҈3SL Pڸ>7`H c=qiU ׼*2<*9*KZE J,b"""*5/zrU:uZV+Ͷc~o0>v;Pol/ETH|JR]芢Tčj5wU}>BϢ;t94Ncd|Zu᭷;- +OE7SSή;ơ-Mx7W48l5C;6wV"Ù`+?juY%ƂŌ o<%CkH/")ݏԥÁ7tvS646brjJj0-&&6Mq71'( ĵ82QOKr[7ub1bU~b:xh@@wj6⏺ղs<:?_;WPa3`%ۻnoHMe|mO||2ӪKlģR^K0XlX;=/\.7n7n*BTynXeo~huq(.z( dB'vW=|2oG*Ư] zLDDDD$5woʕSp2h"\fe"U__N1>>ϫqV{sٯ{cw޹;ŋsH$f؞} Ds,f~~(Ì{ .0s\CÐ.i~ÝPeةn~X= "@4/|mq0Z t"(0'3+j^24'& ^G8E- (*X)CDDDDDKpYvS,绔'^j\, ! a|s6UsTt_;LI=lx_108ݷU>fs*̼X@'6{Toeñ.ֲ俟wv8KZFpr><Nbx,3ܡUop:n7^\=?n/yۦqFVQr+~=6Cl33%[F 02ں)d.b F ':0kmtG>o@! ŋBjtేv)ٌL6˝ˡiDDDDDzB͋^DDDDWSS#Ͷ5R,)n^9pjh[ x .\P}=?|;XW[kEWw5K}C8ݷ:L$f7x2_Ƃ 2,Q&عoհ@h8?8 bzrv̇+QS+clq%-gq'зv^hD}}=bصds?+dAFDDDDZPsj&"""E,4Ps႓B'fv'j6Pڗb4>Boo/^}ՅEZm+-{~KPQRYOb y}gG+p`>764764o'3OE166*c_G8CoZ9B{mx( CВmec3g̙7o渒T;@(Nc|||xOH3D~a4yfLDDDD$g 9|hy,D,1rzx~Y׋ى|F޽]8}U|_d7 H;Pf? N 󯥱MN8hn u;ڲl[6Cx*D|DcILMEu׉޸h ='c?s]g۶݁qiA>/ xӯ Y?;wY%4֬V+Z[[`ϥ3(  DDDDTQ^/׊j&""""ɖf'Y:3? >_;<Bf}} 5qm.ҏ088(|n.q{3=Rl@y$ri""""4e- nd򡶦z錂`8$"iu,LO1:,o8pࠐetOMDDXTry%s&~\M?8͂DwUms0COp2_f}I}$Pf*i 6 "b̲kƅQ;fqpp\G 5slL&hY]"gd2`XWr L&mX,BLAQYwMOV,Cyj,ڷUV/` 'Ly8TsJ}M>mtމFy!f9|` ٤-Gf]]x f˧OBX=Bǖ_WH$c"U$a$55F5%bA`Sm\9ͱ@`d\+/KDDDQcZ 67uV]*8@0D0@0`w1)gyigy^v]&I<_W}MD+Z,N1L`4M[fY趼8p8Xp8ٳgX%\ظQ$կ4vtv$@$1 a*_7,B 1jgnnNBګX, TLF)[5n cW^fdDU+):Y/$_DDeg69;33 b($YN`^g+Ǔ/3§^xdHgIϔg@3Ɇfu>Y]=Bvr8sCH&BƖ_ ioV, ZHxPjdJ0-D$R&#Uݩ9_)*fs 5SU Ir.m;2 *14b̎dR9}JB12n__okڝcQ\?)zlfلL^Fv{ Q`zctr.t]hu׿_L&Y$ ]-s'$J!$p͊34^=PHwbޣ'""*M.'g=\,2L&-da""g+π"u:WYή7իWU]df["lVm#u'`,d)vx rOc/%n>'I9&^zG,1KDK05-_}UD,Bn+48 .fyDDD(@`$Z !#ޑ< ODDT:h5|EQ0=TvG]˙hjPV3OY'؋ ݗݘI*)klgyD__Al:, xccAl]oƩ 3>>"s_eݏN㱇vrG"]z|cKH1}a,\nFc>}}},F-v;ǓTu 5PE1 0d`@KKiL& :V,'r"""*+f._BO7@G^pL"HN*Cg0T0v5g1I߬r~*U ˍP(ȃy<NNDlHY[7qjZ&֊GcTw>sn<]y <,k#3\8ò5!iG/ QىnJjnݺ5wnjXԽ=hIDDDWfz1LDDDD$dfaW5ͪ[ CHgjY29Qu`N`h4`8tVN|1|2oߪݚ+TW׃,&ׄ+OбL&@H蟫޶XN 5Qh'FԩY҃(3ri6CL&d|v:N;1XlI}r3Y bTNv&'*3wEP4N|-c}ûvc>ۋ~.]fR|>}_QW߷ _fzlvN-ΊoJEk|p]vՅӧ>Cv;8B-266 ,*Fub(ER)_vDDDT"橨GI6"jm4 `l{ӏjY1ARb:YgrxϳOxvx١LItuuD,Ϧ!˝Iܩ~2@b{;ڱ}pl/^;@&'>nh֪vóٍ'~^`ナhq'{BS 79 U,0ߣ*bK7DpZ2̨1bvVq`.(H=+Z%+9 CDDD,Qcf&/d&  >Zf7oIgg'u;$Q\.7:;DPubaw02>۬8>tڡ6>g{ql/7/;ɉ98ͳٍG4؜(߿'㨵 dW*r.7|>|v؁vحYc,UBccxʾm0b̌|Lf"""*\N{ =2ll?qOeYMDDD,ӃTkL&UV3<uh>Z.\nx^F?|,FTDI, /v)gYqȣƒZ+؍v#̻q}ummoV`4'{x|;::ގN9zI|Bl,ɇ̉EQ%-`0=0V/3<ȉHS\Vm@`dH )K2-A%""" Oq˜futwgvtuuDE sTl~!;5 4\8'f0 C.[7o{:wQk-`ϽY{B8E<;灏݁9~ڷfݎ=-{Ɓ9 DZ$Hd ΝSeǎk' 3 DDDT_Ȳ!\=#=[ E`ӽl6$2?Xu|>ߵ|xݗp`.>*c?"iHtK#UWˡi9W@-kصv3i/aA/ Gu?]MNxwnog[R<8ģxOq]ѾU;3w 28sM~CbvG>BPU;+"!ŢzhnnLE&"""dY7W -'r 5ђ"&ZY٭ v;^/|2V,ƙ3o"L:rݽ Jݻl,Pf97zν@dlZ!] SCDDD)vj.Q<ҰxnFP``"8sp] 0WṵÜX8ȎD~W12>ɺd4dq9'uyߗD2f]ZXuE\ZW?'~TZR_wԟ@Z  [OCC:̂Ł9ΔñD zFM[,1cT*(iBQ*n_ 0#duI'""2fl2Ks1jjj`6eE7\.Bp9bf0zuwǏ~Cvkǃ.hbpT x*9?ށ&ky5v,#<ٍG,<2>_;~.H:+}ȇw֯D;p zbHnر/DT+;==LFgFMQEQ8c7iB,*j.cfI*dFsssB1ݙl蛯G<(do/| 0M9~+,:,Q j^K3rh>Щ?`I}Z!osa& g ڷ/ Rk g "Rñc_?G|V"Ǐg~&Dt?"Hb`fF1t G LDDD‰\E=2mT#Cy`zd2̚}Lo֛Y&V v;|>8cǎOgpAtv+ZRWW|> _DeLuz>;J&{T?Rm^?>hL[l}%Ί?~nDr88~?8p ǑD$=Vr!"""HބW1JZ-X":'/:X,U[5ñ4?|x|zp؁ _3BrvG>BA$]&{똙Ǭ}W12t_ 4S</</}pO&p:j>"0]<C6{}}d2`XW2x^tboDDkzߒK3ٶIPsYggn@AOeo|m Ws W9EQ01#B::VÉj_D"D"wmjcuDSl^>_;|vx<v!];t0 .{B(.EEQV>W#/FƧ }͜p59W?#'TF7.ⳟ*ze<ʃ _Wp,<N|G"R?ԼR(gِHU_.s \>ZOc-_=}OSEg_^:zkϮ( $ UUɯ3^qd,%N=BT=E쬲tgVt^*BlxY,?J%+JHp܂Si5jQ=ϵp"qj|8zIHe㡂7.FR.a&é7wTG;͂CoO]~5ٵ~h@`JfL\,6M 6f‰ԬVp̟b`0tPEh>6fg.7gk}ri+>{*5'!Qq" FH9w&aBT?ɤ9l J) jfjU-SSa466Isi6Xn^*iCFmB.{!<߉B?GH&,<2 ATFT .]l}77."Qcf7<`I|>/q9<' Q;zI|x鯰%ػADf>ѝXu7ZmQt:'Bx]Jn;l6g'ɤ*s䝚{e(2"Hr,fgd2 z_`6[P[kñ^mLv),v;PWǃ= AR:~]>/a-"B:5ӥCi]ԯX ?Րm۬8>8j{eX|d2n}v*=3MT C%#FXI'"\FLL02@(D$t L fF12@$"ԩLi<=18q&zxС?ǁٹf"^'O>b@36pn:d _{ͼV#m9jx}+k]y^o~ (nɓ0L":5L|ifl6x}W\.TH yX_ 0qj^Y4$\%ILM166H$|J$ H]ڋۡSZL&9#+D__/O0,Dڈb+~}ll/_.jpr:^w $t;4o{y>R8?m首˓,ըN!ˍgC\ut@DPslV;  avO%JUݱYX(\Ϟ0S>fVɤe޼i)eݰ@`d/ވ-bz:0D˜IbvNjnnИ*UڴҬŴoDTlf"j{W2o3Ɔzmp595KG>} .\hD,k t28t0N|3g-nС8~;/FSUbfFJVr%faYe =|d~H爴 ^y4:2HR'16vP1W^4})@|E]X,VkDL<׋^;N "Rܹhg]\ܶ{Յ0b4}}pښnw,ҭf^Z/SϞó~]7NDU_^#dŬV13ӕ۩9>;ի'&6_.P3GVP&{YI"mÓ @*5YV04c:CWN6L5h1fffT|Ds88yttt%ڻ >-4T9㭷蚗Fy:^7!ƃjrO'tޭ/Km<ȉ<4Dp88~UC'Y" -5+KxJ[X\cc)[)Q؍ڄ-畣Ɔm/zq38vxUzv;8^:;@ R uƄXT7uX,_W*UݚS$\d2W$MOS=\*j|P?(#I Fz=H@+jjj/6fG lUlVNZtiQ8t0;bng'*X,f~7pҥn*o*|?BlG? V$?_>(gq\WFSD܃^yr,T!LQlmE*!Ԝ03YkעÈHDdKT+ݿG iGd( ͒zd lU9ΪŢ 嚚Y-":5yMT=7bO&*~==K.vj)Zv&C@P}:vALRlv㑇±TE.ҍQ`0H2]]] J\;HPHj}>uQCLf!묄YxRSE`f"+EQdKT#upvj&'aYvBPUBtl6~:̨3;J\n{t:|>y/=B%ǝ &d~DءYjkkY" y4SszdݰJxBoT]v&Lf&jN&[N"Z&6/o~ Y 2q(;_E5߬??"lQ^"$Ͼ^?NLWx"r9fuari64} ֭ZD@J5 U7L&xB{?wmҏuv0s`" J?ϯGuQCWҟ{!(l솣t>#' aosM6,Po H$xMG3.fC__/z188I7T #D1CMzԜP$&`0f Q*]$ ]:::pԩ;`vVy{ɾf/p hpoejyt\mr>?mΕ  #YiO>{}뱐Ng0:rc48Tz.6AE^j[r1==Q5r88t0ߏo8}Պ} 33 RGolN׵ef|۰s[T_v@]E anN^}2~wQ~?|>n"=7|XG0\x\   ˢIHăfzzl2'~bXN. p7om[<~j""Fo;}]x111Abmм̱A`kBHgҺ^M:-i@`W)%7lvV(0<#THOfFججօi ^QFg#@-={`Y&VZ>|11pewSW E/JZshZ`^0}O`v.'&L"jjԨefFn>H H%.G>6ΜySXZ`HA 5׫>; 64^u?[H9Krh] j`lVg֝j&Fgeg|? ҧD"PH1NpxR74,eYj~S@N jZtqyWVlذK+v^ I.&ͮlݲuz/j"D {Ʀ)1Pg}_oq5_{Ϝ>x.#z.HOk& CDj1It>C0;\ruGYm6LLiYZ\ӣ_ OIo:rY!˵X bY!Yj C 5,nN$WHM%-x<tw?Nt@D:JEra8,dLzֱk\MNQ!\fGYdLeM%TݾADUݖ*m<\QE5\A&.kmdV>2qJQS#= Vuk]۸V-S}DC}n0,Qd22o^j$!@#Dzm3Z.48Ҽz48YenAjބKϱ0T?Mg25ԌNիizفHÁޏ>Otѽns&7Έ5ԕ~3o_M wmauu.ͤky`7OT_@` |ߣ?6Q&Pzf4SD"ΝT"9M*Ung}l,?j΁xDDD:&!%2cfj)oVd2`0~/ hbv Cbb lFD7"fWznM${bfA[Nb Sj86sѫyET^^^wZ ĵ?vvp]tk`*JIguQCcͺ[-K!QT_WGT:vj&ؾi۵ݍ}]j:NY'fpf"""J$ԟONͲVa]ٷjafFz)8njTva.zn6T!" ;5Ln$DE0`[6Z6aD'&Xey="(EuIB$ }D"0BT}DL5jTdL5茐uub*o{jnV*qYa5Ϊ#DDDuj}-"+l)6lBjɤ*ԼflnmK,rYs=zBͽ4ԜNxfQUw6.ֶmELLPTQDLb2ou꽗c1P38hjSK3Lqf#!1BQAP"p59 GU]n1mj2^Mv H__h"""5sZGR ʾ `u* Omͷj&" ɻ4#K-v%mauq$"j ukٯMFlNaArr/d*yb4㹶lVku gG."""=5pC:7RggtQGϦ[;8JnAKepk6Nza H$x@鐈PsMQ"Ȕnjp/6 lbf$=DfuW-.HD4Sz%Cͼ%"*hBӆo"#>`3U EQLsk4ƵaranMTm%/o_MjoQP3Uww5uQLJŚ;l.DDD$L}N3P,*d K9m۱U7 l詖D[[7^/IJDes|6ߏdb#]ѥĊ LnZkŲX̺.^fE&"";Q!45Bs1q˿c3A+X(Ep2DU!v{o.-DS=(O 5B*jC˦; ~{z>Y@ҭ\.+h yd2`X#F?kXtST*ZYTAx^,DDD:$+ Ba}< Nu60\ CMFDb&wm "7DIlՋ8%(u^Z͍LLwvdMۻ;mܹM<8T5nQm(%,B)( oH/ФEz!<3EOW4ζ&XK6突s]XIHy.z%B{{M$""VwyF-BZ(*OdDDD/ktQ#4[b|xnAd2YY;wn{ $D"dRE"~J<;s~s%oVOB>hU_xQٲu'Z,hٲ -[aj"qLOp&) -Fum=.&Xʍ5V 6;똚դOtZ|477'tbcz 5H jt$}8T]/0<׆{*<׆KH,ToNwք;p`wnTD2ẙx<} 5ɲ/E"k$ i(%5+0 $IdYIrp8lp:/ns!Iu,H(ZmN.HpGh 24O&tx vG&㏍ c Mf13d:SS2VqxL=>8,"""hq{żǥ͚ŃpAU34_=QgJCՎR)Bpz@H<?.$"""9h-2,A?mbE)ѤDYj-P,lu4&ƧXTZ7#'fYqyns{4p-?2qiLMMД<.^&A8F,YÂT6]έS=2(x 81ł-[QQ! 4nb1BzYѨo#dIB|O&ͰX #8N^5Ƨ#mpVxl[ Os*|ʺ<?8~A1:!ΎsokP3!KԔ<|"FLCFLtZ*T8:Z/\xfʙX,H$$9I! #c]eNCͩ٬noBDBѰDYh%UU1;;B@@lgb*tLQDDD n5,*q-*4j=zG8v~ɹ7Ѕz/\EhTÿ ݑ7O@viZϘEH3lLw˿W"""=\I\gXlVzLfM:'jVk7&Zш@Yy&y}/Xhgύt:Iaw7&qIUӋ|}2Um''A h+#V Tׯ\bIxaF&dHZkk|4utV\Dyk08Ʊǩ>qw?{?9!U|''4{5R- {TF8+B"""sh2nqϝ4Zu;7F͜t^"X]f1HT5hx=w84 3dR둵vjF{\>RnD$Xt.Î{a|U+<9KD'Sn CЙ^Sk߫Y`1H|O@ʵwoF]z]\M_?v5SvSwI8 !+8L\ !c5 }< Hǃ/r5 Bib1)ja]lV`0fw:V,EfTWWj;/_,b"! \M,fggpT:J!uмG%_=~;DDb,xá)LMz6+,l2ijmO.Muv!r~}F//ǟ|9ܵ0VABtqp񽟜³{Py;}z_iDYyfW>9^{~.}f"""}q&a4&gQQh65 !'*f=a`2jn1Ld~{YɩjE =֖fd2iRsfΠ3쎵_-:r:JDkU\\9cz<DQXV>aDDD:EW.@\iynٸUIb(_4%; ةsTb zp- 5z\ 4WsU??=}E[kn׹qPo[qM&fgg fE)(ԜdI(j5v&kC,4-]w 2>EБdR ,n|}6B:^IHJt /-[iYP"ZDbeBN> ,g N-yd2cG."""sh2Nͱ6,uPTo#^ET WqC#nl`h$zXదquW,06 X[[Rx/|"Qv,֢VDs4(*2"I 7C6`E R4\u0;eqN:n7;l8:)~ `?‘lJ&UdY=OG`pX逃~`0m#Zu@'{D"aCRngODDD~ns+#Բ3ToNޤU\6 ϵa]Ep* Kb uq},ڛW%.;{aYQ*M•aZm1LDD3n[qE޹9!JISSb IDATQbA4:+|d2)EjҏkCsڏgR |X GBGBjk(4asn@Kcpw1̬&U>frh]K3P.]*f[2I- Vlf`2_̘:0: =0;' ݇^/o3LDDcZh2qy[Y޹D2y-^joZuT^|7f01K΀34Ԡ 6u^aglZjsb7-84:!l:;b#9QnDQXVnxDDD9<ɸ". 055-M=e 4٬hjVj'vd\}[NYP͸p7 ݝku( ](JN;c0tkC|wB+oF v_7 .6:ov{jfJTQ jZ<߇L#P$A$$yWxٌ" 4quxR>874"""jsbq#y Ev֚ld\ :4NF~]ϲWgpA.z"""qA!զZq#dRb^G-95/?rg·"dtFƯ%qw4Vjjv 5}XLFIhHnZ1 5 fR9iV~i;ZP[WefX <j'~d-(enkHpb<:L.̀Λ?~vXKfa0EQ^ bldu M7Avi&G]3s!~;Ͽ:~dY$Iͺ*U"""Zݥl߰4W,Mxa.D"\hosG{•a:&sHtvk2cs<C*VkTklV4iL&jUK<EJqV[]ܺBn9.i'0tkHI^|ٻNC|:[4 먮tۈH a(gZ\<:*i> }1J|q݇c3EDD3'4CPp+χލ5+߷=^E"NBD"}P]҄F'e/Sର"8!QHRlDMUX4\)QLڡ.| u`Ӧz`ffe%0::~;w,::T,B3){(,u6f`+$ ֗}XLEEF&aE"dO䋙 ٬quj"_Zg&ƧY,Źmmx|ֶ _:{y]Zg,x/yG'٥Rsdtݸx>ِtGShkiv.CtYZrt vDDD*!xG&Ol]jsbW rl۶ ?={۶m[8qI\<o/.6mgs"| Q qYXZ6ixd*:^4:+MMEr-hѭ9I#H]B*S cl0F+W[]OhqoL *x߁CDDD>X,&|\ 3q*w29XŢ,ZPjMuVX|IS58C]s V__np~K. ૟݉]mN&'0V"dMC~h\Z\,Y$2w$6a0f+Sm8ZZ=8ProcH*nCEBͼ4Z؂Zf;5~<_jPsNv[8Xt'"@QpHjц~5] s h]ߏ9(&|oXZ PiB8fEylD".^ڛ4fhc&c+MNMM Rׅ٬5sBHP*G5  !;;jcA U?8UÐck>\Esc+6$4d|}sxΗZ[8waj&PTK1O&' 5#NbTY4h^g=*m| Q۷Νc!V)fhpc'ݸFBTQ oq1xP( 6obb\z?T!ffcKB͡'Eܷ3"!!Mw YQ+f jup 0硱EX:F&ϯ{yjF][8d2-H#-NgN|!qJ3׍U k4áy׋`0:$.01Jmm7/v}f""uݍX,&|\؈&1{޽.M= \2Jvh'v;LE\Tp,f#=>ټH$۷jsjju#jri( 6l lqZRRlVSisHNٳ'"4$Re__35wikfJ$Zˤ*h6E8B<bp lfH2vjEu{t: Zwu5Ni갗kr5`KK#zΈu{^85 rH.MUR͒ߵ͉6W^ws=f}u9܄H;̍uLFRoG=^|ntg[i)'Dk玦J(FsC'OvW"""x<M..XDʞX#Z=d2fvO>g'"-ߧ֚AR&΃w:ok%B>h 8d2y[Q*5 |ٴd*X3:EgQDEC>Sr|:|'t2+6VUbbR|G⥗ (G(z{VA]#qt"nwU(&zz /޾F^ A5| lRs>ٌ ׂ HUx9m 648u3]mNiBpoXX3>OɇH{ݚ(T 333u%g;zdn st6ƂB6 QR9LNN`Y=i6[,1N4(]|,3CS,2ZskKP .\ b7:/GbVn5##t$ [:*Ήر7""" g 4[df+\VVWklV,4PӡF?9?Vxl4YǢ|(20O![Q2=ros#t$RUZ4ˋ+ :;Xff/qDyF^*$ 5;0H~wU(/bf6*|'j&""ʁ`0׫[ui45S8D1-W" \ozݺ*X'G ݚ onMK6Wv9\g/ڭyW.>O ѯjrc%""L.fY蘑HXnذ!df_ST:tjeǰed2thw3[i'\ `$8#Co48,gY r48?AJewvB_Ijbp8x 7P"""z{ݚ]\,Ks [hʻUV#P uVQDgW XGBx@omu-ju]󵓳?8c`H r&e'^'H$tj.RҢ"#f3CDh?"-"vtҾYP3 oKK&f&"" [MUƺ4(1z9c+ gWSK _[bB[**̇bK7. "/v`7}yԵoA ~ |'v;^ <+vǎdžDDDiեJKK799)UmE?~=s\D,j^ifZqͮsv[Z[{\o1bM2|Sz\"@y~oIgBɤC&Sbb!&{TK9{vwI3ߋWˬXU)s=yO\i>`0[ą|`؀iB]R6a$8#\3,q/|bpW\^/nܸ͛7s U(Sq$Vky^$<\9 ZJ((+bv6ƐHpM! -Zmu-ł(f juppsP$P8>/B.CjBJXP7v=!N0XJ, fbag""ZVfpˡ(f'ٱ=gć=n$DDD$LAP$ܴicQ޺QP3M掦JMBpQ|"#""@ \KJJfmQQQޮYYlr&R*5vSn95حYG~' YAtunv.E߬ǐPs\4Bn w>_p : L*5'~3ץ%I]by% $ .Υ<8!";LRϿC#W{g6ޖFѦ[ѣGK_FBDD$X0@o[;vn;Ru{F..g^4u*\x ѯjrѱcG5lYTUqqIq$s olU?bQXD Iu1\4d|š67 ">hO>8C?yNj\bY ! M \kE "'j]:^y5kw n DDDvk66|RϴsqiY^0OlVy.dk=NX 'OvsQ0dlEQw*DRWtj=*x<7Ǭa1\V^]ȘNW噈HATO>?5|}"pyKw^%zLg""0a̺wH5c~cnn&4 ]*_VTyINnZF.,WN^Tfuv:*k=z h9؊R"t@/-7l Sh247Lr5wjޡk,>R(b P* 3 \?lDBWsJxpFg:H%"1TVs:W{YN 'O[3HnM.C/闪퍕\\DOmjiLGF) IDAT%Qn`n.2""UF^'''h5Ef6ܪp;.R8{xg??Mt)adY6VO>?86BB!allSS xv􏡵%|$t<؄tkx< wAdKUWقDERooM1vk&""Zh,dl"|H$,U}~ uS^5X}E;woCY \vݧ~%Wqm'"]aYSot8`!8:D"ݡ-d(--EII)FΕH-M |͢(ypG/cj:G?11ڎ5#Go~ 5 Y1$ `؀.0"Tb$8#|߿×6LAS z<ܸq7oB#""Z!-/pU摑k2FNg`u8/n Ae.('xM$7v=8L&TjNۚs?3L%%(--JP٤4U[S 2˰;;Ѷ4Vt> p&tZ ~uyacVWŮ|3Fʍh ծå.Ϳ|G96qqѢOk_fixG&P%l̽;5 5]&y+twwkv7$p$pxT5[^#!D"!=>ϳ[K˰s[<Э9okۆxlw*H"vB46<[SӘZ{WoVyV q4<'ujqsXò`?UJI11fXQZZZd Z+E1{( j<=|>h܂j59'|X nFCDDJh'4^RxC>>޺ =?Ekh}Q\2Y'OÇtp=W^9%%bզR)HU_`֒lM䖊,нZX%_.lWfSZw.+b6f?j.C}c%oM bdħjuu-Cnb,?8\zg9jNZ( Y9_JY/GF?mSHourX Vwcݹmxwcq$TC#P$$ff"(/|y-Ny \IrsuZμy,vl*@(2 MܾU6MB 5F,f?H`#HsBs?&!ق$M0gx@{C[ѣx饯s=ǣY"doJWc^0d*j杉\`uoGGOC ~7n\y䟭ƾ}uh >k*P7rG8Tjla]!bG]Qkꄺ,].`9 ;C(A('k24B)T[Pao>:ǁ]oԩk{ׄto/b:;us p^ADDZvj;RյQ%4o&Bɹ9 ܻ}fWjr=XG-K3LLuXPIǻ^e-QQ:tVs_fuasasqigpUM`,G82P$>kk(:`Q4Z;`u'b[r>}^V@q:D"9 sZ|عi=Pcq CU/Zח&{坁;I8*C58 =v_9ToX (|߽pQh:jjcǎ2LDD n:su4U^oTmwUr=}?;}2$jVFt3('رWs=dl"tH$ UURXL&MM9WP54pWаc 4KHQ,[o 1IJCC(͊~Ѷy]fPVSԚXr.v^ r-Nǝ把 iޤgtuxw;Dt٭n ,v]k2oDO?H3p8[Q4ݎeVFƍؼy3 ;vTEvi>ed2YjS/!U9J0K31m$ G_٭\\`Æ BǤf/5e2k2n&.ׅfjjrU?7==#G~橏@B$"PyFFO$\Z7.5TH{P=z뫕f:uSSLJ!Ύ-]a,аoITL0p8*yomM}g@wlw9h%"tm* o9/ 9sN;v淸="-;st4T7jFE rgk-~fL?~=|acTYTkð?"|LDD`7nX&MMMIUB twl7 k:hPhˑ"t>L;NzDs> 5MBq 5݇wQEEEB՚RRkd2 oD'sOl~wkp-  3\IU8[۷|W뽼 5iE;uՊnÞ;g@? 9_33b1TTT*O""ɏ{bz]s*wS)6assf8r5=`0'5[)6bWPSȈ聪%sk(< $Z݉o!< o0@ww7DP:l\_EEFb x<_~>~^|}_45};T5W~}>)DnR,TUVtޓSsio|} 1NNޡqJ@9{}ve2iLLj-Cy]t;[ M91b,0`ijv &8$""'Gl*(fq5jk2f"#+R{?B|FKW^9P3Qa2 3!IUcXKNͅO#_ڲߟ~@5:46uoyDѺ[{հ)>ԾY!=Xot媿QdH0= گhirݚF]M5޷ 5+za8GH$Z5DDDqC3zq.ہ(^}ɹ"L?%t83y\#V&l2+7b_|c; =֝>6 OHUΖ*.2Hp r"Ǟ}?*1cv4UB9k:ݚrw,(%nIWg`|fDt\_<@0@p 35>ٳlW4Y!V|S T82]S-9 ^ㅴv^'`6NɬWĢtqz? 9%ɤ `;`ihx'Q 횄џ _"5݇jm)Ow'Om"#N6m,HP d3,~{=TFݱ = ,8pLJDDD acԔtuƌ"cکοh.wjH -ߐkxl/::ڱw{tsns@Q,qAQ,AfR(ǘfJSsGCxWo轼=oV=q9}8VyةA:;cEt!|. TTT`0pπ Vo 5onv̊٨[3iݙk?!U}-f#6Y>AyoT۷GOk_jg=^fػ}]YfGcRHh5δ ̇xrOQBw[.÷>M=2o h(*B$ɜ٭~G5^N\G2N`?QE'o>ͫ|ĶZ}f?fΡ,#hm6b6bW.!F^yGm04<16יVS9 7d-Qc9W6[Jd003<5`fU()t/>Spf ݾ Xe9|AQb .lQ]"j(t8Ctx&"Z_??|㏄sH&ϗݚ }ByLlt5~\h$O _ow&B<>$"Bxx4THXLZ[,\p`ӋPh!'jG}wj>^hkPCǡPs,i9JyԼ݆}g>.\Z|"uZ@ G-^Z%%4p=G(2 MRlc;;q]mnn\DDDK9rD2ڝ;?PxVڬfT,\hU!<:3)1Լ^xRy?H#]m5 x|HDD$]5d*b`6tS:,O ju\@*l!77 bcæY.otR!_R9dY W:F6ۡ:Aнy,0wξ}s,Bi8U:pw z%HuV3 !X`^8aQ̋bEQ0;cd2xͷ:cvhjf7.""<٭~qTt5ʋU^n㓓g6;`1Hy^&OO\x@ܥY9WॗEGDD>y 63J!v N4Pfgc@3l6+}ՐۦߥSA}ѰUuDEDfWR?<>ޅKx{PdN~w<"GV^!2PRlBg_ɜٍhޑ#G4[)6bvq#q'? m(&cvvvjz;jq#W7_{CZwk>v(/#"~W|Ma<.DZhDR9!lmߒyN?*d,m8tjVxNB-M |e^!݆>Μ}7'>tFOD2bFgx._nX gν>!tO>YݚҼw&(fqɿ|{LVW9JPipg9Bh_!B5GK$f_ (*'hu,yIT[ߧqX,<=BK ͮ !NyF֙sCeVvk&""ҐL]xZ.uU_m۶a}طoٙtYsg122~ 5QP\yjֺ[ɓ8x#"FfkեyddD]s玵$kX ÷7bAL VM@ID4Vu5tti>^`C>U @n_ ͻ5J^n!ܼg| ]fQ$c[;"^zp䞯 룓QWS ݆ -.Tmpm72[Q4 iݭv""t M47U Ư#97'U73\lH.iS=Q^nǼ3\D00`3˅7⧧庣O(<7~}-kmW^꯾EGDDyo!.U@@FwX69e2kcOr^'Y55^ͱkM]LP=w5S>uZq%fQW6,nË{v/~:qH"5Uس{Ǫ~;[wUMb̿mբ(\x( j翖ocjݭn>|Ng 72""*(h:y?uI;ّk7Vݾ=۷GWZv[6WsVVu̼g8+yYt溺:TUUbٲ<.<"" J~!Μw*WVaIxunO`ֱv.Z^i =k: V ." zswfl}4JGbia9D@f%!jB2%ZZ ވCV*F"R>/}Xgϣ~o2INᤩYv-. LDD!uuuɈat+wnW/IbS S4Y:9js[M-6 -9VvEWk...fھ*/6rxP 12 =pFE Ð)C#V;xBH22s RTiSrl}>VO;C:lԚLI]p\&E IZ+WaTm['=~v{ ׃#n0_d00k4a4I'1!.rrχţHnrbf&R~IbS̔>c]~&OLt IDAT \ǽ'oϬM4-ϛ/ fEYY)xI.<"" */JsWNSuPQ y~i-5·(?WѡfKOoij[ 8D!lhynp-}37 ?kZ$& ܸmг*(iCBvզ1fXzv~`۶|QЫl־U;zvYu͹\l 1?#DQ^)ZVRS9IF4Q׍mՋhI_s6{޷j*sQ()Bۏ.Jsss*{tlamuAzZnX hoR):DJbsp)2Viщ+/2PsStv |B̡P(/F~}M넸kPAל,COx튮\WWJn3LDDAeeB!uoW\ɛqס S 'AaޛUgϏoĖ%iZM8gњBt:co((۷%' )$ݮ]W&OJ2qhTIs  5ۻzT}Rcznd/\sNSZg8B"CKKp\_dIQ"LZ'dܛ=յ~tZ- mC*}ٳLAuF;rNy|p $5Ӟf"" jf־UL.u\p $Vk,43Qq~?T3MB5/7'$ZUCNNZOOJKKc(!666rΧLʅ'@De49 Zz|U=ۂz'^#%yl}>vcOkI?Xy;R;%5M Vê2q'^rQ!a{"p=7VBjM_k~펮[ǭ*d z ݞRyFl4f@fEYY)xID"" :6{%}md8^2[6__*+p)Rj&3jV9IFZj SpՅ…GDDV\NSX<^o#""lHK l؈6[+.Xh2H*`J(핎NX/)}ZC AfwHQQq{Ah&bwt`UX+d7=G޸ŜN WRy}j{#|QQQ| "RZZ*3HQ_n&fq)mXß6q2FkX6s;>T]UkΞ/qU̗񕈈ԮV=FT4!Z,U9:.<"" w׳L(z㵪 qjnF2[q,fkEv=+1߉Ĭ9T"[,-M\Pr9^o"""bJɕ#}UHPI-'(T^;n7sRF4ࢥ)&i>-JhfӉxٟ$QE62I9S\;7+8y \nO|;:M8XʉPwಽWUx)lڰLW/I{ªUHDDSXX ɓ%}EGG*UH).X?0#ZFz# {lpp]!\USd ǎ)=UP3biqLIpRt:a0Hwx&ƙs sxyɬLDD4o_짒+ZXj5rrrx(("}UW +S)]7?8ɸ)NXuqYH9+5 z4u DaamGDDRVV *FH/^Wݜ#<5]gBN?842T|z'܆$OJG',͗>%\U 5U]. DO&T_}:+HZUO)D(!~ڬ"ּd]^I$""۷o/f ӴWi>y8{]뻌Sq)؃9K'j87a㷏ߧ~{jpmm/LA>:TUUbٲ<.@""R͊R M Mz={sq{HX 8p8:k7K~o /ɍ^)3eoͩ:OE+(Oq;wO=^rOmf3ۋG.O"VOOJKK#)Wi{3U)\t*Է^-*itхDT5߇O|)$Ԝh@NF<ΉFYXX?y>H d9N_SJڨ*aaa]1գbd0fk=p@ˎ.;'h dy*5ל\SZU5Y,-M&SRt:a0LIrs17kxE*s9vnF>0Iڮ62߸wjͥ%xUҚTNSXiZό#qUus6 7Nh#~!b:l\{/h#8*ĚlT5*뷧;Taӆe }Bt:Q\>s.@""R}N}Wsfn _HQnpoad0:5%mFVgMDxq9ׅ>G0<\ \r`0N-yn8aVm&"NAZ fMg}1L7??!yKϞG!DDfuuu8~J1ݟ!yjҼ4;NEl.itdYM8gT]> [zi?ZM8gњ~`VZ.@""R$*| Fc4`MXRF @7:@40< 0MD#kO\Uk_bia1?v}[m/LA9W_XX]}Hv!tz{|*>]-gdu蛹m9nfkw> Rr0}} L2O)>@ 5aԚLI(Ne{d5kŹ[ jljp@YB<޾J><m/ FɓΧ#"%Hq׷ ;]rm 40v=A?wsұrE޵P8D]|>jsqy\j_$""(++fzu*Iqqm6 2Зrĸ3Lذ$M"P9IFe^L:z% "P7q_lV'?\DD(UUw_U;Fc ($") =tE3CD 0#}>t;&Ԏ I1ȼg 5 S7_ R;r`0EVi*:Zy0\a24drޗ~ <9?xH:fXynV_ͿzC'  mwt:E'j Bn ?`׮x"HPVV*̈́aV6Z[5 Og!ß6O.qfvy:2SkTo՚S J٦+o^,[}H1zzzs3RsunT܇h bLtZ-'hf$`VJfllh: uӔ,RsͰXZjSp(8w9@=ӘB^DkDG&C[]P| B Vků?m''&`nV:Ϟٌ{w(O&)ZQ/_(&\jҬ`N /LF`t<(l&3}XQ<-'*"5^2MKaav(n}NSgf" %#8Iii__4Řf$h0"!.LiHKV{g\nwp6xd 5j~1:N 5{}Z6LbqL(6;?"$"_թWT]Yw4y2#9DDCN/svj {vگngVD,SڰߏF/Ugʯ*#r nP[r`_׫108!wAvHH AI " ϑwwC/+Zo <}Zq\T^~<<)fEiicEGaqZ9"|2o_}f[:\ L S4 3%:M8#9n:h#xB̃[Gb Ғc%o;a \耭GXe˰lY"u|>L}DV~VXX?y>CMDDׁw?q%0DEM"@D"׃ݓ1M9*5לR|5C7a5(6t:a0-,Ew[ʓՒƛA{0rgc\Vx%!1~'HF5|=/**]DbȱpNFA;ۃʓxiNy]]\DDD$+Ks *O~*̙"feevh#֟þ}{H@> ׫J$oSQqq񉈈LHY@3PM1Ԭi&l~z#Պ{#^S{f"""  CR444DQn8a ia]< Ƶ9\|D(k`Jnw\Մc]~15"ɢ[g I`(.qC~ZQ@Lo~9P;K+F 5߂R@)ڱ~!7$.seaܞZ& rv@Dp8Uk>- ߸w1DQ@l6 =F\tgK_a'U[9=$"enVm]BJAVj,׈===\DD$TqlVߑ_x~_hB#Q;,"\n7'!HQWz{]Lr5=]rKqgabŒ~jrE,ʓxi8aeȅB +RWam/:ef$"kՋ3M{9*~Ƶ9O{?pc5"VQQ+T=^'TVi)vHN.mVNBH񺙕.54 ϦR8 Iv7'-G;]RMpy>-nBuX\DDD2Vxt!fycطo/-CN'""ȵy3+}>:re9IF.B"Rj,& -YZM8g əUVqAP\q9UU U&n: ;] ?,LKu#PJr~֜R|bii#j dJWjN' ;(?c7wA6rddAj!aoc'mZ`$"" #U F4۞>Mصb"" i0EvWbSo\HS!g i?+5Y8tE+HKKÜ9s H===(**T8::[gQUЀ7rFx16&SJG'>S~[c]r`s OCyPZ i&]>kzsv٩DDDDy?'T;͊oxBHJY^w?}a=4ZsS G>>o}S6˭t۶mͯDD$0͊[7~wkRJEM"PaV5yh6[+ܬl?!R#=Kͩ:5Le9Wӭ1<Pw|40F+Wa劼kf+765WwcyxhE=W/Iz\ $68%UDD$4e"5 yG>>jUHMWj oPVuB`6Q\>s.H"" YnlцU.HqJİR3r ]7sywf>;ҧbiij5bi)7(6!t:a0 qf2I] NT 棦4jjOce2-YVgnAHDD_L6}}[ h/통Xw ν>J*Djua*lڰLHY1J٦+Bq`rrW""~^.z <5 0N,mV..qBB5Ӕ$W::aii,J=GG՚]. mL $I{ae;?pzsOawtKU8vb<1HCb hZ$&̸gi7Zm~}vG痈HiM4a컭2*O~ŋT;bDkujHk[xdH쨋 IDATJ"$"UQ{ϾV/@~׻3b+NW""lBP/OJĉ8LDt#Ǎ FNJK)C՜STs5Cͣ_H 5|p\t7󾾉!a4LVX`\,_S_J¯nV CluKXz4reᑵuuZͰϭvoYqD ""ej4pT={P3-HJ۷WqRc#y]=Ӥi}HU^㷻>"y`g}.|,[]_hf*~o踂nufbxD6KDDA뗤i޻ ?8wOct{ 5Rn2%uPlReY'L!]S_K;f{8tyAJWkmz1g 1~ư՟=gΡyIιf B&-o RHUP㏪V_짪DQQm-h `6''#Y1B~OT}XN՚=}}Vr[c@>_XICC_ :֦1J4D'r.RSҸ Tfk$2B!""2}DLLi{)NX,-&SRRrj'}TtZi5ذ~ Z=oƦfVzj ǚ'qh_{^Ft /aqמύ=F\-+?9;n'zas *O~ŋT=ٌoxRh***p`iB޹ ^VGiXT/FòdT5v 5QSs)8pBDEEՇn[ N=r8{*x/4h9DD!N"!.@6Տ牝N0<6|m$Պ ,f4i07Ypʐ 7@$5P4uI1{Uf8~ eex'yRhε h5enϾRy#b$Ěl~?T;q,AXg g˖-?x.N""`YUwχɓWmjpӹ(% J3L(FFzĸV?|C IS0:|'5شԩS_.I2rAQXjvUSM ;ƺ3bHt:xmvDEq[{"" `6UzҥU0DE1,>AӇO),CCZگAfr&bii4`,r) bKUݽBy|o贚5wA6rdЇ8vZ X87`!npE=.ZZbJ|劢 ¶m۹0֭R+.: S]~4흪>f$" .OF6<ʴ곯ri&ҒcՄ+} l֭f"" mee8xBcd㫦+p{?嗧U}NF"RF},R#"R2N=i79T)=N՚].~?¾~..W^VCޒE<6k;,V"o".fXnj xi5٘'9Տt PWW'8p<!mwv>Sy`f" VkΨ>/= QX$ NYWW<Ϲ8BTEEJe9V\t^2]W]hjچnu N7S""X"DjhAF}߳r(s S0;rUk2X \Ny]V0Dl,_ AlVk;mDDt}н9U.]Fc1(,,/nPQQ![uK`&ю7>ON4QzY켪5WsO6mX&g gt`̙G.(Qihh@QQ,Fc}~q Ah┈ƷW!L&bii4^`l,r]Jcoof|AԌ]@`wvj=6_6o$od5^ھoCr# M͜awq@; A1ǫP\윌xόyihQH7EJ3nX1T}b@\<@EE'Q]nٲYD|5_~y~_E@RΊdf"aJ}9 S)VjEWkx_مQŎg߾HKUV_fn7,~s*D $qq .{U|Kcǯ6;V3PѲo'Ţ#'CDD[)ϛTՇ;:.[U 1xNDjh0d|}z D#6&YM4_R+ Gѡfp]Ӵ4jjO+"ܜjBan 78t VanVwg@7J,|5sjdPZm۰_wu+sQQ0g\"Ӄپ#pT}>Mш0(/v|x vUSM ;F|lV/IC߿eL/+l۶׉DDA~ eflVYKӆL~w <)JD q`iDmy}3V;3S`JN$'aʔBG>}X,-qXZM.-t:6)} 7NMyHK5/r՛QΟywg`nV:42Ic\ vGMY9I `n`%! /Z~ZPg˖š(mٲfYc_v5ͨ9&g?\EID!!FC),Gg_aL% ;8X;zpDN׉DD62{clɎcZV LG1\bf""6[/k{!ijj?GKL;'[CXX"Ԍ]߀0+$b<^r8BUQFD|.CWxhv{6PQ4P}bg"|>le^ςb?CXufԜnT9Y< BL_9݈t,,5Uﯼ%>`3Q;,zA+6ѱ\bn~Tj&"F3j>Vi0NޭNMFZ m~+ 9FcS3,/m{~j¦㙧7by{0f{xxvk{@:5spBNχ麪m@a!o " v(*~]\]ع#՟S}8(dtâ+]Bui0LDD3МmozǣbJFՕxDX#8DD\}nÔ'l\ID!mNhՏׇ>,8Y1_(f77iLqz{{hBt iWqrFqq!P7|ϯHJG',͗~J-W8;`,Zu|÷1شqxcH!vG7KwbqDgA<4`4L'"Qim ުQA͎|TSYY)***xrLCCl,싽RX4MkqAhIDD ,lbC09񲍋;܁fmd8h5BagӦMGxx8x扥&S0}IR󱪓j8e< 5sRb̓i&l~z,a6k;8NAl?qQf""; NJ]ZzAp=*@?>!Lr$&)xֲzSKʔ$iXe0_fوsZ"A3ӨZǿ&M 45 6)_ DjnGOOOPX* df""R6Ug)&B͖\T1 bY%6qsdc㍏avjl}p>a%Ze %ksa& 'ncD"ԷmLN[lfHh_a7곯KhHjs0EX4ilj:`Hh^1׮ZTT1 VOpH Qpvz'FVI٩ϕ>m]K CP4n!&o7m|m${ȷڎCGW,~ChGQۻ8 7ꯋ}}}(~D1cuWّf"" D9'# Sc瞏K S4$PnaM +#u"`3"̖Xx? k~oW+>s.\" Ty{}V)nGwwwPɓ'#*Dr At:N. >_HI)YX +vjvAO(]H wA6rdڎc'>Epc4jj Ͻ;:g 1~V~{s,07YjmuBN˭}(Z R9Q ?ipPw*˸l&"R@ ӴظVGNLCKPUg#F/Cfd#z٪ׅ<7~q%u"0l٬(.^"""Ь Y/_s@.K`0LDDEDDRaJN/.|VOE+vjN92Tvg \]E@ן=d 8mZZBm6ZrYљHg8 0$?ݰh b:^4㩨5$>? zYg6efp VXX {Yk;N]t ^7Λ)`lX;jb):L0m%\`YZ08Yg4|I.4yz#lyP{[l|!R8N(5^`YMdpT=Fwwd*|]%3RMZl&"R@ݟ)< /|Mј/j}~&tؐc瞏+\E[5y0l=w~ .V+&":m:ͣjm$r7 KrA[-1LDx 4^b3gZ_? 07+= }p~iU$" 1w#<<qMp=6m|AT jrD|>D]!{p /㢣׈}=.?r5|%Mǃ%"O]&x=}}e;^ Vf_""5@PawpO`z{(΁NAl<#(c`yj5FjnUy]ԟ=˿ϪD׌8 P'A_4cZc @Vj,**@q.^""TUUu{+> 5 ;""aR/^/l>~ [lf6w(04jx< ju cԆ1HrCD4~RΜx!Ҋ>TtJ|%N;={)(OܬtlX/>̵0,ߘnԞFK/}>xr V nȸQӮ:&vO(FP#CyY4xd~}r{a"" TTT`dS͝]ع#|9g!FϊNDDI2bYNrPņm%Gd;^ f?chhhb&"طoo@/wډVx]]qe~_hyڴid jF#CD76bcc&tt|ISubiaYQ傍;m~<O6] 8yY2v ƕ;=D4LbrÓ#ZoVN 6>b/_XZM867 fn/LD41eeХ S߾_;pe\DD=&(MPt#^_-lv:زe3***lVlٲyQ@sgW/W~ ~?N\~4 """9DD$+wRsJ CkS ;ԶHy?ΟM02CD I;E5Avv;e9V ^h| PVV*q 4;9 }\DD2O.Ť {EM}l t(0w?ѿl64|zyp\xܜQ]yʔD. ""XR<,IMj85%\b0,mXET6_{<ysR9u:8 D 539)p9N re #˱l6텉F'` 4M-:w~+ 1z1Lb:_tzP) l#8΀_@3nڭGJ^= "4aԩA;wZ-? "yػBkƋo_o.3MJsͩk &4 )T@Q+i>L[ufT~[ٵmoT֙mE[>h!T[D'@!BL j}H99󺮹jr}s䜜p2Y,-tD0Ѥ4Vv1q;?K?lBg>O\(Lwhc1">z]{=/u7lօpinnFoIcC lOi2h B|?:S[x(<9Ą³'?:inî:f!oga !r+;;[_<"[ nވV pWiIL!p,,6}!/#.66SfB0XZQ5X(.OgBGO651G&L @Uk׮|>>jPN'dvd+  dBShkƞ I!xae. bB +s*mrwlZ᧤d+JԄIs\ؼy -{Y¹OpZٔR k5kCTśBW^OHRsww*Έh  5^44$ۃ1u}= GF#y"6NGe|=@Ǒ4IEs3 lW_݁W^B!r@scKF܏ VMSBPbQXTHl=c|v}6A"I& k׮aVgf#X^׹Hfx̙Us{I=#nBNyI UMZ,-4Z‡Baf$ʱR۞;N{8+*@BɊy@pylTx6k;hEu-V/C^V }qJJr!DJKla/vޛҺ ih BMJ@vȶw;{~ "EB?ۄxI3 4G*(ް18[voͰw鴇uF GR$ m]}!/ct\̠[AU (L6Z9o::bAWMys ub,Y8΄IQ L{G|rO[rQ6>/1Յ}oVL&l޼ B˅m~œh>wwab(~\> fBa +sVJn[ln5SD"k?!Ы) 45cOy$uEsRqwD__@z= o ÇB&2(OQ|}yN3J͖Xb}:-4ËB)FrQQlFD&fjԘ5#Vgӧo !Dc~9b(Lyq 6?@uyY~.J df,+>@WWo:lYQR>D!Ѐ2 ~ͿyviM;5i0Bc~n&""Hn[lUJ lv()ي}4 !ۼy`~_ hYv>9OVƼB`wA 1:BȠ}}!/#iAHU 5bii|KWe_H )"5u%[99}6)XH${$׎9 y3@Wv߷BkuhX5#Ua[fۍW_!hBX0͂_3Rky#[lۏ8- hBaL: ?Z#m;z`3,+JC䱂n{Y>lAN(.*X~կ-@sl}5#):X\7{3lW*P*U B䠿? bcފ*QH ? 5jeC#FBδByQ*%23&`ղ?V0? cട颒*ƄS |:ESc┩PhJe="%85\{{;og`czt"io`mp݂_SyH5>hpa]ǨQj"HCȐoyP!Ῡ]^~P6baITJ~GOJn_FD O\bD(Ly,?j &?8ȰIQc֌<:P!}^<:)abV.gDŽY0.lb!X{G>5KrcluBm6+7 # yS5u0TĪiB_!6C95 },?%hvz %<~iزr*96}j'g~n|पxtwx*dJAa/e =;:q(҈䇂Wcu%bt01ށKBG.ף!+ :TJhj"HZ[[Fz8o]V8Ym/-}_Ftt4!DlL石ⱬ(5cg IN5ôI 4 !D$bQ۶~vKCn&3'ExTi[pՒf37~WЀ'fYO3Sy_͉:|zQR)ؽM 9|>:;;úGȮJ>9U2pqʅ[!f~tШ%"99DT~X#ÇaYR@6WI RH4XZiTB0V⅕4 !DdMJ[Q{&m2ج†%Y:497`4V?:]< zBXxI^# e}K'!7g2jj/p߇.l* \78$ TY|<U\5lmVlr8` 蜑Ɉ׉a+ t mVx=t R!qUk1)-Szr'֊=H__H?vP﫨:#.K#?ja/Z酚sBFoֶv::|p9 +m?q҈̌ xvbDߓ 3gZ^Lڬ|uZ(ȟ2I91X77! +sp_ۻ%mBUJ/ơWajkӦXn=Um&̪a * qr&@3l\j]I]-]]N > # 7އЏRg8Y'UFAS'VkiШNiVNΞDzu}x+&9 )̳'+e:fڒ=9ӧfIN'73XTTÄlJJrBXTZJJ h~fv:Ng7vDfĪ !O` 4ߗхlC؉+^$Ǖ}EcSYD & k׮(!khhQ^~Pso*t9+s0mR rBXu!>9:&_3n$y!D}eehO>dA3R;oH:МYy!/')Hs7uC䤊DGDDb4>r`90\Z=ٝvqn }9{ܿAcP~C^Fsb {i$B`Zs嫒`t|* }}hmn}V S$'HŇķW/@TfijDJt 9k{'~덏Ɔ%n7o߆W^AU !+/?WҌTaSY'Pͣ\"ON l'jPb׋kFLKՙ X`$;`e-oղPqX)ɀ {`{PG҇&0U^,0xOtIpΞi'hl?m53e(xEq1AvcrF3(,ì7Bzu|__/.?rk˗#$&8tR瓰W ϓƫp 3 IDAT:BZ(l\Jb$جR*eTd Ǐy&L&lVlEip݂EN9,@sb(~q"1ON9i:nfH6,bzj3+UU !30cf>GTxfv:LdRT`Ӻ՜.SQsRnT|>tt\F+*rr [u懵e~&3wwmx8ܿ"&j\+5>8)I#tF&_ɤ\%ZE\tm-NRI>!(:"\fbUS{F uI0gVdO`3,+JCQn}p{6Bb4VbӦLUY"=-gY󐞖 .RY>Uhkko8B;@D{P0T__HUŰK^ ̈́v?\Pw$:!e$FzidjԘ7x?ǃNV@ZcשTJdfL9jDP͍p)yPDww7!xxi%`C~|Ə³o+پ׭R*eT:yVB?^x'! L.]L46,BndG*fҠ'6)JSZsKk™'jpxn1/& ś躑3 (-}B^ݮ;N'1R)y[_Jľ7˹fN/~|/+&&T P2&ӹJ 9Ӑhj2:l[<ij W}^IiHIN!v]!q1gpR ݲFp(, 1)iܻf_t遧(t\ ҆k_^3.F6khC+1O  8)ln:/ G:>֭^N!hqincc ;J!F=/+J# j>u8~?(((ffڔ?y,L}r4,ĪhB =x N4ۺ$GOх X7 at17uctP"& 3u'hT(uy_ofdfL@enDWFa#TCPsc9ǏOٳAzo9TS1xz`:Ws!=r:]D<;e~ITQxy 'oŀ8!+p!J͗zGf/#g;z.K~ywv >hӀ]]8iV!:ފO%M:Ѵuѓ&c/vnA֟CP cKۍ۷d+l6+!~nv۪a <3;]5u(1mR"cQ!FkK~;k.\/w ;f [VNEl]G(-}k׮d٬ضW()\Y5LOeQG.[ f`Vq8u}}}w_=""=;Z<\1[:Jǧo#9ipC ev}P0&?^ϭ\Ii礴Ll|n3TA>`pavD__ˈ JsE1tbi! 5 bi p%]7ooƕÆED  &%09!ZE;8V/ClFcL`s|\4^Z=v*L&]eer@!3+y&dM** 9/od{oޔ~I@!?]8"C%-6pf*~0?al6+JJd+ D"]UUFڧOP(T=Y~idOlQ*%q7]Žn7;/jcAqx{/AVlV蓹yCuϮ\76[+|VA;TB5]C SRO%*a;cd 22y0.*5jA8B;i ذVJ; OOzY?ccIRB0Յk ί:v z<^a Bx͈T($BUJ/fWY>l޼ F#=N6}6gP|*y_\*s +s UG7@Dokc Ykowb{d2x^yeC\.ڵzv gblNH5GS 4͚xΖzvޛp΋(ɌYuZ~_vVAUg~9idwDzZf=qx<ҞLN?^:%+< : 1kg9LL*Na9+, 5tх p?4,Ft|}4]taw`3k̍^(j x5u͂ \6۷oCIVAML^)HOGgehT ſl)BbQ a؅3R Xv JKߠ͛7lAO]L4OErSE̴g'9]i|oM|u;/m:TQ Zq"fvV^*礪(zdg>C՚%j@~ D<5oIp:_C՚'b;vaAWX Y,-IILYng瑙1A]Nfm "&)nܨ\6z<^Z*N]A+?掿KQm61Amy> //!vt=fm w[Ǻ˩3ՌKߕvzoβxy/H2(^1o.΍`Ʉk`xu0 (-}ۚ*`$A3l~B!4mR{*赢_'qU`8+VbtH{ee~=X& ^47c 7aMc0'N9YaGLL,3[:&&FL#~e:W{jUciGR 4Mõk8{&? : M <5zGd/ Q;auaw8HE.ކaÆյ8] jNjkwV{τqxz`kk.awk#7g2jj/|Xl1Eh.B Zmⴤs;N`Y<Ȧ–Sqʌb7׭[W!e2PZ:f3smiԖKyOe!VE!6)JdZ/>.kFp(+ۇߡp3! CY5L̟}Ft:k*/ɶ͛SAzn7FR%|>|u;z{oQLl7S{Rx 4=dրtqdO-(UspQ YToW>?=5o .^ sxr֓P{K3@LLUg%MKI£GqFVq^vlݭTijFDͽ]xwᑕgpM8S6=9ӧfI~;}ۧHX83ʂj[`nkh ٬()يLHO,ϻf?ح BȃX,m/\6P-̧=d5 Uan@7y$ƏN 읨Kr;ϼ~:zizhd|~ yD6 _3R#ɄضWL#|BY>lڴǏlcذ$ qLYO~{-!'MOBHeK͗ZW-* Xՙ3l-k{ f9)OD5j-҃k~E;\d<* O mՕR),?&> _f.H, ? 6oV lƖSQl_?np3! c= |[K(ܬ5uxwTh%eK BBO*_5uL_bo}cCC@ fEi_.X3w:WqEVcGlf̌ Hяly7r@fRQ O&3a**<7\Z7fsyf>[+u$hޏ =4~]$U, 53BRi5)-!/#1AGI;:C0u^=AuHxQظnl݃W&nV&3?0 aaopRkj,;!#Cu3 !‰Xu>ǀGع_pa?|śPRFc%Hd2Wv`5(/?(0fJYyVS׌_;k~㟚=YfUCRr.''S?CM JsYpX AjkM'MJ_nV˵cD"[>>_jщİ҈e c8cյ"•BruQ'|cޜBN$tA،]{B(@4kl߇e'p Hp3!B̼ j*x]8zVVl~jBw戈!j˝GjSQn2WL>AM&ov+r" 6oވ8~ v& >+t;NfM:EjԘWT|>戈!"0 JZ'3Ā_Ў.ϋW|LE`$RV䧭->viqw( ~+Ų҈e с2^uҞ@=ehhBp7(|uWINdOΐ]Qfj3@fBmy`a90H%قr|%ٌ! !M: ?Z!26n3:̴I3RK 6o`t I]O/lM jz:rjk{?[GOV)5# c8[EOޛ@Ed0ٌ~ѵt.>[(*So`٪*LJ [[RS~m0եBr2?დbw-FlQPbi94 @28]Ǧ Za<Lm !lr:MRbؽM޿OvyKŬyLI#Iw91^k͒ٓ3Po='q`i6EzmWm>Yӄbߎ7qf,+Mpf`0wD1p> gftvɪ2?~1 4B i:WF+6,=>sXz(o}2;;/Ă "b4V`0(kFpF3𷻏ILV-[(U7>OETD^T99)铙ݞx]bPU8g|ŀ^ze`.ǏUTAw(^ P3v= lڎD!,!C۟`颹H'q+^rǿI)F\P{K'a¹8rC}؇h#s%k>|z*b˯ŽeU3kN IDATu=MoUUUFdggc(((!dpl6+'iUx(5uYvBVfЌB '}ۧpū 91'McML&L& bŊ #3 0 T^cRucxoޤ&c0'Nr|p8숉 7 {yIsσz'S}i |fI 5? ^fk {ȚK }uo{*MKaiP3P3T|9V-[L{k<*s{&R1oNaǟ?P3!"KpfjCM]w?`=BNfGUO41:]<~ M!?ee{a2Dx,čGa<'D 4B\ ?Wl vqX$;pS37ǀ1ѦdpQT߲٬x(-AUy}إ3ӠO0ўu Zd7~ ЁD!wr6[;Q9L<{ }, jN ⚶l6ߺ,((DAADDhhX -`vnb'QQ*%]ݸNAϑ;\rNgǧb~,hJ#q0&*UTXےKB¢?q~b醽4Dfu75# #Bb]8qxkx$ը0rUiL5ص/t5._ųg4|FGCV}T-. s¥%٨bñO͢A}{խ3 `)MpLt7rQD[:qCvc0{<_<&B!s{&v,fS)Uvq7@GAA_G}<¤?nhê 6?e,kƮCORI͙٬}rBχnGoM޷PF36ߕuV"#}2ub4jYo5ײ8t sg&\{(.6;݃_bfw-F lP3,II$ӟSY@BV޼J)WhsZZ+kBx?D.ް?V=o"3c]pv'gwfYxCHDrudMN_J4}YUeDU:]-""qqqhW狠J5F#$ED_i&220mM9t"GF(̾~􅟣 u둙1VZ9 BϜ\k)Lܮ.x{#6Pw?`V~ +Qfww~{X`:UTJLEN>5fEi(-}/ MDl6+  (ovkFpF*2̴i#>, !fYQ:no,wd;s95X hfl!55 ,DVV6Up&b1'7Xƿ-6 ߖRbղf9w㩳Ƹ\7p戈=&5a+ ~a=[0f5_J))S$F yg3~wT ]d. 5o/_`:Yj` "}*?:P(T"Pc6{<^8iDuy+*Dc '}xi-(Y=fKQ{ņc'~}JaE`0heUf?*uu:`m嘢@3!Vl޼Ĵ(^Ud3Ǣ '6: fotx`p&3L0+%dfY8#q΢US׌17o`̌ HяPIoMtu91jwE|> #RE}WL^`*5 :*e鵦kSQ*xzؾVk 3o3&t;DqOb/El$,GRҸֱkͰ;"X\< hؑĄ1LBI;(}Hy; o>:nST}0kj.\O~505pNXN4_otQihh@yApݢݎ }HaRof%PBӞ_<ßi|%oaz~׎%cw=Y^~#;;ΡkJ4VuOP(7D =N-. >7^F 4ƦEolFC CpɩIr*u__H?;gX^:Ffq CPi5.K{+vGWHCId:a۬vy)n#9xwņٙCT(79i:.7^eL&L&@AA! PPPHaf``}.]L4LaofϞ˧BMJY׋+L3c3v̟q'h5j+*đcr<EѣuKFfZt~}vVpa RBV$Pc0'NE-h~8.ifT&m*:fQ*~#I)7ךaЖ=2(<=I\{{CIPsEt[w'8PY$,GRҸֱN F RI%eefdfLąKNQDܴұC"JD5x\O"τ6L>zg/Y2y:X$us3̜9n$&4FQ1'7 *fnY4^XK#!ѣ`.5j3 psoB#F ;;>:tNMMj Wa6`67d2ɶ/ j&CE{;xOp2z<^Ylgi=/Q), O?j-4˷3UZZxU;&1xJΚv؝v=_'eJ;&jך-D5; |,!>āBk0jO)̓Mx wk5j̚Y3Zm6-h#~BBP'R)nr8>jj/PH>`mdFoNWUQU5P?pAA!ip7+%]ŋ03:`W*lQBcڤhG|޾~Y6~X+6< vo⑚JAg444|>0744Ȯ K#03|t޼I#V,3Jijc7EC@SY _~}Fd" "X{ΑzC4uP3CL',}biq 5Ҙ4,r=gتK9J*7أT[ϙxhx6@ 94!DV-[T}:|:ȆnToNqҫF{T [999(((* &S-fj]nv1X;e?.)L!Do6?m?}WftrubCU+ۜw66#nuxӃ!jhhflɷTH1*]pI'0?Ea=z """h'J@SSKb5^oeg GR%JgUs^O x0&!,jV)APpR}X.z{{C^F\ḽ:#MI{_D9ufKͥ\ToML#6Drgf=f{l tAQO w|(ǥ!zlf ˊ0'7If [o@<tΦ tbzGp3h&"}( 6FlUV.k`77SSEtt4s߰٬Zm0r`2rQx!4#UI!X%NKhK)JƎ@x''-"׫ZQY#VJrfgYÊ2L/1rĝcbakA/s;:Q)Pbi jeoRҸ_Hfյ1oN!TJi1jb:8!gF acҖCrr=Y} '^=xmSP{̶p_ }fq+7v ᜜deeG+bfYV!f }''2f\w@3!m_.jON34D \C7sjj*GobZ&=.X6l.&3ENNtm77_o~BSQ*%V-[}o3G &&vX_ZViΟ>@Z…T'eÊzasRE zOpŠާR0)-S: 5fQQ>|`WOeөJPYr=/.]Ect~鯒Lh)L(V/Gŧ8rCnE;#G&Ts6nkcj30n^83E8}+>,nL9%TȮF^DD zA07Z`;jmFj"?B-*J YySE*AZ ]J? Y>vAyg1nLTQ*xzu}Tr7e${ CW:O6wQQw"83 0+AflӸz9mSOM[s>G'nIҤjB/TD aa~@>̽8''pyΏ;y_CP3/`y^;klڐF~]%OݞɿΏwxDp&k3(0RqP-]nY :^v;0E,afvg,JYg1H~ 4u1l\(+XÊl,-.\k:v㝮C< MKŊ, q^p{zzQbgތW/ޭ`=tpχ^_T&BRqB$&kㄾO]?8~lR]s Kt*X5xDɄrWcivOnmkAk[ qʅRkqm&6.M M3F?2 N4@'g{CVg5qaYVhL{}Յ݄ 2dH& )3O_NL% xcvjHsWJ!wj# x`k0l^duΥ!3sRRRNZ4u/_fgׯя9X"73ߎf""!?]?{Ya8uY{ڈ?gɠɠ gdf 1%aE9D݋>6N藨܄D .T|ur^N[Umh$%%!&f0K@RM,M \=s[6?q\ *۝n焻?Oc;̋sUഌTl@ 2VTmǢ_:?8X|F"< +j R!ix"{yB,[rR2]eR{3s#~[Nb͉ ::. ǂ\nh0@)Qap9yâfGV0LDD4l?܌Y=^fNųO˔rSٽ.xbjI%>ͬc=cF:+u5P(HL(>8~lRߟ<9Rk pĔnچ e97qc4˙Eh5 Ũb2f̋C"eJƴ&Y$Q;%),9+]nZmG9Pn[ R*8cZ&y<'{Drh52o5,EcEnVS@t:%),mUյI&ɑG?O\;.5LDDDf S5yS8]x2udsʯ zFmS',-.8K-YDѮ3w/9Y'ho[mk2aF22'ԩ\]K^ebMhZ<ӺkX]O> %f-eXӠCvp%%'!)9 e:;G1,O"}cW4 K5@q)^;W"e.֣y.GH}t-d'zݶ|j-mdDMJAfl=:~NW7'.Ա h&"" D /{뷥eA&xᓅ?oM+#+XZ\Qs]iJS^#ṇ18~l?P($Ҭ/ȍMamEk{P*f,V^g$ty4O6fMjGjABU<6YroX xh:,Ʋp(?]ʪ+ YlmxţX( ۽ 깢"+uXcDGݻ;Ns H X""gWPq75OՍ_< SN7Nɠɠyu|,nXZ\fș 1/Ыa2%qcd0<5UƯN(DEE29\n'4j팍qrJ? CA Ydd"5#5$h@ݕ:Yu/ˮGj2^dyl ӑP3ш{;0EZ<\G.D+$y5m+Tzч7Z)bH#s݋dy ұwG. ADD4ŒIñ* ~΂L@X9Ձ0L1>cyj xSϚ:IMRFe1"\1LZ Z 9/;WG40,- PsJY)Jքh; #e.WrjM=*̐$ FTXPrN\ͣ/rwzFH+1&&)0P*}};(6O~^_?pv~>-vO7T* %!ט wC\]uk7!Eg!S֭ĉ%Ptt4R3R(#dCTf!W;aj$@:V[јV`K$䯔gw&oa>5!"jش!6{aQH^YNJ*3a\k逥dTAjxQ{bg̥,Q‹Ŀm MF0ܬkWueY"&&X=4pu`iq <8j$7)I, ;X6m]8q΂:;ocN"h0'oyCoJ'|^sSFvֲ$M4nLSy(,_ )IHIۖfgSLz5rL^fv.~gDDD p3I>g9&oenMĊl%;{9(D`hn<Ʈ70@WAq<_22Vkv;'n;7Q s=WSrwf 4Hݕ:Y1!~ eVGt0,1Vј@F$BŊLQvstM\u#""" 5ۗ#ݵnbș\8cyVdVDDD؜Ek/nM Ӓ?w F::n=puF̰˚8ȟ ^ ך*Xlm,1/{wLUۋnj2Gpf~?N"""'psP֊Z 9SBA 3O,JYg1"آ4-~kgq˂L4yh,4r RLc9hgx`,n Xj$Γq'&z6~͓Zj'QϞ1^Ǘ9K2s WQUcA~>d'0<1%o|}py|#H. `ò&V Mb(BwS<)}},49 2GspyɈ1oڐkuh4 ;rCrd{ܩ%O߇q\2 Gdm ٸѢ] 4͐@ sY]jʴgihB b?Eȑ%jƴ>];d37>vj&I $v^ކv|>/!`-\@}y(܃;<[wʮ`1=عk.8gAU]gXshFntRݼQtN=%~_dhsˆfMx:_/~t||m ^ƕوB_ k^_?>"d JR`$QyZ[V{ CWjNLiZ7WS/EgdIX#s;ݸ|V,bWK^ cfMi;T`Yu,ioC.]'i4:9$k MH7euVSσA‚K k5qU\Zx )IHIE)񶯻}pu`iu 2RaҫT %q4Jh /OЫ%(;zz,4u1؜+)AXlm0o [do6/ef"}x'Nr%kϚ:IMbc&I;YF0G];p^W* 11sx@Ȕ)#%GԸѢ]P*U$)<2|WMa7n.k#6nbPښnr>/ZmUeiO ZmGƴ&G+شKwL荗vfC1#.`Mx<) sSE>{di Kyqz4qJhw. }}w--CG;{ H.20b0fh8zU5 4l"""D /{ g\B⽲*|PQt|lېdywƮ!RDs*t]mtf/ vTjH-/\0Ԙc&:*!%qcp8ӥC6~_XǢVkG}'(BTƺk1;qGvi20 P34KCҷHdř5,J1ϋB5ZԚ]\r(T.`8F.Ng-0`ώ|d'0TDxG:<^`yt>o{EP"XNإKx1ѳ=k(]N⻏O[qjX7fӸ/+ _-\sH xkFw[OmkM.ZPT F Vq]Ce\>tuU-]C37vW(Xv֭D"p|5VݿrDg %xj;Gt1,}G1tgBD 8]]t+s%=>_, )3>Ĥd%jQ(]ef7 |_…kveu?~~$yl[+S3[C~>._3I^Cs^{A5k?GF[XvV[K}r#>^4j--څ-g( IDAT]EUu%ZMSF&燽+5 Є;ށ@ KqY6gWjf1^dG|j$dI 5KTbR QB(Bhɸޜm_Y 8UBeyػ# "";$U<abkc$)ؑɛVds>CKw8pUl޸J;Âm J9,Yi>v5j-݄֭uk7ւNҬKT!EgFZ SF&"jkiâL̎=v?:͛1~o#A>Djn4֎ġSs8X'OAtt ~>B$:; !"R kHO?ÇZZq(Ll?I,(\rx]k(Mb]ksx#Gf7"Aͮ];$7^_VkG0_n0f""] vB (**F]]-^{̛͢–5ټ(M܁| ,5C x,M6{eUHIN@V7RDr{qB#U@s- (;t%ٱV[KF|%">?sw9ܷ>>N@`@u3+ 5! |*ZFZ',-F z?IDnjhZPD5,BR),Bk4ST* ?{oz ԑge`Cww7JKO{z^YEUK 8,01ѳ˱f "")a`owYhHƕx`bzW{!PS߀5g2VLDDDB vm>i+S~iv^/jPs݆.D 8S1__Btd1Ƒi2`}>*T [ 8chg8Ԝ`%鲖,Gtt4Z-wt 5Y8^?$]cc`6On%`斖8|()92:#V/c'L5k؝f³Ou,HbkֆʪrI mts&sجTsqݽ^>V)tknOS23Eٞi|C:JōjŰިxA:]]hX#dxԬ]ܼmNp{,D5}}Cag׌ۼ*̙i+ \wpnಿ]="t2_m-!n+v*K :ˍx5 LDD vhy},(R؍2Vٔ'ejiM2"}?@S{D[k1/F%f Cjb)4(WT4fp8qb5֬ZɾG.DŊV{`t8??QQQ,>%P kCj+lC2gin!kVzr=cZ~t u0C}e]q-\`cc.DDÐn;HoHKxrEғ()9<d*psм*Ūx%CEU͑em뇿6JbR=ADDDwG.v,˨:n qnϳf^o@QQ1v,IWaίw 5O8[ FH'N"i= H{~P3!?A6ZtըEU{?HI|O\:3n9V9"` wiMR!wzhD{Ť{s!m[m,IR%4Pw4jfs!QRrsuu<(h /Yٳ7od`y2]d<3$q0|_Iڢf Qlf1H*_,|j ?-LۿУIEzcv{QU{g7K5 * +cdmQ?{ƌn^E!"!zf6޽70MX~?~=|cW=(H30Dg-̟cqh\J?K%y\wc9+Ct"5<]jѴ%||^/z<]|ĈKaH7d.g'TO;*U^|4.ycŚMh@K]IՄ1G3 a6{$\VvM3\p+M$sAE4q,JӲDDDDö]mk0LDbqßm\ܹ3|Ny<`BQc% Ӎ8hxD<VY$ `,Fc+[ý-#]~ݮN>`UhCVkYhC> ~|Dø`1 rv2 ONf6I)..EE(**Fww7JJw(1ѳQl¶ X """q0LDVAQQ1m-[ D/'w_NXT hXqV!. 11sX`"DS%@3,D4~ UjbNȟ"F " ϔ$7l YzfS> YKOxT(\5deTaϞx#8vv d-*j =@3m[/{o[|B7[;(**gEEa\ xxY\"시WD&&b,EةF\`KZm=>(xm4O{xFv9"ZJ ,YlQbo(c`\t_n"Qk憟իʦC*{=ZAIx<HfXlLSEyHTX"""`f"/de`0!.N v,nT[ xhXjy €(,&E ֶAD{{G1L=QD|9ح9O  )?=\^!Q-xLKN~n•Kgr=c&֢]%OUb?-͂o3++GEEFi Hf&"""ypO[q3r(D$ zEEعC`HŖ-ax_F2R];p :;oa| tG]m6x8$z -T1ea-ǥXd=;73$OxpÞ={g^DiI(0LDDDyigt{q2Hbc`6lPֵ0 14ZQ~6༇[ ` rBP &f L$sZ qMV(g,%XC03;6-c"C[mr |ީwyhoSbo~T.L[MK s'`HŞ={kGp !==!,c~x 4ED >/ߠ /QQX"-[ Fi9o4} ?dLP *sJ"VP3WT#ulӘB}>?*/]ȱ95/\`}qjC Bz<]:_)<4OIlvjAp}VV2^|XpBDS)G{w DDDD"m?G{7 ]n&H sQQ1"܅Uք}j-Y+tO7^/K$Rr]h:~؆Fae\If+"5;]g<I0w;ɂFXmw0,b5SÍԈٸqx50!&ݛhzԱ ՝SNͭ\v¬.|h 3l8q^Yxy5 Y{[gX"dR=~ݛHPzdH\q2d 2Ɛ捂nȈFs,>1 ׍&Db&B4O$ԭY0TJ> @u5wvMz>0'FKZ†Ɋq ;z5Mr Z?ld2P(իyd" # YLfZ64ښ 5SDcBn*;ȝC&כ)<z /x!RAt(p&Rm۶ ʸ\ۿPbg:f%pTaqKDh&?_[72R1Um͹ǖfg 5Ӳx5?ڍokX-&(kxzaI!g")DBAI2?iŷ? Ou7nw{~!Hp8D9 hcOӓ+)+7ncv $#DJprh@Th4y7bCM5w(JW qW@pDT0nzodPs^`m͏3󠮠Fy3Bf[Kn3d&"""|);?e| ч7FODҲ́!k~ڦ(tegwz#l͙i!8`""R4qr1Lp,#GEoe'<1X6CACQǁrAFz~yVh,,D D` ɓUy{OuCNřhv\]ػ[QuB7n.3fjSF4=ӈ ݒ999A(pDDDJǖf* 5ӊmk#?S梭YG(bCPAd<:|, pTS 8 #Hp8D`h֮k:ZA#q$q&z/  YqfQLೣ_gZM1}P(FYLM}s-TjL#5lhۚ㢘 Q.0,P(!(8KdzܷvS{{{11 ٠ e$lf6o}!B?nÈ'3o kF#R\]8t7ۮA\u_ǦIK u׺(]L!L"իud2_CxέװK9aK3 iż^Um*}[,Ef"n9 rwj&zNoLfg˖l==]hoc4@*+/~oc31\9u0,xx%rTaqӒH$0>/?r C$mO햤\d^] 5ܩH* UFeY/s;+WD"Q^tZԮaSl΁IhSyϳíH:44޽p:8z8{Kh?Ӊw3T=ۈn%[3Aӡ (,HTG4S&jy'X|E q RIeeV@Eܶm;KKҲ--̶8SD 0~MP}p,ell .QY͝o<5,'FY34ϽH`5%xf oUU 3-_^2M,믿_ۃ?GOOAy 6j4= YPd׎uصc]H_ 3Lb0r5څ0 -[cEogGD^}{p%[sj;!X,VR`4z=g PYK-1"efۚﻌP7 R%1!.÷kkyJLƖ- ز!_[)bԡچgU ZHlfAPLw'9,Y2;|M)Y`xwg٫0=w6mD3-厏 t:=w)Z۸(S 5$53 PS[e谏CPo,&.i<}# rn1I--Ҳ;T}H$IBiR7_lf3QZ,  7 _agʘ`DC\hhmێK.Jc=&Y;:tFX-We=驇^&" ccc(/Fᝆr-Tj&Iy 0I8 .z[x A iEDQ(?l9::N֭w$FO`gu@Oٱ) a;Iq #Q`p:pTJjjd-QLxy+a_tl33C(-q'QEBz=Ed-Tj&L,ESulj^6[KQr剋l$ʻ2}qp)'v Yoo:;7._}}nLL3\Rlqckm[hI*_ Fop7H4*4=|s:/Sqh4t:cSƂ_UK*frTaqӒ]È^ 8 C$5fS3I&LzM1F6g`6|UttB bQLOY+iŨըgde3 ˵+d&ʥFHf"@EH&y).3OMbܳ`Ph4^)wd15]6} C$ۚChkyьpTqv;)Nʗ :mt#G>sǝ;%U}z-KKʊ2Ӣ&"""""ʥT3G!hZ DO~H~=1dWt #vh4ɲV`p/egSKKjkyCQ5L" f[;QHPѬf+р$댏IImmg:%}!=(ãYPH7Qv~CK~zz}뒝nOy DZR Ag9jt ( A?ʤ8w }%t֥C̳MDʽ!Ld2cbbBķw|M΂-jYJW-=,u׺^`YgGMװZ9C6 C$ׁJm.t풝?<v-I<wBpG%V x8.\tcOhDR"8K\&"""""ZD0G߭ nap$ hC`Lv w(--r;y ?{@AbA-Ԓ~SF4ly=W$ۆh4^V_x%"R 4Sc$fQLHz)Nc#U(_Iq!$E(o9up:p Ӆ.ttB 2@bj$Oh܄b}F=CDDDDDons߭ iE"۶mGc\dk%([NGqq &''$Y`__FJWc4[￸{"K2D(|ǖf*t 5kk2ojvT !` &-F\=@B a4tuT8u.W3|-CwΧӥ7g7:efଶaMkmXSn␈(oMSr*Lұpvۘ^ N3Y,Vb\c_ƦzgAcV-+,uI#mC"x DN gU=LfE5Լ=C R0C$cG+mxL>pT[Xf;OYC/__?U"`O58tqs@x浕U܄ڵagYHqR-̩ 3[mv46˵ NgB$LN#+hܺj b~kjy}Ylu$*-I&XS~ʗ-G;H~li& r$Blk"Ĩ/]e?07jkAb\f\X,Ss 27˳tZԮaM)LDDDDDmla ;ҍD$Նa:v4x핂]qa!HYEղCuP.D" #oD ׳c1H(598 C͔*ښ;BͰZ+^CciODDvljH"F{bV?txCP<1^z=;ɉ LK޹ uٲ{Ou {yF\u{$9($IBA^]%Iޙ)/!djlT{iE/o x3|[ 5k8H" 8wwwҥD(<<6 $=076Yǡ)FAii)nߖyT8v4^㼝^/@/,-Ң~s.^^S=xÏ$ L& `0o_Yl `K3eC$;5/[2 ٿ3,ڜהPglعX_A`$>'<OLs02۶m;\] 1?$˺EEOQ[[sNlr[P3Mg𖈖T)C9z^ttkmDR?sSv0L;==]h첏<3KM-B%4߯^r{3рn#6mUuI?L" f[;QB@ GB|ڸ)k 9./ۚ3R65J9HZ 5Ւ<z0;HHϪLwt3=3r~NQ]$?0/qfUuQb4emul+ !3uyCbB!hD+4Pl(fx|{P8oClibJmmN˳2LD$-""zP㹆.\tCot/4P1 NgCD qZu|y Ɍ $II.ؗ AS>jnc=Um[]ӋZKvP:cYDDgAr@T]7[o x3, _dQfp @VsCΩrř!x5t&"""Br txq:HzzdY'V mI._8vQjyy1ޛyn#6mUuI.3L"g#"qup eښ;:rGEo+Ćkp fƆjVXm/|MN1HDʑ s_==]gεkm鐳z0,v ;t3L2dYe? @!HH =Wиuj>*?H4_#wF?i݃w(;@II t:=tDx AZj(j\)3jP8ȶf`9d2If"ő %sjq+vf9;: :-֔t&""""^!dY:8uwG%BD$a/>o==]|F  :QNMSsڗc7``۶OF#B?*˺+iiNj0̈F#lK`xwgUXS3xiYMun#K33ӈF#0XbDm׮P.0L>𩢭Y<-;z65 )@ f"f %j9rXe 5]c9p8Zwo+  9={ttؙh98g[SA`$(`DC-8B:]fLfLLL`ffZie{?;SrG>|+_݌^bBF#(..VXRBAFBa1[9ÖfsFrEmm.t틶5ǥhjHe Kӕ3F\p'zz=rqPYXե3DDDD4W*<8E߭ G'9rmm=hNT ?*)YJKKq4;bN ; SӸyZFkX-fpӒmW(->fYfj2\8I @մ5ċ7)65=8c-Z,y4KDٿ{<kB 琲QAgY@ZEDDDRT爔{۶mGmm}uhP |-:CҴ_u_Ǎ"Ϩ8afj L驌yF\u{?0(v% qIrXJy "Űrf)5w^s6.8]A;G6Kxj߆Kx 絲=Y7MN7:{ e5loO^9`2lXW-ٛsphk{C&`:F 9N5&Ԯ[ה8,"""[Tq9|H #:46HF#CDkk{KKhd[d2crrdR<5:E__MK}Բ ݽ! I֋F#AIq^ZH`A ?fR 5GeIT_Ǧf"l 3pK-fX-_/D1ώ~7^{7%ĉϱwo+HӍΔ{RXSnĚr[Hnm^v:P[[C!":lݴh`6[ %Y/L'^ݬ}71ڟ#w40$z#di`2yG% Kj;8[IAj&9PųN1""@#/wn {_dZ̰Z?Kuc "#1]Vu`xQIۚnEomۈ벬?;-)Ry.t 皬̆plfDDD8s[G/8C)H/KD~>q-t:*KJJ099DB hܺYgm `0XS TVgSFY#Eٶhb)%xpuu~}Xr$FDDžRL:QL{K7vGm^Uƭe 5~:|w~"RTs?g6݅K.rH j6d3ȝ$<1 L.xnBg0煗zFr-d[? ##Òw)؏ޛQzAXĝѬnϾ=xlH$m5$[np(f~A9RIlc3ϹBD G8 (/XL&yǧLH;R4cg-=GJP3)~ `-GADDRn j1͛O\9%xFYĆmmow?ఉ(/x ̶9ww6:yXZ9h(z=[եXSn\/H߭23X,d}A$Ԭh`X ޖd=QLS׺G6xgy?sw懟o?:"ZSSabb"DJ`\_mƽFJP3)ݶ6ueȎAF?QɛJcѰi^2Ξ=C>sDFc:|!x= 2\ ɜi0::d2)zN{+Cs\e_?K4c9}ѣlU݁?w^h?Mn^#bp$#9H~z/1_ok?$"[pzHlTVWWr>]Bk$""j1j1XAK1+M4B7/?\fHb\ :DDKGFFL׶mQ[[u LGDDK@30h4FdF8,ͩC(tego QM7h?Ӊ^P(իy'RrU#~4ّN;n#5`v`ͫP/HhW"RMd%>33_md?r[DD$`$;Ixc H4vJ466/; ;yVi+tw6^Cͤ^orLD)eHՏ?i݃~t$kۿ@OO "ʲTj? 9A@`(k-R$EpVb6THwq# 3(:hh 1FH&==]x׳hh4Zmbۣ/W(zNOOnB(to4 5xѽ̆^o5mrli&aԦ OEagS3Q=y ܆j_e2O~}7 (ׯp8*cz65Qв 7Y=eݥKwo3}44 HAF#v,8> 9]åK9, :/ ;W"m?2#q 6-̃#Qe Fj2199d2)zNjEq8}=ax:>WcSNW&ԆfRmm>RudID53QAr,?%"RTK <8T IDATX,ڼflKζCtkM(qhDD0i99mv8p:Q[[e""}OWѠFs+))8 i 6:/tqfEGVĹ ݲY 5հZTk%lk&Rmx]Uu%Cv#!5m-1yUlg%=[5!HQQI&rx[6=Z,V KޱW(YG/ȥaxމMuƭщP8尭H9 FÂ\`s!8Tf{ԈfR8֍gK3Q~KMo[|Ҹu3ãНO6[ pDDnA?K=kw l`oah̄U!l3 ]kHR˩[A.0;`W\"|xqbBϱ LfDIĹxFE\?L';َƭ9mD9s<7.}͆!YUNPվ>:Hj&z}Ug7!:)h(z=_:-֔a5&f84"R(&)xc(i@m۶+ |-KD_r %0`0bbb33>{IۙZ\MhܺyO8w[H$NMDb/wHVԲ{H N8<mvCͤvmPi[3 ˾=QF:r?~^N!"* our֌E'mxY]b}т3k]r8l۶/e54k`&"Ӆr~fD"p8NmmI<}{ϝF{Gd￯$<׋ۏH-X <^En?KO;wÝNW&fK3CͤjwۚxYmYYHQ6TsPq=z/_6_#G7ɓ CZS羾kxq`y(tf`3 ]k\/Ј葂8'ٺL8uZJ8u Qӊ؞iүyA^_ AhT9cAHH齂ƭ\LwGUuI4̜k֠`0mdVxQ.lX)7WfqϑY60ԬgSt/9K""ɄBA&q1)|w:mێW_}}A{'V?bx~.]aTڝmb󚞉 #Q ٺL /Ѣb9C~pZmF2dc'O^Q1~PX-?Gӳ%egdmhmD9P(X߭@ɀob\ [z}sf 5yꪷJM]jpѢ>.^6/A(Pr:=42ҥx՗n&"2w'<Vks㹖f Ue&XSnLD6)Nap$nZdf;t3LDDtOTwmj0Fy?0<3h٤~_I֦xqw3(e[(ƑL&U NFZvI-s- 4Xvϵ# i##99Z6?)IC@(?r8put^F`xT5p3Y.W󼟧!twwqlZh(z=#~>7̰3r#q Obp$n^NhlG%_/ђ?~}_|M5 K`0*;ja2111iϝЍƭ%.{_ 꾞ZV /ޅMue^ښ$c0<=.Z%4okQ `<6w(UW6}рԎf ^/\]]=lR^:Oחq}]7Ss)n8xuʝKDD6<gҍ΁1\R :-֔Ω?84"w“xp'G02I鬃^n^Nh)|Tt|<'`0QRR---obN#.gqM4egECja(fwR4oۀUe2Z"-*Vrm%""<Fd, bBj^_&jޯ9j^QLg:uw^_0?>枣|P3yuuYϫetb+@D0nQT "§&pHB(:_D&)&pȿg\.v8vlSS!'zA> 770tkVo;EV811P3"+_TD͆xH]>GTBjli>:(0L?{ԙ 4ر:IlaMSHLﴧG)aȞ EծH誩tTtI9b.ѹd_%;0$)"K:v` Lفdq(؎^/ZZ#!'Y~hldFEE%vd0""J9iʸ wW?B^՝tN-yM&JKKcH14U%066FF) 7ggk02dyrFx'O}2Lx gGDSkդ{ܰ(x&G#ky$Cr3Ow=,Y=nTD UP.X"=_/Uh0r穵4Ĩ&Q:baj̀  pL;\0>ݾ ODD;o.WxKcax< rQzV+;SfbeW]^?2҅a8gp$ 7geeA7"#D1szy: ץ+{&;\.yRYyGF 7&l@`uUmͮOG鈡fJ[ Z,ES͇d- X$Pv,\~GiKW2b Cӹ΄N|^46֣Zv{9m3BcDDDWTisnwdSDp wgWCwǏ9x%g% rLp˷J̑(;&l޼e{N˙fHxEf0" #rrrd}>q;6=}ウo8}lB5z}-"FqU<~3匍q!T`^߆!o{huڄїff{놴]woȧfVO錡fSKcaLQ&EN!ax8/^/ڹ>(PG|&v6nADD::.Y6]7 ##a Ґgha\rd/Wr^UUXagH,77/ i%ʶBEI Vz{QZUcvxsJe6hs$;cm;"C 8}=JUTdA0H)}>/X`RZYVX!xyǏ=zaNf"QS³$X[0n6oqhl^c ""J[nw.\]hgX4CɁ^oĒ%:ZݻGщ֯m)?m(88/^SKs^{9?/Kltav 1[O*鮥bTur(1Lb?Tj(toV#""J@ 3M D=jk?BK˩|}uuVeYV(X6X6S+MŪ:\]øv[=iuSS&- VK΋sfU].)Y? &J+9DD0\Ƽy';y "rsjuʒlYYY0s$(Ni[)@FU\/kߟhjҕU r]cVh8$bC(X2ypwTKm x8zj >CͮKWPi"JofS;H"m:qkgڟNCz Gi]qd$x9nep8<+-:p8 x7s/>/3 VیE""truMvkju8p ***rue02^o%[nNNrrrD$Y՞sf&h6cuc)HKe&l$ N<^?;}ウ#GOp'9(1}NiOY6ѣG2bzϋS* 9Q&b3_]gnwށxȈ}tAXfpøpH3ZV %%qLDD9^9竫 wNǕ`;K>+rz#($Y3gQƂi׻4jr'.Rfެ|c+/mIyyE/jdXl9*7jkv x= 5SOb)ZO%"nQDΌҭGssdTFY6X6SUwv>]՝U.]α3+0{.Ͳo7bUd g߱cM9g}X4@s/7dW8E{B湪3Og.̇0?Zv:u6FJ^@u֬^7eJ>!ehsdiNJx.'Hx#E\fQc~AQ`2 x>6@-mnstlFY:%""R=q5 馢nrZmSBάBDDquAkJ9fugR[Йl6?-tZm""~[c6oނ_'_&8gUwtd$A7b -+7WH$ yw~D٦0N4*>| -cՙ+{q#hWz o]o]瑝YWAo6ee7р-=f*&V`+X#GfDSKcE1g~FDd@Qlj՞쌧nnnnpr&"",t^7=_- \v?hZ9'{ Vdxy^=2L&3L(+l5,ށxS6oނ_ݔ`pA8pG;j066@`ҥ.zYoKW1DS+{gN4uʢQrg4N}1?^^ߖmRVyhT_q/ߌώfZYf2(IdttӋ%vJ^Bښ!G2 C͔qXjimڈk,@"HP!̦|vp~~Ϫl2Sz"nvpV^CDDDTeuXUX7 FGg :Bα4KwBx%գI]VL()C˩ C̳Kuy6v{9r8>hlݣFVCVVւeq=IpEwe6o5l:Un SBR•0FTȑHΨ<Ӻo@ڼf56{/p4 5S IDATvξFJ>$={SwЬ]Sa>̅XƂ d+$?*Sn/GEE%JKl}TZuuzPWwDUG6[n/Xt?sGFª dHt~\r?6u>gJȹdY0\#Qv m޼e :]nR'""R3nǎ]zK:.^ACq՜?޽{Cv}ؘ$Qj9"FɱYvLk3e6v6~3_m)FzZ`虞( % S7 VNy,t7JPs7Nܜ=K~+>KPa2 x,|6p+S$kE~.jy7hh: S[:ϯ$V wݾM~敨9Gcq477B43; 9Iag^oqZ|N(;ȔsQ~.F?= EY*3=l2MDDDo;SCuװZm;(n²ea0T9++ z_ XK֦ uhy,|}um3~g88sN/*НqU@#jPѣLP3eجWK(۴Q18;Wdzč[ EtKWPfެ|F";vWeV NwQ].v4779 jgBagu 34̎P Lf***[a&?mnnB]Ň߿Qh\?/_G&?`@F?.lt%#&WxOAlMӬ2=IȦ5[UP ĎQBjkv x=D 5SOb)Z,Q>soV$R)X6֙gJ~F-'n2;:I) wޓp%Yn/^w--M<ko&DslG /I!ۼy ޚo.***QQQ G87Lcccs6rrr`4wfq{ܥ@d򕗶d\9բQq^aYg•dkL A&Eec˼^BښAQb2 x>XxU-mv]MvH RTfq:N4:XK xkϸnHաjv~KF3Wƫ\]hnnю0)r&""V, ՏwnwS(cLfXQRbպfvBDDDay'v}HҭWE9 λj%Kprhx.nSa>W%sa>E!  ~Bz8l ӎǑ#"RMIF-|rAm(̳r0p8a_}[QV""Oƿ0oqZo(:X@4ՆUybN̫2m2D Vm޽{xhT{͟kXt uyIƲfENdTNWw G#bkVjVo돂qp(1LO<8f+/qT"ѩXoafɬ)u:]|zp8&4btt<kx`!g"""iUf<|!ټyD3J""dc9qV ;v#cj 7/js^^nߖF/7d[~f7]٦I5マk׮ڕ-yr/|#8jkvLP3фvЫmNmʛD $~Rh \'2cl2Tmy2nO΀r&""Jyq.WW<|ڷp{02fL&3L{'#""!amؽ{쐧PC9VY!7WĪh:YL6^cb?.Oz1sa>\I{Nވ@#澊^\hTM"FGG&c$ F x^aAq LP3A->PKE1g&P"z&cRhis|Ma49p {TW˪#Oa6p](ui~r&""J٩ygXՙDDDtv)ZĂՆt:TTN(RIU7k$ɴ%%6nee""`Y;*a***aoCcq44+pH+V<%KHrrrh4*sG\'v^.kH$Ьd7.MLɠ7eǂ188`(P((;!Aϲ)v8&b)Z\'j͟klNF:C^)?+ҟʉ=|2lXo5xKp[*mOD'ZEUyfl(yrșU!g""ԊUuQ]=X8-\.\o7s[PR~J!fi!۷$AQ#hiQVv^o˧h\AI\_;yd!DJμv%Kdaf?E1; ?+7JqШ7&FFG chnv_2&N*ZL+|겛h_A!;_6{Y٦(۴r.zNO5(j}رcx_'}յy<4s,0LDDz:nʍ\1Dug(VjCI)QMI!fXx7jټ55PQQG(j=C pѨ,%KG0(]ČR.yٴ4՚jdkp_PXl 4+0CYcg0OZ,QߺURN㍟amv^A:C n>rJ_|;_߶xTM6N|^R΋dZm8p O+@,S].D,\.NH 9)o_g2׮}˜f(ubbxtaҹpLm:7CQ&O"bkP ͛P %%xl^ CG{◒*ɓB%%YIt^< u}|_j]Nǎ!""J1wÉ t8p ***_`0hTѸK,AnU(=Ԋウd΋rϧ@s5\SYP(D%}m^)(0Cy$Ry(FO{$Td9mݼ9&[Ug06~Duɦ#  Ljs/""WA|n f') 'l5l a4gЏDNg ;uн*RW $9<?HOVCuÕU敨KNgC r~r&""Jg߷Zm!fLfiuuhhG]ŜD"x`=rsD"x$(7o﫚 8yE=ߛo(: kkgFo ~VM(ȔP{"NnrijDcr$}wǃ‡Ohȅq"?|6 &Ҭ"h 4p $IOwh8'/8$XЇ!guw_I1LDD5<9lj~=0,?SZ@j***QSsP13=z4 F l7nWNRٜ;^LE=wl?,Eh@3Q n CDO!>C72[ 8<#0j|L 93<~kkwП2Ir4i ¼T,I;:r*n];_D+3gr@r&""R>dj1LDD| 1ˇ!fNӡv~ϫvwlrtщ[Z%2Qy1T93r4078 Қ8e'chn'>L8y`>) = zh40f؝W{=yW%R'ЂᝯK҆>W{sKWR>>T5^/Y BuIY #,CΒașH=B1 Ioǯ}v{9HabO,\Zubf EpA娩9>3<#2}C8}}0'ZumThvɅE(Y^mKN,$-mj 4E<=CD O-^eoHg1esUaL ALCO`eo07n 3~;8NR<_CO%CUI^LYDmYzՆC @ |r&""R/RM 5)CaPZ Soډ My+ ެ|Cc03e\_R9CO{ j|9Dscha, R^Fp40Bw5L=$.fS~x6~Rlǎ]8p}t:Ej]ύZᦇv^ؓCDDD܄ThG8V;QzP5]0LɢĪR;r4Ea*WE9UafވP( RJT5`)6*?D47I<,/ xe0hst2J)#Ea#+5g7EWIs'Z|CѐBաj1>v{y|b"ir.)Y텈H^M)="""1, v6)VYJ?7p0oRk C8Ԛ/C^ 0B#~_ NV[a0䡰m;!߿R|Cė] m!J3Ѽ1L05`PA6mD٦xW{z3%UF]~m!>ӾJ?Wj e_ټ+!%NcYFs"jr&"";0qsQ46gHxYHiҹj[G|Wƛo GBZ_J^xbP(`pZ188=Rz34N?Bͽ}Bxc[La))a\Q1Ϸ5 r懡fOb) >0,/)hhhBMAtw_ȘPixhg-Jl *b+Er[ֆn )!QYM xAahg}Fj?oI+g =?s,'r/@+G5 4'm+M TP+vرcx!ER5Ő3>+ r`bLa6D]]=ꎠwiz׬ו5c&Wg),0_ {޲gϟE0P h-CDwW? IDAT+2S&;}C73DkVJjNЩ\˜<T=6Ǘ)ﳟ"+,/yUU{ⵘL@G1,/fR>FCC=v~DDǮNsJM!]0L]nEMIh[6]Mάpe'a7#`z%j9?ş/t '5hj&Z$A-#GTo9Vn0@0/GɆ0kXP%O "vle\鹞mXƛo`m]ZVC]]=V[ڬϜV!gy=-lڸ}QFhnVީ0QF2,f*-݊S9zmM63(dVԈE۹NE$BD|`86P7{WU\xf>ro}I5C x>H8 5%@<,?){c1ublC"D1 ? >Zh!FFy= o{UNoi}UXCҷMSa>ެ|#m[6=ZjmrdRə!g""J7^ZZN)muuGj&"=dY> 1͏NCm44r\DSkF"3Nۊb^oο10ӏn }iϷ7Scs+'Z< г+HSy5 RoVS4~ZX&lepLl~ei>ر @34 9T<Ő3N8ypsԊ!fy1L=(+ۊ >WկTMі_9E;W0b^Dmbtq AgSyF-kg\!!m 1ADǿ#j  eW x.q+'Z<$>0Y* 3\,Uʹ!$}E윧]&ウm:Re*j;/jWr{`!gy1LDD$^mlh8P3CbHzV PSs x9ɦV\hۏ~|ݗ] -# ̨n|S1o]M&h49l.6BsP3ScAi[DM9%^m\#CLiQi#tW{CTW~X&ɺlZjj1İH0;rCDDf%""R43Qrt:ACC=>j_S@J!hjMڌDwП24'+*VZn8/ ߍP3t8n ,RLC!ݿa4fQ\֍=',8l4xe^ꅟ<bh:ճ0rCDD&MhѣGPWW#""`Y^ 1VUp};ysM\7y8Edl";;cccx!W`R\u^㠫ğb-mj|Y9%JCDb):-FJ@0ʨkXؑ);s4(۴1^1;8Ϗ@0Ь!k,0c KzX6=ZN1jcR!g?[r&""jnnϧ vG""J3nEss;~==?ɱ*)Mp]׸lrdܾK'ŵ0 Fğ太Oa&If"i IbdRUGJ Z9iɱTxrʨ@30^H rCDDuuGTކ㨩9ā#"`Y^ 1NCCCjkQ}3bk{qd9]4';;K>hgyFq>+迁n:,>-D`HB Z,E5~ Jw%5YŎTm3E*;vbPHarCDD jr 򳑈db&RjE1O?ɖt٩-A^^5,ROHx;TfFP\UE1߷TcE<5\SP3sb)U}tt4wWE+5'Cf٤2_DUa^#1,/(Ҽd'MDD$ ǰ%%6DEE%JJ֣z3}C8Je:/^S'5deeA!7W5jFLU}igϟUkH}?GHZ 5uQmsos(I) *5 8sسok 4G H6<% Cbș&w漼044(˲Y!fL1mjc)Նv{TwF-hjśo$Mp]gggh\%K0'g;xfވn捥0JlD B x\S=!"R!՞`[AjzWP_QhTZM>Ԋà%Ԋ7k΋q1LN"lc}ޔ5)^3_(;c'oߐLfh4] HNg;l?Vq x>L$d$RG?US]lF]c Ry}Pswh Yy.Rܩt7>vTVgr`2SssUsss|jDD$%w ~ruib&D娫ǁfQ9g*>}_'ҥ"//K>$']&+#"J({;M=)[։@P'W}Inr{C$A@UeBO6b;wD+Q0ܤSlʟ 53LDJƐ|r&"\uuGd[FF3e˖#+dyC=%"JS 1ˇ!f"jCC){v;T8Ԋ=דҞe˖`0"+++IJ#hTŧ&c }-A~ !CAq #CD2Ob)Uv;_/Wl׬ k6_x43\#E7gZLs tvCDjƐ|r&" rWi6R )++ ze [9DDi!fLfnպ!f"Nѣ--Tfץ+xal~& DdeeA7b\HA $\Syϖ"([Η]j~Ap"CDI K.ݝ_;aM1BHSW7n&f$S\}x"bh&")1,'rƈT,UcrsV#C򉅘c"J NCr疔DS+{g {o &tҥr!w^oe7%~4M#j[]ԊѣN載r"|AN]!7cDS+\$9w؅C\yizHHCΛ7oAYDD|rWij|՚/Z3J)!f"Hi8Ն?|_m(N4}U8_'y-[,􅞁д4(AUd%T`% MΈ > Br4kQr0LDੱXXv9ĆVIw`R_/LI~,Ehd9֮dkv^>Os2LDJ|f 9PVV+o "J54 s_NFxhRhgY 1ZUTTd=([2YYYt\9()_5𞷬AF_'dBeWS[O4wqHVRܕ[zh2N]DD0,!g@/3LD|pϧJs՚0LDc(+~@c҉jC]]*rZY|JD1V Ҟq-em:eiT&xaR}?`.0A)1U't(yj&J2A8,RS}C8ԊMg,' DÐoDDtV GֳaQ r^, Hymݾ VDDr4 -[2 #FF--P].eDDxbߟD1LD$t6QO (uj&J1AXvxADDJ@:߲)/r^wtw_@]⁂ 9Qƪ9( d۲jkp ;p:}" f""R Rf"e "f"cYznwxy-۷l+?HVi~|Yk018蓵_j&"5Uav8b&"RHA(~ )CD "KKo|Ġ ]*Di!guw_W8juS83@DJP/kNV%K9e@VBDv8 K!f""uc "D 5) .DD |+0;(1,f?{}yUUR.inot9)Hь(kq-F-n+NkBQ14NV)Pno n:4J,8+:DJLABcv,T#:ENC_$P_~DDIDmr(d2wid?ɿP2i!uv>R3tcbCz #9G Xa$IRkoAD\ }S9*)ãh>_-`-B/۰ai]󪫫tLۏ\ook&(/_ 1@eߣL&Sx0$OC HFJ.JKKk#C |A >r)Xzui% $IY>_P2ԌL~UU]jk77nPhH݄T,6YƜHLStny9T=zn>KrUReP3`6I;$}R5h2fۛoB'*t-mpp]J/ڰafM{{hqR'byx*ҁCoKB̀EFrF}Qr(ͥR3]r.Qù|[s@13TUUiÆ%ݧ 6ڵukuKy(ڱ8FL}ФbM>յCtrܲe?~á:۔}IͮI]/sϤʮѾ& #eP3`azJzvjuuw]P*}I5t48H\jR 9fK$HL+$56nWSS6K.Sy'J֥9Jtʿo ƹq񴴴b,޽ϫp =55y]BɎv`F{ZyI1Wfuevn?Jp?kqqюe*w`]tIF; zqqQuh-*J[n\|eƲY犀fieouwMVd"vsȹo-!Xl )BC $B @q؈B֯0&X:~}DV")`!=e2۷$W_W'ڴ{~ٲrt PNGNy5gA5#钤vܜ>o|k vOǿɒ}a]S'NwONg.< rQ B ۥv%v._N!uv>PĴNʝWb9J[yã֍M2L:W#':Ha# ؄a$I#vsuy=m+ wpevVKpt߿Oe.SC7HbIB4?Q8 Lf!qVnNujRZ&&"h߾=r= X(3Ћ|Npuujk7innִܯ=2J,uc"}|!y` .K{>n?C;;iK.sQ|Ӯ0fT~;/;} g`ɕYM5hxx[LSSͧNl)J&鰷JLl,(l5}UU뽪ܾ߸qCɤ7n(7`C79W\@ܯ~\6466ݦI;ڿLTlV{~qoFf:56dQ6zxVm޴I@ҏbWL&CN*h-hteEE<>Uz_B<ə{S;mذђf)ݤ+WŴ8p`?&RByb"BAVq (`bIã'gmӃl*1%ǸMy.Ih?eaT8^1u~ŌNtPKGy|x L۾4,4h9_+b桶՟<Щa jkq8(8tyA0"`?tjl0s^o}ŋ:9/>DXWfguю/Spg!U-̀}jl0^oQImFNm[Uv3*ҡÿR655|5I5[R.ԩIS3 Gj``7] HfL]:ZN=n\ôt:ƒ2Jn̫t̹<:h>_vi``7m[(:rgP3`=.Iho,I]xCK.rw>,M2X{L͟U=jk7i_vTjF$o zoҍy+hSSS3p`шGP1^{Ξ;oF f #9HS,,d:9a|U2 EPr][ |7Xl@gb1s;_q[ᨑ2mt:eM&Q[BNK}}F5C7n VӮ$ivnNqR_j}({WfgKr?$oFYP3P #9r=*M)ilܮn] @r\SM.lc \p@M~3]"9p`ۯd˺n2=<<'l,{CvJn̫v{ +dp~\.ݻ_O>j޶Uun7EP^xM G(=.Ihee/t߿bpOo|kL$j4| 1ijj&@kkנ bJ$)]Sϱ .͛7ٰa]7n}wkN$,AS]P;M*8/~@ٙIj]?a~f(2bQ6k*F&@Y:>ܜZ: V'h-r3Bșp؝ө[8p{fwiv:]׿UUUڰaݚooH6+ZDZA~s\޽ϫ$#'ڼiEP6YAr(#钤vh=e L:Oik8.P*5CH\.CCĴN'&".&&"h߾=`O~u9fwi-Wjk7i~>ES 0ucƼ<+Vص; S|޴f:zV!PVޠD,P3Pf #9Hس٬a"E+_$j3| -I,N;K$HL+* ݥv4p~j(*2(7TnR455k XHoNW8{.sQ>: H>,P3P #9Tw6 /x䄾( ,Lp񢩯r6tn`c|Ra4:X,9NQۘ(U8m9mU,E]Nl졇o@p\ ; n%:u*pP;ǧ ]!nB`(Wfwiްaʮn7B/M>ݚQn~*h~>CQ`cu kPoS|޴טY{᥃fv~a$/1@! )Hy=~cTd/pc 5[ҟ;"b.jgtJАB!9B M.Ӷ]]9Ӯ֌rJ1 E9iiuaf CoNESy퍓ڼi`;qMt01@y" 1HFJ>;7cz_a"ҕY~MS_#\;] q+r`MNc~>&&"-Aps/B!)Ӷy'ʲKs^m&5w?FM=֔ n|@9ۥ'|´gY9=m3NW:zE|j_mSzx6=m+vw:]lms\ ; vHʅ2O]$ڷ/wv{)h-Qykxxpt׷{eU7mr:˻Q#e9/ݚa7<(2Np7@٭PhȴטF= Y:|λc9f(_2g9Gi;?t~%{sM_f.>_%Ihd)DIS  N r(PܯovKeͣM Vw'L#ݚauL3C[cv55X@j;Me1=bҗ:e*#;-[o 6cΙpנ ]&"S),|p)T,6I{hii-,!`);wv:]F'-9`մժVq[Cnڠ<%Q,6Db܅)<7XlRO>DQظ]CBD=ǿj{c#`igϝ /J ?:50^oI/\RL${퍓%5 dq eSWWws~yyBM71DD Y`H"q|FؤfK;4+Xtiy֌rljjjj3V ЪVMLDL{'mq8(8KZf:|λ@3P5GRTF =mnf/GNܠ=%-\8ƧR3h.S8 VKKk!LHsۣt:u9ߥ{[b̃ƍ|9O}SEwuuS_gxxHOXAxi tcխpxĴl6l3NW ; #9LP3Pz$nփlFfhnlM<l.K ]cb"R5.)R5k& ї>|Uƍ|ݚV +;8`XD"1Ew}(9Bv'0mSjMK U*R;p駸`3Ư= 2]N.uuuS\myy"| BR_-g;;׷k:8_ϗ5ׯ>͋l6[u=X6cc#}c؁CH">kY2p'dC588Dq+T.S@tk` T]a$aCfBFr?*1=ꅗL$K86wާ4cEQyyi% v{p.L&XlRyu  LN;u:RggO>${*ͥAtJcc#z衭~QԌ$WEZZZ AfkolSبB9|UUT B@etFҧ6TGNK2ԅw.ŋmt ] `.K]]ݦse OXS#'L~_.k9:Sv]F:Y3 Gp6A&P9_x7S_. ^65וLԧݚڅw.Ua0s$P5(H:mǁ=w^qR_E% 4Ks~V?sER.۪]W4:nڍ@hb"ByV#o뇂--s)R3٬ICaFUUUxt5l xd۵++쳻eުtkP* ٬~A;‹e&|ߧ $I^o3~bTv3Jg?'SCͿ8]*D,6'|llܮ! XL9XZfni=TjF5~ >o:WUUiÆ%7/..k׮jqqVMӥht_2D|3^ߡlL}850MG @S3F9~;;;Up0Lev\p_֒*tqrwgb,b Z9[ty. wmz@%ijn'hjA=HhhWE:9aڶNvSdnkנޝJf89[Ѿ}{8~ǧQFNlS7nh~>~p8pԬuf.خ#݄BCm~!{M~m(wOz{2m՝ /; 3鴎{λ0`3$EL0KsWW77@u(шqb sN0رPU١K,..ڵv$Zr8j ?iuׯƍ7 IDATS6-DbZ>_t؈ Y`g%Ohxxȴ_;yP3[fK oFp3B>0^oGïvf2TP3;yFR@ҧ6l6Cjn 쬦M>]@%5wRbF#e]+_O>}0bg5ϛy NCm`jW(4x퍓:{wH^b&|fe9~v*}YGǸ(PTFNm4bI@l㩓ӡ`CLf)l֍E;H$HL+Q VgNãڻweqB/[3Q0A1,pL$|rl(5OO߶>Jfm&q]QHp;ܑa$x~dOOmL&&>ۻIr;MJ"ĖN mr($|[-{ΜHL hPp 㩣 v9?/>Jl֮f|ߧ 뭏Jj~]ܷujv=c JաDbw2T,nڶ;;&4ԩ[]]d2FF41QtBoN0G4:N,hzL󈺺)iS1}~>Sp=KAfi=fY=wN)4h ^5'H^z{$qeiGL83eNeaXlrΫVQãMFkA߿GO}f~2Y~0!7@cl BVl&h;[g& fbQEIl'7۶2V7Nn0A. b\O?pu̅9?ti~`)DbZԌ<:JLfL9kP{{V[k r:;7s-d:t٬]w᪤$ `%i;>t~J7mb&,L:T)v:]|"C=Ք7oB.zg41DDJ>D`!?[V1sh4Bd2c; ` 3ݭy*' `َvϺD1%frjlzwH:mgYA=lӥ%5wRE#ptK.+M]b>я~\;hU8i*7m;`!O<d2F 8'HL+Q &@Mq`>_n ݚo:f($,墳۴PT4fw#fvލc6f>tIF;>t~|ko4m۽;)0 |>J\\ٌ%g N)R(4Tm^"1mJH;48|ѷWt9(W,6Tx$VƙXN;LY%j*F C)l]0fJj*[;?ꅗj&̤Ӛ3,O[еkN:ml|p(U8l6k1 `5(Hh_VL$=wδ ^4|7ovp^2?Q8 ;?cz_a2 wevִ@*J*L!XCo/Nٺ:VUUttƍs6PUUUr8j~z95Z\._N5t jJԩI˿w|c5AfK{9fIzܫ*L:^.\Unwo39;~*~Z>EIkW}0|Ԥ:.Nksf 3)sVS^ :Β.f~E\UUuiݺϛ-.B&m-1L+ԩUoqJ TlV/ta$/1P31[#]_vPqS5n)b`k| V*5h4By|FMbۣ@M~5_Ĭ.͵E5WUU95ڰacϲمf%Iw WW+UWf^nRc|s=En&bISp%  vrfuy=m+E*̡G4;7g]x0d& fEe3^o$ĮKq8P\U*}ٔmwvvS`U[^1e2,' x 3)h5AII:{f0u%xKUh5(:H>$=f#׿d @ Z)6By98Kx^ظ]MM% 9vNjjW\UpڌPsavs,6iJ46nW F oϝ޹W#' W%FrPLGIϞ;R$PAqS޾c͗.M̭SǧTsoV&s,@MXlR`GQIyZZZ*h2ѹmJ9tk*B6_|o3&b# zwH:m}x5rBٲE> *YҗM6]MMͦd@y9d+p 3Cαؤ)c3y%r5z1Gye2P9oծ͸j*~fvޅ|`BLc3^o$Į?xV5 Λ]ۣ@cMR32r v(  9| ߼oO2Ʀ&Bͥ7["ԜHLԩI% 1/AfXA{{Sy=Ny6>fZyW0-uln٬~T;L̙jK3fαd!_f&2ŋl;XsEr-r+DːNJ-Yc[9X>\O"1} N$۹s>L^ !fV?U[ZZMY5jL:+vߍF L0sKݚc}x䛪󸵽 sLٮ1C^us99rNS)S8z˟KSS3/L=㩓*zW_Q4:n{d5=w[@YfueY;QH>l0f%aɨ[? Gv݇+ݪsP\xǜ.́@Ś7oiiapoi^cL]kPٳoQp=  vP0l'howvnNWfgy& C(l]xWR3 5(H{I-vvɹo뛪q8PyS vP\)05o$)Q4Q8Xw(h<K `Nŋ2pᝋ:z #yP*U@)-=py`22aS@Ŋpc5˥`C{o~3xwtQ46nkQҪLjxxD]]\KߥLp̺T]]/n5s&RS33d#ë̖-z-L(`s޹hvf K&y?s\ ZJi(W:@ExR3c p:Ǎ±Q%:p`H.sb>_o; ~\BJa& HK>僺2;d6⇚7rr5o"pC4bzqdžn (T${Bྴwߞ;Gq:tRvߍK@IѩI$ifo}S5 ]a5fus(&N]]V&Q,6ht\hD,̵ڛu:ȷR--x|JCX&sh|S3fZ `FrH\*}YGW„6cvJ2#PJ臨.Wn9p"1]8ZnEXfS.nR]P+CoX9AnGtM/k!`#3Fï}7F9fZ! `MF[=I?>LOh{c# ،YOm VB A;d/urslQFl746nW Цf| K0A1px۽E=m+l`! /Ja6%B֜a$[]_vfBI/}>_b?} kr)( +˟:܍oC!HfZ fJy&& /ܜw᪤c6%BGIYl;ti^\>99ɹKAm¿R<ң3i%ӜaU̺?tᝋR+n4|̴UKHa65B,0s^oIlV??L(`|P3%ѥK_% ,r)hU 3HLԩIbgʾguzww+gA~RGfR3LOh{c# XSX؈)]~=aJLr&MAMuTaN- 1HK`%VS̤ӄ ZfKfW%Fr`X39ÿVltev֔ˇJq*cc#-S``k.K@kaUr 9NlQñcp:]=|Y>_ "^$ԌU̹O2QrT*}׿_NT:w2;ٹʑ>}MCf0>s=v0g8"B,0s^o}vݏ ~j,ps.\hvfU1sC| K&"qˏ3@i)E5UץŲׅ{וY]s`taaA;}ճΗl^-)a$GyB,0gg$`}-3Mڼi%qJ555k>ݴ5zLʜ'fF9-nrN$+ԩSǧ,7fӥGԩI&Vu_doϷ3@ H7;bu2;ٻok9݉&.Vu![|2"B,0z]Q]\8 MapMdb?v{rx#aF(@\fۛXlRo=]k 0Q&ZiGz衭zk:na)ĜSdx|J dXyw]!Vતe`UXa$z>G5seY|q߻ХJ(6UDbnC]]݅^9߮שߕ_wXs:sR7551,ϟJp~XR4P,; #I+u7 钤U|[)V,.MLS'?s"q^t[_ՁC%G׭%v{t+롇҅`|S%}h4L&gXZ` # P33[Coz!be2(E|s&Q"qvߠ߿df;X@U=>65?Q(z{wR !|X P3[0dP VčW IDATMjT4:^N Ԍ~j.tλ9YVt^y'd4/vs=F']?)5f2566B+Lռ+2Bl0yIQ Vѥ+78dNPp"S9Q,6Lj?ٿWs,K\| oNg466dZ>WH\:؈eRVrUHQ v@HJ`Rh侖.u\.uvvR㪮WLN<]P5cob1.(;YzrG'<:~"Tgp80XV<>XlB`ٸoB^4/);! v {JY'T<>U,Р~~gx<`p`TS۾v%}k;_v[x5 Lܹ|êsB.혖_kWm_TQQ{2y(?2P/54~Ao(ʇbIb%濗y<3e5y;s  wN2Z]14<@~8Zvkj*SW;jS$vbq8*W$DlUyWG ' #'t+# #to<(GB2brvBҥ?YJbs6DdΝap!Vbe rdOd+*g\jU7,ܓhhش{K}JEt#  #ᭊͯ ~A ҥ>&s,-L$kB$Y=b1:u;I'K}1>}Box(R8HXHxɾgijڦMjjڪ@`+XIф\.=fSNT.[#;Jggg577ie2i̤޽FhW9# NK)i@;6`Lݪ_.AED5 E'yrI_^\bHdXH0lq;Qn: Kχ<`9]I$v4K˜el ]Fho|QeIUVnڵe-3S\^\q̚8d'/\8ZZv/TxnmmSEEeN3Cf| nJQ9)pxXȰ.]#l33x;˩$*%Q4:f3YF]j`+Vr;r:,N6ps(33:YMM%< /|?z2qևtl*0Xϊ, yjР"a ]U082riݺjIي~1;;vh_F`'|`;Hҿr;&''fSeee *LLwI|TjP3V$T08xWule@`B^fߧ6d y<r5  ^2rl+d2JLMXFj`Kq׭܎n\.aV+N ȉ+;S}}7i׮۪:S@c9yZs ^U8t`wVo ,C:=ThnJ@z};f2͇4)_&Wv(5!aUvG@)9',-S:=hH$4:z EVnrrB#X ب]0eF@) dzb]OYu2&''1ytB Z KRpƘRr0BgQP3(li6Z")l ($$3Evh u1J f%֒pa:66ʀ1\yj;kv= B&W_Q H&FД%fDBJa>tHRqcɤǣtKa%9LUjjt:GLFQ|p8p8/,Td]^9f,m65P"AuZāM.L#4`._. JN:= :"ƾR8R<S:=L&L&tzFD\_~֗_FH$]6Va`T"BJ]kVoD4:d2h$G 9k(qT α/ +zΦ)illsd2^ܜ-eT*']Fho|QR*+%ӹA.EH55Uz[Zv/RMM[oykk]~6=>Abw}?)zn`pPx(qȻ}ߡi***./Y,u_B_pqaX,/V$.1FǴ~}'k|eBdRdRѨxI\+ǣJgДP$g~aI?r;On B( v fʋ'䊊J[W&+޾gY{eIAN<}1ÕW, X^ŝ/%uX|d{v @R)3ZTNRJRrx<*++c|r`|QV\BK} ;~UbOjjjVSS 9y<yg _*5htMaU w:,i܈d27xH MMMr^uys0x5b==gLj^+)ϲxfmR`PK5*ܜerkk[^V-bC:=ҜÆ̨<Fho|QeIUVnTBWeee ,l{ZhC{[8<b  mw|=;RlEX,*Xî]PK1k9تMjjںPiيEIJUskk}`pP.\3B*5Lg$ErxTVV&]cdW_)ء9 #!8fa%mFp8H-' [{G?[dV6L5[\blAE"JHP3p8fSssE}}mjjڪ@`6Qu٦ W^S,SoGRWb Vl3cZ)WL&E{α# K0eY-蘜 %&vz3Ma7U}/'npe+;gzxJrX,*(>׺6;N2Kyye^[SSy=k˴uv55mS %Bѱ_N>gdYjv3;;1YY㱅sDcEY7>tW܍P3܃a>wJC+# tkSSqR3dv{rv{r~Bez3soGD¦luR;:m,׬qvPη ^ea:p/MM`xn]ǣy;ϼP54lґ#GuQuwSNM5=̱jjjVSS Wpqcanq^mp7mp:7>&w܎L&~99Juy k8tYΧ\.Gs. 3m*I*/&' )5^SS5E" p?J$y ~TQQR:;Ծ}[o}H%1b #tWfx/J,`7nŪ+ 4[AWQuw\=3E2VC|6>G08TV]x HخM1Eڵe*++kE]3D.Cq0B*# `/vIz[r:b`fgg5>nq.=uv uɅBki٭m .-\DM}(}tBt,xl!T!+33+Y$$^AlJ֭m =wu}`xq@`Z[\IX,#GKGx@2uJh***vmi7gWd2vF0Bƃ~dLNNhX<-sU_Iyoy:ub x+֥K}Oy<^Rn?qdjr5w{ cw{y϶0_Uwjidij$M}}+(b1:ZފPyfgg577[mxTz}iY&э7hXa^a<` #߸SZ-蘜5YV됥?]ឞ3~ U~[Zvk׮6l2 /[wEL6v[{3<@x)I٣=jo{? 5/tڜd7{<UVV=Cd4:z]xBRay0K +d~c~mJoB+b@4?uT|pROЩS'tDNr [JY"VϒG9r.vVvxYIc3g۸Ҡs,6p.\8cV U]uw1;I&JTJxvmyV~hFIr#O8nذjHXt:U _c.^nm$U]ԧ`pCM1HV"Sa>+,7<$}7kbFGn#r8 ˔ 2QCæk08s"0'=B|=c!ٵnUpTQu][ʪ=\N)aGV0BIے]ʅ`32joߣW^ynbνL&x<.ߧ6:%!p_ٹYxT׮}=/l#ϵ[hm&TB*{@:=loڱݲylޢ}/t(:ՕO5%EGL_SS MO'U^^{ZUm⚤v^Q:  #u+25UYY <@}}:;T{޻&(s$$ȃx< &be%n[333 & *)9 >}RҲ[v}jhشekۈb ./]+z…pѱ_Wkk::/sJoGENh|Ob˰s !zF$) knn.ꗭm]4&Յs08XJxϕMNNhrrbUzޑc9=Ϯ}Դirr:W_3h="Gro\'W6 6mf`qR5JBEf1ǚ5N7HFGGrV! ^y5:H5[>B͝oMN<>CߥѯD"htN.jo߫= ՛Fs_Qx5=6á7p>rq/f{`^N~vTWCf 8?#_V9E}a> w #47|o׹$7[ABOaissJxx|NNK4 o۶/w}GV۷ аIm^8<`pP}ymǡC3\QQ _+}dt _An (.m?>t͛752y`ƍ1;@3f1]%m.ae/؉ϷVm+d6qmԚ5NI):Fo.71q`u{?dN: :ihؤ= ߛ89_A=joߣP7y [g3mɅ- zRK.4tRW~}n|VyƾR]%~Ƙv9}NF0"ȭGn޼I/@ܪ#;r.Rmo?x E'w<:LFafrjI&J%TO!lkזi͚5r[Y_ӑ#G`"~Ot^W76Xoǣt--}vږm:e2:ZZvc"o/ W/kUVVIH"P4:mND5%үhQe:y'~́Vuv_%ĺ%o1E[ٵ4% (n 5,|M o5@FVu;\Ec]~R}y>w>ѹsg9,Iu sMSn77۹sguY7_WGɆ;:/9w̪+8/"0Br  .W66OM%p8lqpz -jz{+q@J:մV7oԹ9V8:0͵ kxRcSȤY:&՛zѱ?uvsԩsg@`"aW>O:=D">wrQY,ޖ]jiޥϮ}?mh>HJP ~NОڒ-U\*ͷ]зt|ﻵYNyzRk.=ZW*j| ߻ 7,>*+f7٢"7U `}V|}SM^7#N+ht׳ ]dpsA/::^O,'s&'+g:?,%Ij^W;r̒폌iy92lPǟF06 jIϟ"z9+}RVSC>ཛྷ/Y]j *?ZW)ǹ\_2m'P<cj>8ץ`ѹָRs+wcI}5uUh< kzZȦ猺I6nlYONNhrrbUX}O3Gfc29*' #twU( ']c~aI?C{19kx\Edx?xLGSΚb3aV\Zo-T]~2SmOcI:J޶e p,Up#[9x6Fec~_Nkc::[2ܜNK:ԜJMz|?lټE>oӜmF 4@aj3Ї~:IJofps?VWQ?ޒ? 2A? |'}AlBxI}xKWl.U%vkffAVlscηRڅsO.7#H.;͝oe?psw{:u&+scvv[~ƛ>N7@aj"0П;%nd2^' ۺpTQQ 54tpq}}yH4Vw{:w,qrR+FWTk= p8r͡A@^-Jv|g/:fdR_'쬯==g::e?o_',n.UssFuUaz:_sBnBҋ+5@FͿkd2}Wۘfvv ٹ{^T;\;6w|0y=^M`٧zjv6}߉D:tu:u&'UcN>K -?ZWFXVUp`_fHC;Lj^ ? uTK5רisBي{9Yǿ&=>(0_>XݦG*-{b#fdRCƘsܹ=7+epsg'LqxKJ-Wj|"ʛFCP3٭`󋚯\ehtLm9^ .6T*T* YSYYۛv|SNTw{\z,|6d^;VԬW,6I' yQ{] :OM4nhژP>_1;H]]﨡aSfS7Z Au +Cf?% GL0BoUlړL&uƘjjj-}ܼ``.^|U<S<VyyLqlUzvsofٳ߷kuR 1/ѺJxZ',ۍhik-ت`<+p4n^v3P'!灁zylCU*e(ZePtR>-' #tncvLV١=SS I2e9[mYBP9[qٮVڞPee){keV2sFǏc;u%bW׬WW IҥK}t#l Nyyi%|d~!M$-ݾU_ʪ~4{x-WTic5FCQQphݺ_E74=T&͛79VhnnVjjjrv,^O;_M`|)/Б#Gߍb:~:wϓ*vԴvaw{QU?[S/]Sg'`IP|6jgN#E;Hd c69N2(O y8|98_ rK%SO.p8TYYp M~ߺQSS-[azy59)L0B~c/$U١M׵~-%7o4q4RK.}v3?tyY^:W|mnԳ͍,W`IbD @ev}Ps8B듦UW0rjP/׺ W>-S #!0/B`rͽA9<؜JMs`x*:С 7TjoczHj|xIWtPVyzmtDM$+SVoc:vmI2Erh^tzFss?sץz 0ПJs# `˷ͿC{rld2$03yQ{*I'!M$ <mv9.I< xI"`GB枟tf 6DN=ò}0=ԕR:̏P3Xĭ`AI?C{2nܸ7aB03}=gY&lz]:Y ߗmڵә롡ANB +ؾm{N7՛/GQ 7Ls|#\}(f؇Y):5FCQI9YrHa=5m՞ݏ/ >1(kI:B! y:4nR;uе1W 7l6tzFssގ͒teR% s+ؼS`3"Lz:R#[6v{lٮ|TjuuuWWO4mUZSGMMleL(Hd;;,%Vv `f,0Bu^C{6n]UVHXiI祹lǫtAuTΝ-j 3[ZK5`c.|vG,`eN:YF{-Lx<}f>X22V5GFʐOHz@3Xf(l];'ب֯=_(,Q}]|^r#EF>YR_P`wOϙyQ/05m՞ݏ/ ϩ):%# sFNA8ui:ݢǿR񘺺N`u?t?ԴfWz[k%SkB/sjk; W-fXRnSMMeې\_ ׫OH:\H^O[6oі[$IWЧe?Tkk]uE;F/]U2H6 5tB' ΝX@nn[<@9SOG[@v_飾ϕLAuu(D"XJ$}nTf.B`ae`^|UjU'Ri9vh{` :EyCXLGQyxI #GPwI:.|v]bu08Xer} 4?TvxxI=ܨ|qpN:W^yLae2MOrC%Raruj[lBRd`y=T\·j}ҼK? My1=Do_C{R/] zbt:r͂qCv46T[[~K}U}V+k.$Ie2Uog{`^ޛKFCz6B`wTl&5Ʋ2W[[wyp :ZIgj[~SUFWb =N@1#мIMk:)p wwp)R޲˯dJAP3،aJ:h6Ec 6{< |ϤB08>]p`mtYk.JZKւN;wȍ|Tz3ÉP~rgKTZ}ϫqC?$ |# =x&kWi5,}j[2Ї*`s}c7,[6oPW^W*5ko㼩G*u}r(ոK}t,b1֛ 4Tz?E痸*z 6 \TOJKK577CFcIl{! 6u+vjY>Wk\Nn`2z}zr IDAT_P$9q'F:mcol09c ˊb:t5gUGt>$ͯ>g*y ;Ns 9l@tRm&`[ #tX ;Ɍf7,j~oer͡+y?nǩ^޶ǵcKalȝpx8t]ê{+Fq}iz] ns 毾v].;e2MO'so=g~N_%s&1!E`_ #t@ b]:N8G94AiSM$ 5c Ҋh;P|p ɤ2̪S^UՖl9r=b|˜`_ 6l6bsyE9'Ilټr|i&T@K.ga' `NӻbkftYu\n 05vZ٦f@3>@h͂Q3:Mui&oP}V|gA{TXH$n{WzJI,(E 4?HcYz 6{<JR&x=rq f( DFh\6 6g2^͛7v Nod3 ק 8gjdB+R[;o} \5) & ^.\8_}v<$X^v4x 9=lO64 P3EkviS&L5U>q֫*N6x|? :`az]^x`38.۷e졫Ν;[}>T:NJ=ZW^ncRr:OK.˵'=N`y@l~QzNahmn5U8f£uzol0|}vs ;r9f8z26u<d* 6wuY&D5JOͰ :R^ZD"'۱Blh>aÜPz5@"؜U5UK~?tIuҡDzwșb, С6I>*b,猎{lP^F#'z]{_.! !Ld;-ͻ,fpF@i" %VUXWߴydft0$FW#ࠎyxoTv:s_mhh z{%֫Z/!wmnTJpRiͮz;Um`# #>@3YI鉕P{ߟ? UUWQKxDU]UU9@'r恁:J2bI: hF>we% H$ro=g4ÜP5dEyŖSW[=өmjo`8/ M1ΝrMS}v9,$Vgkc'f[ZSUk^,/Xtnun0}[mhn78g36BIW\j=ָjyEu  vTGf]1ͧOTO:` CCWsRYf8I XLo&f޶LsD%Ie2Uog{`^J`w nbۣ[VMO5iomD+}/t)~?m`0P67j cV#GP08XF555 2̪=C^9q0B_pnCBnzzwsN'l|6?틌M}/t~C}Q/WPP6:JñN@:v@3al"ePUU-`,azz*'d*64_ ܉P36vCݬ5.gη=kFGzeHSiU` J^08ݥs3|0''*b1uvVhFXMuu%d2%_!j{|fRD %}\[;hHx3l> wg{߿*VEKFn*_+l8Q=ĝ SǾS'Nǩi:ǎg>r25c'ҹ΀nq1 UR J^I]i]I~|tjS@W}Ҩ5wouwb B!B{cY{ޮhFM)> 4_fI@350㒚`ԧƻUuwOtqȱtkFN?jy*Qx y<Wͷh gzzgy;_Eu/(gyo4,gc]y5/% ! !7nӦmm?mT{ sYv"[3rb8x<ݻ츹mfkgٜxoߞ=ogsi\CuSfJGs,Ko XҩyyEf^42Av.F5X?_:-)CK4L=Lf\yeEiVs\ obGŴ{wfL.4/[V/܀fIjߑ7s" f89?Z$ó=o 4z}'Z^QgҭWڱI%ot,-qU ֙ =ԓcYy\mRtD4/]z-[V"[AfҭUÇ(k槞z?cnێPsOq6'=کʳvjișlti..jJԬъ+BiRӋgyEjr>|P3`fI:i^fҼ*ز/8;H*[w굣Oo=+L jv|%+ j߾Stb5-XjfT$KҥKUSFUU_RYY9oi&,GBFW3lm@nMS̄zUsnu6lE _`߾= RtАc|>W+eX,zR֬Z>99gkWd^IKԸ)ppf]হ!,I@R7xq)PylP|}󽶎[3r5ڝklut0ES0Gv;mNiGZWLё3hB 6ҥh^t:TjzTVuUM@Nv*fN (n 6GF":yOX )Na,|rWex}~TP9QY 8_ p<< 7b}>GjEGNh?i˖UPE2Mkn?xW@k$hn 6cq`sx8FU+ۻ֌ܨ5`߾s7p@-z<Z>fY6) 򗇲rFȹƨm/]z+%4#'@3G` ᡏe&L6MVWeYvwk Gn-onRixLG&(BYʍk[M4ȹu|4/^:V*5qWU2믟@37F`_!Bv*+/Ӛ2S,,rjeEj&۟_! ˎ)X\ҥdweusBK]lvȳӁ$}lJ_%LE?=.T+Wڳ&y խT˖/5' UT#];>?q(-dp#SfJ]l}]199i8 k6L@3r 6rڼֶ̤WwBLu'#2DAʪY}ݚۻ)Mȵ-_vxn@F3ڱIK}ȁ{%iƧK5RESZYyX8B[Fl7.cQ}25P`~wW|=n͒t$ W;6V5[>_+kz- }][|YVRl\`D 4[4i񮬽^& fml8;MrT<g#dIUMUVgw1xR_v|gЭ8qSTdQv p|kWe˗)4>[ǧKub1kڰ_'%ǎ؅P3Vn6//r1˯5uz(TYQ{gh?)3ł#6l}ݚǎpoa{ vwi.-DsD_TT+)Ri]^8իUYa dqv%P`77CWwg9ܲ얫~mIGVgul۲Mm'i;ղZYaUGvZe _ v͛n}G weeb&''-mXD +l>##өy`pj^^V^u*+/Jm? rnX;m?M %K[." p_׮жk)2v{B[$v~ hQ-N6xӥ*qVYyJ^;N<Ouv-'5e8ȹuu+_e! î[(4?Q{~1϶7Pd^:ȄϨKERi]^8 |t' ux*'_~IRt4b_G"BU,+/SƬ~ݼɴvql{JK rE;@.gls^w16+G;m{ݷ֪e9QxB]l}FqWr Ŷ%եy.l&M'@3 5?/?8 mǣ/ܸKl ;g ȹ^&E, 5xԲy@Md/_N-H$,ǎP3fGN6;EZRy\m*+/S-,)莯ޡƻUQYa뫮=wk3ɴd3 m +8K@ (Ŋ??Ca$=j_wFsu`3~w~GBcu؄P3 l9խֶC2 x,\V^߮Y٨nigT;Z&]?/R_i\c'N[uuM?HѥŶn%i۟s-Pl RӺtioWjk;7Zr@l "؜ee]V^[ʭ?\jߡŶnM)6 rj浶sMP(p=B_s ]s]0F)Dd4h ;5f\̶@TZwOѱhy@I$Y* Zj-c ˺SC vݜvOj(P5Zj& @j7Ǣc, [m_>öʊJmݲ:Qv49mmK@c8vܜTVR\L$9LKuRz4.j 4Ey^zN0 |>5ݨ߮%X=hUj۟y y3v}06x%Ќܙ2SFtV[b-n299i8zN96O5򒓃fֽyl6D^u7k=oh偬<çQx8++Jf2 (.(XYlw)'|^n~uU93 I!K$r1ff@"؜P^$>aoxhpHHVT]U[D2ۺ5e9nc! P(3]AqG{ᲐRӺti] 7`Lh 5ͧВcQץW%L}xÜkZ[[os"фi}XWgUtP qf2-S\dݻ}A~ (ps3]M3{ 4CyֶWw>˃g۟yhy@ L@{ Ywk2[ƥc(T,P kˎP]|kOSH$P\94rji 4 f@AprY: <+cqKWt,9UVTjYy{!VVRXl"Xws^욹7J$i]ul7E = -L;֧Nj+@^U!+<~AHȪ5B<Pvc̎Nx ?S3iLi94ifKs(<  _Y;" ki] IDATRӋ0ێftjIF>BI8 uV]t]d$l⊎-۲gZC2;:z^ +|Y39ާ@B8UΧKsO 7wP3`F-IMrpyެ A<_P9ߺ4_ij7dYd`3_l (ީ pIKƹQ: @" (h앃͡+cqm K"#ˎ2+" dO,fO-<E\@3iRӋp~FP5 [͡0-)2^d鼞WoxX_VGȎ@-q;ǎPsw1 9eUuink@3p#lvPy9U5jޒlF)+[FS699i8 5SN.!fcj8Ӄf$| ~qK"jw鞻6.c1׭[Oa@|LGa?S҂X7B[gY!ܭ%%vRESM3AC(n 6pZúJ_cc7-Z[[lզE -Dy!Df3̈́%llq% @! p7:ް,<08Px8|կE‘˷w\Bmo8TQh'׸"+14^~^pvX{mr+6Gfwz@̇]?twe\KqPҺuuv2S:ާ׏d_Oy1UWX2×Q4,t')*@3M5\0O!q<:{lvgg8BdZϾ;O1pM-]*//Ȫx|"Wִ#.P\\S$3S<@s4Y,d2ujv@s/ f+Fpl6UO߉#<dc#gtkߞN+v}`X,ftibOqA@!<.82aKS.GrL|թ4fkjmo+\ⱸ$)Jmީi}_ZOM):hj*"p|3RyymszHsƻX3)pmƉ8՜l7qݱ 3m3u`؄>UT"vvɽ&@H"фiڻ5hLNvR7# p`.'鶴uH3zCh2Sܿ*// |LKa|@,r-&i.^Rk М?4_Ith@)nFI<({Nuk^ coد7֓{Y=`ՀMM[)0(XE(`x"׫Ɩ mL@{^lLy>4ӜW 4s5-50 ƀ#͗Ri6p%i=zi665m`Sx):Dtkv~;zTn>["7L&)ghUO]lvlHH?{yÎS,gH еE;HԞ/F|^^N@ Z>&1c˸(.pm 2\bLçv<_\\R#H(POf>q>g6$ǣcߺ1ڜ?г}J;ܔK>&yEv@X?yħ_g-ЌK$(§Fp'f>P3_0rxLz1!6mxTPOgtHm\MM[)2(Xvti$^6>Kn58r<1*MŶn֝̾c9o Yb 0awRFkpCZ">=} Qx.>0E-Bܯr[ƞ;?w߽ԥ@8eyEȞD"L&C! 4pm`I'0cT?yhCh;;*C[b`r{oT " k=sի_hcEvF j #xA3 6 ߓėSˇ kO+8b_TSB}1 5g>'N}$0gZۺ&5wzL>_) L32AvGy06@R>sx'D2sݾ T`zau`3ZZ 䋚ڸnO$z} ]`"фWW͛׵M @2i*ɸuQh`50OWQ ?RyMhB;&\ > O@ظnmڴb7< ]Ogw*w4S;Z` @".QIM?B,a #SQ|R}ǴMy7)3gZD2msp [5?),M6ڭY;T{99+?Lr&NP\[Q`3 W-hmyڮ 79v^Sf3m4ӥ<E%FhHuy0afI^U=5q#֥KiM{P)p #vMJ5nٮ̤W-M#guN4Ѷkks{Vpdgѥ8IOq$|}^זq;}ڭَW:'Iq Eϡwz/1q㝛ԼE>!IMf> ǩ8`jk׌K:@5GP K$<~A/hJ4 E'Lol,IV"@Sv4R,D̑h"_nk7k0fDM% "j` #xvDR{ un׻7ʊRӸF4{ çhݻ1lc7z5==m阱X׫>ute;T$:ڱIK}F 7׺R񰪫jl?alRӺt)JN,f,0ltTRͪs^mL]$P{9wvh[gL:_3}qԬ1B!#EEEQSV 0GG;寀1v67j]Jo2gb5Y2CɊxa{kk4`3 D}'yzƨƨ$iJUq v#Y{fuu7`GXיuZBlVSZ>]?4+ϋDzղzm4Xd-;@Xh`^ħ[e T&XDI7L@3" 6*|WYQ<:H@Xv]8yrѝy?Vyy9cz^ ;:MMMZ:fY 9>::T J]n_ 4בЂsWUkGa1 T&ŋ#J0]<Ȫ`BXs 6 lݲ] ;B#zsgivKZYut7ey;\ MP/S?Ճޟgum׮P˖/n@X 2ٺen΂TjZ/(ɸafl``[AEPjG(W 8~VVjJV_]sf=Oixx1 ;:Y:QX/~韲0F 7_# ~23;C"X 樤|Uza%5֮9(/ E!wmR$P <~A]q9:rz,G>XN_K"{zTP%[ *[YP'Q8 L8=|O[l7d\T2ttOjC8+5%|v͸TRy1|:D2}U7giʊ׮R_nZ9s|v1:b:fO_"Vo @XTV-|k߭U˴W6e.w\D\g7x&5ooˉ7#MH5::Tj % @j #xvIoI"($ ;T_[=;2+=:8=םkdq9._WJ܄"ѩ;׵zmݲ]uyd? LD>Q&qtFp'@j #xvM"،jx:zNus%u\(++' \#8c˸EEEw5gԴ@K oߞxr +*m6mlb8"n.frqr04s]Pp*+*}/Zkk).+++׾}@3 ɣ~WQ\+imDAhEܠS39b+:6UW;=uvycy?Tg_O1k|LKa+iyNS?Uy2P 77/W>_)qL&[0YyrP39d`AI sEYxYf}]7߿^{ҡO<>A(c]j'Ob afJӊD>Q*5F%5޸ rP39fqI֮9(/>XDmkG,M̤gnvֳ! \)Y>[Ba _/Izٟ*Q#lɤHe27L@3y #S0מSzd ޡM᚛Ӿ}th18];B==),Mji_2 W-7H[l'@xq-擒n# @~t ׿>ݻTyy9!x{3ޒX_|jӦjon(MMMe'%m0`/@C a]sA7̷ hG,߰zg; P30JON4!5ooa>iy IDATr4p6>T(Gao[b˸X[M@M;Lmk澶v&\SUu yI'ҥ[d^VEgqI֮9(/0wPxX|R6歾^u4tPcc1gg,@(4LDQQMhӦ \[^QʊJիRU57ՅyyE% =؛wirrR2[aP}(|p]sT71aVMJ :KXtLcc e&i& 9 x<&{*/_VWSuU*+*U|&+)z1*-5f2 Y$)i NjC8G15Jp|ǣcߺW[.6,SyEG Iں=8NsƢc :8;̞S+ϼ"Xw1[x8Y^WiZ:fY:5u;-R+*o (}fٳB1YFvd2E"L&4C spBF5Mf3i Cj@V|zˡ.d87Mںe;@J'ҥa`p"JFWmn=i&y Y>륰_cb1 8X(<\sŋ#n 4" 3jfYj̵Kp^~PN+)pPPsQǵV3p03iXDL-KUdL`7NIϻe1oݫ;_ PQq Sd2 ?V@'.)]0Q]8L&itͳ5r6ݯo=Bh$^zN,X,6A\$" wI&EȡL&H&&n!thg^foj49ISm0b1ǤK5_)> (,%LAM`'N+XSSnII$ pf #?̷] .L |!;B_4)B$ |TjmS?y5F&|[5zNuk^: nx(P&&D.*ɸ7NZ5뚽Inwh${u: ǜtcjecp\|dtbXQ;*ٛbP3!FIn4: @AX[[1L3A!-JM㏇L&6AIM|]nP37>!iwKi,:&\nxxȖq}Rk;5b1 wQ 1+ɸmoK0{3, j bk\#4 /=6bEsEE{g(,d2D.j|ܕsF00_~zn4ҫ{uM2vp]%@ΥR ?V"pwFp',F&I6ή#ߺW`#1N`~Z>륰y^O;7gӦ*+*)B1ҥۦٛ_P3i6ƀq?h`pG:m'( b; GŇCa y2"sOJ0{+M! 0I_3߾v 3iW0p ;nzK(<ELr[BRӺxqD+kwHRM7P3aߒԤoaJgo+p~o(*Jv{zSX499GJMq7NbqZ,3{T_mj5:XDLmSJ],i9a #x6w3iWƩa#y*8k^Z+e! E0M 9ӚtOJj2Qvf` >%~|KU:h^f~T<. j)<+{jm #&|[U=6x)Ŋ8b`/{{O*_⿞Uc6*䢡ᎲX, >FtQD<ʓYr ̩+wq]5tog#6<{_>u7vsvT0"Mg*1 @Źr71swx/& 32r&66)ܜ444bQJ=;ЉZaKJrf(5)xD,Ҁ:uR70:zF L]]/ FnH-\h倫mJT/R];Ph뉈XW T$wn51s8Jjhh(1GFL`ahyUWMkonB;Ѯ T:f`AH)1s9d -,pbױuGOUN ϥTf`/#'"0Wbُp`sd6ܞҥ .qZ '"buJ!X(\+w/ڎG;0NMُYWAzyʣ| 7H=b|bc83fәEXRz C/"HezG[bȁ8rcؒRn"@+xD,r3:zllllbQPa&7zy""(4 R3G 2::".CC.wbױuGO|k+0"^@5H).EľX\yP! wYT{'N׽3l]TRv("FZ>(.PCC's9nCCpsXc,5a}b[j<WhR3PURS#bK-p8/8BQ,7: @mX*U?v='jFD{Jv*PMR)"]5ihl}}Kw]*L}}@]7Ubغ'~~Θ)4+j T}=?{}Kwk=x.luJٸԢz,쓈X^(DrGƉShy*>SSsSԔ@E7p@ 9(Q__/9TW !@0+>o!;"kVR)~q?^{s{ELm%.?Bq[rɲӹjhh(1GFLjw7Q\R3,DqֳMMȿz亿ǢΓ߉o?ll-1\Ky=t櫼R<QܘRvPh[oDj9Mm>1{3響)ķg%.%.bjj&fer(jxGgG(3Ϙ)eD0;F܄U*ej{wv|7wR)O/B`jll g3_坈X psLj)eo mcfjwj9\__GGqcW_e𡡓lc|RzpLjE)eSʖGio?[*4O'c!_pˊB|#qf[ pR6E1QYnjkonh(埧n禦l^nX,r;;ewc뎞8 cΈhO);. [ P)e"biDMm,Nw,&3]CCB+SN c:U&"bMJqqf2I)O)k͹s:_8}9ב$BF@M1*#byJ>QR3@D4T'37|g?)]I_M_ wnBJY{J'(f"'1N}t꺿57}U_ ݳ>Ʊ_}`:WSʺEP~"GJxDl*EX*lXrxᇾ(]4A055}.|3%^K#'|GʿrR/"Fai̍<9.|ٙϪ3>ȣhŲΪijj*FF#"c||,ΞU&lB3@@JxJY{D<'MMM'x+/M9u7Bg?kޅ _~<_)|h/X~e 9SjC)e=xD|(|qy8%@˗ojrh@u{!=Q f9RvSʺE0IJ٦x:"NK#S<ƅ1 ŢIslhn`||lVyuuu0["=(R3ƌҥR`lgy*J/ X…/5MMQ___Q﻾6!5e텔ODPY*TJE0zv4%R _eKpK :<<"WΣd=2rƆ '?aDcOOO^u\4;+_exyK g:3gR3Bۦ莈RC'bp'c<+*r哱bqwӚ]Cޥ_25|z8~qc0tf¤f"'"TT#m/aT 6z|Ӛs:o/]RWZ k;v]LgJJ')e\\\OOŎǛ{vDQFFr5er/_t;E(dwm/űq}#b+J\_Љm/Q*]\GjyOk>ws!QEqSSçc뎞(]* &"3p#JMm~|]G^'~- *RT7U|bJ3361{ߎomѳw"biJF+Ga|b,ܳ+^{s{M ? !||,r;~WLi "";zG¸XR:l\|ff-l㏏+4u,h561=v==FNG)eMgf)5pKLm^OEJt{<XZ[UVv\' W3vJcȁm/5ޯ%"BrXuom=oXOhnۗp]]s=155%tߔftW^#qcF)eLgv(5pۮLmKGuGO 9Ŋ{n i1>Q7T.|[ZZMi1çc뎞سQTȍR<(]JMJBDxnu.b[د>y󏣩)ŊR=k)5blb,;gGrc#SʺE@(5PvW.b.\Xx1MŒ !󡹹9:;{hZ??/_--ѱF5`ȁغ'}4(RS> @.R>I)k7qo=oD[)BPk>REAt͛,h1p`.$5މ)e= J*썈X3;c ^#=45ژc1==-ygŊ'A@XR:l\Eܥc'QT#m/ű_}p1/1_,uv܎?55{ɵ\|9l6l(hS)50gRExA76>1{<^{s{ k< `m| bjjJܹs=Uc' @-0"O)d:3sE9uejswD<%rcvMׯWt]-- &?+V<~VdrR7uu @͚RʖsIyRv<="c뎞8r J1H.봶*5ܬ -JpKAGt;Ektuy1ꝈXR# ßPh[oDh{7F>-o5 p vhmmڞSqq|~D655G@477/NGĦ}`> K)O)[OSntTBsDDKitkc45Wʵ̻\|9 6o~^Z%f3+40)e"byD nQkٹ.5bjjf3>w\lcѱfV|mJ)@rejswD<%2w-F۱vҚ~&,FTu͛\J(5PRʎGc"+9[1!܆ژR).\rsuz&V;4GT"f*ZJ4"vJ#?-- nSGǚX\ܹ/r4,##gpNG)eS@Rj⥔#C_{@G?1>>VYJcr]]?pP,յ̛BJҔC)5`J)[EĄDǣgٲbժչqDJ>s--v6-@+jtt<?O) ş Nж4"z"{Ҹ}|!QXgr2mUXWBW^y1wT)LǤfORVG1s[SJ]]s]˹~TmŊ'*ԡCLo \J-PJҘX;!ݷulcqDLMMU]v~65_I*Z?SʺSB @UH)뎈4n_3  7?񧧧<ΟR]]?ևmP 12r&ņ Ʊc d&")e)eBgo@U)#⍈xD7#ʬؿ?ߧ?yg5==Ybzz:޾}ls̳3jUjKD @UQjj m)"KcVx"6l+W>) 2(LLNs[. QWwgq—񓟼F> 8G޽{gn;Lf)5P ߓYя~˖=& ׷+~s]cѢ\]e=Y總lHy2s_߮\oR1Sf~CT+fjBoD#Ҹ9V0nCW׺8v\xcѢ\6ӑe)s[9:'{W^Tf5[";l\T3fjJ"b4nr3:kr]. QWW9{p\AtumX}5FGGqt(5Ps ߓijjuv,+/ݻr]ǽ޷`2).ƧFKKk؀shphtw?|kNLy(%JԬB=fߑQn5b1:;W^x衖hl󘞞,r]gr6 <۷ǎ/[BDZ @+6EDwD,ijjٹNt@Gs]>Z[ۢ8w8~"5֮]7?oL)eZ Q(-J浴FWX# Yؼyc><w߽8͠T~:MM?"99qkNL(uJG 1Sn~J7O`vFFDg皘,CDccd$\O^gl8ioDDuf(55 m#;"kii͛@p}}?}15룵-*?^^e2sY쌈M)e?Pj(ږDĦ[iܚ+ 6ʕO űcw/{ッb> _ٳFSSsևm22){&[w8"S _Ph[==ifk:kr_硇Zyӑe)s]?|>:;`e2s_߮ܟQNL Q)5, m1Sn4nr3z{_}]}}}E]]ݼ~ֳg? wp慈I)ܘR3ܤBm}̔K(7|Ug:<} g?}Mp杈ؔR(`v mK";"FN`\:<`,Ztלbzz:u~]]m([\6L((5m(ږF4nSO=7?oPz{_mQWWmm#Q*r]cٲǢopf"fonR3A3GqVZ]]T,su΢Ew<8g8w˖=f#2sټ=)e[ eT(X,[ ԪaóswzӑuDWF`Ꝙ()5@ mK"bSD4nr3P^yؽ{WkEkk[H/_ue6Pf.ѝRvHP>JBmiLm4nr3PKbtvё\ihhֶ܎?>>c׷7-{2sٜ2Sj mOI(7bphll,YrO,YrOُ[*]O?wu 60נ\V13'l\f#B)7?"۳jX+W>) jʋ{y衖hllǛ,r}˖=}}{m?\v;#b23OX"b4nϊOĆ T,suN}}}E]]]Ywgq—׷7-{FGe:3e Ph[3+|VOVCC'sM455붏39Y?oWk 98SR3̣BmiDOI)7ըݖ:hjj埿|r|HLOO~ۻj2sMd7DC*@ݡ\@\CC's].Z[ۢ~~d$˗/oo>lS5K&bz=)e Ph[3GqVx":;g,hCC'sM444DkkMܹs_\gC5idLF쌙P m)"KFWX# `?鋹d=d=~ _ٳVx"z{w@QfXR(r(5@*ږLoQBյ.{?uz%MOOG455G@477@PfN);$ >Xjutwؾ9y2G 2s()5S(f2Qn͛7%K%KK駣}}UС۩\^13 'l\0(5U(r#(UVGWhm}X@*LLNs_-~ӑe)s_oo,[/J{Fy팈M(5wQ>@<6<:uuu#Q*r_յ TbTfΈN)D0)5@(ږDĦ+Sn.+ 6ʕO 8b޽+u-+x[ FXݻwF_߮9yF93eCMȕrswD4kŊ'hoF@E\CC's_yN 8MM׷302r&v{OR3TBmi̔FyFWX# " uUSO^u#Wc}(1Sf~CP]])7DQ^--ѱ&֮}6̫ ?^cժ/XƱc )5@ (cfrS(\Vt`^m޼1X¥5a XF^e|Lqq@RjoR IDATܜUVGWFf`^\# eE С=pPc mcFXDlذ1V|R:ku@`A({EPf 5Ph[3slcvX# `}gW^odLF~vFDwJ'ڣ (7笥5֮}6::Dss@uucޯΑ68x4vȏ23 A"b4ʯ9::ڵ뢵a)L?}r哾0"ݻwIaG=f+ %1SlVnѪUcaó~]]}Q@E)W;cttD 93eC~G&湱bѱ&::(Ww[EcdL޽+V.8efດRn--vѱ&MW׺8vy?MM?Go߿ORfR30+s9::ڵ뢵aX,FG33qpr哾`^ݻwIaK5f\)7DijתUcpƆ  EXݻwFH ܒBmiDtrs-{,֮]kܲWwۼbۻ̹3j߿O0"6)3B-s9:;ڵFss@յ.{mii}a9u@휗t:f&3! V)5e?鋹j~Q@nq˜@n\)7ϽUVGgPw܎lc}.7\eW,o޽3FGG27)5;wyR<6U@x#U#M[#7n̗_~ycIVk5_[Xo>KGygk#fF y0{,,IV3LٿO?_dO0-l5CA<SS|i6g ,糷?,/LO׍ |^Vq~r쉙!jyp]" wp0vvO?GGٟGCw=HY\'!=130LDPڏR-rvjYXwJ~ 0Avvo:^ve0++ُ8{R]f40lD+Ro#n>s׮}/:ey0Awy{O$ ۿ~Q]VV<bf`艚!nz;7~Ѹ\:g QQ4'YLuET- wp'A ^/㬬<̳g?dEc&毭1|]" wRR j70++3y*do !j8E8rR>o/,o,onѣ*dd8*fndNYQ4RW1|j)˛˯l30=La&T19NELukk zV85^/ZY[[5z$˝֮9NEc&UMsNln߾zAljZyhm-Ufΐ`*nbu8/,IV3 dnV3zd9ɷ֦9Ξ`ELukk 7n,o,o xv{#++j=N u{Iw:[Q3)L$,22R˦f!UTqk ۷SR70!|̣MIu:[.f!W毭1jכNG0hx^NgkI 0"q>RE`<Gփ$;)`Ec1Ukk3h2I'*3h5h̤ܼEF`8 GZyI 0&*na!p,!H{UMs6Q3)TכzH8v{#ZB"U|C 0q>UM+=7nCiggk&r9Ə`ELkk&32I%Ytv0DdzR-2]"ey+ey3jzVk5{{=&W&`B<ܾ}G L^'B*35L8כt=ey+ wl[^0b^[[5hs$fpy|LO377i`uiVô}2pؿ޼z~|3ey+Z(Hh70t 2\eDh\M7/&9gw JVqZ 2\e G7/%a0=]OY4\'iVj&TW7/5ъ1zR\oSS͔ͧV85v{ T!jEz1^]"ey+ey3ZM8O5xy*}WTfNT/ZdLO繹yN'Y[[5xz*dn%jEjy19ZgWOCv{ E{I;]spRDhO6/%alΦ,o,oٜ5LnwXȼ3xzd9ɽNgkQ3g(3$-2jVjQ`̸ׯϧٜ5 IF}~H?f5|Zs5g&C},`1 3D|k׾ؿ\]tjFF>=_fgk~>>lΦ_r/`z/$OVzC3SSҥ~ `u7DpB|k׾ȥK377fs5gS$OU1'2 5)8󹦧i6/ p\a愼I1"d'jSVTqR+S5/]fs(ozi_I9;es58sji6gs|˙OV3 0Qve W9 BfQ3 ~\mNt=\tpF^zy|GpR^ w:[gO C(S͋BsV4~ 0/3E0`fBE8#pavnodogNZ!9`x`EjTEpZY03?2FHQ4fRKIXv:277frjanoիǞf#esh5*Tb_[2=]?l^>ɶ$^mdgg;^̳g?"I+Ng9``LE p.\gijfs6.]>Ocsaa-̛&j1T_qbٜ=<77frja`D?9>}v{#{{=0(oRḘT!I`|`Ec&$Uחb/ҏ[%j S#aXLOl^ΥKi6/^fs0pz^yj#tyG0l~H?d4LQ3Lh\M?paQ9 bgG坝z2FzaN?b^6L&Q3$)283 ^f%YNt53h<=}!nggg;On/3j1 wM%j~+Ό~|'3 h\]_n7 èr`f̸ࣹyufrjq8qFzg}Iz^^z2u# |$Q3يqpy183Fji6gS:zmyoyIvv5M$˝֦IO%jNTQ4f$8z;xv`^/qg/ҏ[N8UEѸ~|"Lk׾H\>_ҥjJ9kn<|vۇ]\fk̻&N83E8*n>x] hz~x'gg}ɱӧٳäzI j(399_ Nh>ZCNge`D(Y~jjfs6گrldnn`~nw;;;zyezi7 "y05Ck?r^L8߰|fs6SSkSSټZf$`,'+FzF:Uļ*d5 0lD(Fg3|z/$I_.<ϵگl 8q^/$z)wvpٳ bn7M ;Q30D΋IXN?OOW /+'be30DX(89@\EVU.].= A|r˫Wt gO Q30ފ&a.LOWsޏAt N@j"EeR"f`쉚Q2Y #h$ׯ+j51vz?rReY"f`√%rlfj9_t}ۋ$#b&`_Q49IYxqtǯDQW>GF~Ͽ"'bdgK̻&&=#磡Emjfsg}͏.]Q{{Zs?%j@EјUx$ӏ>CQ4#IY`H0?O1o㉚NPQ4j\s'or s֮Y>E|sלFɋ#sQ3s`(~WΜ`EL?rUNZyVi5 h̤8InXH?`~lL0\D#(K Sssy,M 0C2U &x35h9~Y TYƃ`:fC 0q4rUxp9sk"jo!IDAT~<*r.,;IHDhy&?M7S$E(ӿ|r&ϋُ;M1Dh̤ gW`Q3|hO;x|59 LIv,'i ]\$jTrѧ+u:M59r]O3DG-?kpfD0Ds9s$/rh\Mu:9~U5h\G(*'"e`@DH)L1tvьarRG?nyl=70*DD)LGIRg&E U䧗dsujfP~Qo_~X̼+8>Kvs֦Y>`zԴ>]:􊰃CsIENDB`dep-0.3.2/docs/img/DigbyScene2Flat.svg000066400000000000000000005400431317166637100174370ustar00rootroot00000000000000BoyerScene2Flatdep-0.3.2/docs/img/DigbyScene2Shadows.png000066400000000000000000025351301317166637100201510ustar00rootroot00000000000000PNG  IHDR 5 iB pHYs.#.#x?v IDATx}lo(RHʲ%Q-[՛ۉ뵜ܺ{Ir7iva/ ]9\q@Q4(z﮽-kbnH,;ڒWo4fU1|,ɔ4gx 3<{f|꣏> li0`6 5JUBjfP30Y% *f`V 5JUBjfP30Y% *f`V 5JUBjfP30Y% *f`V 5JUBjfP30Y% *f`V 5JUBjfP30Y% *f`V 5JUBjfP30Y% *f`V 5JUF0E#ɦz޾">(ʛt\㢞ZBImWx+əik[nHy(=xx5Vy"Srq3}VW5ڏ45-ԻntZ{4PτpU8'W{tTBLLB@EyjF_o4-)Sۡ-IrQ$ LKQ{2ٞ)PrlWH柩!SZf犢u˞|<, TxL*-ɔ޾FP3QS;R )'a$ݦԠw sP3ԡ(O '&;x[2/BPc<PT:$fyؿ]}gjP3aEQdԥ#FcX9W=;`<p5@]iyߞ$&P7rhxgBp <V:vhZo^wG{{v f(oen-;o 50]\[6%i7fTƖ <' WT[qv}L9(W-oM%t#d@*a\ @]N$`$AFE'c M%clwXjP3@(L7%6;+ۜw jEQy̚W2rNYB3( 0odjL9 0L 3V :0jMEQ-x$9fPL0of&&Tڜ 5@Qv @d̕ҏiwyZ̢re\P3EQޚ+CHss)+w}hRK_cq=kG@)>+w0_ 5FQ;2`!fkW4!_Jx\ad)IGO F^C8{MdoE9I^30 5sU!I6 Ԧ˻&K'W%L *|ruz6Dk" KB! cj˻R*TΟ503@O' =5=5<h` 9P3PjZؔ{̂WړKҪ ԧ--7~&hhQB$ !fM ҹtYdUIŋ۲xq5.h̪U60 ilᓚ\=~32!g`NjjZQf2Yڹ, *!EK$+VtM\f5  0L=8<|u3AI[RW2pa<Lj(ʛ2ļD0/}<88яƂ aq[E`lr>cDjnIQ`~&Fٙ;f,*?si[p ۝[ZZ>vٵσFNؒ(soo.nP30-EQdyk~:ԑ֬͢RVwJOWWk??5$--Pe </'P[R峙lqޮfژCژRzVeJrWW^ڙ{:MX)~p444s&C6<< N;gttEI[[R 9o \H1SoݝK~ډx2mq!Ԉ L<owԘc˷8# \Q7%y.ژa /?v̰VCqΥ]688˹|y䊯aiqI晢(wdhcJZի%<.lJc_ԳJyKSNҥD|0c Ivhq_%`kcޚJ#6fjꮮt-e˲rٲ|(roQL(J0Gy 5;-)K 90 樢(Omc6fKG[[%|W%blkzt.5ڲٶmlXT;f#ܑJyd{&CgjP3Ԉ(b~.f15GOcА~MU+JT߹s쮥W5)>]N>yAfg܆|(/e,wx`k̢(od# 3ڲ`f:}&ܽ^/t83cؒ(T fƂϥd6f!ښRjn1fĹso:|-7?'nmL$ 8Hboo.;G(1o 3\iBC!d ͅ xo՛rcEQ>d{j2%LvfٙZ׮ͻ{s~6 5׌O5ѯ 9.LfHwseyGoov "Afnkf=]](3HK33Rۧ>|G35|6vgfM܊R)];ڵ5GNUU`v?|(IeZ篤Լ4/z޷7UZS6_~,j1նPyN8st~wr9s*=kqgi8HM~2ew!~xLOҞ$ 8@5-dftuk"|u |_i&۳~OO_}q_|?_+Ops555Bρ{sw_ܛc_q}yտȣ<+f`P###|y$I2:Q|xx(3rͥ^А xʥKY&…Mik[sz3]P%B0M܌֬k'9x{ޟYo͗x"k 6J%CVǎ1 `+E6n!`2880df >.]4Ǐ`q;& 5U$wwvkӵj?x֟jݻ7vhi0򸁁;v9{zڍ˷^[4ԫOjm9ьMMpi 376b_\:/mx?ț?Çͷѯ 8>{tΜ95qٙN?88P}b`?ϟ`>#E҄љcǎVe[MM=/0O=$Iߑ#y~!;Ip`j`+rOoE1B3cCp޷o~7iZiƶ= yλ:${90U]Ɋ]B Ǐha##Ikll̒%9wmo` /8y*|"HyʔWrfGv&o%y1޾F\& 4d~&V&2ue} 1ϐޟ-_O;9pp~n[7ӵ*_y (Ʌ s^>22 *mxxvڶ|yW3s46<<\7xq[.\8*K57-lsܔŋ?3SlL$ߙp~050gE#A'MdhkUeժ+W ×[kWLy<$۟vБܳ-ɶ(M= }Z *rOod6yBC!{VUU߇o~7?/ƴB~J@95ci;(\`̨j5 5'222sGY{׬N<}&ߟۻ``hOlg|0ɋ480fP3w\Q;R 1+ӪyF?|(CC^K?1#Օ?o1wۛO=K|yD9;&+: 0ݵ4,t9^ewM\Z.]ҥk^v䩜8qrh+?smf[ ֜$9th{Y}#wunc[6'Iۻ} sGwo'vQ_I%༽p' 5pETϚwBkKnÇ{uWmO?=Psw'pfqWJ;՘ UY}immI'oKkK }i$7s/ZG9ȷN5'P.\ʕo 9:#:G<9P70ffTQ{Rid~&'3yh$m{ڞwitt4G}ew-M%ZTʆeTZ߷y.hO E`*/9f(d=Z7mڐu;BǍZn^VRP+OCͻ,ji/Yґ_}Rs)˗bEI2g##L=>׮u04 yU޾e^/\ؘ%mm׽444uQ.\8;r4}Ght eU{-Umjq~{{O9IYߞ[^($/2ARL2wRic޼!m0|=OԜ)gΟVݱzd髯Nkwj ~З^vMۚ~3+_ֺCCC9th{Yj:/~!y㭷rZ5IMlQ&y!ɋڛBܒ(?J+6Ә;ݵ4mڐ-7d}}ixo`ppv-cȃ5?|ȁӴa0z?8_`scccZ[ҥikN*Gk劺6k)ģ-;;w|(/nn,,fm[Mdn>Sic޼1Z:gWKrĉi۹+_6i^>~9V?uy#Cy6K%KګjNwCI2::Z$lx`]޽ǓtnٖdX{$/0C*rGV'M7mHkk˜ )8rDV.[V7ՕzYghl+hph`5'N7Uy/lɒӾN=kO x=IO|Q_IEcFk*TZV溷쮥yhӆ0\Wl` g LZNH< = 5P8Yӟ*Vڹ3_[` oޓwhLdQ_Hb*] SZd{㏦ty^E--s~ݽsNݟ5^ՕNk݋}\ϕO5f x])7J[sRw[';3Vl;c4$BD+\r/}&mސ6o&uNޯ{:k㘖 T}DSÇڵ{FS}D=߯/u&%KsU֭5'`cӫPo^:yL^яojefI䅢(oOf)sǽYO|>mڐ֖y?3̤˖M{euתk^ּpa000X?h]mn.z[sБYk;O~3?Iȍ'y6ɳڛ>yF+gukcZ[JPCܙ~fNLjkkkOe`fyN`|ZV=Ӯ׼|-e榪;{N{E-+sQss!oui$ͥ,XИ˗Gn{[~~47k/)K~J37kx\t)˗ҥwexx(/^LU3J{3<% 0ief>|gtP> tCCÌץ~&ٙs̩{v,MG{g}nφdn?1?dɒ>}*_r?qT2C7~CG8uT/_ єN`j\23-llF]yuתmDK8|xZtu9̊ǎ0ѫN788P}.֤c%o%.ʷt݆|f9;EܹU ˾λr[sȇ4Vur@^я̩3_;<nllmYM~<ɢ(Tڛ @jsEQ~&0Q?:vf9wHZ y`_~j~W4qz&B/ƴ׽V4$WNiUڠ\k![QPN0 jyhh('N=˖u_f~y;2R)_ʗr^6GGGs}'\wړ<(J{vc_BuhDxycrW_SERss֭^=Ok=g}YzM ݛN{׮;zL + (OmT>zp<+\ٕ3_fZKmIrJi[=yL~sg^ٛ9ǔϪTʆeu翵{O9Z̅ xq۴ue[mEQ>3P_&Eyk*AgM>\+X8#\ߺ55';ۖdeY|_'kt8X +64<,8|8|3#xtp[xq[M59z`8s.ܑ#=9O=OleR)_'5V] u=I/KI^n,CE# tH*n۰>67*ps!V={5kY9pp~;;ty7~A3cؔ6rgudtmmCH F[r|pHIjcw<ЖuD?zCC9u5.dA۷0 ޾dVomͯz+ ݲ9O=W/{p|ZZZ\љ466fɒ,YҞ\x15(wNQ'޾0;fAQIIӨ]6<ݲ9O=W?05yrxٴd¦YiKKKZT{ \Jo³;wNQ_LfR孩2o3ӱ36>.*`ևן~~|yWJͥ+ڔ{PFj,4oE=5/S.=%-oڽ'?ƩS|EhѢ?.]of=I/Kw @ 5TYQK4jK4d^}p̔`?˙gm?mỎ=v(<< _om͏nٜǶlνkV[e …Yff0p@Ο?˗G|#]ےl+$TP3@E#VoC Y03wmfH!) iQe9e˶R%؉S9O6果Ziz涵zHzon䦽ݺ{͋6]q,Y%eRIS"!E$?Hɒ`XXF4( 8V#dٳ>/z, Q,ɲg%̻X mwcеn5" Q;ކc_͟ٸ_|1KlPYl7w M촯37)&'ppS>g`pCx|cplYa; M&t:՗yg0x~Xs&H@QHEJIJ( ExK=1n9KBDDDDD2 ˞b6$bYgV{ͭYhD]UUFϙ%=eQ`X^fw ҧ?1޻x~[k::՚:k%Dx\Fm-1=3]fW@sk3Q> Nd#8\j ѭ儧 uu |\*¤χEߊ_Ĭn sEl6l6#L"W1;Ve3ϐ~X"""""c.d\W=(i@Sk ֭ƲV2ꪪOf˦>}CCx/ĹYۍg؎g؎+~/axl ."̅'>DMkow,JhoiA{K.b2N 6/ vNz7 FT:o %]|~&jk|""*!KefO]-jŢ0s&t NEnR?NWQn[z33ÈǕF/'˞}p3ѝkY"""""[eO:b5Īukj8T7/$ED0 7lQ*XѡyNbŧ6l6,| =:44lAD,'~խY0q qeb >N1xZ ~~,lV{! klEQE( wxy ^wte!"""""CDDDDDD ˞͘ʼ(jjjKf$ $!J!"b&;v%˞Ø 7bI>oɲg7YkjmA׺XQb7I5N"""ʹOcy_ knf}jQm~P6zSN>c='peMOEX ۶< W8u $Iʕ+q=;D$f/r ŊiDQbQUAH77e}^, CDDDDDTd9/5$ IDAT{4"pVbպеn5.' Bw%HKQd6E *S5܄bhݚhOvoRm~J<83̝˗ae73O_jժB !I <5p8p8*FǠ( w,{Ew4Qb|yvVV[e+:Šo0Y,*ǙN>/|qO`J555 bhxC##ѝ̟|3Oٹ Y/󡦦_ff$I 0fgA e>uof#"""""˞&uejVmue%aQn]z5έBW QYTQt.ztk#A$ ^Z67c੫Ky+/l44ȸp?(9,Qr9Qrd2&*\7_L&o9(,[sbz}8a/BH^n̝˗uq*cF\i?bXVcR)S)l6l6#L" #{s\ 7\C, *$ɲg7=:Y0 F._NXlߦ?0|y)x)7p+'-l}䡼ŴkX2p+~]ìW>\cbDMiOvNd|$rg`M-0wԂYup阞,"֜Fχ8ۇt;J܍N w].ڵf=n"($S^G%(bw,{F0n~%!"""";d ̇hd5 jW7d!uy8G?ALQz|LQ Ʉu'Dْ\x\sa|N"eae>{'a\tcJw롬\7ѷ y<5ͱXhI& ˞ ^he!""""RP3=Y80וy7f.͊K־쎝hίXL!|~W$NDDD_,F0#~MPcŪZ0 : Gp1"|tcz\jUcga2jT*@7zlvlv(X,%͋j)+^O=c% """"bu]y;+-hm_Ɩi=NgRW,;=x/\\O{f*=Z0I%̉({uuupw`0bff+Kc6lvSE^:3;.Ƽb}NzϪ]N|;rJ< 8׊l6k"E$A$vo/;aCDDDDDTtdӄ;33̜gFUwI& z=OCA@US,(eŠחe;d=5t:^*b l6# ep`eXw*x d ]U@w-7-\p|p'O~ /͍ؽ eKz, $K@DDDDDb>̼.V#j=n-_ z.o~JL&!:؝X냁<"R@ss3Ο?_7Hh ?&55:/-MhokE[K M̫y2T>Xm1t  hhh@UUߏX,fgxu:ؽ vp3Hf.`Dę+M'=Lf ?{8;jmܰEPts*]%QffJuRF$INY7IA a^@0 BnkA;2CsH!/Dm`uTuØMAQ5P(I`0*ؽ7bIH,i,{6`;_ve$¢j}jZvj @TR.ǐJL&1;;H$,]P0SA@e z}~2LVn.'VutަF0*J,܍ͨxHxBW4_Q]]ÍuEB<n>͇X""""""Hs{tchlYNT;.ϔ Tr뷏,Ixm 7ӂ$n;Z3dNꙙ(B*S$M``:._$L!Buk^zSW۹ڭ9_\OŴW٭V1޷"0,.TG%(b ;d4{V0\]֠fA񍂡 _pXL>qggwBnД$ow!MI_cRPV[n .lNCj,â(p,@5 F# 3vѢ|&oH)$PqU !{U`6a6L& +p*w7zGΒ욈 ah]KQrlG>.;oͷv$YOu:~k49ymmE{K Q[(|_y:1]wSSQ`ȸ[U躯cnh J<ImޡA"4{oZ]CpU:mCɿ*sHRpDt!JAQD"aL0 [=#"KBDDDDD='d PdٳF~XlV._es{\ti^LQl>?rgT˷&f  /Ϣ8R~_ɾW BC y]o~>TV:Y#0̉+뻺2|+@RmmA39~ hK:W1=zN˪AQ(/~2Nw{s"G4E,ear -|y/0<Ѷ|Zۗu& :+ b1 ~6ůN'؜fw=~`͝+I\W_S_넡f"RCC|7l؀yG'h#F~lˉ=Uu5) ~ˈ "20Yt:DB N+W+Lf6=.sl2N 9;sӿ%gg09~醟yyzߓXpaQWU sjyx9Q^[@"""""9vf/͊Uhm_ c3M\!yp0޿r`#y/\^~KO2\hVG$jK_}QUUuߝ*_G9 uW+qerU(F(w(fQu»dMխ9^K9&I8+l2z?_˷|gyN/N ; C$ȍ6$I$IH&T*¨(  ҌhlY,&v7O2ܵj!\_}|A|CZ ݸId@p=# 6dD6h+Ԭ~udסf(H^=͎+u]u@0{!Z0n+`8%T]'4_%"yjGzN T XpIF] 7Q^e"""""R,{v˲g `9:+_#OlLLf3WP\M˖^מ݉>U.炖~R׫UpXnrQIkk[r˟_)PNT$WݚՐFχ1JV/\srvH䶏m]܌˗왙iBAn9Wb $(nof@DDDDDK@DDDDDja96=;e)XlVd6q%/Ogw”g>/s#W\(tş6m`|"Rʕ+oo;v| .WDC.:ۇs BH& %s83Ow A$ .W5jkݰX<VDDDDD<{#""""1\Ka d1 "qZ|[>y'o[^t:]Ѯ d׋ ({VIċۈrEdR8i:z,' ^p`.{YE1/\kEA0w3F/'-d–-1ly#ʁb֬(q#)gxW۶y֜L&3~ζ-V9(D"΍Vt:l6;ܨtAxީ"(#ܔnK=jPj.I='N!Ck:gd^k8?~7nNCwk '**BC_{e^jU'6uo\[4ΝGpnNz?'sT,+"0RTc^K੫Sud>JGi=mjs|{S00H$FŢ,:Ȓѭ0LDDDDD7aJXZ !rLQW~Sw|\˩jʰC$2nHjjc+b;,.:w ;ZUރM7~?ɓ'U`v `E2ɼ-u/ŊP(xG> 蝝M.yzzjsDªvצ\O6HXT pnwKBDDDDDca9j=n,ũw{J,&Z='OW8Y`ㆵEլHDE>DD%s~F9;s"'f46x(|G 1Eį],Fw4f_IݚGԨSP޻5"?30`XyMn7@DEIcŨs/Ʈ99iM֖[ǯ  l( Btw1C`ZnJ? ?|\ʕ+󡦦nkhH33,Lp3]/Y4ɲE'@ꌂ˗bWM[S_YءP6nX S7G?'N!SilIk^^#f ]衻ҎuW4;dR].Dѯb3ebBp(A`NV|Z|V,_v[4'9"""""*SLDDDDTd`/]: 691Eo«oZr\yy}ab`(+~_c5l0sy| ܅SM8Wsz^[dȍ25LDT=pVX\>m`;:̒-Y80f~PfE׺5hm_Z_dwCxS.7_ %+U~,!!勸<>D"՘v{%J8N8ׂ =+sz׍p(@s9#xkfPwE"R}@RmmQU-':w#<R)TWp-N G%"0"0R ˲%{n&""""*s,͇ggEUq-LAj.n&""""*] 5(Y@#Kѵ~ ,6+1(ElC_{v'߃Ŝ/{ㆵ)!(dc jT;UO wl/A_"G@%hll)N΢ :)Wz>ՂP^oͦR?a16]nzN 6E9&IC!m-SWEո|e+WvfjNRp8xRv5ܜH nΎ0LDDDDTm Qa97:־ r IDATa[G`4d.=3oI02,[ x/cQü!ȵp1dȹƍmX8S [j3g=@=/B ^&5ўlޤ<}K][rsܼ}%!""""*TDȲg3ݬz,6+Z/EGWj]ߕɒ(IX4jyg>R}>r'o+U z}Itl2U0<2o﹒{mc#ƍ+VcɒLi{L&q wνhǽ `!n.yUYtH?=0vT\1J! Y(ZT* ׻1=3 SSٟ|>BrHYu ˞2LDDDDT)QefY&hVfŦǶ`WkTD\%v"I·|`R1xgwbㆵy}-ikhOcx韾|%h1+o8ˍbwp?ǯLpCa2Uc9?@2, f8v\RfgpsM&"""""%˞&ufjY]Uhm_bI۰u+>q\N|ٝX5﯁sWR<_+v{%6oz K!A2=8$wO P]ٱR$/$f#2t : [_W67~xP$,{cs![g"""""#}`YU7֯AȐhbbPrkOS9y*>Ķwg` 1FP]YYvl/p`ЏCD[kld:2w?DlzǸyТj\r :slDXR}*5!֮_y$g1qe ]7BXDHRY51C Կk?T[z ^;ұCHD]v͇xH)QenugfY%&n _fKة-[ҊeK &v&S3 l.gRIu}DWpxdbλ3p+Q[[Qp8a߾v0G 6G<>V.W'O>K:f}hWL&(e A:UnIYQb0Llg?1z*0t܀Գ dٳ>f""""" e0fnd5Ե.Ubdؔ_s,y='c7ʋ؂ָ!҂/!W022|y{.ou Khc_l6d*ilՋXu\HfNJZbfF1;HGTOfF/72R)\xi"sv#˞=^, 61LDDDDA `/niҠgؔrN0X" 8}߂K:M-Y禮 hjl0>>cXN8=7=k6T[S_vZ,Nr}M6ńFB O'ah\!lv'zu_Q9&IC!m6MjwߺV®/?TY(Po]NlўdA2g,{]"""""aHCdӄY F5 F ʹ Fsڟ%DT ԸnF,ik/x@ƍ7:{#CY9_^nd e_d2 #E&5h΅Y B2tkNLO=ؼ~Z,pwc`pG?AEtj 6[7a}W g9 `;z%!""""~DDDDDq`3sbjbF#C͔{` 6ݚeE粤kl[K:tI cddg{UR um_;[5+vQ5կAe!I@wu}fa2 .Y|sKBDDDDTgQȲg7T"P4Ůg^OE +V?ƷvFՂF  O$"\gbdQ&z/P MN bҥsLQD}csZU?w֖*KI29}jށu]nLi{,{DDDDDP3Qɲg,{Nx@#+R~.^,J:O+i0+X*&I*סF{xFScKIk[}}(ol8vjQ8Psi=9_ ԴBDL]q3A ^ ./حVmV8U7??`24iB|o-F#p>sA]wE57'v5#scXU<DۗyצBǽ[pj 馟Wo?pH$Rv2 7gk;+ADDDDD(d90wBRQXP+X9;kë = -4ٛ [[Seʼn>$Y=`,{zX"""""u1LDDDD"Y\Pfe4D$<[7MԔk#Gɭ^#C ߍ s,]A?^tjXf#u{hjlA|#*qȋlngf6 "%ƯL`Ik W!lvDQHLO=ؼ~W(ݖ ͪi4PLdhT* .W57`RY+Y=Ē@=Yh5t2P'%Nz /WܹA<`_|q95hH?}Χ7vܯXu"/溛p8"ͮX'z qC*¤ϗXX^@cjYRp%ϻ߅Z4xS=dreBeI={ jP0 rC4 7+'ʽ#g\7%q8>(a;н=_k,e}n'93ߩf ċl6C;tXNGL&s2vUm!w%4.Ru@T* L46p^=d`9 -,{>'˞accuzA#`rmWUwh\EEPĎs}='fx?(oǰ?/h uPmE̹ Qn٭yhd.dW&'s2whH8'c' Ch]܌֫6lPoZr| 7g9òR- CDDDDDeJY3b=,BO&=Ġg`V+[=*[eO?=f<>E;W^Pg`M<ɧp<4ϲ3* A!Iu*>~ON(q(u2w19~ f/#Pyk$ND?0ܼPv%˞aYlf92Ob$,{^psey)˞Cib9O ˞b52g$Tp{L|(B/zDB_:R?oh^2zΒvtoz,osϰSU^4݌;W53zN"#s%͈+ Hp9Ob6ޱ{EdH$gu9SHd=˗aewffPp)c7o$~yYe """"3@=e3 y:2`$=8ŢNv|a7ʌkvh,k?;'?x>:b ޡ⮼#c,Q ٭DoBa*R)ܞD"8{j˗no(bۖT? BEQǗs0<2uh4h4̃55_(ବ(,0?W}&"Ef#bv6οiMf@ËfI%PUSap0p<:}Uk"@$V5Nt'tcqWI@i=nO?  !RNDwplY=zG, ;Qٛ^ݬFf*ST[h` hd5(7WU,j›tixs?QQ޴C}p+ q*[A@m$ IA@"PeCG FcPqHy8g8 &/5ҁm[/xS9R)~\܈)vpCOu%/av5p,{x?gI1LDDDDeK=ufjdni۽ 7xXѬ窞b OnkD4PB&|__vi.Dx\^U 8|ul} ͯ#Qyc8pp9k ڟ~n0y~rH**H(lvLL\QeK14.2GEQ( $~nB9f4w}+|p:#.͂ bcZ2 ^;G ^q#7tEщxoz\M Bk]'r@~,KBx\oɌX,xIYQG"Z,9l2g`igm㟜xܧ? Pm~ HSZ7 7g Y|^w4Q9'zDDDDTVdٳsݙ;Y kPԂg^fQDD00@O3 a>LiXxݚ \fԁ7]|O_AZM$CY4Pz@kW^߮A7ZqDQo 6Blv RTc"yt7I] !!ʥ-Bt%C0,l,GN^{3rύOμI2NϜq& k͢cKH`BBRojԋDCHJt9''~WOow}yy:.De]p>32 @1 z]!s Bxܰx~N"S=Zs&pث{lUήY""""lj&"""(r>F7jbْiG5/ ȑsڻ~~wwÁ9^\,Ťk >{R}I’?:45;)7ކľj:"XvNU<v;o׷kxMђdFMґj}톖 { IDATDOoc[o@L/Sr24KLLDZZ:<[(ސ922ۃ -*up~ܦfWǼ58~⤰Owf&veDYx~E tB67cEx(KBDDDDFǦf""""2ƞOIФ(mnf'8ȰE^ uyz)f3{5))b|͉tI=I8/|_ljm7/0y`{w7SOqeϰ#f۩)uy^I$ɌӟF@[,WWڡ6O˾#r|P(&1`t3XTV*Ь։mx4s kѦ%V\DYQss(&9-Zp4NMyJ!lV?+)CRnQ=ƇE~^Ѵ4pkQQ^C՝Ly~O ]9s`g p# G0\{y7gv3qE͆KB؃gP:X<.99?{Lif @vvNB!AqP_ 5k`GPc2{E~s].MDDDDdWS)^57Kx43_342Nrrw%1ɖ~"p9\(Is&e)cݻn#;Khtװ޳A/';Vn2;0,[$78稺؆`0c=zG~Rgyxg2I0|?y#Sϗ>^/"ZMЃ./'q\񆇃xܰXx?ŖL tBcaDŽAm/uvvrQcS34Emmfj7o/)}u {̬,$5Ǻ">9]oڅ~mI_A\QQ֔fՎ[fci kحzCP2ttLSZs55h厂 }- z߱&{ٳXkV]XSE4//>OӅԔv"%mM\~_'FJJ*0Şl+&Μ=w>؉ {X (Mm>ʒQW""""Y"?%~iK*jbْwJZ wQ{ۻwEEYt]N<V&4-ͰZSWdU+vo{g6$I'O-Uqc'Kğ&--^ BPcAhlĽV %=-*Cވ[v 8),6DZZ:2Ŵb颅a VEz """Xo(f(lh3VC޽]mʞŝ "]t73u0EdT4-' s_R"s|M~^*+55K;~*O)TѦ&4 666>w|l4 VJTI`V;!8}s!Ϟ-tP fΌ{^}nO~xܐ$sT"fT/_=|*4hoFQ:ʒQ,V"""" W|}_ƒ l 6miN9<!1ҬL"һG\>G Uee\1;2 sYKKfIBNvtS#|ͽlfM){dgFjnzfS 5jR{zsEM!z}y&?%%e׏565C,!pPyӃ98EzZRdN0 y#VkylԬְ t ++ ,IYK-Ώ>ơ&e|4)#vvvX""""365)|'FW̛%l~!(wȺϐ/K9OՉ,̜y/Epe/b׊/\5L\E"em݄bG̹ve|/ت(s]`9HLDDDD( s9x!/)͜55fsMMo9=VhIͲt~Ϸ tWCckҨ-)+)CRa7c{۱eڀ9-77NF2In0jc}wڜ%mE ϣfm5'EE* """"`w邢a4y#q{l ~u;]a1GPٹ3I2g--EٌgtC~?޽+b5̦]˲#6vOOwĶvJ jJ5Jʦۍ7|MW99sToƃRd!N+bc'%%.sEdN ###B "xɘ% r9#bM,IY{i,Y_="( """_hZ)|Gtļ_]<͘Y2 x={=776nG睪2,.-t_44-2MZܙ:e벖<0jrh=pRڸ*S jlLL6EĤD!'Vq'vu]A[{GDz_΁ֻ||//l+WF񸹐( 䉉ܞiv}1sAovE`)h:[Y"""""E~@F h3339~۠!̼O { { ²g--1G2ywNP`%7\kK27y-i M+8vȴW-ٽ< #55&Ix{D (> b]_ fI܉N^ ?2'` Ca{E*rt`S3EմMIxn'?⸬-N "1/9E}2lUi N5L#74pGƐHkOAUۙLlC2d|3M)[ KK5ۻ>e )zzտhH t4}[Ꟛch؍maM^.Ck "L齤}-!%%UxM- zsdd+tB ʕxRRbwH@Cl9(NHh|yamkh智G!ioJQp9QéVSoxٹظnʷ?vxج%Ur` +fb.+`{<!R7>$4]D Bd$_BO0 {E~UQdADDDDƦf""""(ETy/W0@Z,[*9OiF2rY3g oϑ0W|UMͩf3{D=r~.AoU$C45D"yJl\_ijk=\pD{ 33Ei%$ --]xmxQK!W_@cqєkmI$ڞ~i]`@ѹGToɔ*+)76~k8᱉vNUDDR lϹ,BX1#Qxyzy˗ Mqs!S+.,/ʅj!w0M)9&=G>CөzVT3ig--hikNq8'5K99 [rsnlvۿ+jsTUKi|IlȌ3X[gWx8ycDiK=t<7\Q#^ /vxolF6јLltHHOn6V #2BP׻f̙#p h yll{xbבa 7ZIQX """"*QX31@0LX|)}1)YitU'482Bk2WiK^N55AWj\4@Ei$ea%Ev~ zz#6O-.7O ܞ|NN‰cX}Ett]5$t<Ǎ 3ÈӅM9E(_0/^o,I$tLǍ.f.!A\{Ӆt {Ou]|٧v̒E<6DDDDsK@DDDDj(|GtIU}y!}1T-tT? L]a!#>@eIw~f""""RфƤ3jjףkY-S{S%PuppqQT]r:ݭz{- ˷sߊ 'Mr `f~UۚLn$36êLymGOo734IJy64bzrAҚ.FFFbfIB}&cz|./pDDDDt̯ bA#Z-lV1b6V`.dҞtBC}+VsUF6c55hhC ~MRR59ٹR%J հCOmϛLՕ+#,BY,VacA=p0"0FZYP{1=7\35M136l{xbבE0DDDDt ~GDDDDcә2LX|)}1)бRS Y!(zڻUoY sВe;xTV)XKi+';_ ;;Wm{{w2GdAVJJ~ GҧY\$!%E 'NHrk0Ġk/ p8)lZ9.LDDDDױ(1Gr҈an/=l8̚" M ?E.~Al<xJVy6"YLd$&2j"/'l2;绦NۖFLC) ?<.=gL߉/.n1_SnlvQ4̘!sWpx% CBB,Q[fC+WXҥstdUjl=s7dƉmsr*QZT ;fٍ^uۺ\M2C]̨{x+x5Ot8tKVgUm3h"w yBF3RfC_%!cA=p-3p(~f4Dk7wM r9atRo k7z23>ThRG]/DDDDMDDDDq̓Z,XvJviiHOǰg1g$ \vzK$AYQJ0)-UYZRԜWdc$';[¯~ۿ IbR,dBk@ŋg:A/2l6C$% Uؘ^ f3ߌalj?Lm&"""# ,]Mg> 64 7jC3Xҍ<4 { [qS4LD4ͯS~?Nmۻw_ڿڻ Կp[uj7lpNv.g;~. Zsr`'$@So =ýϳ0LGBt8B\q 9)9166\.9{;$Tث(s,ȠE)*=X!bUL6!!iim a!H)9E X45knmmVmSZR%sK5f]ƯaJMz/Ed3fJBB,<^/Y>_ht*_0 t:`2冝K%rFԬ]ƯkΒ?Uw*tqX-?R 5립91)Qhhj.(.%CstJPsAݎ">ŋY73ԧ5 h*F ٹM*Ƽ^;o#BO6߶j٬v|Dc$$ @cIIHKK6^wҚv&P(>.h1cgΞC1q?9Ȱٸ0LDDDd8lj&"""2E_dK쓏!Ou1'̔f"f3qcG(7ꛚE$jhŔf߇cǏ7_?h="~&kZvBDsvjjrRҴ\TReLO6_OdvttM\' IZxWCJLLǙbΎa @ ā4VZsqaV/KA.jP|i׷f|٧Q\Ej,QJd b˩Jd2aC:16%K2ϖsujdMͤf3PUVv5e~Oɜ )ftYv̲,5O%}f~]mh?q-nt[18V}{Gh6Vm2I L`t n@i-t>&5&5[uO,4N%ݱ6yӃBp l$nOrf L19X 㾻Pc={?Vn`+\DDDDMDDDD1j:KMgeaݚUSd]3--BDRd%'æotstXSkWMGRL܌{C{w7uw7; ONPm)75Naz ơ 8T[fbIՊqMsu8Nd$P0f)’ -d[T\\Xacz00$.lA23T}9M) ,I(_0Tpiq`DkP`>`'.\r\Km~sLm&""" lj&""""0μոKrRbIGBBG?FTEE(-aps3Zζps3N!FR_m9yO6{6Lin.CAtiOe+O)D[!Iz%j|;==ɞhaC]̘1#?z #nii|2\s7KyykB6ZZ3Ԭ]c'N mt8ΉTAh3E CnOQ{ wŅOcG =a!Fmjj^""""}cS3)FywX_6%&曖ʝ¤f"X ]V ذvs,{9yuRrGGmm髑ġ 8ziMe6$dBEvv.敔MéfB>E?`$!!6}B { 6[ \9,.84tijL^r26̹vU=؄^nVv ,ZzT="9 """"bS3N]Mg~)4Ff_7IHKS31d:Q,w~n.b";;WuG3ŴfƟjmơ <ZE~^s73kzEu$M MD"Ell2^[G;P'lFLkgC} H qPc/jp}~?~x4*nöǿM;E^ `kggQ""""aS3]RuM cjLiƖa (M( =5БysKU75jmƽShjnא<$p8v3=~nwM& yEWR"4qݿKbCs QY1$tßYj#  osg$h5z2?qRhdBbb4ͷ#nG˥<b|ο\ M"% """"}` EQW'dZbjVKz\엓gC2OL_DlԹ ,iVvjjPq1XSo~װ;* VKVm~_᭨(|LcSvEy. ь cdʺ34qߩx^QN!k!%qфB! sQ0IgMҀ|yѸ_sǣ˅MYa$<ǐa{9^Ty\DDDD:>% """Eh:s143)&;My@fϜ"LOu5;V]ucGW>\*ΎPt2[v+)CEyeDS4[v{>b܂ҹ2QӚ36n¯WacaX?~z K-*$Iu'nT\XcUή׹2t@QJcf7|Wc LDw |\T0t>ðmi |]U;~VӔ2X2{}h=݂>CG٨d0 %sK1$!ZSV,J+aS3͆Kp~lNᚚ||,Y&z|'nB6K߅Q5֙s8s #T0KjAłx烝p'^KaEADDD4}LDDD4EFH%[ 55~=bS>B޵ o54nGUYJ 0+#܉{i+PRR Vc:ڌ-8ڌ@ :ٹXZ%sK!IK~fIBEy%n#)) @ .{BBBW*Ȭ+ )),߀-XTV*d<5@58sq8ΉsEמO>UhIYhf8Ħf gΏ>Tk]Q:;reM65MgR)9f暖yq(Qݜ~|0|N|p˿Hs?bC{wN$rq\B3RlV;BՉ7`I 99S;qi:M& wV,ƒREװ[SJ󼒲5\;Ղ@ Sͻdxq9*0M46;~?oė`IӈlԴf$v~6+#p:ŅC69{gε||ɓ36MPv 26CYgkd"4Gأ(Of"""cS3Q]Mg~VC;;?վ {E\: 8'3gf7tL<ߏg>YK >kiJ4n5^~f`4-CyvNDʹ۰ob'bG{uoZQ䭝]G,@DDD=(ES3+6R\`3.Pi033E7H{f3u5Gs*ԬCػ_i.WmFOo7;4%`2IWR%U+;a{5H&"Ţ(1te'T yum(5QӚc'Nacz 4GȰTostB(_0?˰ ѫDDDDAlj&""" E8˔ԜwI}aϔfUFGt6|`w 9677*s qA$jxxVV܃!?O_9nG? 4 2<<̂mlX1C\}Ss .^2ֵfZhFw v^ ZSk֮ܢH\ IDATv gΞ,Ixb,IZ++6 """`S3Q(lS~/^ jaJ^ ȣ$#k&@dKs#񥚧31 r1#n<5wtũ扏[[^2_݂mVeGw5n:XD%%%t[!;3ľp~acC׾v\5y݆%}zM_G4glSX0_SCOpV`>S-Mm+H<65 (j3od5GDzYcjIy>KϖsyĀ`e?w^rrYv{Ԓە+W]{scȔҚ7{3jmq=/᭘WRuqpv]T6j"ry<,$Daݎ$!%EI>o9߸fIB}&[.}ל|ߒE UoI 8]܁x4)W,8Wڃ/޽kW?}Sd?f)&)flABlX$Ҭ,nk'>JplíoKPQ^'ml{XRBcxosj=\D}5} DL'X*.`c<^!c9]n,.,@jc|>x\1f*)K54%z2Mjl䎊8OkEE*Rf""""EWy/Yt#!%e?)K\&55i(>[z"F$z:MRp-Wk+l\_l}xpͷ5$l\_mx0I#(N<&cKHHU#>ܷO8>iPv :0ccI4Sɴ45wT9{E QE`)—Un|M a=+K?--`7h2$io |Рv P0'.tk{~ڻ&nG~nx纻îQ4RkKV#U?ՎU75Dggj'&"+)CҘkmh{ucqbM RSS14E@К؃,*+ {,sNGBXw(@V,)mddĐ|MT߷&aM4++S/uvvX"""aS3)l*-h:،%ŷАC޲ԜbFbb|>u?Þa7|.ɂ(f3t]~][l{|wVjl}CնEEa?>t%_\: IҸv=/oRxvf@Ey~7bj#?%sK1,6߇} qpÔXNd(?%qz{!ð3qR+saJNkki ޏA݆[1xٌܰ=ѕ+ljɧE4_S\X C7eՊ"o:rii( Fә ¾ibL#efD4eՕt] sjiS"X_cJ 6aI ͷvxT@`ՎJl\_?q}]64w~JX 啷$dApzz.ܯ\SMl%DN& ýx _||czɝFwsrǞOY7W/Kgεc\ M"?RMs>K@DDD/^a%&OgS@Ssά,#--5.3aaf|E ՕpݻT惆Ζ6V~sbrޫV܃Spnw>l\_I2c'h=ݢi\جvd";;99s`=ćvhͮ5xGt5Lgxl dA1#ast;8dX0<,l@ŋgk˗022b+{n_NUɔ{K3-MM'hMiҀ//ΏǡFԬ]ÝIȫlbW=Jlj&"""RIQdld5FәPۧ bZt]T4ǎ 8H羺np⬺>QUӁ!?"~%#1 r`/De|3 NdF[_k?_t xظ9ٹ{x+\n'Z[fˀjrNvnԓvb]8v<-Z D`t.lfXFFz{{Ѓ4sj~ra̙YD1Cŭ3SIi^,"||jlRϛLgޣ:|GX֖,bͶ 1  p!7L IJmBW}י55kfL;3i0'5imI NB0c[ȖeYw6.-ggomI<GQ\.w+昺 """Jl0<r>Τ̀J*5[5;>p|F'I'~BGnҏMJsCʧCcނ:h: "jkOsfǺ{kP 2<>ſ_/h&*bC,ݿחlG3ngrҏXe-۶ m3 jNfR=6> <VGE3v1LDDDt3_4Ŝu%0%#W_ Z\Ɓ@qN˪زfMҏ#j=Il"MhfH6ov79>y"j|tfK&ʣo*ܪ(rhv 5BQdȭȌPUŕhؗqKXp)=7;z\w_ZN`YbÃ?^{x?am?x#iW& >mr3Mf mx[mhZ3޵SxUޱ1nPS+_#YΜA| ढ+fl. """J=2p\vlj5i;2n)d!*`"&7\CBIZsoMqg.$lsmfmIV4Q|Ffu](p=wc&&ڷZxs_ɨb6Q*&jONFFnOg>7D;6ٵCǽy*͗9}`YǓqv&ȴs]0]c拤a%P ̸ 5/i4_%R ZPvm]sGҏMC).\$l?}BCJ$/_7q쭟_2cp_ܺxs_AMu&y5/k nw@3h{G"1iKy6I!(*^a>V. """(rdoθ 4[,?Ɓ`uVj.p PHC[h*C9݁6=}ɇ}]cvK~x'&x?1kj/kw6B1$. S;csUK$]Y ET8.&D#x-tjmWhU>@DDDP3@Q3 +o+5[5jZ¢Rqlٯc;>;ܟjv9c)?G}~+l[/~<}ea&\]]J=]b`}u]ߺxHjf':-U l.G0@8,f"MWo/d36&|>جMr'|ϾIxp8*9sDJ\Uid%x%C!t^FFX1{A! !E8r9"Hj&"""Sy12:q* 5K`04}|WmhZ%l]sGҡw;:]]Incme҅rzbT^"41~竮jGMu-$ɈjΗ5 bpp}bb"չV;)5Hf'\A<,i1fh} w> C`VYv:Ѳm+yTX`~$fm$L/‘_*JLZg2ԬR˗zqܞ^ErOr4V1LDDD(*LWg^Jja\V;2:Ac v;Ʌs4._~N!`,R = qD<nBuu-'0`?q|M[]] =,Վ-w݋+pP0Q^sdNUk' aB@.KaXMiӸۘ5jmwB7:{M@()OݹӓRuͫsZTB͝<*f)7jZE>rs4ixWdURc|2/}f"S _QI11ok[ &ݟM:wrM$Αߜx?J%+.I}zypUߚ/çQn8(aEm%DDD5 5(lS0CbhX@jrJ%0b.Ygoe˓~lG׍C=IPsQ e K|zhaٱ7-0s@? B3 "NCE@ǎe1)v!h4"7`h$pQ"`35P:W:ؽao^ًͫ8RHSDDD3_b euuf܆ͪP'Uj^JͅFDO*.`PۗJ~L`S5W&RyYuy(A$P l  ;.^?lcXN12$*y=8^ZּbJ&Վמ[ݝmjlHjT.]y{3vxYkݼ}qDDD 5&(+ܶL^ODzEVe_2f#ԬIh@Wq]^(,G2K&lM?}L%D}3j%B-QMt]2|j'?oOCC='liA<;Dnw@mG좵jk{ *lbz~"<^I?ܞ*͗4-lL 5gnU:ؽa^Ls;R6<"""*v 5QSy??d2qGwB2r"ZUXD_CQDrf!JB"!>$߄?h5Ud38/v?WZ-wR^LWm^ő@DDDŬ]@DDDJQCՙW(6lee<bJFMDٷvr/~c3 5W(x] e~OВfvKw݋O' E׏յh_+֠2 yl.G0@8,}N,[L>͚:Ӊm[qͣ'a45HHgw&ƆWirs$Q17~DDDTE~ah:g݉ME^+U׷VK9O2QS@FCm-L@U^_|l*B?6oSB`h&rZ+Wk0>Źsqo18_f0Hh_n]E,ؘw@+)O.7Y}_}@fcpp@X{۰{ݧE"B0J l9>0::Zt\XN|LբΜM걝 50Ci)@{G4=!E8r90LDDDEGQt,|GE޶AD`0@<h}% %(-Zw;:z鮮ˡ-bGvu`RYXv݄֭P(s;ۅ.LLxUOյ|鿉ٙחb׎;ooNqkj4wY<Lbi^(JrR\QU08nzʟpK}=~_bhdTK*E\ DDDT,m E4?hkL7QŷJ}?Bx Eoo10Ї~ám 55uY 2kZ,1HH4Z^h Ҕ$SSScB;q/ܜs&5;6ނW^}MX``F#k2 ߟnܠO%` yb*܌>~cZ•ZgͯsDQ1`2[cz-Mu7}XƯSPRnJ ŢQv ??',*= Qf4'J ubCͩxwÍsUUqB۱föbU3C 11B>//6}u&jkq|;Ң TpcCB G"x1|z}i=_՚7Ʃ3gqYamz0jy]@I?fժۇ:g gL˦ukj206>n/\UDDDTj&""(lXݏT2ڬuzBN|O՟;'tHzrpQU"""*X"En&O>[Ufp]̼*5x]! G?JDNkmo*՚stJUSi[+;A%";5&{vdnj 6oC8.v*^(Ixrg^ALMMq!*uUGƤy>Mj ._[ځ'wFkFV89n&"""*H 5QARy6kn[| WPݶA!jur|W\WّDSũ~ IDAT[ܑc߾knw,6j[fH$"<@DW)))"2zjZԴ[6)͉ /b<ޤy¢nΜePY}}K^鬀qdcbH S +'KtX$ KzեO9HU'݃CèWkv_bQQQAqmR~ޥjF NF3Jځg_60I\}-&_fCƬnOǃQt^d}_(֍д/k&IEr'9:0LDDDAQUX>-xL׎e܆jQ>x" *D/7%<Լt@T0qU*@ 99H¡D*20؇:vFMh9_H$9C׫b;*;x0(1\ ~ܞ@e)?wdd-۶țGM@()s~^Dp|E nSyA08Z/  f%<\FdӉ)#xV Er!"""7"""R=EtY1 шW6 lSQYlfJ"*~LD3,P[J^qaYߟqUO X!X \M684,:~nɳŊ@` AMmc&JKSz6fC-g΢#rv";j9|ӛ<] +_P`} 0HL,osOQHDDD|. """5R٦(r+4h~Or ۰RhIyԜ7R5'$If5" ӪEǂ Idn;{ 1\\@ӌF# '9 LuTLN4{d-۶ m(ZnZH]ɇ:{.д4sm˥pvB5GVhY%Huj&"""ՙYf-|Gןw<@KAn+TjfqY 3G U lY#&؜@鮮hUԃǂ(9z});x]%0!7ZJy֍ rG)Ti.66d `HۗĐmwGͦChRTf"""RE8/T4y ?rXmԫh沛.SE(6$V.X oPؾ.!]9ԒP8N Ug'PN1ND())"IߏﵧI?!mK޵FI^0D0{kui4l$<3E*M}F|Oa%Z"*l!"""`:TAQdȇFl7>&Sa=GF2xbUQfYk DtC 6b̫,]PsJ8"sHǁ(C:d'SX7DX{'Nw7Oy^WkvmhٶUh^(x46UXQ`}:B689*Q[&""";Eث_Poɗiú؟:3næP\Ɠې;TK>X,k32nVHB0[F2n#* MDuiV l|G QQ!n,#qX Cּu456k/Hf|l[6܉} _{WaE7QJ81*Q^ (EuV-'mgYT42:q dUP2_k*5r;% XWM_:]0 h4 i8Dj&"0;@uUjmBwD ܞtbQC}JXSc{N<ⷅ  N/&u8vTplhZȎQuԠ퓝N~_Z9,ErqQ0ADDDy(d4bcqyЪJw#% vB1+MtX iӸ攞j֍pYtvi/盀fG^1*|mpYv:a$V]Vqug]EX_{)ʿ3C@\Vx"""%(ffw"\?G\t0yt^˸ DEsJpE._6m~뤟sߦMIRCfݼU8056c8  0 jyR`6#  iniGÑsXy];V)DYY+N'|~~쭜^&I\anfc3jnvSxGq-QEr'""\arFQ0hjmMF#<Knm*lJs(K@ 6r-;TDw_?\cY*{V] f^̨C8UX';ƅCavQl6;Ul=ކOo/ZteVg!ͱ1TWh~/[kt I%FljlD`\/a,TE].8GeCDDD"ojqo[| >$L*L{\۶$l2l\*5SDxP=BޛX[ # f\?tWx8C""ʦ=jחl.?)=g;lq&~͚>[7n3g#h4fsǹtLDDD5(+E~ahpq2>~Hp|1w3gu iǦPUg3ȼJs45r[ܑuUvKU5.^DT%!|D"(--Ň?P3ShFD8s7Av:~Θwe&'l9>π  (Gų VF|ॗ=Z8|6:r sDDD$G`޻7c4d2"4/U/Fqt*f[nDDf'ijҪ<>g퍍-Q܂&$'вmVvy/VEx􉈈H$HEm"Mb}5HX;QUu:LFyY($ vM_jΊhU>t_WPjCuSfW$IFD/_JFy04Zãch?ݑs&|>$\.;BÃx >9Q`Am2+B-Ɓ=+LDDD$CDDD$LVL֔2?YTWU^ox\3p\gmTj6J^$ B lN"KVW ݼTUyH>^EYH,+k{IJcq[7n@&=+!SvGe^ia#gؠ8(>4"""f"""ʘ[lMkz] Mw "*u/o<7!Rs1H$,*jGs[!PV~0LcQ4(CjXii6D9QQQ!p$m)=gcQga% LLx9Pu]n0JBhEy;4+QFj&""(|QL =]b (75GQQ=Vj0&ʖXPH];tJPմU$$l{<K+lQaM؉FYcll@T\i$GK``89n' }y aU \CVkjv7|qR^EO*l#""t1LDDDiq~?8ꕛJ:csD_ƪnJDky >g5bj(+C>7ΝC (c0E*0; ^"0ԬcJɳZF[)=> ! @صEh`plL-6,6pY9M2/ڴ3hjl¡] ढȫ8ʉ( 5QE)|^]cT@t_ oL#Vi&ljG[ |J{uJW paB9Z_xkbqrى 6 iUII ,q ~= Z3% -۶ k/P~/l ܜ״;:u`زN-z"H'""TY"""JLϴ =]. osdd46y 0|3s4HU>NT~ZOm4֩rߢiQٸyW 066ۿDpV%Uii);͛WǃO%fs9zqm''X,187Oř:z|ʹºYYfk{ U !""T0LDDDIQ݊/"4Oq+2,Dlj5j +5ӵ3Mru`PZw^SfF81DRvelOy`لƱc)=~J3vnoV"Wj*+^_om0p6ª}{V,]=5Z"(#P3%ef&!h,мؿﳐ 9/ohD_̹JNIDI xԼ@ Z۾! vG"|Wz/47F QR|HI)1$Les{ӛ˜M`hdtbˆ;}~ L!UgӚԣ1V@~*r,Z386|駰yZEnh$""~`\E):Zܻm3ADyԬZ 8bL٥j}XI$,_;|CCpX<ǚgjfv   j{/y>IY`م?[!`S[}d6s7W3jPS'C͡%P5fځݻvhJ'EIDDDsaf53c35GDU ϞҎfcfV,e'eT0TeI|~pr" ::V]X{>kO9C#H$?FI->_=QYœ 4ge2a0\j'W;UWc6*6[Uy"""5nDQUNbz4IP*͔Ps.~H@Eqer\(B m'1} +2LDN TVV ;0<$D"Lj͕ǜ^S'SAtTd5.k{KxS8r!EL ""a33CgL]=>\>Qך*%MTΔP3+5gra8q]K8f'L+\8  y fمz-OM0H$Zs<MVɦUq{<:6|WN,T-PMYC*ܪ(]ADDDWDZ J"?{fc&$u\gmjV)VГddb2Ԭu"&Pv9hDszx C{А{#p✜BD$DSչm-Zn:Χ'"Nlp&&H$ٿ}U㮦fʍ`0Ti2xے>`0BYԄ wQ[ȃ;άKDDDf"""(MQ`oU=nmY #^cUqBWc(녧ciz1BD)Rv7O\c$H$042:IzuxN't>֕Q2/hFSBVJLpP3P@+bյ\T@"B߄*zŷfJjVFv5LeevXش8zG},;1)|@DDm 5ǐMY yXVD]IRȾ&9g'hP(O, IDATZP3eDBKZ3 inR|/|fڪ?hvÿ_t9Leeʚ1Wwvv0LDD3K4`zf3@ii)P5K%())`Ѹ\b(;*Wʍh´ǕAc#Q ۓzeс~ϾUyI=n٪fVl&tfVi.(E~@DD{9vQ܊͚Pn.6өVu-:ccY2Js2z:Vi&$^‘p_*=<;fp!f'hW!ѬV;t/|͸ k4AۤmwّD^ `ͪUKZ$b0Oj&s'>Rz"g!BkO7Oy~!OoH:g 6C6Z;jK; >I,lZ SYOJJmMNcr{p_U86ynݸ_{0JE=a%EWl$""*N 5!Em"ȟb|\gmj"RY"a,?Z{*̾FT2bxD+s"".Mlq7Ky>&U軙x =}Sc>*Uk2\lU344 ^͎e~lo;jN3iט[=2d񑑢=>Ӊo}9kyZ1]!DDDŇEȟ"< [uUenu:XHJ/+5 M~% $D@M_!"""\1$s{ӛsG0Dkx2jcˆ;q`+s훫Zs<ل{ g@C䤢Y߸(IOa]bM+)0ADDTDfZ:饗(Jݷ銻"B,IҜ,3'}ݷXQ wcmMSY=Q& ;(EUdm9Qmhx$ /_6i?vFI];k{UyuΪ5d2 _"֯ߐyo 񤤢S/<:6{vnR0G=Q`HDndʳK>NUJj=Fj亘 Vj.fh@Y`YaRh,׏]]9y*' 501e'e  &DkOH3`ߠ3v6gVjͩZx1X*;UVO:NdH8D?8'"(]ADDTr""§(A@j苸R3Tag VjձX%c'PZpKE>кjx,4o||,o=0T0;RRVV&;0<:`Vhk?}3Omjl׿dsLj Hd6d23 **go;NbO7OBʫlCLyӃZl&""*|%""6^n}θ Ւ}y+^*E/TfbGhhF4|ADDDD^6|z}izP笙iyW8ьزNޒc[{jKzG,P3 F1k}{:䣌=>wvwcO_:֊>Ǐz16>m3w%+(rdw&&9 Llfo)_1/Yu;|8y2yױ5Ί\.""P3QRӁ `y啪j6E|><יqv+5H8N AFT,PlmeHZNDT$M5456ŞnT7O9Ϝũ3gSg^ +.֍p!燥܌Q|Ӌ^ofttQX(ԏ8Ep@ j0ߏzezКJ*}C{]S7a2n^JZFjQo&\(qh1.HRueDDm%%%0Mioxt kǝ7g|x5UBW?{No$xFըod;qͣLxхۿEjCMUh{3h}8вn4-l$ ^ggRЪ(>}ADD"""uS0gJ|aZ.ݥps!)*"&4X3XYb8;ҒH$`M8 6/[0qN"' 2@DEbbjj qAe'Nw`Ű3CgΚPHF:g ƙ yPm_[tb%i\n܀y\H5Zo xX Z4_ 3kuv}M عEx؝Ċ="ͥ`ԋf"""Ruv[ܴ{]ʂò-##WsK'ff6Vi֌X4N ȷCyJPd  !!DT8N=XV8A6uͫg׎7J5F3P(D"!ll|a~΅syӧΜū?=qedtvm[Ѳn^PF6t܇DDDoTHQh(м.|I©֜r2nf_Y afD""JYÒ%e Wi2Zm֩z.]fH_#k9QR'|Y]b 5 e0H0 \enGH[͓~hnٶ{vhЍW^}mʿﴟ?=lݸAXb.tI=vb _s^^z9 4_țG/~q^TF)]ADD>LDD2"tZj0pX|霏Wd^t>Ujч*+ 9x6 lwRV$ vޱ5۶l]w{hj }|DA)D#? yLBC"[ 0ED}F[ؽ+,_?r9=rV$ao^}yW7}nDZu8춤_aa]j~"'sa4aACӝ1y/Y/~O 6Bss43af*ה@0 'B&|PF)rcWDDD*(C#?]cyZMƢ>npXH;?>sܻmչIPsN*XY+"aVԚދ}z b;/~~; C͉x e 4Hpw$~@7LuΚ;N5yyr%$ d r[X*ThmY*riTovk7fzv_y5{w˽SsXڑ^vy% ցGH$7ɑ@F^J"ȈzeIeo#;sbˉmV+eq % -ضkϊ>2B0t'>8)J\lO 6}v69ٰYPȷ΁>'YY:BbKG~WdJ]|%%""/y:lkMuU Fj~Z%##)B!g<{R߯,.od9B!QT榧ٱ:.Q3qKxs(hfGy~ +܈*82"uKlC(r V7i?S >~s18<":~4TU0lY,ȳQRdEJU*ZجV/׎!cc6hm=NDD<""mGwlƆ« hkh)jj8dTljص^̦tRqu}Nɖ<_V37 PJD|W@D j sD[kxW{g hZWWih?jy1G}]-F爫?24(:$*l6(/u;\<اRj ;w-u *E#5u[7LDDDI""$mFj {vbsuU(C߀K۩J/| j˞xֻĆ`4YbSsz PtLj=,46\(*+;%1dw6JǀY?9D ΋\;{*+=04voE ޔ3*JKPY),̽xlBGy|̽MDD$=&:`1܌3~SZ?q6-ȿԿFpߡ ;׋nJ"}=? ]&&ܓq/ÔÁ xzS3""""JO0L? 拗out|o}pr9Z@}?SQnk: 116i|\#Ьh{ZW66o8yӨK&q;L \"ط=e}NJVsE[L`{6XL&;N'ȘRDDD9"""244BVǽ,^MZ\$]=ܬѨ9*sRf{<|*0ohGDDqbc1%FVV9EZW68j0۸sY٧h׎Upl4̵XLFTU[33sgylT=v❸[jqƘ8sN>u]ݨ&J ĽQ?wSSU LNO&n`3XUGDD$!+H@sMuhf(dͪLNrutvὓcz5ljN;P@D1&JLHb (Wv""ds-+@G~f8Eپxщ晞?N6x /<SvoG~bkaMvY"٬V/P!^m&""CDDDm4cE)- ZyIA~g'R9~WQ֐O(P3%FdLsӘ'Z?@Q\|i&ʺu׋ղgn[^?;мVc륶vGlGyh-5U0B0LutuŘO 8֗>69uROyp!V/U'' 6IC@DDxv^Om}lCbRB߀ <^֢{UQ͋3xN_EhjH"Z1''~sL31>5Ϧ*O1\ IDAT|4-J+Qq@(L'9s0??[9R[;6m}Nvl 4;'މzϊҼ2 obLO'S8=ѸɄV+G7G:F {6XLF`"z}i)ZqSŃ`1qT?me5ͣQ0LDD`hV&MnC߀KЇf<|Y|YlpT`su6:*802cqҌO`1]1Ej1ۋ%%-lB7-ᇿ‚_ !'G ID[ivu Y_ps(%eddl6c||Le6=aL}1Hͮavo^~ݢ&wo&PAfϴ'~boC!z'U^~:<)^_z{-ǛH^᎓\zߵ@ܼ KXޔ"dV̺Sx?%R `G@"IhZ \#h뼊MQݯ치j $]ͥ%6вj] ^WI^n aSbj}U I`$6?7A JP(A2 ~?"5_jmæ Un ]=(U*p.۰QC鿭5VTE/[bG_?A KŎMM*9o/~q~s#esjVTQ"i4q?_>r[tCm?L!""Dr[ys*oZFÞ\]/-OY23$XC !U\]s/r;@ۮtJxx[jkԬM9,f=  &'mCpv] =K^nZ͟PDq?2*?rt$h4%RrBy(P3QRfpGPyཏOoh߾h.Ń$JttuXVK|(Z^fqvn{ø򋭅xaƼop2&'kף@+$>'މ趑՝D{''E]B X>1j zj5Y1ٽ}Z,"xn=z{(>L)]yxa4蓺yqr)Z^shj^eg}~Ipk=_ZV7:P 9Fv:%1/~i* ,N^:&~BY^Y`SE唦22F Biys'7%^o uK;⡲;B~aE;ico}!ݓQ/_$%@[SUvf-\6@ "R;[jX_.JDFMUͶ` 4ϯZޝ7nƴ<x=&,;oc+&/guY ߥ<~n]?&""CDDDqmR<\ZbsF*9ѻ.@n[N:(۽7WWasu]himOJ+hҁ+ b^ 9//w!y޸aEbQ_^T(>A ˋ߯^k KwW0P3Q,`ZCA6%KFFFnzг, GM 4|gIiX,q9c_uavFO5j\MT!onj|>Y*U؉⼑sNNOk@ZѬzbVߜߤ6_o`p@nf""1LDD#SvTWacl֧ p4؃.G1qohطwݝR-m야yɄ{_hZvȹ_f6ʋ<.%)b bڹo jIKˊGAÖ)""""jjDz6zBx2Xh &}6= $r{oFj޽qYFB\efd7՝wOMvl,&#^9r{#иdJ]|&E#""A)@spW ϻ?Gk{F {vO3Oc"۴r>q_9ɯo6Z; _^~cS1}% F _n )j ,(iXN$2,\QnI{0>''Yطkǚk:{.@hkⶼ?guu|nDV VNNM C$к[jSq7hmFD""谩(Jv_TΧJvk\L'%&&&zcWQ=RtHW굞?z0?%FG6:*qً/.ctl\t3N7/+J呚6gpŽ 3citz\ 5%Pfy쇀@D _RP"^oxs83Yqy{J?*{\D[ɡP/[MUeVm JXL9"nu '54/g^mՔ/<ɈϤڦ-LDD`~'jAq -h:u1ݿJ~/Ħx0ٻw%6ltTnhijl*L,,.Y`patZ-Tnt beV'mp8ӔCDNҒ;vbIWqk`[lK& LNNl@)XX=Reffrdg@t(.a}oa/9M<,e^~6ϳX^+Ps[V#5 +w8`s(Z{dڦmps1|{hm 5E(y @Anjǣ1׏c"K)ޮ`?L`\[l 6獎5k4أxZLx7ugd ڮtJxbVK1lj^zn~?4)f~tc⭖ȃkp;:HoD^nWVT 2Ԝ.gI@[nqɀdȐhk*Ja/ǹ;l9ܰsl@ٜ kϸۍ1$}>;v툪x||\L߰s6mX;;;A!?/7*% 5G ay'{QQVcF(/"޹b1SjQ*YxڱtJl&""s-huf,\(eTWaND o_%׿ߣ *+ ]P\]߫Q\s[ Z" ?њpOtl}q/CKφ^s^.J+QzX>Ǧfdo?LP&&$`0P3Qҹ8$P')^o ]y37mx=n4hx34<^ɘ暪J<}Frn:{~Jucݭrd6^F}]-t x'd#qXWfZ~seш/"vRDDD+chhؠO=0 _~/_ſ_/78zl}5߫8o/^bþ ĵNt8"qwm[zZ̒{V[QJοl}9Z s^.rzdr`e;5HeP0=! Lz}B#l@@E5e.}.NFJ{f;⡲59.h:{:Rv3f搟,N1Yj4 |} cnwt?l1#{jfؚJşp~s{j-miylz̻I5Z{2cM*e] ^9rNTU60LDD2V.Jqm4H n~\pl xmgy:OObQu:-`Km @quryKpO'?Ķ̫x)w/7*oWԈڊq5ۘÝ&mU0{)Mct""L( Hf zόh|S8-kj>g]3x p#cj5QΊT;a{rj*OCm~'FD{JLF#̷Sӕong4&b8G:^/W`3*j&""n{ fC*oRRwgZIױt3jkPёًgoLKr 9_zo`/%䱼BUJS%/Wq 6BSu_wƽ C͊dK0|4j?߆ nF$":Ϥ߃~v ͡%6nIlDDz 7mWTmp-uQG|p !''f3222$cGyY*637mʉV& MI%Bp^^-&=M+D0w QT:WmVvv/8DDDDDDI@Z?0bZ+7Nc}8՟ :65Uhmssk15]wz >_ KonlyF}/y5)BaS,/ټb5.>A=Og2a\q٢왝åֶ_};wļ~s h'<\SU?HQsBb9'[4KPnRahsRkmӓlN?_ 6CADDf""Eh6V|Ynqoߎ;=ղ&ܓh:uo6]BA~{5#Jlذon9 q&yfj{)T35;Yw(?65{>7V\Ԥ(aRF;uiˊ Gy%h)+*͡g^"y&"C~,"~/ itޱǧϢMZեJK#P }hm'|NŖNaQXLFF**+Mkh5FI~~b`3LDDnwH@sA~^|rH SBK{Olۺ?į⯢ 6jƾe|/@VcfƃF1::Gu'?ƹ/ɝECםv݉+tڛۥt kםqMͫpA(d9EyE8bMwǟ?eEEi@ل|y9LC8NhNCCבAH{M9>!LadtCϛ98_N`tl|6$b^{2o3LApVH'8tjڡ,fo1,s m^mEVńܡXeE]2W?gL:f""J{v^Om,-ODYΝ}Ŗ"{-`WdּԪm4Qjn[C} "!<[4ΦfZj9){Z;^-5.+*BYQ6UTMղjuy,"BBl_獎[x~{_7k.`0h0}Va14 ffEh/.hV?#/-SD&##mI\lm[{ TR%˫KĶ%6y^wG#^nөfYKsYYA ,)egWT?j) u:¥oEk% IDAT\gZ$kq5|XoY3-BSFPJ<i͡4jK݋'aLL70׋k=_s`n e"JPٿw 6bv k^_]QqOvn aSEEJO@vVrBw7mH;2:'LNN^R΁p-t )`L)G7@}foj>C>J ΫQݿz*JE @ iddd@@VZ80>{}gnϳy *Jg@#{wA{k4#o){@;Y\7KtQ (1LDDi)O76,Rl" Fj^ FBKaل cK<=A7 I}8xmۻ oq)ds+KƯ/P%R<@̗NT1\yr-{N%ՙf<aި[,fz^1?ѝ|~J߫¹D7@5_jk՛چNyxjɖ1mQ{;!|j4ۗon`r:hPM8-I+j4Y bns|YhpORo\YllYMDD逿.QH@<f9<\GXӢ_hdjV$Qv񠣳 -|k+Zxf#LrFr( (M)BwZ=JvwKǢ?8 2,463LDDif""J hoם 5Khz&˫ny$]{IBѠǎر_vv㫮:׏}?؍xuzbVL'|vEV[ t?A B$J6UBp H`lĹz񒅫¾9Ɉn: &LM%MPT3ˁj8&PjYI鸗!?.:jt)77=_I'Un KNxl&""R (e6#tfߏ/.czN "liKqn;Lx =vA~76aN|q=MQzƵƛoK /t$ic 0Nx?{RcURe+[YQQ©cS\jo/sh}O='}C!C!d묲_"DD> hK6o`n b=\3t:JKa/nKDd严VSjlmx̫(+ZD?'}NUQ^dZ] +wlV+~'k߈]l&"P3@s3lk:l>N'藥.蕌ij^eg>bۻ[%~? ݍ}{wη -aE=:W^>P3ݡOc17s:TKdM&3۠7UTm>65C94C ⏫eEEO`9&^뿩1}>ShPX}h~dt~bZ txUZZ|?p9+ a/^bSgf8)mdddbϥu UxlYlۍ0.9(+EW3:oDGW7j*χË{ξᄑ2p%VQ[LFrpL[ 6=g)(sHݶ~F126x| {BrEnHC RST_ -q&M`G_?/+E^b ??^@[{rG_y&b_;jQxo>K?+Rj΅"yO{<5A^Ax hhc 2Gkdt>3%G(ºu3SɍpSZQ5 xfD W};wj{8q⥈Y]Cp;V#}2@ 咯҃Qg$lhX$bhʑxp޸*u(0LDD)%KZ. F2>} ֮4otu+/\vzƃ.\—_u%ڮtJrrCR9RKXnpq`0aI/Uh+ˆk(-=%lxYxxyUםI_WL2  )r@7;NMM.7v|J^wUz۟ )GBDD+6|+Nc8b Aq]=NY,$45Co_wx,جpE^ r䰤f0x'gjL؊] T7v[}NdH9Z/9c'AK[{*mDDrj&"@w~?Ν Yѱq\w⺳!f3(=h߀<4jNxR}bTnpf4agpOםpr.7BVj+Z9?9z= _۸Ty/erytja/)(1"]  2xúr3֬?'$ 5T*L}Mx@V'lF3 4b{jH\rj+4yG#%cc#|bًVi#i6v㽏O37Ԫ  Hl>sN>!m+vPqDiDSz(ɋǩ׃`R CDDhWGgvlu[8 םx7y ^A;f$F|vM$9?0ixxBF%=nŌ'm۶^}.I\:e,*}R2X% t*Ŏw~fԴ7fZCA^n(>rHh^ۚd&v: y4֨Ft9}݉Sh!{a!gNʍ4H2͊{o}X &yf;E8FFF_ ӗf{~ 2׉Vلo8ySu{*IB͒o{0 @PZzό>{-fY,}v%tH_֭[o[>#ċRuq~s'O 獛s/9.+H(_-\ZRvfV%/WY!ܞ9fo͍PH@܌MMra99W{{l3Ε ^/L& |~y<92:C(+DPyB!xIp8o6eIּr3 n&5D0^Ѵ!~7"[oG()N}qzQkRz!?/t:-ضOlۊN|v_hI `wox.#mtQ'?ց׬w>Crd̑W"Nϖ!٬gYBBBN~Y\wZKi/##yy-/,?sOP`s[UxIұ鲠R;J {qyhp..l]#|m`1?Ԝu||eNf/n)&~yrr|\Tѱq\nOVHBq6^őץ\:-/Zegvnc*f{<(@FY|v>В\sżl/n'X?>b6ʼn"2=9<Ez%7ex㔒rrdN^**O[ƍ^VNRr7^PrNzN<"ddd 77c7'ǟ๧~(6@KqJ6>*ƴ:"bA9іqSu[Y,iXL ͳX$%~Vc;߂+e= $ڮtKy3EXgc ~h5waN`Z`3) CDDh+J[svpZށ7:PZR|ǿu_w`0@l4-Rug/>Z\B8Fr-fdddy-5R[/CrkpaKyhFNqĸ*57W ?I`J9Y? *t++ٱ#<1HϖrHW )KV‰6| 9ٰYQjSPm2ڙmB F'䍓{j:eҟ Dwcf""T4k4Zhjkꪨ—]\UKQ+hҁ+GŌ'mX~; -n< j@F^pQo+RNJ#:Yv 2" h//X ́|S't};WD|[eYff9DR^y9-b(dee! `.#xntzlCnnnڷ3d-f)xdN2:,ۙE299/ ''넮dJ; 6"0LDD欬lTaG̶/.GjwK43W]Q5'‘)f7TWhv}C\!9ˍ:i/^bþ +vݙ- 5S,ϩ 7r8 /c9|J)9!%E )EZ !2"~葞fߏ,Nb4l IDAT΋{'Ёgּ[|qS`4xb}Y,83چΫI[Gy< r j'B!aE=w]#q/CpZl&""/ DD$[ 4Gѱq`ٗ]8tdcy"io.Tnt(nܖ_BA~6:*dpxf177%FGN-5R[pOם 9khhNWyʂ. z{B0晙CX0B0Bfi'&PX v & 'BPsBnB@vi3- 6'|v=^ʿ%kȀ`BVV'fsJ]Q^N|}d]SUg9!=^FŜ|>d)B$`3CDD$K 4I̶p~t|Յ 3Ǡnc[jEkϗbg?KcF,.p8 ffgk6} \Olۊ'mpgȹ~a m<P&FQd/Nf)bUPs"L dJ9qsh(eTHW%溺(d>ss0` a*^R()P,>_O+")hB0WQb􎿿ً$j*fdfA s8s":8Bբ  ḗN{lAPVHb 6l1LDDʁx99z<`/V;<=AGB+nLj5 jx03#}0aNo%cڊx9kp-ѱqcv|^P01xfga6)tw7µ[JV[_(fpc#(*q0@׷bOl0LHhbK|<1#@FF1>>&z9.rbk.IS&ehzq}"?ׂpOM ]pެhX_Gy 6UJccdf""WƵ~ם(ù٥14(PN.k_?>6WSO~⮁ʹmm#~莠jzZ<֩F>b! :ڏflې}kn.\X6nZ-ktkՖj13;}}&#z͙33mM^ n`koo g6| m۶V0~1޷{G޿S62}mbrرM1fb`LRgiUDTqTh^BؐPsxd_|2?#⏾ov~_)>'++O2pn#wGj\v=^!]iFyo̾nz^+HوB 0W@{wچkgܘjNٙ/B`raWfff:nvx]]12-\6#Мcdd{K$KcN{ o߿}{cSZLlyC;޿m! 6BlV4wttF__NrŅ;Z!N|d_W㯿J|;+?ś7?M|SO}"̭psgWglM9y{Wn۷?!ֵmuib-&OP[;okBǛc`^Ě1==Mt.@/Hۈ0^{-}6qRz[sMM0 ff3\[ejhHsh7|!FbbZf?o-,,wшFovowٹ?pj:! [c˖- n>oP֭ >xd_C;NޘJ ||c#0(屸1u}|hxhx8).md8^}0>|02\[K#.EF_oo)FmqqY퍌muRƲs7ԿyƯ\ݙ>;ugjwG_XvrPz߇ukNj|)Vcff6`vNe) i՘M~r^Ek~l@v{n_陙wk>1m jnT0{ȡ128wT0$f62l[lFwP-or``kC_E}-OϤb w^O=;8mfffW.b_绣X,F__t}]W>ϛ UcjFuk΂Ftjnƍ'Z\v-Fooz} -?JjntĆm{C~ ;5[*:` Rm]mضm[tuu+VüyB|hG}D4$yڗ##۽mZ/ƎۢcCmSB/,:PsQ/44:* " @ 4_wwvB:b!~飿G_KM'SSoCLrB>=btjDfٱ-YףZDM…5s[.|-:1]]1П@\.zvP]_VZT( &#oHwJ7T433ۖnhG\.FFŕ+SO==1<<,XH^Kc`lyC&jHzs7bǶ>S; /8uT[aHl f@sDdbi=X|cG?kq]GT|"?U|Kxb-fk133GP,Ȱ'@3gڨ}RmPsVͭ{Mp4~Jԗ1EkFOHM|/1NQV)rDnϻ3BNBl:SSsH*J+LMEZm#QlcԼy7Ss>kY31<8+$>.Mŕj+[ϻW__g]VjiZ=䥕;;V[L<კKcG!ş7OLU j~~>o^WC#2yW7瞛!瞞O6n=j{u}y.ѩ^J%vm³ xܳ=_{w6n)pƄIlWnff6z?uttu@T*X\\ؔr}L4 iG qab:lQbݨμ\Gvk4f&'}/h|mb2ONz4334E+lE^驛{Kttt4ᑗS3=b=qҕ;Io9zz+?do9o9xd_|}J(^[tLMMG۝z٩ Լ}P<|Wrѝkլx-ݤF3sqn|n߶]|g巷 wwZН|ww2ڱ}x^fg7‚.kP[)xrLxHSS18q 4<<.]lvuu;u6gbvv.nmS@WcBJu}7x{ei :oD0Ɇt#y%gBE`3M$ k@sDr=j?[\l_~;NˌM;0iRm]?Ze ?Hٓķl|o^T'?%u`xsx}(Ў;no墯7n#wzk+bO1rS2f8""ב|u Xq\GGtwu9Z~s?Y7>(Qޜr퉁#".Oyo vjb)XCNffgbhhDdLL\\~D&q5}}rrCC빑]]ݱu@LMhcϠ{_[#ݺqvxh0c[y_o>\.rܚZ QTcvnݚWThmV?7og7`3M! j@3+{73/oƟ~-WSSqcjꭐsZN^[lSS ٷgis3ـ`X\r-zj/-E-c׿XTfuSl0~ƺ`T*T13; }]od꘸|}bx.?|}}q[ՠ3zjج ž]&3߿D4YZ/{<3319ycCCZj\[tl633M|pp(dLLODwwwlޞTv]W}qڻoc[!\*sj_} ! @5aV:ʯ~P7|7 sd[й{˖-+zn7- wEoa;=Z^}Rvgcྞ鵽'l[\.z-'6buoy߲0תYMp}]dBh+W#mhȷPsDׅrZ*y(fs=޳֪sQ,X,D|G_?_ߍ_JznD8Ё I % hn.^Vpm]?Æosfn.qS(Ğ]71~sowf+~碻;߰޹sTW_mP(·tnX\VEiF.b xukSS7bi7ZtuuptuuD_jTZޮ#3jZ\r%:޺yML_=d\l܍_.{q6˱$)Mc_64P3 ' \zޔt|oݰ}oڟ=[-//T,///^:}1ѐ16b_n62qDTЎlK7\TvlP$ŭ`s#Іju)w.ՖVYﵟ9V¥Kf""^Jry씩h$) @3FuJ4d;?lcm``(2k@15kD:?o6d>F__DGG:h>*jr}و_tS?R׮{nj1j NbAٖܵ=~^=x<H4Җ@{-мl@{^FəAIR:nhfMږ`3 ! 4@l`݄x`M˖e 4WӦj`OcgMk! %ITD3}{>  л~(.6fB@3mhp0#|B÷}hH{+P&fDUhho GDb^,b轷k4Bγ`3HUi@xٴǯTq>KU*0~159?>jՓktg {NX] GDHx3nfUG<R`xT+ YܹT[kq}b"&&'ݻ[mh8bu]Y 6)\஄$)Zm\@;Tq¸HߨϏތ @#톇ch cxpu_(b*ǐ%-l^tll= 5pWIR:/ڸ׳qɉ>1i@VV(cIR: IRBG}߫R53xY ,//h>[eLG<R\HJ[/f}(屳* ^:5h6APO|:6IH/fKҩ8*SO 4@ x EP0b%<$ RIRrP駞TXȠᡡx lfJJqȳ {t#jP3@$I鉈xU# ch0'IjP3@$I@DngZȾG0%IjǖeIRE@+gxė%gw{6x\;Ofh>@F>t(>ԓYIR:O DVHP@3O?d>t08$ 6YNE _$S* 16@DęXY~$^=:ȳY`3@ 54@XGȈ{4y&C'U`)IJ"T+ex)*4O=dp,IJ$ 79+ˉdZPO|)M駞Çfy/%IJ<8fzMsȳo,+~Ɉ y {tTEM];<3F$IdDk=@3 B!^<"Xf5Jx~&:@j xEPGiXf5<˭0Ç?QERghx,IR:' JIRgZa,?h={t4y&C8vsEpVA`4+˂ d},Fw 4pСSOfy/'I ?f9>xėX(( ~8|`p:IJTބ#IJ'#YGP@39G<Dĩ+pB$R+/QE2/>FwfuGiU;f˭0Gh2X(_x. ]IR:M=$IiODi|'C dPx,\9wjx$) rYCO=@=:O3YIRzB%$ n'#bo8zYZCt͕I6IR8q9Z?8|`Vw V̓* B$)_8 BtH53<4/x!7Wh[[жt*"e}GUPx'&bbbsVJ/w( kW˗ƟY7"@<6hڑP3жn.rDZktgOz{ON{'&'&bbRNL^=:\nCg(>b7*ӱq q7,P kryiڍP3v'"FĀ ojMW~o0>JSVE||= Y=Z.Nȼ$)퉈r J>iY٘\;@ 5$?c}C ~jjKTh杢ޏT@CoN纷s@2ԍ]OcgU*f Ӓt*"ey ]]ݱ}_Pi yG4g,oĭN ^>_0׮]J]#"cdJx9@3M9rÉlKk^oܘZnL9~uȲ[V4|va\߅V744,^[z8"NGdN@&%I@Dql߾Cm9V /..DVum;۷m./+W=LYKhοY[1eqq!\fC\uUFȜ$) FX,_A VW\^6޷7/&y?o~ֵZߤuUZm)jٟS+,z:5{K.nhFDR.VE KdxWl4E??H6˥r5| XϛHۍ˃e\C y`cɉ,$)=Q.UI +|2%IJm 5-),uDO[AVQAO/goD s@Bfm`JY dF_r\l߾I*xZm$dXZ;"$Fj :Ѭp%k,l7&caa>jՋ:;;;& 788.GɈ8@V dBDĩCR3}ۺQ/;0 垍51q=fgg󥥥(& bdd[\|17KryJ5@%Ii0"Nʲ544|~`h/gڵ+qX\~-*Uhؾ}GVw+IR:@ 5Yp2VȬUIX/Dz;pvJ 80]]144?} @ju ͒t<"eb*L9^*JT*XvB1:;Exp1?_٬ñRN@j\LrY^zX&7Ņ/,'*P3J78؛\K-F- @ }ZLǥK…~ZT*Ϛd8kIRzB4T,{YCY+2)ϷܘtLOO5zƵkWbl׮]Y }:IJ{THNSe.>1Goob@ f Q/m>T*T*11Q(S̊wڮ THTůey |>`ff:UqⅸtbLMݰ==l|?IJ'UH$X ,r\lWLXZJ% 15u#:::X,Foootuu+^ j%?w>ܗt\;@5ir:VȬwD. >733r,//GGG.::X,w}>߽nBR8TK~tO lJe6VEgggrQ(|r>Vw^gaWWlj}]ZtLpw 1nunZJYGټ$_Ody CC#jZ\z9j{_r~gX3:;;+`NՖ{q^۫חxqd2:::bpp-㋋ Q;/6w7{=gy.Ι\ nEvs-՜Ou^n6زeK`gx{ޫx;ϛ<϶3===Q(}Ș͓֮٘`3y6]_zzzW1i\wz~Ņ6tC,--ŵkWP(ƶm[bLZ-cqq!竫 gޭ[_uY{W/[嘞ؾ(~& o[\\hR+~"b"b =PT9|8f-TIR<QLjvՁf6^Z+W.eno]Tb~~^ n(XTm|V WV9jZ\rDR\4w/??_JVu[+ݺ=ϯc:dlˍRDR7&P(FqUXΔcLY$#v:VȤ\.۷PEVŵkLDTmF:wP-օ|>/ tDD\|$rnt<'Tz)ܿT{A|sCjZU^٘׽9E&&zE6q2IJg屳 IXY"FFE.SLJ9nܸPsVk͸ŅX\ޭnη.luuu :)!ԔZZ-bnnVH#x7uGww3VŅ7nLD__*9p8$'1KHM]IRz:"^"/(&M%^QF]x 1??CGGg~433cRƍٖf*&'Z;ry/ȔjV15u#nDOOo &폈qT& 4]Dĩ,7hNJB/^ZͲfissC|!ŢU2t[XH91;+ nzT*Vr Q(u ڽ9lF>[ܜD33&%ILg?cbz:~t]77kc5D<6i:6YtD1 `ٲEջqwJV^LDoo_ ȠJe6ྖZFZx衝&M3?_mvۻ?>|ܹ^;y;<44"f'#⸩IR<(izQN^fggb~;w2dROOO5o45"qf qCA)ѩyȶ(eB>~~sDďν?Nmyyy9.]l$/=L<Ï|4^=w>uGY$)-:FNl$)z,;I]]188{x[՝/ot;m '4-%ͅ6PZti8t¼p̼CiOg>Pt3dfw mhI[r!Nc[/nV?;vb'uO"Y{ߢ"PQ$.tawA5M7K{3zEh;QوHvܼgopBGs!ejZ,Y-kj,%+y{eT+FJԬP(੨Bo3~9نC-^ҥK KfFO zVLܾ5HDRcP3IN<<#W(p8s^ɝ 4t*g4T*: J)-HWw?f#T`T}9.h.*kZ8Ӧ)P^d'wUsw#/|,D.[KDDDDDT ~?:{hx U*T__SQwIkkjf?wS`T`r2t d˕@*#g zx*_&nSދ=E@8,b`h؏a,=`o""ʍX,6t G)_ u َwFܻq#|>ڂ7ZZP4E"`fC{?wvQL.3!K&FHGj 'u3P,ͳ>O9h6H"vgOF_ϕ *U5 ,"""ʻ $[Tp"f#HC>@Y+' K֭SAC~ b/὘J%DD!=U)j&lY߄s9qԚeFzv} xz=]E"H2 `\_f"i4T)VLFSAjj~݁}E_O,D$oج:K q4ΝjGplwwt 赥;t0 7b^3؋(Ј(Dь!UfBwYǷm? GN1~))uiL5HDRN" xxFP(,ь%TZo*%';6<&L:7x߇~}@JTH58=R V ??|&&β2h,YZ V gYfX4zzE>phZt9 Lt0aR>n аޞ@YPDD$;4ل)_ EV0ٛ<47ԅ6W{ FduQ<ޞݬA"(car֕lNf#*@+Up:d} nT#]^~<D$g#k&&&0<< .kqɕQplqLN8^s 0[,0Y7CEl#QS\5ƫP`Yc,Rs|>U..cV3~^mα Qof6C|Z^Ѐ hރbi?ϋۮ?#C^o!"e4F" " P%ם7"n,[VVV^tMӣneV6 h"22@0H$N ZxTsݞH*dAb9RATW@_,""*DIYfsP((~Eյf%YѲ5{>AT{=#E"Z32!]uZ-l6;+@pE9bژd%<%Lbpp##$ $ЄO4VZhMkStݬd""?F#o]6ʝμ&Y][]p xpW{˭XQ])"b21"тqLG,C$ӈG",{BDľD"XNWF/,Fkd߷\NoO$&%S癙2y] Zs&Rgu9v#g♏!"J xlu 2VdF#GSA3/r)L^^.(u:=xp0K6HR5gi@ww;`9P]U7NgN<L&3,+3HdŪ:X].{-,"",eʇ+1{Lhj (JFTbm5SvWjɓ $V6]}}x^ENLLNĸTfWy;O=}&h~E<ޞ}<QMED@iN5dl|]4-OE RgWt a^?:{Ojc](wH2pN88V;F#+`e.t9Ys9G{Y0DDD FF166 BṈjy&Re-q {IDDoD9lǙZAfY,J41@8@8B zt p6So=/]#^oOπD FPQ$MrŚe)XƤs566QhZLU,͒)X, NC \aAÛoęms}t4uجv6@"X08Ad2@`pvSvtzlNzrmFu2T-_ab4Q fls!!(*X,֢&Mŋaw/|Zî]c/wpYloľQibskAf!eEI-ɒB_n?Z&o!AHD_7yw87:Ɋ"$I_bdM$Ӂ{v<Ew`h ÃgVG f2]X⩼>MLD^9H bE([Lmzlzn(̙v;vsULv@DoľQɐW>PGNJRVh4r|3)IYz,& 샛'&why?!C$^on F=DD7$}rB##ѥK:k# @2Cb&tZ=DGǙ&tt۶CNMo04O9~>ٚ(###dE(+V;t\U;G=ݎVˆIDDtu'Lbd$.(_qSֶπf""b߈}#)4 z7/~Q6hnd; |=lX70,DǾP8"~F<ޞclDt= j&T< J;tDQcaAHxA?0WR35BH%y&`m\~LG h;?s+A8*}paڋnU*ٖz(K6W^&cpKl3x!}#(+ߓ0\ ~A ]>CL%p\P}od;O='v} xz= .!yGD%|EoX9{7?`j&z) *FќN>V@X<C,JJ+/q譃 c[XiD`ܟE}YQDDDt`?v Dj4a4Zf!FTT}#wEx5%*PTP@҆#'hb">B!ݟnWa2"Ѽ=DDO5=rV ʊ@B "H&wi2fibQ Hx2y?-Z?ҼLhOh}135ᪿ586zzqI,H`xxExLV;rkڲg_d FT\}#PSB Z ~|rmr9","=dP(tss#at4PǧfP3e8@ 䩣p=)>ޑ>4Y $%Iʪ_WKƢQwm;>yŌoU$044BQ?qpet:Ƭm / 7Iߨl1jW&kA3y/]>CCP(?|< G{bK$1S3I<l΂ (VCDhMճl)֌պ0RēHz,& '͈L]J^&W~smlpDDDFE=FQh=0y!я^@8fc#""d7bf"SsVj ґmlw^1T9cmD]LDZuM&3zHB$"Hfj"d[ccg4K3gN Z: H*K&&`fP0;:GĢQQ6eE!"sb"xk XDt N'rҥK,ʘYi]lSzh6+'dۻcímM#>hoǫ4#2dÃ۝9412!ӏM3nX]'>Ţ\ &!LLL@P2yi19(Wej3 Ŭv23:5=! 7 јH=S1rQ>|*h\ɨ׋M`7S忝ut!PVzvnyu%zޏ]N݈O`P3]&=re(3AOWMdkp;#IC@;:|'gotZ-RWo&I d2bdZA(P(S,ͅE3#<oQ08Π悿6[6\^ .ҽzv v!纮$@:~ #>ea 65$rÑo$o jr&z7TI7;wd4^q)+~NS&j2QQ^U"FJ,3݁Z6J"E,:|nkǫ4tggNwb">X,VX,ٛGSX4`fY?e#%" hbL&eu|* gf k2eٿ5n7֭-uuјr8YYWL(^\ꖥYΣoЏ]8vݜ\z=&O!^o=4-[^meYNK\0XQp K6vYxȇo-qά]v܉=?MN]q(|p:]YYTePHsIAGCmtr ^_/!tx"( yh( P.8<83hl 1849ɨ9t2j'H~*.Ը+'].,qn2)//Q$fPsJ&Dļ}8^}mVlhh?jw~ 8S^ N+='Aq2gg9qS[<ޞ. QibP3Q nrwBJ,Rh4p8\f\^(M2|۬vܱ gNb"-(:fj 9쮌12GEnhKx<7$e7`[6`]]=~R}dXX_9>x~M pU" (MS5nuU0z=m644๽/eh:*!?F>bN9/ |p~p9ӛK:P ٺuqWn1̾ѕsW"J>ЁS:9|2Y63>+'WG|JY\)]`yu%p2~!YN(^on Qa džYMdXT5Ʀf/ݸkvޒ{6 P>q"ơ7FgdcAӣ+W6mN?M9yϠf",RjjpqL{$%+7Y̸gq9_bU>v>; ADDDZYU%}$1؇e5%qFܵ _w 9@spx0 R\_xo?J)#s_g{onfo&n2I7`Ps!I$d^h.]$}_bF2l64J1msZNwo ۅɐɬwmހ::;Vgv~fܵ {EN xy=xV%*-Qdej*-Z]7Y_A:2pw|G;ѡ{plup:r*'gWUͿO=i}d2`p\mIf-RW_Gl&& d3L3>v||c|l !DQhZT-_E,HÃClDDD)*ɹZVS:XY0;wPs?)͇^syx n&"d7abB!U7Dx` =ǞWM8u?hwt=WeG"3 R8w9|?)aQ?S>sFDhe1VzŢLL$2ގlF}ͲǷ_/;r2f9~?Wu$4OS(rs^29 Y6~5'.'p$R+`=rq$i~ Fbf#c[ߟ%lV;FG0"!Q%jK\.<ŝxHβ6Q'nYO$2N8>,vر[7>: ,8&c͇?ӂؗ_*zBD 0z=+Hyf@Lᖺ:tzztCχիv9jked|yu%MP&I޳ -|$GK;_df"T,s,sڴ5!V*Qqhl\w= P %EF$/#NwvN?wp/I}1@X(Ȇ'S?yx?MD.J%cRKL&K|ۚ]G?pq=ӞlikCK[UjWN1S4B( y|eM&9#*~ j&*੾.K. IPk oVz)F h9}Tql++ J\gi6;tރk0 m2걢2kp8j. '($FǃiEsL?ݫf//iU+ccP4O E ND޿˫%E?! (llNK\.|aڴGOĢ9=S:p•2 ^#NsZLrd2cr$*n j&* {Xj5HQ,<+lRI\^>12W^k9[7lr nlllTOjj ☶6m_]>+9}W^ QYt)No%eT,vzdc(sMkة+gH3 t+cp}#hnmEB!F$'G},L"H@-Ш-Ԁf h&"Y0,ʋpXin6ck|ӟƩ 8ܜ@3*չ/hR47݌65wo*AT{=#A"''lkZX,VVbS*U*I_010$"ξRZRK;G6&BqMT5P(b氻 2{iFy} #2Kmk *_e_=YY‰RDa3i58 ?rYٰ˫o< e{F+kߜ_\!z >:#H-9|xJ{i=s7iR">/r y<G_ߍf̤*RJf`_$Jߴ.Rgap؏304O{DDr`XsDBLOզ<_IkU(4Aͅj6ARARcZ<% "-F A5kסYY hɨYۍw~ Di;7ZZqB++%'Zwzi IY Qqh3QqۃYJc; >M$HLO)'Y M&i BZBN|JHRyI'Z.5Ш5sOܹYٶ`%*A(JvCkʺg=Ѐjgob!Q1l Fϕ,zvea_+}Wxhph{zчZ[e}Vfo<@& .:)x/g/bxྻaH#ݍ{2W n<+ L{y77izLHV@y1>.MaQ<PK+hm`35x®w8A v g$*>"*R `]CXbM&CCXXlj[+7RTAGǙS^C)Dk:|MY jbf42"`x!fiQǷ}/< dBD6LNbL`(\T߳A|Gs8exBx]N$oo͇G;]پˉ>R+Z5dtxhm'%jcv];Ѷ8~J6KLW g-g(4nlld6Sgt }T\^⵪1MVRQU(/wvج9Ǘ;B>T7kٗ*w:/nۆj} "ʈGDDW]f!JQ$Ct|xqlF}2,sQ㮄NXM>8r$N]`ghJrQQ_zѿiw g$* j&*2 %!/##5Rd!,@08`hlοUJ47,@_]sot4 "umwmjOZi5ΜmdZkֳJhdRm\/V)L?|s{_BK[QqUPGXDi(s]!D8z}G"xnK]gu?("ET*~L(L"!" K6QqLfT aX(J ~(HN'Tǧkn4.nA{n7nܻq#B]@[G9I9<+!wmހNI7 xx%!? ,S9GZN+KZ59R J}k2ދZf-R&M?vT*xv_~mNK#I %KVFәz=fx8BD$c-K#>|CX?츢ΜmcF"}>\)vZnݰqs:__eؼs;A$I$^diV(XR8~mGۍeC!")nvPlA$bCLc`͏d{<.Hj,&'GlB;{ h53 s4-,̩*-YP+K$R8q|>ye??+AсN]^x=l?ĨwzO~y9s9$?8g7F|UCE"H  ׃> bI4W *vy(eYS_w{^-YյwFB؉`hAE⓷mF-*auu:=}h\V덗ܶ0St:m?s׎P^fS15^NID2ǻcD2'8ۨhDh :k~-jfF)p8\sxྌ2[vܱ+ecv}`TUU-*sf};L!J{K[?㲚MMn4& \6H)fՌo&RcHDCtA{|k/ N d3"(|罴sukXA9 *D49n ""0(RFyl!v &F(*$y4q"uPk+nܳq#6nQ/=lJ rՖLz|GvAz{AD@#8q* IDATԔ !Z+oZ͂(So2k:ܱkAnTQADW~GĚFl’2I`dK0R=9 *8b=)70&U~2|8ڳ?o_g)GZr͂#H$DDDIWKhB"jdPӁ@ Cc=Qe=Y{E~lhh?j[q09Ks Kayu%v{~v{="RK<<(Vg:M##5Kpɪ m΢̐KoX&uTYD$ QKhph<9$xnKE:Q(,xѢٙ+*&#Gγr$;0kd|LvrBֶ` n#(o={t`T$qχۙƤbd'!TPK |(GHXkOO> ~To#hmYBq˴Z HqjduQkH>L$?Tk(Jꛪa2N(sl/D0$|ו Ρ@?{ d|FXYT0*+QQ~95 (++/b7 hF;g޸>JPt08`p|9?eti [6Xf`b庍sMZ86p#6S PA@&nEQ >ְeqw~ ?} ?5A"rjQ%xy~劫&r " SXʯ_HWa2E?K4~_}zx,Pph&H쾫MNF[{#sGTZx=7ߌhVYkWjdSۍێ+xl. R G"8܌Xn8=!/+'RdTQ_zѿiX#5Ɉ xxa3i`EM%:-<ep'V5T4Xzn߰36jt: ~XXDD H) [˱d3y _c!"W0g) :MD`03@Y."$F03a:;S~mݎj{sn7vݷ{^ٟv‘{i/裬M:zFo?y*ק9?AY^ݷ\BF1BbT߸PFeepULV/&y.R5IWHYmYyV;U(UpCAiZ08.vnY`feev0qdv`ut9y2O] (Ulu j.fwmހNIr xv{=Y{Df"ySJ밙<eXQs UN׾Y?jvѰ< 5"RF$u}\9?لr3kϽəRb \_HЏs`aSVDqz1 9u!Neڽ7ɓiũ Ms3ݸ"0oEQH#9,ދ=_%y#?Kt_W2\I&+I:So\%QVU'3.wo].-Ye `'Mp@L!B=if΄L'}f&>mHSBB &\ Ȓ/KƷ-iKڒ~^{^ryH%pQh!ƨM!ə3XX@h$g?vN i]$>AVYY͍33%L@E"T=8rNt\p`O·D]noM vS꾓H>|;cS?˝4k w,fzDoPDr`0wXRd|>NH24HL8:UAKB!NjsԸ."ϒ!?77fDCAIDB Sm$F$j&$`Wx.ϭl>JM*EvdgIhYRQ/R)54j~D@ E_` Y󈵠aP!H" KCˬϘFωKTĴpSgתqZEV֬cX[ÿ!2MWM#9}K KL(A\6sTg.\.Y'%(*5XbDQ E%fQԢfG 5cy `E Ƥ\I>ltaYxdS>&_r44yLTa8t)͑ںFCǚhNUytyL\SY嵋' nv1]O&K -Ο#nCfHRd jJ5ۍyK9ʒÉ@Z=I~,mp:G' dY0 L"5D"T ߵ<ЊkA3w/9&A$ `YJ06zh* sa4ts -†zkldoՊ`ڵtA!\d5Lv{0A\6yv|>/vL$E0.JN21a$C,rJuTӡE&4@'d\6GSQoiM|4Z#Wpht([*`0mϽNJSOP# ( Bp8YӤΪv!hn1B "i\8و5ϙ>#LQA* Rֶ+Vܻ-f ? 5wC|, ?rV^/$bfAx]]-gl"vkm~OA^vK"Z;/##[}Gߍ6ͽ' 8[6Tgz?RrK:Ap51KsP)~2OdI-rꜫ+JXD KцO}<?::1s4K [.j}BI<|ϚC~n.Y]oR!H2Ak%oD1]x~ ܎kώ^;]d57_+J ɩ XH @i>R;>|.LK;oD20& %b1 7~{T"_;P Qa :Ə%|KM0.c|ģk|d+IqEF\5G磵2 u teuy=ĿO`w 3Ubryiq[~dtZE"hJ w|8>ŽY*zI&`?mtMHLܦ!Y >&f_XNs4E"ciM֭Y9oG/Oc~vGE(t>ʖT'IAE&D^*l YMaw[?] ΟW0Rmr&[YʩscɘL赹3赹I}==MgđAp5G1;,Irkw/4jewIs -Ε q}`4+1\ϋן65`6_|%e().J=Vx :00`{7&C A%`CCYn2E@)4:s'h `~}pD~ tyq8WяcZG9JD],] TLH&͍tp̭mWwu]fsX?U c~>?9g15 i٨DM:c|_Br^"-<'Xt Miqcz=W'O [̄d Ilpei/A30 "X[vT~23oC<]xk!>.48Ee.NDQD$T,I7NR"OOSY\~8Yw'0E )xl+է|}^۴>K9ͭ.:D,=?uf u w7~;Q%I^Qs({"E&U  Er|N3W)*1r=SAdzvwYnڅvuNl۶} BДw\B( cQ1UD͟P)PrRRp9 "T(0t`pA s8&77>0vB)hnZq j4A)Ā.lšqasFFCxc-}t6&WW+ȽHD"oAu:HbHⰝ}vD ǥ٤ESe}hxw/bơMX. ǩEo^xt|k la/_-O6[FFF8SRo eK* *̂f^u pZ̆q8BYV+zvaEAc0҃0Famʬ]=-ͷRY\b:8tn56.c%hNVH< ;K]=$j&Pb IDATa0"- kr,D $qSD>'Bn "ꄗ\aan>#(UjdYIZn߅P"kSvmsnBa?ڵNPA0& bhh0fwOn܄|5x Q<7o__ .vgf9d̝&fѰ{̝@Þа[Qm[AT)MpTELL&Qs$n{yϞ K޽\D׎ aphy;ZX:s{p /^}G,h#azҬCĆ q,|T߱4,G[IvAs3 \ ε@X("+{s4hv>;jTW׌fa 1:s#R\ZV0K6n6;-] Xُ;9o-]8zdTeddr쌫TP%"ǨCTHL`LƲ?^E¸+OH * mtE:F7@|$j&@ DqBs Ejtt!+zzn~v4 AɁяP(cx~g^:IlKt}?OA$`OEG#߬Ǟ}Gr{9y4a&l{>rn":$6? t=whyω&|h Cv<ܹ^?n(rF%bdG:5Q 6[X}.3eE(Z*f`ԩ:ZQEBek܏{ISp!qrIQ%|rAx1xsK;:b^? #͆@O6yH#9I%"[Y7ߜ.k&bb|  [4$㨼l>XY҄4gg f X5D m-cQWO 9N0|>_܎Cf{VGWҮ7YK(B  ci? n>]x?D=?/|=ݶiƅQZ{j'ױ!_ 0<3smm*!>Nw]@56bC}}B1N;oǗw̫sTzV[x?O0|IYS;V݅;,[2f0#5L (,,;v,O&Q#cd$u>&.~L*?sxr /H*y:8`/H6QUC"TH6Pj*,*L;r}v\nɖ˳%H%"snje htPUD!Q3ApAVnH'^$Υ9#DٝJ@!U)#j "@ }k7\i?Ky5Vܽ AS ~ܓc`x_]>l4:ф>{}2DQ*p8T"d@y( ͚;}Go''?|>8$$}14aom8n{P(ٳaE}vl} ˩y _ݺsQ6Wowȭ9~D ܾWEBV¢+%+NDaa!<::,T!%暅aG=B#At93axX+ bzm.JMksRf g"ʒI;]m:=L)[Qm[x`9 Cf^QMB,O[*XӑW$SaƝHBLǵ9 h'MY!Ԣ 6tt̽Y.Wj p# %mV+~lgubRwA30*alyJuD ggddN{V^z* R~f&!A^91ty+MgO3g~J1*u{)e8].i+Lj^/38Qcxs-(m5U19;oG/3JeP&x"F]o_ EݼEBLEeR Jv9ttt?zAsb@J9UAz0`pa'ڭF&ѹ ^/\ؿ'ڭ8O| „h(5`Q|5r m{2Vј'5X,*"!ApI*棪|~܎V$|yLdkK1h=?cc+ /j& @2MN肜R@WoDbh4ET%BƢb\BA "cok{W_YR%Z{Yw8KsFF&d,jr&لɁ@ aT(CȆl_(&m.w,gbo=)ZޅkK 1رmӌam?=1"2hvNaM0@r|lky9Ikx~ƴN ;|ݶn,qKA8y0T\z<¿1N6S!ϏXuDbx4QTbB)?)5v/^0{Z"cQqcdXLR@`La}F> Cu5x7ǬN{|&?"%##3h'0Q\j*H\2#S`W[,T8h% _ `c[,x" P%l O֝d*&K*q\t@n#e Ex$N&8"+`,*FQQ176P,A r,^}Zee Ľ.n O&nWRwd$`p8{N>|7ILϿy_^C7%9Prr{Y+&WTW@B`\XgGw}>;N\.V?#Mޅ͓6Y6:;&']1s~?N^8ֶ+xjcPfq{S׹6iM1rZjj~njiA>I$!n䳹4|q>լyAR-(aEi5'93B!ePQ%Q3/zub~1è!O"rr37Un %0FxrB;KYC͏cu;1 Z5rU |JxN HbD `+0Ҝt<޸Skd-CfkK)bwRcAԢfϋ$4&'PG13`*C"h5:(*(qH$1{ p8Yu5tYX?:q:tmp߳y ykld,,y&TJKʒ%5ޘ<BBB ~w;M5| qdR/;[,mjxۣwrMgr5O>Sskѹɴ͸zڭV:;簳%"x~M.g8pC3~ؾq#^޵wv8[PeE͆B$sQs]'[ߎ/Nm5U԰b9W_S1##QR\F&]*گ/+qzogž5^\1 `#ڋ@y1!1xdd:q'^'^Kms<^:^yw;DP̣b-5, >8 [׉͛ׯ'e}`пct6ӛ  ";cxA!O<^3]ȇPck3\*!PDB_ ϋ.tX'7!+ 6tP +!ݗA U0AL9ꂘH 2+ j5~= GgOa`xW1WHg,\E,|C<bǃH$X,5MPx7}.;kfM]u+Gºh8Ӧѿ^|wK$lfa7G MFՊk6gwf ZtV-8n Q y&Z:UOp!:>0l5/,e&dfcoQ }(r1?e쬔VE%l 6J:ݨR.̷;332RLm}?FF4LS8B%r!4/#8Eei&;M5帽%z#Jˀ;.tw[ݖ""͉"MfsV&">A \lY*j^b0wZ,;D!A$d,yH[Q6Ua%22 !Pa$cM 5цuPj R!fAR'XSZ4h5j u9;lm;l};ˤYP*sƝ'5 jK2AяP(Z~&ML$bǖq2 qDmxw'7nBA^sɶK)MadI 7X7𣯯|*H =2?- {/EumއG֯L{!6W6aۣ{Ggߑ~X@Dx}>t8Y6~DBn?!Q3Ge 3?Ch>xrix_1Lk9xKn_u<8~p5n"KUJLh=dHD"hT*Yist3qjHbuۺ Î[* S \_.m MwG2btCڛoX:۩D|!Q3A$Ad+wU`H(G@lm)2- ^ahAQ;uUyچ\>z >NjK@&˂L6ꖘ%͆FO8ˠJH#3C )`ԕ{t dV BTxt|M|DJĄgs0\ ؼj|jtӡ޷X:cӥY"Rgl"`\x?:S["w=gp#s+.٧O X&c gox;^ܹDXhvq\l6 3 qks8nF-"d9o[q>W, _2^^Df[_;r$깢fKDRɍx`ggl ?FFQnt~fFceuLȧ:.typiTv)]k\urVVD&g VnH'^*Yq?f켰7JQw }>Rz|iy&3:=@Q4ɽu"_ ML1Q\< ~5PtoB07߳zΉeePfgoƽ~?^{mt۰q36]y<ӈzՒ` bh葀N[(Gߍ6%*'q 6^|wKx@FC}_ 0 p)Ε-6G eV|muk>t)}fb2W-Ӗ/, 4.cV2[*#HP(zBhB9u=JQ&TW %bInt2ggp ntJT[ᓨuȅGcә6t˺ضe]*͓0,j?mBIN}bӽ {-K0RݗfimUN1JP(D@ G?mdBļIW'7n?>~[D؈^;>ix,enQ]v !dT#2߹=>; `'jJDxDZv1sybz+h5sdR15bVUS]mNLM--x6i>k,eQCLq,X0wJoxx* bH8u8o,utXUŝ;8'hC&<_(ZRpYZw10Samc-V.cj+E"r$3΅>z[/^dWq.i\ٰ<a/?҄[YG (ɐD0枿S)qL FEx<6G e@)U0t71'3048P?疎c%l(*ciMUԂg:GE >K&60qKĢ^E%&j*@[Q^$^6 xny*%*jY-ySt0pG:Ȣ>g9"&W1"6:g[ +I"+y_ XQP(`0J85.awc(4;>' ApkgP)PrRRR9-tn:u' rjtz=pЁ;>/00ࠃ!AϺ䓓_bƆ&nW%~\&z/ie˰Q:ф>;ϜtuiNG!mٲ647;כj#"uHѳ.سmWR?~ɤ4Qb,yO尾ƞX.% |uЪs̺)R+P+I}^E  'd0B'hI~;s8yx/vy%b$q"$ kq),[+WTU>~D)gI1؊xWab!l322gעN󓭸qMqnX嵋iNcv~`%UAzD 1Kr + -w=C B7l Q30֜n2h58z v ==VD'.3gw`w`ƅIkny'ZݴmFRRtR.0DxXΣ ÝUKXS$[Ƒ__D'b6c"v7$f"jjjLm7+/ŋTaDʓlN¿!j~#雼 ~٧gm TWo+;. {cǶM=ۉ4?%?y]#w"ބO(}b2V8ḷHXGp '-]h<9=5ˌ'95ukn=UT)EW##A&ƛx<66 |jt8Cd+} 75JܿVAiTHL%^`b_{xMB  Q77>.j 08@?Y"evvFwO~D| Fb7!:MBDBp8cz ߏ>=/ϟ{V3 =&U TGû{#Χsx5"friN-BTsLdFp~Ɍ5ιǛb1zw"tygߑ)lx= Kne[.c&yOȆ Hpp\JKG'nLy8y:lQ3S96$˘3T,bIL7!nv|SndyQ%KC6BQʵ!tr٥QgָW*v1ٰ"6Ǚb !Q3AA4VU_F";eK@y &| XR'NvswU$;]"T -A\a`7~^޳ _Zj#,ϒHUN^Ϛq=~<Ƅ ! `5D 0 ;Z5֯=bV(SE,jF32݃a}n@n9jnԳfE:6h'/nW܏ShmI^O(C3鳺E#wҮ7nz]؈nDeqi[fries{A4D&9K>ulE6F|AttX3ƞ6S).ޕIx;;4aۖu֜FB#sa#T5YeRI1h4^PxrItt&Lnjo|`uc1/7BӉXJ1JY ΛHD"Z["z +rD,?3$KlX;5{"m.d+;9q;]P_V`~y ؅(~$}5(PIL(]H9 ! "3ߩK! MBv{Ž?0.^Hgۻfu$v'׭MpՕ%xdxO}GRH:Um#{‰^sm$1Nj/91|>/|>?FFq9V7^@ׯ' Ϗg2̓D*HԜHD"߁TLS[kFDNwCj>i*jV1o1bܿkC&gmi`j v!UA_ Vr,b0fy<^fTnA|3p^[{##$jl0H$ & "|^"m"lᅮ{V4DF,b1vl} xcިCb7?P_?lƹ+츌H$RriNd).Ff;cBn647®]oRED8R(D]:ZDL|~UBDزv-UDggcphnk4Ne K>㜿p KgMSKkpta_s  /]t~LKJLh=U\!'WDeq1?b'];?3YI|déY(RK!r3|\jo0.b"ݨn1Es`X:wRU{* ا! RdaW9Q$L QG,j1LLE7|1GcdP[ N!pG]= >PTyμwb>N0gä{@5ubS"A(Uja]orʨ9WĆiI=;I]V(XTRΚy"}t~DM B* K+L*G߼(Ѧ39;'H7"OI /ʙlvs"f}siys>d$jEQGRk៾Ty򵐐X`08 & *E޿<3"kĥGD}b[Y8sbl v Q3A (Ħ{cVGWH$rdkK0}9?XƂEl *قy ([K|r Tul "u:u:lYA^tN5˓뿅a6XllA 54E@nS(*1FG 9 B|P#z=Snd>_$ɒpi{f"dx>;9qֺX^kC;4XI@@+d+ʯ,A;;=227H

O4EoՊ(FWݢExҮ7‰kA.ͩQg^Cf ILih:g?\nfDGIKWk|uz|yp)bjDxd V `0KUADٿ* 1HUw-XĭNs,:ҜBr g!hg7UWb.C(L==ָ@17A"j 0>668ð;l;2^@ 'Q(T˕opЁٝyگN{_-hyQѨkH$VG`77>{jPn>mHq+nlgbPY\y?W,nێ/z}-R)5X Z=^}485ˤb.#6>56Vlİc}d@wf\aiY+yI"󩁧9\B|sϹۡι)z/C ?09*=X:"hbVUsa!BkW/yrpYË5!}ۤ!N!WFsmDxV1sQY<`éϟSUm:`pUVVbƍQUㅿkkl$ZB꟦(: F:mT<^lvf4JV"R%3lXX|ꜙ-xSBPꟷGH z\&5V]ߋp{ ёrߚHafBr2ݝb/_mމ;ܮ7zfQjbEԜ}t g=>.|MSI[W;SU,0RcV}U!A h W!5 Kg3]95Dn"Jb+s$Cߕ/*DP6ʑvD5Aj0ApjДr3 R`0gLؼWqg,]X?:ֶojiAٌƖk#G*cڵXY o݋^l%3D | .lކf%.y&c4J1r(^ؓ &a,d.j$QD"ҚܚA}kVO+ zj#Q%?1~m=ՂsgQQgD1<5^`0mʬ9x20hD~}S>4[6KRP$|Wj+y!#ؘ;"<D۹Yq%KS *%.Dtin j|<🾂ol4ELLrk3R"NA \y=rg1`7N?gZ[}ˊ8 Ʉ}dg߿xjBKg+ڮ_㤬> QP "̰0VDf/k|5vRF+|⑚fwj-R%+?0|}8>8ZI "HQ9^b}[3Wp!jh `p8/k vD"ΧFG-YW=ęsd׋TvUnSutD:k CV(HpxC Έuo$s0jSZ5Gы* IDATtzCy8yhnib5ȉk34_kwOpĮ:Yܼv cr]wA*RÌ zPSτsIaHےKqAmH,hL(]F̔6?{ެY}tރSf*Yh-r|q?"X߮:N /sZLA"i`dQ&Y$c2y23Qݑw[͙]]$ AqAl/Mύ2 " j?|z| 1A5pkY!"Uĺ{.F }xo {`4P`3d bʡ0^%xb\4EqCø\?GA +QdhqAS0Mo0 昣cc4VGw87ۧ4G;S>w yͪ|j>=6q-R#fnf N~ 䇜'#[K!|80w/Yh!6sRHp7"^W5[x83)r&Tn\ƛ_kвˊ=V/KbncLg=]=+1p"!/M0XHTM:t IM'aX|FN!l6< fկ}8p-/)ŪeE/)E^"?_;E]Ol؀$])I.$$P4|7;쨿),B{IǍ뜾L'ϊ)XLG{~[g \dR t %v{G9i#$6sx>/o*#I<%t_| =^{>A&lսyBg5d.n bÉ#eXͷ//ZƊ5+!SfǠ &Zn[f AX-G^?+sRό,gX L "\ ~AoFEE!!Ng1D+Dkhr $;W 2e݁B.Ş^_@19 5ZEqFB8_wU"$3O8:q=$$]~ׯwz CRMjJ4ͣ!(<LAN|mid_۝N?-װquT*r;r2>YqqsIA)پ ʎpVD%5=ŦKE*>A ] oh4)̟fM nLX}tDqC#ܿ^DV ~dެ2oq~E0_NƯ[ѧ}zp1E_?Ȍߵ44ܳo}Ņ~VW[:։֎I~:n ّA!\H/9r%x8qj$7Y\SX.RrK݉KM`"IP\t砸 'cd)̋gHNݳZ7A0D;r ᖺ"X/nQQ7du-nJbm)sbUV|;Ł} GV9;0[FaNY8k4i\GN~F r'iw!+-Yn }ˊIP%%ᑲ2[| uMM*55 $l*V\:Df5qRrj '7)&kܽP ycEx׸xzW<<= $&ģ}⟞?N o~t#Vߋw=sscl,$f /47v~$ԣDioGZ:B[ Hh8v@"%{,P?Evp<[7ٸ9g pakJlTçPx 4H Af`NM"D7ًXT ݪk%Q3o(AH<F#e>HD^R_Zlw8sĆ XwK<]{8t4ޯ3q8ld!+-ii4GEEAIL=ƕV/^:6LAEA YƢ|8YlwɥFl~t#N|7(7SwOۻs>̅Zdb@G«X{n`8 d 9VY9!dXs!$ns߫| S[Z4G M Iq&` rD"15@" 1I,Ij%4)JY&EqA rkjj?Uf|AӮJCJ8`~xWZ:N昋Nf GeL,@TJ)NBNA$p "p se#/+kV*v<%qXdqi[QMeeKxb-YCOŀĬw 'q&V(hQ欬a#U:7)AAJރvxomx'?ÒL7sMV}8ͯǝ7niٱs +Ӯ&k(7q$f!8-E17V  A˫5H;'AG7n; '7([,_B-zY6|R߈SAuv;LF$E>;[x YmYW{'kasFN&z\-aȦ΍r6ӈA Mnccoe崼֎^vC#SʗK%䠸 ',+FC5vJ;lv~8ۧ&~"hX~9sc`qG|yNݳH17$j&f9}յ8_w9dupF@sK#ۯl!Inat sRO"L.dQ g qZe$x|XRsnGŋxdJ \áӧa0K31vCCHKipڶ^ A8F$G# r!ԅ  }8X\7F}wd%,E\d,Lg,rnڊ=hچ7rr|_'"khiw] /_gdFL I"PF N͉qqXR~$7MFN4q9Em7gxů-EҠֹ-$Jbq<ܻ<xK)1Bh/$dcyWܞzUnZLCnN[IO% {#bZ4_F~q5)eZعǎ A3̥Y&OυK3Db~bhhnGCs;^?|۷V]j55֎^u~@o0`0$Xn\]7x5HO&tD{b'ojC[g/.5g\+=+E"1+W &ͣ g*ۯ"55 9K0Sаp&"rƾRR8}/ۯhA0vcdd$b1[_.P'a]->XqNvoI$(-,Gfri&fA3^[*a~4ǝpc? {QZL)jv`qv}=nx$h\ >q /g˯}3rG0( L٬s#bY$jLGokoc`¾WĉZٱM0ľ bY",.:8wX#mlfbm)NTr _k{D3Cf!N}S##.2ډy \uXrt&/aS^߇: 674$A7͍RRB~^Nw@ߋ~}8rj'~a2 rZR$ű.#/kL8@IAgf5C/%fV,pGP;yYo\c`$Q3s$jwo;DfGbccIQ3pǕ(}as A3q'K凵9`ي ~5g5u5~? ׌eBngMj! qr bƅ96?PԂ e74Ͼ]#εN㑼<.Y"@g6|i|~tbfHLiЏ̂ ݁1|r 7#70[mh7 Ơgo rZv_`6~]Q󇨻xEE%HLHA8v{< }/֤'x/2 &YUˊ8)kܵ2>=pȺۓyqqP 4%-Bb\"`x\ /(o[Ԇ5%K#>fm%TlFĄxJn 3j'i*yo[9?Zݕ"Jg0m:b n 19 !;dfAIAFN&Ԛ5)g5[\bX-^Ňt=tHL7"^`#\3>Oר&"t+޴f f B<r{vlӤOWɘͳxu:8[G#VA"ݎ ErENF>Mp:EU.Dv1±pZ^X6m>c558˝n~QQ 64l) TFpS撨y d]<%ܔθp9C$6)j$$x?#nJV?9}8wu^ d;"Ҙ_FfظѠUj//D~q2rQȱbJX֝OđvA\10\,\'x<ZNLfrR݋̻MR0awr#$D~ǥ\CW? ?JjԐJb'&r3o;H0Y F_{>]~?3pvDv6ۅƺĸyZE11ĊkˈALLdY6c^` !aq )R䠸VVq7goQȥU_ 3GS!Q3A܁NMЈڬ;Ή2\i-5Ie܌Ӿ* _Å,-`DN4׿yLRA$C5iPr;&x&lx> AffqV^b\֗r-X}$%v>%#M$!r+N<jgAV}xX׬Z|<ݙ {n 3wr.TsA=KQRVkVB-&Wghܢ33EO@Ib:6#秔 [S;{QsloJ=75yBVg됓 Q+Q+d)*z?wtn`D뭿#yMRƷBWn5WS&ې 0_.Lʱec9:r)2 뎤YH gR7^$Q3Kb1aƝ KMMBe JjBL!Bd?YY\F&.`\ f A9'}NTFj WR{95O+D-E-qƐeͪxэP%G^fduv2ANꓑ>t!//d,j-~JZǔ 88Zl5L&Yl6ty졝z׿GqAgfpB z39:S+z6[lƅ<Şg_䋨{?bjqU"ItbDQJ`.HU'arT-Ui&VVDj@XSUO1ڶMm@7q2JR0.7 W4ys8F|r5*YU+Qވ38y}ج2Q_oy/cOγK I,s $b1vWeYƅKsg.W?dXdn/WK{wrr\xD"q5M Foom0S>9?kJlTx+t*zj5TGAvΙvLX[D/Hʁ?J ["f(̖Q\1se "xY&0#g aԈ+W[a@\.VnNPz 6;.կ}ery<呐2τAr?W\.+d1 \Aw]81|f ) ʹl;pzݸ+!91P6:{qYQ+QϼrLvnE[g/㱤`Q'kî^_gZ$A &_P1HNg/2)]ʪ=[ rk8 7ԡ["nH"(qhkrjjZHf""1.柯}_yH< y96^ lwO~ x8s/) 4(qbF1)+Y#?bɳuز! 4FG)` U+FtuzjzbgT td2d,Lnys!I)kyK̳S.֤0&dpd I9Ys_QQQHS&n9pjg#k`6vQ{Zz3SNf:۱ [6o˷y$Q q gfr6[l8W)j>)U m|ivU@$j&NMD4ޕxb4^F bΣ9X&(ggfqQ J`4r@z;v9K`4Jۯ2{KBr b..'pz L1r:!H(F sڏb2\ dܽbr ɥ9296[-H$Hb˦rƢfT|媣>muc95Wȡ:1d%TJܳ|`e:\l|2l̀ץyzLU;jM dr+y+0od!Cg0@ $bcqr| Q3(6awoǗQaӏA*__,xç]}h써BD!bm)*֖#;`uIa؈NZ鐨 ߣ7`Y"fceq.ԷPPtL/pUagr*|M9Tf|ͪP1<9^EVPc'4:rk&"qU"u.'V,uJ@͓Kg|MQ{2 NKsd | 7GEE' FDQ~6MtFR#2 &܋u*c\ 0ϵAOWly_t䣓goK[-v8+5.C && 47q wj\jɥy.AL6'aZ׭H$,F U*7  ؂D#"5NO=s>"Ij%4)J@F j=3|Nr'nbI,fppW`Nz2߿E+(,XN "VXii!q(.-,Dia!?4Q{ Mmhjo܁6ri feBLpbuSO-,&`O4 ~Iy>A۪RR$/ooe5JX,,4Ϛ{(&7LBFkg>xAF3܎ma02[4EbhJlTçPrNә#"5@B$`4ubv=7KsvFr)r)r3ӡI'%Gd-jvtEOcQ\Tͣ0[FQp8R~/6@Db6.u^VZV-+bUF(w#eex ׇES{{@ɥ9r 0nA(kJ"U~j^%^ڻS'WTuDUgsx<A4!19=x^"s>:!+ְ5)rx?׬+2A20q"3LwsWJըg^*xWf|_~ & ƠA e<b Q3ѐht:Z_8ٙ'7+Y_RF`4QF 7Ҹ2PPq~έeuY5P+P!5eCő.$;55 }vcCD,cdOːV;qfZ2&m>!vn#'"rir27gnhH' xꛌohnGᓨ;o ].ADR%k@OQs ۲قyWd-Jd]o+#/n!/+kx 3Hh^P-o+9a2Olnm-j$ ǞooCU3t:tֈHDDBx$'O:3.xz&Ф(Uȼe> }+f"T&zTQ#1? X yoL8C8Eݼ;Efێ{^ 8u[Iq')@U R)J QZXM6q"j&"& Ӝ&: *֖Du-G:| RPGɳu>S-Xf/wBƨ0 2{Ǒe 9q}\x=/..3L,v'e.XX\oM4|']w_1Cp|dO5%K"&BqAV6 u:mUwwO'9"! tJE o  2)t렫Ia?xx.2P aj28Tl0Ga6B2I}/qtjApff]V#!N4qB%B&&3Alx?ȧ l>Y];qeaq͇@cw8fLgrx#j&:IRQsMv5n;gWwmX/+VBssO֤5\NHR~YFPqn.um LṔ9\9gɪ=ՄlDE37(.am+>^AFM:|-j:sD(DU--lvǼCRS:יp85s)$> B>h2 qFN|Eb[0J'f|B##peEXRpi"CX9M [+PS) &l*1W>WvF*V8W}v'u184$4\Δ3wM\;7 p'n17 i#:W>//DKC2;: L}#X^ܮb"6_B\ hiY߇oi[+pqZ:kDA3XDġi3 { x}_ًcb+UGqleٱɞB421q]?)1$![d 7Z~WkQ4_U}ڧb#PkR8CFN&2O4)frRN~܋0&\rj$dũYQs͔e+2" *7+>T\VvwTY#" 5艰DA}lDr:âCC4PCx< "1}=Rq E K3h A90*.Aևr/>yg]Tًw]~}Y@?4:B' K g˰CfiGH@r BwU! *v܉'q胨99q~L8:{5G8}XSlAbN}ww9"R!Qtڵ)eeAA##ÜN&eeSHfri&"Sʭ(/[BOJѰL'[u$/?[\Q^> B$:A``EV%j7wǷ 2Ӻdpcp# [mv#w̝4V,(FX95Ks8የ9& _ٳc_`71""¨̌D!+';+ُ  pٙp kn夜Es~/5_B,&07M9{JIt4j%*>ė鴙tֈHzDĠiwûz \Tur\;وD":AALch[wM{x'B4K3b D8M@!⥽;Y -V;愸9Mmxf+7gHÞoGٟB#pADx"Jo{܅/쳠Y&{vNLs?JDfM Iqs*d2AŮf ̅L|G3\ȡ7<%]DPٲNH)PH@&}nZ;zu1WL-)J֩֨XS 7AVH5Rwml%Q A}x<ˈSvF)ѳppV^VZڼiDhfx孃E.͑KT]9j*ƅ}]}~o0a߫oB.;זb˦rhԁMFvF^ڻWcOidY3 %אȧ}4hۋjbʐl>44ۿMIa]F(D́4w 6V,(FXR#D95s=샨GoId꤀ 3"IBB.|Wt:mUwwO59B»jSںzazbw/5ޮ/B7Q!TnE䰞T@2Q ".11e(1n##Ü'}GvN @tt )RHI|G{6^#?‘!;# eKd)r2q>W)pq!A37 Ff>D8 Xs֝OCM{|vh{V-~yk6F55x2f]vW&1ol-?6Rǫ7ql-+Y0CGRY# i3<ç:+` oZvg޲{o Llph$hXuBC󙇂@+T)Ɉ'M:щ# wUˊMy8! ӜE%\܍A=qAI$ kt% 51񻱱1x843c}Ŭ~{K޵ז҅L] Zi+{BDD$\&AZ*^O7\Ñ~7çP4ӕpQ?:5AQL4)ɸϋJ$,"f,!hUX_|03!N!HA3.rk"IMӠ)h߯=޻fpD">>n B.ŏ*^:#?..L|/2!LRSԐhw8@A"JVRX﹁%}o|\mlfUW\ l_xk\sAqB<cO qfWϥ9V,(FX2vn\vj]!`Ԣ 3g. 7+ZzwLM;OYRI5 F^ED3r2QQ^⓻x٫i3DO@B4:v-r>y }ull<ƻp6' r8)rK+֬ 9P/Ha-j- !σ'; o\2pti6o>!<݉}JbHosg7媣>9K3 IDAT4EĴr)o+=['fB,:@꼫rsHf˸>Zr9!x8X5tF ~NI`?W~pa6rV^b\XQhXɂ+,ri b1 allAZZ\u6"I}kl*{Iqcxf訠ځKɄc558VS̴4l*+CiA!xܰDawհnTJ|}S[K={v@T{׭bb/'{vAIaU.Z|t 's;9\3 \A6!1ase7MFm6x<e-{QL $sa&Wx$˖dB}O?Sgjl"fpqPȥoj`ĉZ7-G` (M8|l3AFt!BfBtD̥yuI! rBciGomNnf:]fUnFt ) x8YJeBĈ CC.|SFX4ήp:L Ks0`)&&:2΁y"AXSUOxW%Uܙ~Q;4*ӎ^0P?Lf"|Zm5\[۴x'?׷?U+)X4,eݻn5.9ͷ2Z̗?yŅ]mhoBhڕy24@FN&2\.Wv;d8͏nryv1:!peC*hB\yrؐ x<˙`"** qtj́96 )fظn%ZW?Һ=MH#oٱ _<ZivwTY#- ^ȥ9U-â.=7.[eboCQ~6^ڻWapn0 \ĈN[3AdVؿxɂ4[l6N]H5K;!;#-u(/K{wHc6 4_kw~S\ȣj+N>j`1RKχ\91U(?;VY5y1}>T"VXh II;IQBT%뉼 DEź V(2pCD&N|ln@R4 |Yy,l#ǵj;ѦsyX0ۙv\#TaШز[6Co0 Mm܆~7}4,/AqAs"Rgs9fw$j&add/=fU_4V k@Ia]Fp 餋8p̀0k.sR$u6ox?vVn xZ;"pD!bWf{M>TwN3G5A~@9+:k;C#0Fgn R ՉjURUIԘu>_EhOD73Œttw[3qL^d^aLXjc{V;7+ɥA>:!fG}wRBFv2r!eAj_GkRGG Fppņ^ulMsnhnqr)r3ӡQ{9W$}2r>;dry<呰rgLFN&20A܉bᤜ9 By.+ }LQo~~1E.`W2#&T-cg] vgf1$j&l+KLx$'RIm͆ SR D1ERh,oWe32? $8spM K #-MlxC椤dj^+ fJl)ζ^$8^CGD И}'{:T:7?Dw*%38!bS]͚H,,kB7Oݾ>CL] +D#X) QTB!N;:ObkSnͥc%BT)k+7\|}}=H.$pipn[9Jn,)ɆF0AX%7mY=:5^(w:8rp܃q"Fr8*xg.ײ}B+O ϏuՈhf&P|Tg),͍u,M&up2bzxv0Z̸g8؜#L:yqa:)]ۿ +.'>?_sLO?mBȊ0, mJ$euq^?wBmsk:t&$='S8}q;YU2f)! +n7~sll 3}ݻ,^SrFSk-Mhl !P[x^0 0Z؈G&A::ݥǁ9wv)ˎ}-MdH"jRłmwenܻnDcsFxz I&8fÑwɄMjC\fx.& Vk2mjGkG..*cdڌ'9 VOeS8Ë́#sy^p;Fp,ٟ)6Aˤ[3$j6m)ku^\ƥ1nZnㅬCr:Bko0LC"D&I3R̖LHUZ57 GGG^`-BQ32k>KH@2RBT5PXp}wêp'|Ue5VLO <ll$3D3ŐNЮݨ.fe"ODXybpRjnAGSZؼ*ʽ4BJ|Dp[3zlTou1eҭ\GȲ ۥu#A2T}'jfi|G2lzu7]P.8p ) ǂe(*$`injXNg[J `!JJɰ!5lA5A-j}%? MT$I$qYBuux`U^Y^V"6?7}.:$.SG9{v`. ]|\9wl^8;JW2-/WxLif) ⦅fCv+>=/2gxRtk& ҭxȩ\ |Д }Q\s!Jm H&"eS7MǢǔg$s8\NfF8PA *ricƠ?:/ioC- e2K(fQŬXԼRr^::[ sqhFh ,b1#_o.5>!bdڙS,/KA؇L8 "njmFYxef,N_iBH7r~&(Qg/|l{(P] m{`ue 9n"3}>̱\51\Z {j:=R$ڶw(xIS55\nrHDA1aY"qFEϩT͜&Dk< 6tlә%w/0D3! +}n`nd20™>l*4-p㘼adbMuu>guv7 58v4nn0n"}k+ʭ9>g7Y^pi43}=48K;c8Zn7-ߓd1ndIq8gdb"skt !Z  5 6T@cv|QMzl*\2fr+Jʼn B& 6T%4Q焎!vnm[v0 OCNsʬ`UܟlE'SU8pPuTcBJ.etZf1=S=[ VwN3|\(ߌaGmuƿ77,[~F9뿖hnD31E/Ssxj=A\twt"j44qk~_B2LЙN/n/1HfBk}~Tzro.TOr, m`ѱ7 8Hs4S]٢@K%LS-pj^"Zm_CNN IDAT 4Lw{w90::@]sslx}+n.0Ll#Riia.v r$?fd2.f3rCvBH~V&Tx.͵>A5) H*@HnDsYeiX {݋=48X[*\n[Bع -Mhl !P[-!UC֢F \A3tB]Nb34$~99SR<80-;#`C4Oh63xMQ47a2A\&-lF#n !E](JXlFhyGܿd2aS0L,b8~,Хhg5`ٰtj+̠ET$:gYݵD{ ^Y021:^P?tk&EXܸ9<5Kռ scswnCSKڻ)`^E|E j6cnJP{h˺Ǹt+!I8>g۹Fs:zS(NC`5-;# Ǡ!棟|*;:;"jE8uBDdO΢sGZHF!It3'ba!.t4TWCB՘ //Hv2N']ɺXT8). r2:^]|+?.fbq(+YS\vw8l'6Tu5#PT0=Dyuevuvton!ɚ Э(f,--)*cd"Zlt:cSA5'ȕ&r޵ M!wuk2AD:DOY\JכSMsCbhu.v`x'QBy] Q;5sͥSZa'<Ć wAkS=NQT'j!$7z{>@|~iۢtf 7Rl,焕䡇W[׃r0#)/+Ţ1>#EP=@d2Kxt1Gp3p9tWݴ>3;lt]ϭMowu*M E͹aD{۶EͽCِ#2pŵݚ]%bjuQ^D̍Mhl sC.9Iq<愨 Id ť69`^#j!DP5CQ3kGc!Fk ٥,{mp8d ^O2E Ʌ lS_4t\'F;PfEgfY1b]].*ŪD "SY n$|LMiPn)N$2ݹg+k@zgmBBhHB R)x.\<7ݝEӱUܼn箻ggfVϲԇܒ u[4+bv]hl c6wu%]6ff tzABʹgk[n׹SN(.C|!7cZolKij]?Sxa jD |\+e)d)p"*SFYH̳ H4aԕqp\bs8ؾ޲&L$I$IXy>?}& Ն 5#bxbb & ee:* lBu.ج$^Y65;]JU"h ofDl+y1EDS]FrG'e IDyh9wQY.ּ> u`k;jW|O&(Qy'ęЈ@N4T0\pyp]H&;ElZ7iq|޶in2`ՙt,p,-IA3*$f.q*i { jfviGu0j%9,vqA^:(d2,,c $3{;/asdz.DSdYƄؾ}+~^a ؤ$ab?Caz<^4q]*˹Q<+ `f5(jNo +L6'Z]$R6BܜF&&\Ѭ[^~قuk~ %j>4Jr7OD1 eIE\8ׇ dʹwcs[CN]h,~-!U O *j6h#0BnH$$^{hKNqVT_+S@*` eպ5r,lxattl jD\si~H+mm-$-: )td L@ĎjBHqd2y L n߁Pݝʽ{=k6dxYޅ L&</;45>1$1OY҄ms`SbQ3(֐r:BmRp99TO2L&b`d !jfbBj!`BR9hlєڙ?3;Vf`+|"RӋp:WBɗ|htzQh uv5>bC:J-++$l:uG7uPQKs TQL=Ңz .+r>6-|O'dqaGmw:R$-|ݚ_qo1pஂ%!&ƖZChDSK.[sV\F:m,S'9hilCFImEУYS5vR\(j&E`y55BQ3Q%`Q;Rm[t-:[ty,/قs}^ =Qc6bT,UDd2?׏{wjYer*_SS+W MVEN=[e@LA$1-ti&yN8JvlBz &=) ps>6WA(U}]3 l|nckk3;׭pk}@Dk#>tjւv%n80kQթLf4-B)!]."YܳM>uF&&SvHRVxTaQ%M;*nDPFԊnOV}\VI9Ul6PҶĴ*Y9C'Us /T o?'ܲrv\juig]N9BEQd$M~?I 阱RTnF_?sݚ*÷QsJ12p?y!%kMcswnCSK[Bhl =E85Cllc#DBH9 vUwO)^B7ټ]& l2,J6 YU /uJQ\R{wWQvzY`,TN-B T*߹f&@up8 Gcsd2 L 6:x=n* x"ΗO%̥nv󒼰tr6A ZxT |[Rdx1zy,c9{L.]fv!jTJVF0HM-gf4@ϐr7U"kXVe⼠ H@CcGQ3)e`riv:lx6)8]-Bd2%}"=04t\\3D_b3B8ڵIoł@pYq}rL6d6Í u4Xy}T .  dѭYĵuv&L_V_!bԵ sD^Eed2KСvs{,yfzQxf@$rQSPtBR(@ q 3 1S`155-6\ӡϷޱp^0xEjV6DA!(%<=NQs84|D"!t1/TWåƋb7.zUav;ub3*xػ;ښ102@63;Z J[VT{6|(&W#c4,KhJ;2fv" 0wmL'EE )4DBH97C8u6;$FyYR*V;,v72A1ЭjV[U]mI^dT*ŢT*U/)l_BK& }7>%DqQ?lssbS2yp}p/ :x1<1 aeWVy /.S'y] p9h գ5T_s]Nv[?Kb酄K,* TWx쳚e1rnH-1A'J-|ݚտ_g٘*j֩vk@;.#PN!IM6[N=#'I1o9˫[3) ^{ jf&+`ܣjfݦxfvҼ)ݺ`o-jd43 NQ5 -X6f.oۅʲ26݈o%\Mt"aNd6ѩۉΖ;>߷Yspd 7e[HH]@Mq*DV\QG,bqEV YHq׭92ʼn0xjO,TcsۿMFѮNed2KR$^(Or9F,©ٮ5ƋBǸ\^{ۭβEͤpa j+Dhѥ+Rǀ֏A 2Xdf.XԷeJ-BC,:ܔy3cPId!שzqh[>Z,  ۤ$a.xLDk2PVVK!b6gJKĻ !FvqJb\ G15]Ah!!dgQҒ~#d$P] z/.Fic$+Ҿ5uk~)j{Ѫ؝4n} p RzEr5OǢǔg,t:K9KsͽDeYV i~!`ݚcАK/?Q$tioo^@\ $7!#rlf{u4ZSY}ME3xL6nX̆iK<@jUkD4]*{)j@jQ_slg_YHuanj-QyUZmGڶw\nnN/QܯM_پN ),hX;>s6SL1Э~R 64-Էz׳^ST۷)WlSdYdقRl,NA E#+Ȓ Ij焺ݾ H^}fq!L&x<^v^W;+xQKF(BY oq6r5Om:Dsܥtjn܀`cytS7B9<}k;\d؈[s.R^U^6lE67Ј22%JnBnr&2 啍W,{g1L1osnmmFb25U5QǴT#;%.v/p:O?rVӵup&W^}O<~W=ڝkB{ԺI3i_[XԜN/,&僜Zd,Fޔqb<^Nz6*L&f́!%x}یtr<t1 p&k.͟J}mYץ٩Z%{EZqoHQtZ;t456ED|>o 5i`Gԧj.0dl#ҙe甗OY8lfJZ uҎflKBXKN)j.}:tIH^?}:5o\\J۩(/CEFs:,II—p9wUY y ݚ 7yD.7*5wORTF:(Y?E# |Kg.ͧzztժ8<|̲f܋LfKPR@RjiOٯ:5䴴īcZ3 I!H_K׀F3 sBiC!nu1x2"zAm2/+(fp !-س_]Q>_xkHʹg۽mۆvRZJT ?hں¾୷ɩ$ʭmk+oe'`Ϗܷ܃ _H)Ҥ }d2BrC[L)áދCBql *jDw j*4գWٺxɂ͝6DžBR<)55=]Lf9 HFJ6N+q+yRsBb*d2XX +aȃn p,vcʵΪAtVNBH0 TG #Ήy TVmhLt]Y ЭYGԺE3*(nJgNdcȲ$UN;ojɁA|p1ٴ&P'{{\-;uae$c F?x]Wnͤp )!ǴRQÆ#v0W.ƪ ;wIAWG22¹`[66!0dם Jb3;y.T3]]:AK8'&]QQK`Z@Q3!D l5Lu*^ 3·5O/D^y $uݭ9zl !B65\8i mB)TfS);Hq^?ɴb:E8S\<֤w;s⺂۹ӟ//#nsu6M=9.@ 9!8imԊ[! l8 4ەS*Y]ۥ|WTt/ٜܹj &# gb=LFB<Y {pWPǙP]ؾƿ 7r?Ca\nn#°X-5{!DHW=Y}>h){UqW}wnm'O`xBJH_o p`w6^dǏWMgm:"޵Ei.kKjL~^bGL&#$n{(\oYD+lV<$ 1tI~tO /dkۼ\ܼ pUF!ffq-T1l8#fR*iN v8Uנ^qTTXtjQ)XR)N-._>;[SW/1e12IXi vjN#55M$]sh9b^M&a3ےb5R4>PJ¨{Pn_kOmn IgN7Oƙ3yn:zo<;͜ND"Q>גf][);\w1xX# p9iTO2L&l IDAT6Ӌ0/gMg_sį082nlfeR־6W9j[PݲumpUlU0_!h*bpek.ivoaZؙMXI2_WbGG22%155 XtA 웱"C&)k>9xCdvrN%xw%æktdnLpB!'Zr3so:gN /~ /"r& JO*b<5fG+"k 7T$krk~P*BlTrY[:v*w7C4A"RN{hK^M,©Ym.͢P{l*ͷ~W1)C\v m;l +.Oj[PQ6gj~o6ĻEn̈́WLI)8VUxsviD;;[pO=ZBQ3wǭyP)!Hr )aD]HI[Ю7C\,+3l|T?.*pxx߾Sy(NΚe-,$r=i~WT? 6,[ 5# n%K8+ԼF.BMԘ+C1$#Jf",fgcB|oYQ:Wffx?>NX0QHp2.uPk ZK٫7lxFFp_ƙ38$Tln7 کX!?1<|02O X%X֗%C\!44).#]zY\-6$O)GN؂I5 u Lj˽4k 5xE WMI9VUxqWK3 &ddµk&S؊H^3 Q sB1ݾqd¦@sjҭbrL+ .V+H䲫NU5OB!$?fggԡp\(-zP:ymbxka;؁pD8BI!:Y _ϨJܱ߀I}&sVRukrk~y$M'I$-en"h\̦|?Wik;.~%O )ǩqX_ K^DR^xI mL>}eծҭ IQКK'>Ѽc/ GRNZ@2 DD!8KکY=nbS `fY.]qY%*+}l.B6u$vjoPL\83wspk~9$}$qrxfvF̦ ׾T%+"II!\Ţ8 *.d2ڀB#S7α?|O׾Ŏ itj6K4Cra0:?B~b_A֯ڭjҭ I86գ5ZD_KL!XOBByy%SE +aȃ_M&4>ѹ9dYȩGlɄ n6 7n!D; IvGp}p؊|zl~!voF 7tyYy\ޅt,(ごL2hT\F&Tqt/I瞶zzČy.vJ_'rǞ'[_~͍TXcLξXxBX 3q5 jn̈́|EͤJE7ҬƛwmpJ- ZbB zq.Bz,,ąf^;5~\L|å93ō=^ I`ҺKr |_?+|Y!8]UƶKKKK٬a;};.ߏ/?+ YTGG!j>=y7?.1"DSB^LA ©pkeef\=,fC{hK߱[cE1YԜKuAsKS@>ټ|GR&w0>|AyYK_Eݡҭ%(.6zM8yZDI.KR*}4"gCBHHMd2ω ?P}>A$5-(++g'&Fw_X, -H..ܿUow|SD")&P؍OyH&oBHqDVdT&J-ݨSЮ8{2]voۆfo/s@$Rx#r=7r*ݳ=kkًCas4KYܔXTjc  H?N͵>{y| VIa;rwu4_vǞůp%[6ʳ#H."~/mb沢:Xv,Fm 6N]-hnХ֏ s< ݓ6*h|5{Lמv*6bj4SbQ,vq2vZqOًZ:`,(Ej&QuZ&B l،2۷PSqm\wi~9L ХyuD éZ7_(<02~NMBMkS=<ߋR^.;kq;Ѻqm*煥[SNMG1^)}ϽΕp {=7B9Z*A#$Rq;}(GV;9y8E*xPjjl K2DM!{Ra:83tjVlVSsϏJ7I|GȳApG>Kcv /97}2^EΜĆguo3*n̈́PL 5FWKZ1[o^YS芴 5g[" !8b3B{@5~\t5_J&\.7' 0#W1\ /o%U=aw Ë́BtyL+0ݳ<ޮ9#6bZ7ʂt "Ɩ&ea,g۵HtmCs*!I軨|8 >c ;oK3 _.!z.k_BWߨjmFj!L*@eЭ&B37,.1 *yEF\n'@gB!@c"I6 ^/߷ ^*kDf7iȂ2L&4BH L)<.D)BQf߇{vnW^}cc;/?F3b蒉$)ǭBdD4J 4\-MUTokےYQ*DǤllM}jv ֿOof}E7͝9F65k  ED8Fsi٬͍ua?E]3*M76'D)5'W2l6٘2:t^j|>IIBR焕xuX@P"oaTF+~A,SW< U.]V&Vr>>2]WU5lT,lttmRN&(_W=dY!^/*޼l}CbZ90/-NBJz~IR~ΤX߯f3H-l|Ymwɂm]&3o*.8(uݭpUZ聽;4]N"}KԼ함ی*[4a2ueA g~~Ns=Bsfl TSl{]ګ4-(++gp  'KECm{o !Zz5Qϥ% wZ=qsbCh(MpsC^B䗾}܂'ʤ 57qL(E3! *F\ЏTrfݮq8pyAI&p53IV hvUn͵:Ƿ-v؍{;;[ظ`٭yJf"^ < ܣ|hp&R.C ċkjb4'2!D8t2`ᩃ)CE30jv c4;˪ r:.βjTԵ*.WnD85ҍ_MUfNͥiVNq e!D1%" -CP[73=ɷiۙ BPH~ɇ[<)d1;:' U 3RHv;@):}?ñk5]n.UGJ&(hl ).#0dY!N^6Z-X-]Tor{V_٩p7ېW|19W9w(mAYmxx^\RKRj;'BULľ1DZsi>KHYnE "}K=eV_m- !qU ~Mm2TW]۶_I/ ӧ0MfRg.ױ5T'{4t3~qx]x?{V}5B!(npUឮ9xv77!K٬\wi`XX}tf}%%E4@{hTrQlQy#SsA )dR |K`lsgYA$c*b ~nD(V**ʥdֆ0JԤ!M8yGal)j&D6'?Vf?(6"b8>NX.d,*H_nSy!MTXH9 C\E￈. &P-طnu7BI-DBPn#{sh [^q\ w!N0HQs̡4N#zZiliY~ֶ }xz:E8S\3}H>٢.$$89K,JqX잛=M0[D%g'!]j-Rx擏ϿOjs`cn Q]IG"w`N)WDnl6+N"HXH\9%p0NhT{Bۈb7\E1L&]"f#hl@Ig;|E|02H߷Dscvv]-Z"D8lvAϵM @[ [[EII·}38;x߾Wڷj2s(O ɤx]djl Ge.^ hj ).CZJ}LSs׋M~S=Bʱ۹y|Eu X?B"0S3,oK:Nr/6w"^),DFU#KYY9Buuxa8t_G1<1_VnYY9!k} (\ cl2<&#HӘ_P$uA `93DKS=jUZ"LMfp #1ȣ(zۈ!Vlep !yP@Cmwx'B[ߺ{sOm^[]U 9K/$?aCٙY@vz>"hщs[3%ؙ|YN )瞭m^\7r IDATv^(a)sٕp ݽrKyW:wYZPh)׋NΣv-Sy1I^ģvӭ*؈4s# ,BKS=iwǫLU Tyt}/ @HE\dR"9qWrȲvb-mtssZoN=͹i:{^߸t,UXv% 6JZN%D 2 A<K"f33~hԼ8GD{ppjLYCV3@-C !7s9&gV .-xڪ*-IzyyKޖ;MZE1$p(/kv՚+Hhx_? nۊ.RJ؍$J8( [U'59<&EaRR&J<693^|btٷ)gGO':x篇C.D׎u.nR\,RSm .Z25U Trf""RrrPձ% NjeْZPt:t`>lˉ@ǘrLPfQo sPxu š{:&(]4Yۃ۶=wfA4gxǾF޻VmȲ ,H75 l3{TnLN)Ƶp%'5/Fɧk'O=u屲2yB31>Č6B&{-PϟDf dZ1GLMteI(xxVԼαU[;!Dj@fr%LxC$)Ed!"y=x9z3If}P*w N"c$qi[O7[|4JӳgHYW|W6Lhfa$h=wF4pr TOG'SjXqӓOI<տ4m&k djRCRs|5,(|Y@ T$!Ui /|iSB> BB_9 e<HrL2mw~WL3X ot]Fe,[ڿ~l2HÁV+D㪐?c#V%=&L4{EWliS me,W26[*]<ղtbzA,F~_%S~]oO/S- ]fkeKmAw⬁J+T$BP嶍 n/\,XW$2i =I4iWEWׂ(:6uuoSDK{>tֿ-`5**.K­-]^~GNJD_WLׯbyU?/}o ;]W ݛpZ<~g6P6$|C\dYPs +_%sL$BDBu;nC9shsmwʳ6 kJrRda*ؐ{1*đJ ^.RZnP*kL[-I!q:/KW-r"A/1t͆F2+ "ퟍѡY|Vi% \Z[\|Y ͨ]aW݆(;7%3Z3φ@9Pyc=޿ZVjC~@/̬́ ];p Ŋs&&5wnC1 ]ӹwWfHj^Ji&Q{ګ}p`$4q2Td|VA 2ǎ#=[b49u#1> mYWU"@\n4 `UM =CW8Z_"}o=n7}''fs/ʼnXJmF$ȾF%nCoEX?XjDfэML2i+b:?=W &%oX,,`P*A5?p P*Ti?Ȋ%R}hEhM;kyu(HĘyqb鼂D)K1zWi;Gpu&ڂ 9'~d/)] Jt:ifvϝykPp 0IPe{d}'M|_md[bWOxޔO@|Vgy|^x=gRD'?h lFd3ػkmxrv?NgG/B?{~_;܆`"KdVQ$5.Hv^泧h1"/ξ@R3c!(-}PZ,*$պRs>ivl./pD"ƴ˞aڻ};x^?{VR&jnj{o7^g*֍/Q:sc9Tip[OϠJ ը`hioA^Bಶ_̫|IZ]uщcu2<-Etݦ nXG͘D:#Ѕҗ39z>{: 3Fg] P(HDt㠘ө~}L:N("yCSw%5ZU!I"x< a<ػEhg 6I8 NqP0@'F$+] 3s“w S(joMG u5MGO<oIBf(T]ÚѰVb9#7!Pg@R/ `y.ޠ%xCm%1ڡ-}}uWWHY>_=V 5[ (I@OF-H1+ݡ"wgf$ᓚK;N x(ίh#êP5\ P1Y2jn!}}ſqԔ6:'iʊbwF UߋO>c#TkxqvGA:(a4T@_w6fk[Ь#/%8?8( 8ցzTn`"$p8~ ]^"=ګڴЈ†\蓮g~6 ؅9}}-UN.=cHh69îmcs7N?h5оyUawe.ZcUypOj`rκ TyDʕjpG6f(Ũ6ZU|Q,!IHH-G,["VH Pf&D"ƴͣV?^g>ϞTY Փ5iG䅪}Ӊ yC"@u-/ǪY-G>M_m[| W9?Ͷdϵ~B}zfI;V)*l{&'f0HfGE(IPT85JDFjViی{le:>d2.X$5Je1`D鄚-}}u2YE^ 5)kUt r|0[Cr< RVw\J$.{= 눯&&h:a֦W˗P`nI+joA `U$5EKs~sK?l>YYp:'Պ '_5`_FAo਷9LO&3k6r.(;Ad0۫3~Rv  BߣGI2HU>$5zNeCdou//PRjBU$ Iͅtn#5[uNLRŀwi%L<у H$4ui~z 6n7'O!P2`AZW x_?3E`]Fwu41i˾Fj^q^&Kzhg#A}WWGTq2Ko3i<ِޥwVEALըoѣHj=n^fCԡ}dnڂ+׶ʸX `JRq8[b,FsZtՓ@p=w|hJ䜬>m-%4gME+NhAflʚ 8u؎LMRPIK8E'\X/8 ՚Oh͐ 7za#lk-4E;م/7&:,*qHj(,g)\e吏w Oc֦Fj~'B  "1 ԱOНwNGvЃ|/ٗ>u "!ravv>9NmL6[ IЂ2(U2T_ϦRML2i<89 _KJ^AgAZs75Pz nv(*͕ Ojˑ0˲CbT VIL'5i7R]]qX ʧ( qmm飏ۇ|4JϿ*YvxHBԆX@!HjVg~yAܶ %=teYKymS7@A_f4E '5KHDg*XUif?7xWzUʡgW}tzߝljUIpU8DҼ!eJs,5xokμ54L-bbYſOD$L*r\8:q[D$K_ͬMۍ]:k2,'je& L$r=A{ۙ~p_?<ћ(Û;,ݮUwnق86o&Ρ]_L̉40hpdXufIl<T5x"R"N3vnn'v.!`9J^}N9ԧ:Hc;/ξ# DHj=n 뎝5l,@Œ5͎/(Dt:ŴͣV?*')/{η٨я| 8Hс S38MLܒ\gg"z7(#yr3Gvߺ ş#Q*1) IDATpu],t:u=Kt}Mkl̲ L [Eu;nO`Sp<89-(q3DQ"gI-9D;'*az*͆HjI] Q:8/fYFlJ( blWG۷-hNJ]2WOY}Cc*4 s@DDSS?3zW6LhY47Ln'~u|yF5Hl2-gmsw_6r{cGA`Sv6I3@3\.'r?6<(/ȑCFإqT`/=X UmDܜ :>2Y% DOjnj $`,N1ıDZZO"$^;Db@1J`Q]-R"NO?2Idٷ4G}:%x~Lj/SZя6l6$υy u;EI4p8GQ ZBԌ6d9Pg3KKnӱ &`QyA#Lr4p8u]Fۊ*옥Z`bo"  46r%L3?3[Dt:|5Ng>0XlRǎ#EGz:655!(0y@z;1v 7DsgM$7tI?cav^mu<'\Hrm4CAmw;YQQPD YΒ,G&c˸f3@㓓q:,b'V,*[wzX7'/ ܓ{V9t`/u^l4jѵx? !pJ3 Ě_IBBU&;qb,FRV'1. H 5uP3sB4 @_>F3 J>Jc*$,ʛ_*DD-VmH:?P̪4\:cl4{^PSmM-0%=Zs#Z-4ʆ]l3GJӵʸ W݆!7$Um޷oݾ]G*Sb5Iӑ93u\#:Uo%D:0tr<] % _gG&Q\$N_| t1^^bJF،\M7MDa#U$5߱c'vStrO7djtzޤ/#hj PP"c^MF!$3H1Zw|LXON*jA@>M2YoOGG?z{&Š_>I;hUh~uaßK鲪:߫ Y6ߪyVڹ..YUiv:4p2,&T͕sy|/g]>tx5ѵ.$5[T8CD#ŢRnn9,U]H_w6r|Ͷ?N j(+ΙdFT4C&<:LG?zz::u$I~ vv544"5T$`mB?-;]}?~?G>~?=x~ot<\i/[g"ZJf jṞ׮SR|T6Smު>YaVF*嘍naӇ4x &x^ܳ0fg| \-$uӽ}׺8քE->q\U_]l< L*oWա"+~*ۊ;C[:D)K1""1IO6 hAYX.~O4O3|t[n7ݾf"80j`t jsmlth%洘x}%IY<7z6*_"^3i{ Iv.-ljM{IDD~O%IWov$5M]MD8"f,YAUCl3I]lLbL+x8N?1]""st]B"70,LHЗ}mK/jchK}?~N;NǫMR\E2¬6= *5Rbh³GUQUMʤRl 26ls&!^T^0uI-?[{DMބ:wo85l=xdMDCٚ z j|x|Y-É\PiiZ8A3ؤ *5pL+>T}[Vm]Fe$ɹ`&szKo3iI`${o}⽘2|e =dCV+Kx$c6:ǗARYS\ 5áx| AUm>]R(zo^z>_=9C2+8` `B F痗-}~>o_ɿP/gg"s8P656Y+W+5RbBշER3qBLMRAv}w'MLnf&ڿ?hji|?ee=)Wk9ԧ{8Q$5[L85JD݈\95GGp@o22ϤEQL2zj)B8O'Gp|>zytd~z :jhb5fVDU?ȕEZۉ fVRImD{ꅊ۷[U52`-z?^sMI&akp6et(=Q_!Qd.zfጛ<P4~P 45n*-p[Ba~d l &U~_!5([X.rER3/Ëjͅy=bP'1_ZıRxZŮ.}Ԅ\ آiXJkVfw"pJ=G;F|?&p_ʌ3l4o |S߷12E/ L@[ݘQcؘLDv{piv! h«%NڼuǺvPpoGrsi;\be~#Tk~<> ڻw \8OjYžHHj.μn_e,NHACpב𴚺,񱊒$Y )].wN'g"#CwNVJ-M@UϿ*-Fp}~z::T}@#xI͒|cZ&5lymLe ,f3Vyǎ̶6xؤfFn)">[ia)NouNy{' 캳`뭑ꃽT%1'YX%au0 Jv{U[F"zѶH !QǢR3%4\mWy,)XVI,f[uu::rUmttу"!~cY6d0lze\+\IX@_$Y&j;ӳg=V Dty?ӑ&\nT+Ewk, {_ݒ]Rpw6E6$I…b>a&ä]cx ӱI&p'h 9y;OJN\&/J|ޜ}yZihGJJh^NJS!!J&3X#p8րA8B,ȳAP6r9,kij#`#O~LXO*S:sy Ϟi:p\X~ yڎt 񳖲,5bv׈j劓\mΤMʖk?3cy6Iͻ~_q.:9&c%}|^)[S};-DGG95pyUʁ}Qxf^QhMQ$*4CevySwOEUg]MD4H@! &p@y &Qv4o{` -maIͼLɪ~Mpm%2@+5nUE Qo=0m[StM+-whem$4CԮp}m]Fa`tјEҫu/\ټ8$,ˊ(Դ%˦|)B6Ӊc""՗T~+ұ`~` pQ, @6nl ˋ %;bٿ`%cʼn`Pz,{O% 9R_ X-^wl&6tP<69 Z%s4{_y[^HY]4߃qCaWQ 3p13de@CL*5#yOB]A;TDQFt CCY\e*k W:ò)+1qǎzpYk Oӑ+tQCtBչwwl lFfPI>&3eO>]wS{u'w"VVGS}NKR`}\Fw 26cظMIj8W?wDkɧL<9~rޭ]4)M~ڇqsCRɅ]DԍHzX$5 :yT^C-M, f903=Q:b68}я>0EΣeV~+ AӘCj̬@&SCNN[IHektEU $5ef"">1d\l=>f+fb±^-z%}=r:4 uSSc*}Up~z?gNib3Urg*O克$KlLIZ`CFQqsC֙".-b_,TVx;Pt:x sdri=tAH4z3b7҃pԹqZzOE헒xΘ~H%R?yOMcߣ~\ŎEo I=[nmܱϱ EEʼ^Eh-&=n+O6vsr_-ؼxX9w#gP gP0@޳]8!"ڏHF7#PY+5G s9<@q2<GE`HexJgx""_^.[1vdÊ0p'Ӆ-<'021~dI.N⨛T8DD#P ׭ A'Ęv+r#xb\l5F*I)N1ms0=nhj5Ϟ&׹չ2CD՟kꃽe'44Fަ5+TN3)]WGw/p՚EA4L,LfPl+5\7QxMR;v26WӰEf"&?b X[$7+ݶN<?*)>ݪϣ%<-/ܘļ<ӽ~٭P{>Wk4'$54Cɶ2Hz]b_Y$ޮ׉PGl:BmI)BIAN;~P"c:62N{^oa. H^f{kJ&@z l(JJIwIIׇ@pO11 tl%mR`k%%u-V})+gPs n[kظ8vԬN WD?~p=t~z+O_|ъϼ5EoNVˢK/^O|z$J ÄT&:IƐiRHj6/\PՇ3Y'3Qys0 I7M"c>({R&+$f=544B חeaYF+Isiُ͸X:m,k|ǁȰ6r9sM%YVz{nf#A k,%4Qǡz^8]^G_;y\# +e}Ιh!7ݱLWT*ySqr+e $Xg;8惤fsBf(ϣKb_k\%\;HVV$ =,%lWу"Rҙ/DI_{iMMƚJE7p]B4f[a }ӑ9RCI?Bn' "/h`ţ \we A7:~/*̓[snm$v|AU :N<@YؿU-msRXAjsM@8ՄeB`.p"ډH@9ẌWu?D›Hj Y<g:H8:q[(]oJݤFM+SX …uݪU|BU?k,mJsoA抾$5JӾ1&y,n&ML0iFBVΜ{ GQ5}iP_?xYUx"ire$| 8Fn7( |pBX͈ [x1( fle++ /N;ek-H\f~y~z v|2MWLbО\Z7ي O "PDAͶIu"O#R}=x2L&=hS}=vJqFwTfm{E[OG'8>RFf̹LV~#w#8B}xv8&!wÈTCuDJR,ByLshkSfj`5!F#I"lQwvPE@+~W, `6f.X$@ +V -TBIRx'My^""oh$ӉතBXL\Bf+ Z3ޕ(~QmANÐqdS<8I5t9¦bp?%li!j |f喿8!AΡ#}׻p(BbQY/e9ZjͲ,#:qxbSSq]F'(kϞײUX7w"E #I/_5Z:')/cB$p VeXa<4ƮkQSA[58kAlQ@H֔Fvodnc ^׋MI2Vz_mqӫ<_; E@}MsЁtg9myJsW{ T񍯤t?Y*֤S`F:ݧa6%C&zgq@pDi}]]k݇n`1v-ӑ9:7=ͬm˅l_&\+ҵY!i8Xa ,3AS f1eLݞl+oU^QD965N$5Wfhd;v4!Y$LVhw 9y`a5 -Sg/Dw/7@B,l՚pI&w fO7֐ϣ3_y$WތR),:zt& CC2dJ$D/B:z1 _Dϝ~i~3lRfz`{UwmIjνԜpZ㲫p#+]uXIYcJ0P޽8kk){ 9pc:IHc"@%Zڂ0XF>JAME&Ta; lTX=+̢`,W%DŽzƇfsE@aU|q$,tP0(H2EUj?u0q,-'Mp{ZI<Јk3jU"U}/u|,XQՠ=Ƃ`,.Y2;JTe[yFɘV ﯙ(UE!Qumjй]Ƭj:P4PnL։ KKjfQ 0n$n!M{N,0>$5{%F$@/b+8SF.G u,ד,%l'Y /AwѥHڶP8XY^UJګ=vds_5%G9I?b\qV(,m Cq8VQp*0k6̴d L-C-䯯g}N8tKƇTmFօE>yCQoN^@jt_;:#elHj6`Ek<ž\P;jX\?BmXXC 48z?%l9 e9#lA&N9\>""5o&lz *ڛ?cL*'q:JᤄϿf}C#mٺ `J̻秫U* Uwei&hU6nqɩ)&Nrxs-FKWm|WG =L4|JE@Of bB꓂$ID @wUe(u!Eȹ-'V_~#f{<^LUgJכ)|ޫa6oM+sWr lI^I%0 ""y(zb:>JZU!h,[3A;1;Cls2K80# Fhj(g/F}JΪŃgAQ1|}{`p8Ճl`p(u};=, b,ّRfi(k f͂aXd9K*6?=tmۙT1 m$ ®jQSA58]xn̺ _fjBsY2& WSVF70& ݆+R*g{Tk[8όvohDX-We[\~6 g89g~gk@YNz ۱I&5Ký=ug^S?/R$ 81A[*Bf#C5FzHjK g%e-BAK*ϐ$tKց (6/B|74 E$Ik+8<ګ$fM*khh39bb&hNT\弐\…?~v?yHj\{D*33 A lajm !`{NSuP$>ry|^0H-}aGu*aԬUfWӰcSUEW(X'o0w,uRbQ ƅ7^t;8uX.@F? :z"MX-R@ hcfdjP *&2quuɏM&MdE(O\td~rCBUlp5Rz9)]VB3#U҄ ;VRIf#d;Nbsؘ?L@i}hI;wNۆn#G NR# 5˲lxrɘrS}= nd Z8.#4>RF*[z@,g=zt歩{3)Vnc+\̠%G9p(Ada4FJD !(ffu-Y &!<#'\<$Id>9#{R.`|WԄJV s]¼~)ZA,Ćn#Sw/Z\q8}/ܽ>o1}NuP;|I͕ު>9D J،)kLD3ylrMD7*+g@^NC߿.Tݮ|!]kLl0&$5P8DD};vy^&/=˫ŲȲʍhBEp Q)B8 tǎ "E$NBDF&/\PgcBr&oIl0ނwmqu+$ZmĹ+K:~.룇imTЈTR3+ nL[EKL|cNMf2v\LYU5XO<{ҙҮtF/>-CZg*U=zHw32H;DQTj(, Xo7j#өj dW46UQMsq %Lzѧ&c9xg\?'R)zff8 ,O5ހɜ%_ "J+Ebt$v6Tl#^ěsv'?|>p~ QSv; 5"Nbx>runZl$YN&ajn!6^V)P_#5?c<B<{ Ф3zy>ЩMd{P}8Ab.jryͷ3AR3&I"O~G&MA.b>a^!1/+Jf#As`NP:vꃽ= $I4Hҵ)ʖ+MlEݨvVJv>366>˞[1<}dbAج'IS3l 'ap' )!mdktutc a  !(}vΎ+l6HguBʒ ^s+D,`I$gTBbUfzނ`>~{=اHi>1(f"yXlbD_&Ҵ@f2 \ԷwtZuj$fPndm>@/&C޿/~N 8}y/ED%J=MқFWh kMdvVZEb_%z8ػN ԴO90uuN%&Bs~B_] GM ;jtӁ^|[TCm-]I~8{ 1 82O%1yrqtA Dڱicv.crEyĉ{V0߼QohRVӭӵ[$ULK(Aݷߑ5Kf7TQUU R|j.O0MC>$ά%Dk<\"g [I[PԬ!<:Fq@Sdbi<- .Ks=Q:+eE)4]qHSGa)S\MnM?P=0hn!^S kZTWW3$/ Kc> DB!YQ5ܐ+_^zXοg5o|+q;`29r7br|. Bp QyͪH\Rs֖ ldlG}>L?f3H᡽=x쑽%Au 戶x{ebӺ-k-4qjb-{,xZJf jt?nbJ%9$N&dLBdv i?B!ʍOzl6;]0!%(^K SN5_ 0bňo"oSs!ՖG&M.tTW c/Q\`)/,8QԼQ]E岮H&t:-L:66EC^rF1 ##cLL͍'tLU*u5r\Z,b1g 7;EڢO t:X5zz|Ѩ̅rMIWpwV:nrIy%Ue3p:P*d#61)=9xpwEiLpz QWW@W0<KHH')jFKaЈOU33p1x9{L gWC#\N. `bJ*i)ҙw̕9x,{MmApoA glfB"PUFQ1d3Uq-7Wvu.CDbRELv߻*Xu:LH NGC- 0xӟ(ޞ?OAVVKy57=WvQ}ll|%?5k 6I5SN͉B 1XL2!J0dMz=@J.O(R.d4Q'(AV&N}j7!$;j4 BH9AEYGYI&oDaGg';ҩObw6GQ3)3f}hL&L&]8i^' Ŭ/; VGբFbL4¢oWpatwuoU]F1VpN^ el-QMЧJZ .jQ/,0" iQ3 !@@{nN^`(X8JI$4t:0 IC &AB!ZwA`@S9Cs 0)9H1f;"D@엕t*nX4*R/l2O? <MYZLOR e"BKVfdc5kiXQ]ӛFv""­J'B Hiq߯ IPhNȂf}4חJ!HӘ^ɷ$ŽƟ;|^B!7!Z= IDATA۷tfGH:Nbr}1S TQ|f7Jn4f6h4*ݵԪSsQLf?]]B}Ƒo RR%hо^!Fic|!.͉Oif.%J'ϔ-3MePCAq0 8LR 'D w!M>=nУncWarzLG|x9X#0Y7QbqBɨ>RF O?y@ 5~.iu_GH#()D85fZ焒@f>ݚE2R{u-ØM[V]h޲>?/oAS}~O}6{;w.Cmvsf$'Z}W$? &xF {fdRd*eZK@*\U둠K6=1:D"Qq_ 6{n85׳1Wa&D,|앷Oa0X7ə1"JSv[0s\p5՞ _}{Gg'\`r| vs/}4kٹP](qW`2o5Vcg͑FzQWm֟&T*)Dxo^{˾sij]{!LMvopqt:sWwwo}=w Nًx2Wq>66>֒*$y89.'\/OHLB7ݽ5b#t.5MMSi3 d=0ߑR)qN<гp2fB($f]9} SSSԢSQ7!25`H1~]6473:hFvCO.y] Cs8k{/5¢K6@Q3`v}jj܇m[VX4FQխjTa!|讝YrbD&B4bщˀ8|WɁ! 4`2[0I߉t:.3DJRkJ$ls2"&$D" 1A:F(4'GxƟҼ:W=@򫪪QSS@WxR6Q>0(!Qj`,y LFuP믗~讝p PFr/J!hʘR?AF4NI6^1^,cm="\UԬ(bD;: VG}u5L5Uᢪ&D:ު ]9@os*mT֬zl,Tྞ;萹Ok[J^ƓM؜lOajdo(""Įl2JqMT t<˱. 7B gjihoT]c !Dž v<гpXYKlqgۈogGF}lQi !BH@AoUuF|d4(&gfpvF|zq=twvo%ebQ{d+C*4'!!I))A_5\ٍ= (Xc# ފ:HվYoАrV+HnZ[8-ȮUH݋SC0{<7t<ÈV>9\ $=Kt::lRy)!BHa.r憆p`rf&gf 1]8-&گ vtvb6Fwg'[S)~νVL:+u秄Ȅg6Eb9g75ϧ5r|+C nh2E:Nȳھ/T119B ɛDtG+y>66>"TIusg6[MEL*WS59+L;' .dAK1*PhNyD_] GM -)9}*o1B6jjjy ajMRlƒBgQՑݹ0#Nn2f3nL0v`G:y#f5㡽=[2Wb ^jd+է1JuMLĻ.#f\KMG}ګ@p\j=D$"ND[g=7AB8CdFW0Aq z6&Yb3u6?!CDaj(h3:!Ne"CK SR0Gvu.\2+Dٴk<.F_hfFCB1- ¨9@h.lVfLQLU\?'}W$'5K`Zl,֞,*rM|%]ѩ 3!)";A=74,ffST:[YԭFdjFXZ@QmVƧn8, TT2q >L)J"Ҡ\(+}W%hnS%ŢQ6^5@"h>2qBZЬ^b10ީl6Cd(G-q<cl#GYbrY,EY&Y8w )' RjRMVI#lL&PhNXy&mtRL0D2.nӡ&Qr͂BHРp$| ]vdcotV]F:}7rqͪUfrL&fW$rP]+0⾞;ew񴶳;-LޙB2^*"Iv<N!xթo@ J%KvwqM+$L+ )ac4zT6 ܜ!*ޙ !y"=FFu3] ,֡c3 )^["lit5'AjMSJ% -hFԋzul5BR<^٫V %⺕wn4Oj62Q)$ذ+{R:jkջ&7V"B,NYYY>ޜthK-:czg(cOrCs!BH1%c!2SKֱ^R{bV\}PhngTqjTciFݳlSY[ӝC!DnfsF|FMM-36B!$õ BnzPUULiwar0p!ZX4 P9!©PRۏ 8c2 lh!!PԬf.RZ zn}lL|F/}Wd2W8h,q߫9K[2D ̰rSu~D >LdyqgGpR'`nNKsݎzzoNrt:8kkK@" ,~aSUU ΀B!^tA\Cw7@W9t f)!|adEl!jDBlHRœJ% -hQNCEUU4Ph E9&@RnsFfKTVOk;[J(j 6iS@6ِtu$2v /.BLjR^oAyőP7GxpߛҼL& ?^9Дuuƞ"R;BD2 hK C 4ڞIJd"٭Be6%}o(h=0iLJ0zJ4eLL7RpmRYxx_cKwyS>xbص]u|. ŷ+ijt. 5'.@hٹ 0_ꊬ}F($.CWG:7ը0guYM}lf@Rtl560Z1u% B!*P!A}Dp$u"lilV,%Į?õHT3B`1kեYL&HNbfJ%w"Q{dUc+Epݺdi>W蔱tj.-m"0I?˽ީB#qgG_vXX |=`'XL0X<{W~[RCm-cO6FZ@JJ5鏐39]|Qs&s'DC rC]z{xl :U{*B rѥ^ԜH0[lHB*::`*ŤMc7t:cH1V^ ` H]Nd^`\عS搵y<sJEr ee[Ss4jRid[ښf2d!@ҩ=ǠJe 1ӃR1P@O/.ˉ fϚq|SWŹlv: SEd} ot\k(j&DKTgke6\tM8 ȶG摒?\խrj5:վu[T1Soff,`ˈZ_Tw$4}|x_ac)=53Wd2CWZg] {ƙ0}Ing\ 5,S`}|8f琈ٹ ~oEi̋Bsʪv.74$Nc%ς09}JwUUUA'derܧٺfɄBDnAtF๭APrCr8Jk@o(h=}tjRd!|$eCzad-U9CPO>mn/]JzމSg*']J56+:"D+zK*hϞ; ߇{?6r !wz~vbhT[׻wҼ)dVI)P6N'N!Fͤ\hE̅# G,.t:(&'H7HBx.NT'S)vRRa5.n[ʈ<;u5rEn&]0Rk"0y0}=7aUe^-H^_1H$Ĉ -jtF?4>V+(@iXVKenw\}:%d_… _+HsBӺkll=ViP+$]M L3M`v-$`6mWS9Huk,!`QlqmpZ(p^ ~%^17,kd2{/ iv*,,j^]>Y 55t HQ4Gh);]g -J2zPYU* Iʃrh ăڬ8 @FZt\ga/ٛE /yc2Up|U\lVluR߲d\asrd/2}E%z1%Rc2U R):[ջFqҽ,cq%pNY$= 8{4 WS \.7 ̝.H fgYK/"Ⴚ{($;?y{e2L: B[B!DB)/tj&eNS=p ۶ %|*P_]ݪHkN!pCBdaӁ3Brz= mb(l5] N++.+Ee{GO,wtP}I.21>50#S`^"jƞ;db-EͥCzfPDb+E85Gc ,1R@VR#BԬ=BVb2OL&Ρ8X7Ϋt4@o90p:K L@dLSɵޅQ C% "ت??;r #>q|y!" a(PNpCMfE'K Pu!jDBQBPIXK$Ի; t[ ZO}u5t* PL2tj&cY }$P\N/5L'e[j1p}ؤT*T*]][N>u'^c $$@V# jkyn^MԜNEz(lVIg~tuaߧPSSR8RB!(F<_:I )yI<,G[PdٴH?suϼsF\՜>< G4N$Bdff-6:[w޽71{pj^YJ#k6"l`hצ'jm.uDBajֳ"D(&ïϝnks5r#NUA-nwb^aWH9"I_?M<;wwUV\IƦhGiƮhjt?-~'=ggZŁ"SzZ,V6YkESg0t DNHuxnl\B2jٰ^hj ?GYMMn:jr uN,xE4讛C|__)y9sɋC_ Rᛞ^wSᕓo%^:4!B!dL3 Q z^/O,yvv)u.+hX)X ½\c\-CQBHiy_|>4o5`\)|O1xKMeߋnMMnLf9W(qⵗ"h Ҽ/cw/ĔG}>sI^q][n7_;#rʠ}K'>}>_^"+1#!Uee5i]\N۳'dN}ll|Ux2]$<փjecUU5]b1UC5AJq4wwoU}z/N O 0 !Edb ʘd*Np:y; # m^+nt}[L}Uѭ(EdrY_]Zl>*a󛃃=ć|Hs`(ӧ}gUU5jjjA$ hl레7uLUUL5RzD*8ƢQ@SȽ2R=D$x}pb=6(xowzwtc)M\ԋɪ3SG! !yh_/?A4ZŃ8;x~(|۷t,i\U#)F'B*h,:?/&z<UX(j.}Wh4DYWza˅ rȌhE^(DDFA*db /pE^w2Gp¿9 p8t4l [av.˗peϡq{lӇ1Ez}p۳GVIg#pvdDZ,V|B!BSX̕%o.DQ3!刈D\k$fَQUed2HIǥ9Gٰ3/\?4,NF!$/[ ,5S\`b-}WbE9dS $`6Q\gaTsHt|xT ydeً7͠7lXpcl`ZS̊ǔ߇ fg.d# L7k)?}I[pyᗏb{OzR3I& $x¾WӡG !BHF!$\%G,y \UW&/-5+?ZARO|d?ؿqysp@H9 ;F)>][2dk{ :^ZOz<όϲ Ei`utZluWyzQU:jRi1QԼdpWUT z8] !L%v馈մ|.pI=z穢nP=1EW^>$zwل=|`x~9<}ɒMO#^SBkjjB!D9%D- qoBHeb4H$THo E :WUF*h٨S:S1 yR__ 88F}'(h&Km|aTᠨ^AJ>"A(9S&@ԜN|Iap:l:&-)KE+N3>$c~x௾rݓ3A_y;y aC!D? d!^S ,!HuUUq  !0^,ÀdI.6 !D-%G*nPgdmk2if,~oF=UasrL& ;Y HJTLE~,Gb츄l5? w A+hS@rtPUG'T]_4F7EDS$F! : r/4B  {}*lnw— _}U/v C}}pڔD9}Yw;Nvj9&w9Lyn(TW|6&<ƶ9x](j޾g.yx[0M1ى"p;ذYhtm0#:t54{PB[j6,Xb|E65өtTqu6 #25VȆ~!\ OM#0.X-&lm6ς-+o6#jƽ=;pr`H*xZGZ&szz6ant5GbqMh,lύJ(jPtYJgav}6$zQ÷χO?^>7Q>{؞=L& ?96BH١K"dykfBr{TWӅqyZB-^ JSH(LQ*mR=CWˈoUUpo^v_ 0XobJ\Dhn=shc|K}*  eѤ yiu5Ո?ƿOM#O.PLI`brfF6~57:ڼزelV s' ̎A}2 EͅEzfV5Vb[{SG'pϮ.i1S\#Z咞f^9q`=<E:p^/ )ǠcӦMH$7~''f<}I[py1(8Q '̵7= BI$¾Wӡ7 !2Kv6&B)j&JhTp6 9!3"l445b?k״_(c˂.c/c7!0ĉoriiu5@^Yhj۷ܦ+vѪ}=wj1!Sdb(j.'eA%ɝl!6J$^_-H8eCc5P^^ Flډx;jg`4Bm~/s[{\QB]ɐK𛃃x[!_>۳_Se8sɋg{xv BDc9}(ɤ>B Bʇt* B))uv} E# bqE!KɩbQFkyzzٹҍU0x8mlO b×bup55L4#a 5W땹zmO.RauOޥl6S@6tF'шh,.5*$3T흪]H\앪>d&A"'6=>D"a c18͢`k k'v;>sџ%_ʜ=bwg'^/ƙK?36Uo՜>;939}JX[FgB!لz9[ɫ̦D!hT="l54waUeh&b./j.pߘ(:-4]0bClJ0an) U3ASsUU5R$(j&CzR*>f"( bȆY85hR ,^Q)ϫ?}>8uz-szuZpOʕ*Mjۻvb{N$ L}C ȍR]w( )!xhnh)ؘ/}jUٌ?^:v /vLU\o='>kLc9G_ږG=oB %d+!Zj0 TQ,id0qhN\b!cjur.[FW2 ϴ26 9}!^J=ȱc6xspOߏqYw^5\*z dm!!'t,X [0P\rdCʉ!!0#``Fvuz5;իxZ-%`U &kXDq%^Ehnk[BU׮]CyDBџAS&w\w$*{QJ #\M-p5<(tf  S<[r.}"*]b۝5ߢ^}cSy#G0/|o c% }K'>}ݹL0X<7Qu0~{.R)$P,o퐦.tkC5i~`w?o4ߢ9FCCbECEUUi%Ƨ0XV6" Iܢf@Q`(j.\g#"vuoS4R4~Di4J*fwMAR1z@`NG 겲 ~O2@$F$!PQgtC޶uu΢0oZgvoUVuزSOOᗏ3x[a Gc \'O@(Tś2B &=/BDFfhhj`|۬X-Ec Fϭ&r.n_МGw`:K F}5btPh4i`\*UZRf[Z+6Ɂ!YxieoE͂xZw)szOU/ LMVX\ EwVt[tQC6'˗sX0( '10x6VlvخYNĦ# BH&bтj)E˦&7LEsrw%0N G}>+HS鎽KޢӢYFcJŋ1ܤ2)uuΜ˙Ht-R& IDAT_LX;/9\nƛ"p:!hBSS3oNIwsӇD%o'嘢/'>O߿n| _^>WNP}1EK?2qs&TP bP+7!0M!lҥq-R1De)NΛ!#‘T6f`{c+iFQs9=s%bU#Gr׋'ĤH@LDH$R1s'1E*>•G Eqj j6 :C(kJmvaeeO::H$V;:}gXX,tEłrq]k|lELok0K}}8'/Sp;IRܽe tU9;Oav<뫫9%IӼ WgC Xokd0@Ik98٥T]널5W5C5gjSi&\ƌ&WQl8wx R|ށo#7Qt0:>5pJCl܅`ѰOʙ|T{zz;=Q%u6h61mɟ-˘>7NEU!m-p )jܚ ySSinWeH$\}*J;gyڬ57OμA'j bvvb˔U8?o}{nW^N3x=;V\wg'/'kDŽ\y1k纋338>(nrPSÍ)B*t*EQ3!$0+ϼ6(ٴ)$9 0F[ "QLHb4?#]W,cfk `Y%glFۍ"oZ{L$DVAi;UgDB6x쑽2#ܿfK;\b铽&DTapj.jZ\DJŋ]Nvz7ӡwܾm-JR78 0 H$eBMe.ل(k/6( SSk~&I6wtn|__>n6batNlXȫ'O}]]:T5i? !MaV̜I*٫A;O&A,463e@.LW= }u57:BעbRkPLUllyqt#T[[3YC 2WNjQn%/HMlo dp_]dZ~:}߿xCĚmlT$KZt&Rgc˚1k|É})|xsp0ﺼrOݽ|ۍo~'ұ_}u?~u7SB,+3HY a3+SlFH>7|A $(j^16+% 6); z=@4hD"PUl@.Q<46b q@l^XK" <W!if '(JBz3ARzɜGTySfQ3ao:Rjvn1tὬԕQhQi5W*Z,U-f 3pKf_ILq{z=Z"@p;NP'Gۍ@KxГ\)~QL}9v g.yHI&˗?AHegzwBys0%)\+W8 O]f )czfHRHRWk ݏ0/sv(z7c6XTWW1аY",\NމSgV (jc8 sm3,LtLrlڊnofgIETa\%5B\H3@*u dݱl"aUA|Ȟ=x#a]c1_)18t0(m܍F#V+; !1'DB0%ki|5͘ 4!jLs!.L\;BFlkJPs|qg/8.{Gg,z45Q#^ؿ(Pə47yt$F ! L!e"c(J;3̌<;Μ3}swt:mt%b-٢d[mJHJ&)ka"ER*#jĽO8ͥ/RL@NM u8c,鎈}{,jl&&&?8ޢ*b/  ?1QL45p0/E'J^G{w)%dҞq~Gfm#˿]\c?©bg~_95ÈzJLJ6$iP.ɤLO`IKD Dpw֡~oD)h.$0|ϧ"3^/ ~\Ǧ6hZ|catrߞ}6Ž,j5&]^#J!f~Y&Q3T*a85-v.r?BU= |bKR)TTHQJBZ{)G ZMOR/| N'^~D٭;EY/=cxgt8C==8ۋw{r:7TVVQ(a8JʙIU7|T葕Q3BkByyv :ݪQ3hwA](+| 1;5pc#. ]`5D)w iZqYdr4N^n٬k2lkWEN)Bh(Qqըӷ9b7xFe⢑ޙ;4j"јh7HSyg,f+cD],E8opĦ4;v";Rbg:8ڊy Qxr^z8](c}yyZr#R&Hb1>B.ir|'6,۷)R!JK| Ah A#|l$_D{}`Ji-0 0>wCAE 鏋kkjkz)ԚmA__ou6nDb9!!*Y4LVV˿xTzpi`:;3 ~?}g7㣫W f4iR JL:M@'blZF܇4P Q3#'B$Sɒ5D׼K`}AtD%!j0>90wjkj!hG2W^{Zt3}xSQS`EO8D9#4j[1|)C.:7'wEGlǣcĺJRPD(U:A!0eiq)c\N͆J2E!ą,!rIn豈OfALJ߼Ơ˽֡{}l ?<3|om|flZU~\Ə%iP66FƦE Dӵ '?$k&&&R[D; Z ?u`1y0 A0-iQF\-JRW$;‘£70˟͋"gnY=OR @/ѢZRBd`1[7^ojㅐ{f+hV?GKsIܲÉ] hNzׇ |d0J2rj&\*ȍ4nS5@NsKYfS rU@deM⻶8G&p̋f/` LI_Լ>؞X3b ߂&K(^;9 `_gזalz?w+ҠJSk"6ܷG̢f`ѭAm܃OԨZj%Bv+Fǹ ER`mo>ܹE9"Qd$ݶ7ziNcUBᎋBX\ heݳ Q|>Bkc"ba{7[pd=! ȋx~xg-Q`gCZ :ơrĠ˕x6TVVф2A8e \ GcT +s@IlB #H67=Aة*<2tc&1tc]J"0rxs',H<:0]F.ol%3EmM ,5pgori`]]مks~FGqRߖj-ûgyOQSPAH fAYIRrq㈘ '(!|5W+DIg GJ֭XER%po=;-ʲqrD2,tӹ$i3!mj&*0 ENrC=mmx>ގq}YZQWr͎B)JI!@!Bq'l2,۸},cZ cp_(nuMKa < ÈFc5[Sce7|l,gE. &j#qahI|eJDc1%;؊S33VW,c8 hZfTk=_ z-]>IBF3:*FX9"J]xY^?115o@(A45 7 \.I`(Np?&v4a1%ދ "& 0 #r/#jX蘤ںlBgØ_]NdC;w\Cȼ`lo/^KCJEk~ĝ [ttEK䉃Y [ƭsDh4J)/@.rBX0CbA%R"B-3d$eHi<~ &5>x~$F^w4fg=W=g+`E, qds{n{swDcva;м {<盯-IQs:s[egOKŵ#/noϬcd'A噢Ɔ:8VO$j"$jtJeq?…!P1J[LhoށwPDᱻJR8>ա˟=ؼnM rk~xӘD,~[hmcƢ5! lō)]1Q b{) F<uuSA__˧Up&$*hJBgMNTD1cųC qPVA$.bH(fY̰d1'&b;g yS)DJULgE Hʍ]nG\wD̋lB6t &˶{ZOġHSZ[Sۍ:< 7b46}#Ř-\ĆΓXV0119FQlv1:16U"X ).h$7b#βi܂ 1c$j]mf0/| ;p) ޔ&HGĺ$ȥ 2ʂEȕ_ . y"w_ْݳSZ&nMQbqUF#Qh+u#qa|%Yg&}EkihtP >؎7:;񵞞-ŁkCPbb?0#I=4j~y`tS0{vY ,9Tnyk{5]?5!||CnKU"WVZ41/vlt{09Űk >w[~[JmN&iRaLս󻿋QɈZ]Qfh!RUA!(4  ʲqU* YO&%\,Xy;IThH&5'$gl{rdݗX076mKQk51T'%<`G+O@ޅ:;z{y)JAv UzNuMdsD[|; Q6of7WMSCjkPDAj}eVӪI$nhTn/.g>y _ ?C(qqLx\R[4 ŐlnTR#J!$1HYp/Dc1Q,nKE\^^JJ9@6PO$ Fg!(]2}eeYNK{)WXRD#;`lx9=9xLk@0n,`{DBO7OQ*+[0xgq>MsydNpkÐ-F`P*KxcC Zb'e%\"ƓEVܡgb-^V0119Fџ=$j]e,6Y1Ǧ6tm}adڅ=`1Qz%&Y B!"veY^+EX:|Ib2 {R#힆E8+)`HSd2*M : :]'&5ஸW#xz0Q$ٴ/O@TPE%2Ȇ4 澿fu K$0>]*A=✎16թymy؋.AXhnoɁƆ;"f;wٹ\+C!DasYiĿy^6X:!=&!L= 1nj0NZ Z MwKg2]4?q{|y-sXE]x֜$jΝ# IDATb/`u(S)a^˯Ŀ? ܷ,:!:_Bf֦kWQƼpf%ܦE(JXu|~h)ڶH$` [qiP$A\ϰLZFՃB_[ *19J ,),KQQ_&j& Dz]%);=AGEE~ۗD ⴼ5fZv@KG%<9=y8]Pښճq]ی ޔf5;vaGWkB3 x+9s/mĄL6njq $f\?t;VXP6J46y5@3v G@YT9sX̅y!l-:HI$S)Eҟd2F<t:ۍC{1争A Cy8d2 t]?,ƂMb$]h(}) eeiܦj A鴴6\ x܌=x|S>?6NF,c^/4! ¥ϨB,ZFǂ/Pu$bnhEsGLmy=ٓ32Pm!DmdG(~i\c}G0ֆ]hu:y-kx\W@.,`bl 'CY4Fǧ,b$Ľtfo52wl2`hdBTe+o VE(jvڭ$/*α>nFc=.pHpXyXuhtěo=uC"A|Bn}[Xݵ4;vq~) \p{=pM f0TӄAp`b{T73aA)#I3@b-bwLh%VL#gQv[}<;@+Qjm}{l@w6'TA!sVK.41y1 'x}D)(ШTم]b4\Sl7ls:a2֡*\3}Ll'C8~"UDKsb#- u:sܚD͹qDTOԬfv|єiTQ <Ԯ N٦:Q+8'7FW4Nɔ7C 55Ga]Q]b!`(hw3AZֺUBn?. \5-JW bkxg{㣮Ur z+jR' 2qzYPVVR8m" L6jPTm_|4?mZZYHiųF6449ъ%ÓgpiQlAMERaO[,s~. 2.%%"{|ZLd4C2!Q3Vޮ615D͹qX̅STE;'X, DSbRQJq9O[W[SPQF⛇+vooqh\O*06>EwMيq UJ%xۂi"B lEi Eм"gՓy4d2 dE~pO{rzYBYL&MOb/Etމ(+K^nWrKdDQB=jط^kY*Fm{(ʿF\/WP%dAs{+M446 .k;w}.3@EL1l \8*Jo I&SE rkE6[},Kl}7 3Lq;`_5<g>oRPgZ9# }.y`Q;75I^;ww x/H Yԃݽ,f+'|~/,frT&xf3470_0QSo19{k zvy > -&nĬ{W ~?%w- y !w/B>txsڹ3c$S),y6x‰7E_D#Q TwĺSxAHpнGԢvabbrZj1UlTcA 0`jƋ5N\9XRh)LJA%,o =pX~fx~)h>v^^g0T*AO Q%q 1(FdAaґg2iJR|r\Pf`QH޼)Ys]Xw>[` DAQ}Z0j W6EqϡExPHt g.ǵTQ!8fT2A'"|dSD5o c Gi?VSDJ˟Ct{c㘜".:u-~^{z ]˕QNp5>uhryకibt\iD/_+WuŲ1^2~J%x\ BDq%\$UB+wFÁń!Z-7!M|| S5P?Al|Of7Xm2=9]Xrj&b}t*YY)[jk8,Ut:( ^ٛ 5ޏ.ч$|\e5ՂQ3ˌJK} GE+j>{4.^ħ/R@ ߢf>6—K\\ %pjF `w[#%ך=>||/M!!V tRk9孼(?b D1 \[ySHԜ\8J9JT+sVPkTgMGskl3rqyqg ;Uϙ7z#c^"H5:΅! )<`;ڳg<^8q*SXEFQ17A"JygOeug\)n!ϱ\*Ȏ PfB.`-q,OQo`[ AIB_ow~xљ2 {>|u:į?$l9;qk tI%W%V|rX7ys8{ >|w8'ߚ,"8ǖ $ry^ G38{4GzV<~tv? 5$lkK3wSA%wsL:d20cFt6⛇rdž#e 5#I2[OݚDD͛sX̅cze 0$j6[}˨R_"6qk8zTHrY2œǏZsuѷv%< d6|+O(95@(|hoߙ,.znEE2şL2 F DT/C_ڃp0P0RjS$C`\|ϜJA5B0B*B0F2B0B2Z/ߏh,\8Kݥ(j.Q'$.~ڟs_+j~g'nMn*h^*{s٢f^E+*p:giRn)GfF!͍~J|9g>cvP6l:l6Vxyޠ kd|qmĭ~O?ɻ5Qr9u6&,q6L:ɠBfFΞXXN ", 0p Ll^`nB<9kٓHJzZn7LLLQd H6f`sU*55Q4=>XLRgO[{wkc^:FCvs+ljthom Eq͵977bpR@Yl$MD HspMOOܳX**0+l<p 0z4W`' $+FR-Lq3gKu9nE༘v-b“ n>^֖匜d[O#V1qeK&=˒yK1³@fpNW΋cxO& &)/ej 0r}k;x,oȥtI'j؂0eC Ow8B#, |NGƦxq}.vJYKnG@u^s%yG|&g<5We,Cޅ.gJ!~d KS{~/fV3$ޟS f&2`4@T@ThAAtPrBD$),1 =f#DH΋odQbzn>P9+KPb|ɉχ|qw;WUF\|dB#/cZoY|[Էyicp}.`z/ &5jtLaɇ>q"ݘ#%[DvR:+ry 3Duxx' WzT`"<0x)r6^9U}8CNl{rc.G*xj&<ٽ&˶<mvnd"3Aez'D[`0`]V@(rGK#V-ޖGY埭۪(_rujfqQ*ue2sOLn/gd{[ ,L׏ãP*@lESر~MW/޻j]wh4éy5v- gfDQ =㱃aot_BbZͥ+XkΝx聝`J Sx;Vee45Ѣ575e~ Mɑ,ӥ^"M%x䮹{ElE]w@˨RB.J-k*`rƃ`8mՒ_"|c%{d2n*CIW$*(.1#nt))HՓ'qho xpM dF@T`W0e3K0M&=.9s*E Eⸯވu0o3A&ZCόU:d_,eg[,gF2OQ*D]NY,% A*;y O?u`eV6 ϟ8|{?ZμOfL6 E`1PE9ÇT^j1I_NgJ.ƺvAfvca.~z@RS3Q|i.); Pc%__);I|8'`Ndsg`1׉ZÑ5rL&3b?yr|SN_)P͋{AyNN@n#%s-d n( %A0PTƤ<09*+uβr:D}]t΄nLeeD)z |%55oTp.34B8FY-Cb8cv#EQ $>aÉy?Ef6{j.qSE*dh87^9oK)oq7d0 <8tijuI6@2k,eKy|SAuOݚIԼz1ahaCO\M- Ig1_9Og)E1(d lMJR`p<}-gϮ_>az +UP;UAq:D+Y)p^gE}Fj~~NB鹼fhRc6QEv)+k. p8%ɐȊ$2дwO΀.QS3C1 8ƻx!dK!B>xQ̼]]8ӃmaoX ]yE.̈́0D1諊':ZS3޼7!Qc >Gǧ%s#8 +!S t Ft^?117"$j^V@ԫ**OӄY.89;k甘X7{~t0TiEzt+o9Cɱ2p&16 Fn$ bdeP}5Oy >;|?? eT5%"O.u'<:AAu9OQ\˭iܚFev Ăaܾ;VV*dblj6/nZxɅ[֭{0puO$L q&%>u|bKl`qڸ@H\8 W.|ocڱ{ 7괜3VBf| XIy&},c8ۋV|hu:y=DZ^DY~jɥ`8Z0Q3dL$YnÑo*`,/l]Q3b=[ H|opLM %0;#cShm,,XA.FBNJma/Orp$(.E=|@e5j{ vgVlA0`pAx"WO]xkOwljFc5pQd$ {f Lb0 "NF0•_ BRNfd2^tj~Dmu \lPFam=;VĄy & "uFلm2=)ȉ40KhZq;83^~閗W!ܸ1)*X6cm5GP %j} Q2$j78D ΐ![9 _UL.&e3h* T*rnLJ_F]b!,d|'$_G85N|uݳSE*- TVVAT!~KB8;k26ǫ'M$h&TTS%H eD2Fh-. 3*a2 U"U 1dLO6[3b.J"!-j4Z&ݓrBVA.\^@LQr)qC1A!/Ss8D7&ܝyU1( f ?шq3^/S06;v^AdF@żdzE"N[ O{0>= #LAR!fnجUVTS}'un?ƪJ p>$\jS3ADQkhhCW4wd='h$J t:MkLx헧nYZ7o3&|)^R^^@^q? ]Q:XA$mSۃz>45j(|:R[k/@Tl'&&ߦ"QJDvdPюGB)bay\7%3T˖kV.cl&6A#楬ZcB`e20 C#x|[J%?26r{k?÷| }Ϯ_G뼟IL}g*^w3S5NjQ Pm$$(qXE4C2B0X4P0 'V*䨑 ɟS3Ã+ ڭY0'w@AX(ayYrcnhEKGd G0x>hAlπ#HDJ#E؈.ѻ5$j^TDnx6"?JtfCѳ\^Zs5]N|pv|8SY6}^j,2`aF NZUU B D**`6["᚞³?7ODL&ɴy"Oyawv؝;Ⱦn{pߚԖ\ZvnMA0 |AAL&V2z\s1H+0vˍ14s6XVO v "d"/RGχ'bU"vj*QQAOzrO߸a0J%N_<9kHLTjS Zjes(¼ǃD<g3BThZԺSRмA\#Ɖ1E,#T/>0$5\P\]-,(2niV+B ֭9sv[=c, =CIYQ hhR%s]-,fK}`Jhe|ąOD)PEB9 ^_5F2@*B2OIf<c0TCdQ B, B45Oq((//{V3,6ԙШI!Q͎H,&ZQs Ɉ5>1ɋ@z$)5Ds&,uWE̹ `A), G(8+{c,b㥣G2e\'vZ-nDh "Qn)[q >]b5IԼ"DJ*<,H?0#Q]n0ѧ9Q<"D%9uypCY2& 0 E.qz8*NWWbC.WdXLs=ޏ[YYE)%hE[@]H&L|MRY炊Q,3Rps*B0f!$S)b, bN#qT*/窭825#Qnbd^j^\`w<VKclB/j44b0[wg25GKEWk\P*;*d2b1,X6&x-2_xj5SDc7kl ,Z MQ]QųlKJ^lww'vfҁ4@h^ܹut\S4nvQfMS7#j&ߋ;_r:F2ONZ6YV&0`T*5**.P]mB8B LjUԈCZJ  a\cTRwěE%e(:ƁxC(tZѵiqxwQUU vIc, "UeC_}䰼$Z^ЄႈG\wq_4;9#ٖF?F?*l i xq -t!M!St9vvO|~I9@4ml LŎcbؖeHdIsǒX~̯ϝy> F~s?wxw3qCYYYϿR"(7:+ý4399嘶R0PsN~8WvvbGz;nsOzZoV'~s֋u$<WhLx<y<+GF4AfbԬA_//K8tZ"3& #ske\֡e)k&)3y0Bm&7.ܹ^o/?=P]Mż k;~¿$ZAGxх_ϵrE~s|G522CWIXyCp9Mݖ//@eghٲl0  sTQM|r͆2LB7]\g>ILB6JYc*՞%axYQQS&>\SGFwʖ/KX0'4,DnKHlzB{1>.I:sGrYzϪdi2{G?|pWWpMy.ۅ`UeKl?ݽ].*kx')[\\L*m{O~x 58[a~kUMJ~x<1]T:' @U89⩔_n֯}s(,(]wnQ\>ɓG%%K 8K4jkhcDbB> /tYY X£cjQ[{Wݢŋm[&Ř51qP$ˁrs9qeP9l&d%z+ IDATr`8P$bމeVV.]@:H9 <"#Ϛ-XibrR##,8^׏S~ԸzJKz$ -o\ŋ ++b5 $?>Aw=_IY_^ GKJOIr|-臺9G#Bcw3'Ӧr^~}~=OQQQTo6|C9oSsZF20x$!GFӢS ?ym=է3]}l4̦I {<Q'~m>SgȲKڂ"ḷ/Niɒ% dҽžC T'aJq֯ʿ<3:vNά,.ȰFFj[qO.|ɦȄى-=>B@9.LNih$qas]Y[w~~6tX^eΘ)r'\M.:ԼyNq62̺t}g%aU|YDjDa[ZB'$;>:֢;ۑ W8_MyK?Wc鄜{Չ 0m"Ԝ8UO?^3rJ|K;rۅᏏ~ygY)<+- U8<`ENdz GI119 &b^NlXļ7x> %wp4L'WkJ=td_ C_'&4t~!lo%] <ʷrgKy?7u~ڪߴl~۵Z9WXIYPwݲI]Kyznܶܦد9&!,I5U1Ѩtt&Pq0̪@Ggey?ߧ0?v4#'ק1W7Ն>1@ PcL@Wz?HhԎڳ,c>~yh1*.%xL&{e\^Pk3;x<xa|LcHCD9#7:Д.~{f@?ϝd\^=:fyvvrnPlbb"uy/ -dl5C0ijj2|t'NwQ :wOYYK45ą=Tbb/0x(??ѳEU=tILV//׆5ktsRYYY*xܖ-upS4Ղ5KCeeR;Q>TӱDx<eeeŋ1/+t%$f --˭w?-G?=:qm/tH:ϝc<Ł@USGGL{yE8J3Ax1&EjU14nw_tiA׬|<*ș65wZWʓc IŒǢQ3C+**b^FqqQRںfU4<2_.U''&599V \@{n`0e4XiG;ކGb^Gt9L^߽GyIڟiozɥK2nKU/Hc9ѵ"tVn&; TTȴ7q@QR ږio8 P3H;*o& 5U+$gpU7*571Mfs2lX_l cN' ^#vD=^6:dXL 57ܸ??Dz1PHvvAPȨ6a 8scyf}]+>kHS+ )bl :d~YT5vtt !cB́@6IŦ.$Ќֆl0580yO(HݡlN2 .,˚3Q/3{3e(Fc0O$CoڼoJLTnu<ޒ]d{rSAnK|^|f>Abc9 \_or)SC&8B$?a3c;&;~TTPp8mv|OW%^ߜ*S]mPe:k@jEGGtjVH1}>/dT>}NugKv5d9I"j0VxhP/,c-p*fwsZ>r5Iz!ݷATjJ3-]/rHoN} #ѳDl[pXfoXL圞PeyhҝXX߭ .Z/ׇij&Psh2q7iH;N1} P)iI' Rw&%>J/@4Kz= Ć@iY'! fϤj Zw($۶*X-r+~y,+n[lF@ PmKOJM |Zה}f鄚axt 5U^Iw>׫ &m\0<ٔN9EVֲ.4yTjv c7eYTj0Pϧ ͫ VceUcjV EKJFo,4zה}f7}VWeY6)<]Cڰ J|>v5mq PՔnvf7UPmKNJFo gx!ۦtt 5,R]-LW_njUttz3lo%f`N_PH۞o*~y,Kdy,Ut$`AzMm6I/K_frײwضzzB4'ԫI)j*yU1*:7ࡷMm^5c #@0loW۩vuBQy9^ۯirUUW3d8mJ&Ԝ$r|XmaKۍ'IێJ,ڠת.djni5i5@UcGGij%՘>4 Dl[--jni5l۾r5׫~-U C&6I"lF1H{dJoݧ 6mؠTp4PVy5ItgBIRWKfV>r$-̳ ==~핀3 |y  ؼҥ)lF`8o#GevFtej׫߾.5cY H+k:|䨑m ::;"T5ܾ U>NCUyCCڹ%Yk̈́ 4jM~qTjf@R3#:!z9ض7Ӂn4PWktۦtt 51|^J|>f8#G3pM6)@R]0v>vtt9@+i[iv2am[;wt9|}W̠Pt@N߬4#M&7ҪOi算4YOWO?vڭm! kMn6oN7OX@dGlSz}>NGÖVC~SJ_e6!&o:u<^ mt]HD=^IZ |>J|^x}k0{tFٶwz6VVT:Ծut9Z!qv]' =QiUUW]mP~?@Jwu*SUPۿ(`frڷNdr& m55! ~z\̲, ~A|l(Iv]/sLVxhHe3j_WfjPs40˲x 0d>Q>۶zi 6mؠ$<7ࡷ 5Bz,: S*<4dbܷK.]U%՘ضأ"mu>rԱa:ind۹ҏw6+>sNķ| snC~}'cĆ@U5#6m Iv澴Aiiz2C,Ux]~qh2quAn2@Dl[:omi9G﹋i[w(v'Kg8LxhHO?6A /D$ɑf'Wj~Y&/`feYLE `V:Wv﫺UT S: :`3~CS :OjTlb6myAXHG7)<4@L"vձa/O}y**p+PV(wnbZtyxǢqL`3WࡷMmޗ::;Oj%5}{T kc N={637 踇@ U]V'LãQ Nt 9ls4/ڼ믝֧N 5_7 "W^ݣG7`YUmڰ2#GsKhkQ[}.+ԪjQmdWXm:7`3{_ڴ_vtt59?j~Y&_}OS [Z]e61O>WЃ @عkNj/:p~Ϙ  O?ۍl[GGSCCMlo׶cO8ضvڭV:cgUOsڥj["Gug߈|?myޟ 3@ wػ}k3i jfIZY[^ qv]E3ǨU'O[6ヒLw(CCƵ(߭[֖vܹieE.+u:t;А~YfZ s$i3ǁc`ɍk_^ 12fDZm[oݧ=ЃLO S.+TC25-M۾/.p͵)7zsn=ЃuA\r%G58/N#g0'-RXmv:#r]Tm#ڹ%T]V-*U]VQVgy?ҩ3)i#6m)jd::8/j63Wa,]U˩ 8ԁ=ݮlegeI,u\9Yregld͹7Ӯy =FvϭA}q']͹;ԏN 5۹uAB0_3Øh.w/ߤ{7ʝvTVZ%zc55wEI[wV`LΐUMN4NR3@ bˊRoJ=Mg߈ u(gSwNkDz@hxSLi9;kU<˥'MOzO;А^s;$&IЏK.] TĶY`rأՁR}nMVJg>>3 xǀ#o+׫_T~?HT株ˊR\*+k?=?Jʺw9$7+̙s~>tReIضأp&=m^W몒zoDСc:;b6,K6m,Ձf3KRIqJj&+\ o uE5ٶRE IDAT.G<)djAFͫ%W̩P]V"skPvϸ ζmk算4o}HTݮlݻV})[i}o]'I 6U k٩ AcĆ@USGG~@QRP3]4+/њRcأ\\CǺtXw ػOpX<ŀ|@r_ݹJCmߺN}# Wj$1JfHJ_eڼFPs VRʫ{M:TgU6%~sU۲sK!bzG/&ІڥwsQfI*eؾu]BxgKL;'56^$ Wkni#ɽIZ]Vo~:tʗ/|Y.mߺN{6}lgUxh(떀\k\_Toe.+;V%lm ΖUFWk6:TTcR3\mxsMN\SV֒55o}AwoZvlr;3{{6Tndhv }p[dH0óM&7JveY;wN^n LgGoǝ1@ˁ%}{oUCRc*ם%ʇ-$2Q/2\#ԼH+ WjWsKkRve5|7/#ÚR};_R겔`3psWuhvJ2$dٶmN38cdrj^ f]+[|ef-gZʳ\z⡍{֦ El[Ť@$3zǪ-;Y%@&38cZT0qƆ*c@}  %|= 4K[5TZI 6zgev@$] )MXVE8 U&7Ԇei gY"b:֡g%*PkZuY[_H؍l.{= &m}N 4K"39h@L7 _ךV+,IBf^eEkQ$:ul3~mufBDٗ74}rykm<K A*4`wNhu^xXܗJ@j ]]5J6 w_q.+kݮl!~CUHOu҃/*~Ω`f <)t[3v[hͲ 9_]ysCsK JG%ɝ C2y9 9kniUCZ:de07m^Mkw{&Z]-dmWuxSnXly.+_=~'%d ضyNO|[BȃCa ~g?KjH۶30WK|^|+AWXNVvt\]<:<˥zî/S $B ,3Y pC 6ܗn ,o\ T祺3R~]nr_ތ^ҾwϨT5??Vg߈\>^҉ΰNt}"+Z^55%ڼJeE XSSBt.$DzT/7ufB&m2upUd斖-{M*.p/oUIRR 6m(bBk(wBmΟ}_Iug?TWᡡgMV\>׿?tUT֖uI>[t+:15Ύ>ez*-0:Pq]fwf;uq~'R$kD&DzkE_b0XJPsi "Լ)R_.E"ƒ!1'QUݮETw0q`]/]ಫ7o@ I LSzUsK'7+媬s쁸k;՞{He;7Zg _9kOzgN]W9F?ާ >O櫬){J@&㳟g8 X9L*;:7AF*IjDcp`м6՚ӦW%^Dl;aǾז˝prvV'Rl~~*ȨԞ7˺C+#vk3mA3ׇX/ٓu]ڝg]”~vԜfIVqN/E'Ԏ_l@IBv?@B o\a9Ã:,V$Bͳhb|H7&>Sf3%oEl3]-?9c[n*_q f۶ķg&w7?G9'sLWu^Ag,{%塤5aw?SNZ߼u{QiKʳ\?+H03>PXÿ ;t$ScڝF әp h >Ak'5r|=S YnCEWi%lIv'ԫvkcpT[g)\ ^;W|vu( 敳Z^=&oG:t;Dz?,J=uݡײCLC O;4BDy,k RCCFOE8cyNr7-sh`87ӮξI+}skP3Uiܞпٚ5jڴaÌ Jw(t%<}cm|[u`P~fP;w eڲrߟ +:15e-4SBQ_ܖimc՚#;3K-pVsl!_* \c} P2"|bZND9Zˣ#oDO"+?;1CǺc=w^oؕv>rTM>7!W>g}H :?: p ۶߸{:L5v=9]ڝ<Ο*uM1͔':q]&ԔxG|ONX']4J׵|Q&4ĘPs Pȸ̲G'$ӻ޻&<-ӻ_~ V>۾u$%-؜.Lq~z8`8p8>"P( <*DyNd1/Ktb{#;B%o 34BTj ve t<s϶o]ξuS]m:xmIRaA|>J|^|ɡkUqG/\Jhݺ떚y8߭NOf}mS;ޡ#|CKy37|ξEe}yxSyܗO):1uל u Sp+~[R,owQ/,q;zdGIXbGlvepy 5SAA!4FGkh(răLoO619_}pHc\x/MAԔt%v4PT£ }i[typD﵆Wo:Fnjγ\ھukJq1qsȀ3Mϳ?>3 retg ĻR$ 3ї|yr솯Yfb{̍>L믥y< ײ%I\\#z7YYY*((TAAچ)Ml͟+Ȼ ;y>o/[\n54y?>5rj#\Q+S~P7լqt_ܫSk&&.P⸏aMM9#T4[(^2:z;57=PPm>3@щ) 8/?[K\>ݽi~7["mߺ^Oz b5aVAl䙪$l3Ν}#h`x\;4վv1׭C RjԸ=A'7sY-[7$_RlLǍ3RRʒq+eܲ<mzoJe .^a-c" $4Мeˆ0uQC#krœV+G Y%?.Iq 6 kٲ׸ݖ@jEGGmw:aH/ 1/giqX92O&$<44lYq1>>;"q{iÚFm\󹘗0tC构n=6'/]R] mpx\\ss/ w~quޱJ?=x W'L`"U]7KtECϝ}#Ǻkc47kdl}yj]u'ǝÌ `>U%Xs%[R,oIq\/^$Dg nw:~ 9ԤvMY[KkjS-+[S58Vx`H/^4j _YU?\zz,>9h4hԎ{Nj)T5UnxH|nwo?ȒfF%%-ˤ %8vs6PfK4Kio6m6om'Kl6HB8܌6ؒ -Ku.ppMh$}߯W_ =gΜ9g|5ԘL_~Wݍ7rB˲2e`ǐJ.ML^RqOuLY!洣4rY]p8H$B8:0s ؆ӴEC[?zW IDATX`La3Qa)t5s`wzI"0,Jөn[^EB $was}Cb.5!i*,i_:;" Q"8A,g2ZO!<];*<񳟄A3 Azf~]: Q_NM6Zd2qיuo7cWOz$'fdVhF;S7?˛nCT5rVU\/I"T^⤻KsS{ qŃ*Voy?~y^͑H^o?(r9J%T3˱lUELDJ"u:~t(czhA~Qi4c܁%VVӦMO9;ƒŠ#zݍ"2ٔ|;a!X _1r?&. @$5!kJa_oBo/-W1ߵ7^އϷxdC~B֑4רd;5WKƘP `yaZQ?xk9xbQc2[c.^50N)S`ppp ,해yH\!yGS brT~z_@ lgxKMslUvFl-}Rlk4ϛ,y:53yUlbÊۍ/=7/\.my``98#GA< zniyy 3qkMw I0Hx.jGO+jLf8D'] f4ߊpBHTjӦIg,4b'5[P6lGm7ÃAdgk~vK4c r  l#hkmG:\n$iu p:hx7WFLϿuWZbköv8~lca,*筎ySs;hٗWL|3106[GC2ʖ'JxBd2Vh7|~RgMC4l1ݕ *׍}n7n܀ۏlȃ5CTNKyPKklUхJHEFr7WIo \RGWm+ヨp@ u!P#?.7t*dS@K|x8Lo~~Io$MGJMwIC&t9 {塆"x%%`Y~vB04|)ؠs" s 2"nD⼷ 2LPQ(Ϙ<ÖpY+@ڊN|mwS4o|>mZ3z\=`q (\$\݈Y"AD2cv f.A[k;9+^oO㢾> $*5wDs=Ɖ' AC}#q7zM~B# t* _&-XH~s/,+5z4`BP1uyקaI껯)jUkasq{L8B0ð4ax#7pz75xz%a2ADz1cv f͑H==qtS~AT*5o70e Q7K;.a\!8Fsd"̵q9X`]B)LI&S\-՛X;j3p8e3ϥC{b~6}\1k'/[=~P, o.+֠rA2Ad0 *lŻ?Ǎƽ@4;Jz:@Nɂc9p "s\٪ll^/˘*DB tq7"Q8{󥬸HMጊU` ^}BPO$2`RcxcD tTc(6ha.2 0[HdШ4@ ak"/`0+OπMfV ƕORA( `wzW!OpؠŚ9xEAzq\ڹaA2 @)y: LADCqN-^jA pIB qM0F!{yT_|[ˆiS٭qOʒS?&k,o:047 ׯ Ggoux>c<Y r ]AeKQ6 8v6)h4>~Ӣ(y77#wj|DcdD*5Ʃ` ޽ inI}rAڛyhy-g(ʘ~yx faxߴJg\$z <A(dvoqqKӥ$b O+G\{Ȃv~ qD"ax~(%Hߵ2\j%e "iKnqřD/C#+K8GQ]"k\A% PdwMRyB`0`̀p.R]7awz_1Y@1Y,;Ѐ_^}y F ``qK&.2XV=ʬхGALՕXVuϐ9 |;8[6=f >4l5!˒Ex] ؅ʓxDŭT"D4< 99սM6nd&e%X B! &_g?'G0xuLf&4LdŸ} ysp8>ЄVW_~L*hT㈗!Z;߾fsKXݛjX9PAȽ,Ʈex! ~ǂMR'J.k*@f "~fՔ@"0aBZroҡr\.ɧƘwݶtˌo @@l7 PrbZnA[k;qC&_2:,r XOA9`z ,*t^|Php\`0PZnydVhFTPiTXR&G5!̥&dzsS*i7rN.p9UbA*]I"֠L Ae%fv v"`ϋN;X[ŔK%֜*.BI{p{i"Kl \N}Fc[/2"1aM$hz{{a0%fB@O(JM0䍈†] "!ssA.m\2029Na:7qYQ395bS#+t^i \2", "]:lhkmy{hC^˲Dzr^b9:w KƝE #a2萨3ȩ6h78HŦׂŶMblZz-mXژ\ "V*T`يw?>}]dһ5\P{<ų}fKJSOܿ*aQs8 5W;%-j&C >G. &G.B*Pa)1y9wAx3milWWb:Aϛ|P߈oF .WNcamZ[XXX0Ʃɓ&' a.!ͦ Q(Siaq}ڸ\gϢ%ێAبXWExina欬,D":!-2[_B>ge1~_ly"Ps%Ӄyw}`ؽY(Syx_j@m/݈^lX1*Vk,xnž3o?T* % ```h:8 0D* vɌ2as_ ǁeU8ns-!]+,~Gf{xެk`v  ԩolCdDeЀՕ8v6AD2[P6'Lʳqc`ڮ>WǾxm1Xre?jG!IJV9d*:Y< 9$G4q'Eo]PJ'ن{q dÓlCS{3 nq=5ڭG^MOs,v_i|9JBL,9;m!$n K^sG;Sؠ#5s-ԩ #0~~\R%yLA\5C,ZhnAs{0R [qCyO>YBѕQ?+QIr3%#D76AJ]ARmhk\ILA$cQr z@)k,`W7wt:cMi:fUYVdq)aQ3k>r2L Y9փ?&7LJ Z}z/\6:,ϻ+ ;o{A W̕dn=\Bov-ACuş95| 13A!5ݍηuq  .̔4@]&Ktmw $x}I|K Q3ڛc\DؼVint :֢rrrh䟫ėd,%)lno9RO9\h !nܿĔcrac縩J>ffcN10 bT-HML؝|Ǥ k[,vN9^\0I !7@|z("fsIt5 AAUR Kxl-^4:֒:h^o?~deɑ )SfbrX^n)Ē2#\918 .w•#7kjR\\͠|C.ͷrM9>#܈ 2x\ P`%="6!13A!ublN?ckS˪{ܶK1.SʝB0 KOI*kT;R٩#'nw=I:K H%yxmhjov#:, y4wdNҔ9)(dZKvWREGOv^Y] Kٙ)ܰb.NϤS۝XK q19=C4^Kp8 ~TcPp# B"8ԔDML@s{ψdkH$F_ !asNqNF5fFw•9b3|Ф7K^O|i+T,=~q]R8|*DE5۝7?^5s2ulHؼ j/@=dA?BwafK0q7'p8FGAIAbk*猸899ds"̛5x]>ۅ̥8Fki|=n?6;P9(?OǡRcN vM4"ѐɦ$Č%Ԙ<Ձa&ɲ UcY=$T' cG{.IkY=eDuu*j֌ T[\-ՎoY"3=W3gqaoe%磬Č%fs"ڷqa`ޅUA!%V-A l߿1E2XYWcsEa$ qp e8.uvlC]cjgJnJg߄v@*VbvұTAG?As{/:<(5墦|&D7p3A$ztn`vqd2+3PjʅsI^L  VggDSM99z <XԼp[XK1}?~@%[,[@-B4rtbM.';I4[z}9EA1_q;XckZcaV_!X5 ð$j95Pːansa2 VG_}WB7-\d(ƽ *ؼ0ns29xqe/2[ʍ)^A*V'نg]Iqm6認 (oSqx} Yx>ҍX钻\ 0^B]c6[2ݮD7Fu];=o 8Ë'-vqذQ?p!2JKg`F&6XWfrc& b<%y0aÊGqZhR¼Y`Y DZ;=}'NbהDȜ?Ư8. Q<{BN͟ 8`߫oYUt Lzu%b̲߫ 6~/-#Qs G3 .05h.>|إ rgG0]P 'zq*>|\TBR1A1itjg|&|ЈSn""tc6.].4xvt !]tܨc%KKo-KM,Kjw81XOuZ r,8NgRU,ˠJ,* H|G2%D̔YA㷵5F[}с+f Z#^_S953'b -NU@} H'c S02D\w L(Xd6|k7:k_̨Z:$b6%$H' *Pa)68qىG E/4kՌCa]g8zk$k/ vd2jyqDqt&~]qh?Xcf.-947EQ|>V_c"  2eU(oƾW&J}=nX/dTO$[7\L&Um1QA䃒$ CdP('^Hϙ hjoO^~A0qs<>`sE-wيGWnUYQXe0`賗oD#-x9Č,^9>8W'J6_ڊ慼doSwqY[E)\.BD(Ŀ[+ݨBa2=0^?r -Nl] Ξ~(^L$ohq%j ?|Qfs.89F,4Pj  b Tvu8Jp$lX\fHh^csN>+KL.v|.q7aH4hFE FaDmس㍸@m[H\f6a/p8qe z ̘]B  nBc,ks Ğozu%WWF1XR*:`0(Ū 1EJ@VVNg*aq * Pɹv9_M6&"`J95J%rEDBP@KݣoDS4jXXVlk(jЏ_k,ژp۝w'0gdhr tSEybŏvbÊEO?}ހE=d)G]cGLqM-f19t܈󐨈  B| ZlXq76vgYlѪD7pɁM.Y87 8S킖q-iX{I5vU*ri&⇏@ ^w\}l??")_ kEĸK.T*)) HG]/ў֢0/uiZyoJ;'1 +UQhbgH#𱫔ٜvcsu8tڈ]{;Lް-eAdT aq=4r{9ID`0@'慘7fl߿ Vq=؜v-ۚc:W݃Cz~4ut"PШ4$`n>k|^79E*<6n>+ksS{ ~Gd,N8o]1%kWe2T*5|n`(SM, RbvZxn!P=,vͅ%sὓm~ǁKذ1Gq;n!8z־@Bf  Rq SS>533F)aެ|,kDA55zެ|t]Ģ|ۏv~Gj梦|JD%i\Nؠ٬ߏ^hF\܍. HM /\ƅ+(6dcެwW+Qa}[ 3D ѕ5!ve0 iP(y5h?1ۄՕtzf!K$h& 077Z8~R26Z۱nӚLsŇSsVp[\L&UM@zMjvR܂P*5in׭rAf`ȵco '/.ԩ.\>)1?Aŀ/PՅw8];<ظrbf•s"2A&p~dds$[hsd ><יA}Nre0 C&Oo(hkl~餿o,4H Zmŏ~k|TqsK[tա[8A!'kw ^/Wx['5nץϾ.ם/ aX5tx^N77認P*{;rS{3~گD4s oo؆3uf"e0,BṔNC B݃EzmsO> &cvi޼jcʞ&[TuirnR l\1ssRN O`w{c _R hlªeFpbZ?UM_OR# @AA*p;=k@C3-t•nRm_#J:D/ʼn׏\<P(yIt9&Q3˱0&5\M-XV]p(,f}n_[JTLAᙟ-vMW//wbݦ`-3ϥ9ߐ%Z?kBe.pzTc>VދN:x6PL&zɩY3g5\>DS{3|?lN{Rmka]aي'n! ̄Tɒeaty51&y<< z?1nw~xt ZWri}1eɩ3~N"ɠdq (%G+f@J 0~iAb{5Pa)D]cNm]qE \1ݚ/\Ƈ nXK #ۉ  "(6haذn؝oCC`8ǞMЪ,b]=zʆ./؛ Nv8'x9*r9e%a365bMgj@ ckV۾^7NoQƯ>,)k 6}#N'xy^}N'V_14?e]B0\.; fC,Xo<8Ti| q$lԫ3flmB",J."=&g jȿ}.7su8 vSмiZZC4$`&R|Ȳ`wtPcR1oJ__A?v߅[CM1=ZJpA - %j}2)xxbo ¶R.I.w%#p:N]t@ K!*,E$d& b[XXf'>:^T<A=ՎsXRf 3n~TT'd29t xa؄v η\6h?/6πhfk|^,R& $`,4k?ppaQ2'D_6=t?^f=wiy}#?6\DTY_ٟC0$ne&dY(LEV_br ,ˁH.h@ 8dyq? >Wˡb9;GqGʻ{_G|]4-KH Llu6y(,9iPq*(ɕH!8R Ɵ<*ܿ ;?t{|8'U}קf?~8~qL2%pPH&gNdF A'\7a)'W~TΆSy]?jk |k8Pۊ֎I{Pa)a}s00 y  0il̀1O_ ?m/ -]P߷ÁVD72l~pyb ?FGuPBLoq,7fNéD($22xQ>NADl\. >Ake̞{׈y7Ǿ^K7jláĮۍbc3z;g1.SmrٍϷhEqkD$9mw{LE!՛Dn`腊+8gN]]W-+^/eD)sي'n bo(YhTjp, RAvDź7EALȣ6luA>8WÎgz IDATx1diZ|5vbެ|48[؜QS-#Y:N"Qfa㊹{f9({PW E1Je]a)=5AADbRukHs0+ݸpfc\cXrŴOo>,h@PBMeeI쩩UZnA[ N-su#b?G}\ $ XXuXH" BJX-1{v]‹?ہǾydL+,`:P1o gF;upA!T78|4()Jbj)7nd*G?b F6Kk׮&<Iw9x4ZsOo W1=_0w}/Qc4Lb꤄ `wtPC1ʻ{p='ĻkqBߌys{ N]<TәÏڀ7G/.899yPi0q%s.wδ7?\now.m#Ԉ J  vonq1oT̻+?eCsEۀ@#>:/{>&z}]선~\O8Ό&K88raY}k3Ab8:e]6 ]=;؆U6v/lDŽ .d*vyN]H$o݊:cR\ܻOJ \J3"dΒeQ[3/6R|h]Bs{ Zlx/z}w~&xj^Fp8./ZcQls%wnoGOjw[W5ss FacN79S+3AADރNфb0tGO2ha.EHf: EM_ۭnIS_/Jx>1`W"p  '`߫o&+(U%?%N՝M|%a@(4(BZ\ RlU>M6]?8e%xfӒ;f_I16܀UKkC">1s(^G%OW/p!#?OwoK8N:xxݵ}ISnwzOܹbN59͚\  yB]c;ٖ6Z5ywcI2 no|tvgZ9(1jqb ZZ4sXwr䧒Z>ׯTA?Zj_E{{}m #U==KĿl*вqT;uCV"jnjoAS{3J̒:3~}WtLO|i+Rg$xAéiX $KJCAČUG\sq~_\>5lxn\' Z$iqz< Zo|>©j5w'G&an\=Qs(;dw᝺+)%}zsy1E̜=3Pa)"Wf  ʼnƽ9]0gcvQt[模_^1:3(d((0 +/2Im^}}niݦ`-P'$ 4ľWٕmb!Pi38L|`0BP`ׯKlS-*5hVӦMS̖$|3^ly *VEVBђ3AO!';%ɬ|Sj7w{b&sm\H2 EbS﫡bmUwWn]WvW(*~[h  I@H&$L2$s$K993 s>s̙slXrLS~?5h|Uڱ2Ai;]WP5⏚NEk qU3x """1->7va9:9ȇw2h1" +4bNBI122c,K Uwlم;$j^{ Q hߚ6\`39XxWpќʄ״?z^NB~AicbOʱ7 f ?d( T˹Zs\,)fVsnrrհZTg' ~گܞ?XRs˽顥8ەrf $ᛮY d7vS\PU&O? ):k.wauADDDD縶уw>hcfg|6j RMHFdCVV6J/"ȽZs\8Ɩ ۱wM[qDDDifǖ]رeWmki;Q2)H~ )/)tG,nu=Xh9.!.NR %V4ȺZ T5IYo. DDè7ⱻK[_=6;D 4oU*UZ@hvX{UUEpڲa!YW1>PꏦD9) smե{[o`o#<̑V=ْ;h7!Y0 P30:`ǖ][]S~5=w= .hnuE6<l>3Qr֙&t:hfعO,GHjT9,4 5ᤜedd@ ft{;k_XpXj,@o/6Yuq20ZhtNYL 7+ADj,@́{)"ʞ.YnB3|xc dMJ<>Q GpBWҡH,xǼJYm`0Nٶ}2 \[] DDDD4i\]wjkʰՋ`ǜGN`ִ \igźhXyy%8[oln2ɸKe9##$o99`^\օK~=&:V.GoJ<6Ve&"J3N(۴nobڝeebe qKQX0ULǙc233 >p7v⪪"NM o?tˮ}~Psdx7v.jz C?˝[nÂbVg&""""A,*ƂbmeǜaƼJ;=֨U0HуlT*,+T*$g1 3u5oEqa- _~q̭w#""1z˿}6&&=\\rTήl* &-m SK7$32d;KѶYFؓ:$:^j͡Hvn7z 0L璓"K!DDiiw౻O^OYU^ge3/e3/l5"Ȳ83K[S kQЇvXذ"Qٴ`dZ`8\2%EE%fBx{Q7z$+'[6*&Lt6:ͻI 4T*dee#dy_~[W־.ZD\=V܆/o=_^0 "ۤ!fY*!tu:t/r=;^'OrȬlLx"`՚౻AeI,5_wte 4٨T*8f3d.}Axn:i_}P,KJV 5T*iqp`S^F3a3*oAUl4kZf8_p,w\jkʰDDDD$p{[ؼ|n1qFsſ\ca<М?rb1tul@kn!"hiƗߔd]Ṋ>fNԴRh4℅_a#~/Ȳ,,B^oa9ݞ^(GYHod'i ~~t`+K?e$Р$O@D3<e'dul-wϼ_ҬҾRVV6B`%+n VQwLlMG}Hrg>jkPQb:ɎQb,*V/s^Fŗ`[kPO]!fR 5ز ']OLwadanu=6x*f+ZkEV@U TIP#*؈KR,^`{Q.y5__} N6מCDY>t.ӋKebG)DW޾nvIj׾z$W[- nLj J3d `dd]U9xPX)渷(.Ll 3RP؉ڮ<Օ$ӨUpp çG;I@3)՚EVJYmh&""_(jY*fK> <JɔlY@`@v{ ~-,Rc]r}_Y՚m;hnoŶE#xh&zf(4N YKA'^U ;6XqUu:ͧedd /Oi?WT\ݴ`T`+g'ߺuDDDDH%fS[|j\9u5nrn]X&h peB('mX}IQfRxftuvcǖ]پN/]e3LDDDٰ;w^dm{Ɨ7'q2KBViVT03ee|]B.ci?ݳLy.璘 prs GbŹe@F']"A)Ij,w?*j#lx A ު?>7]99Vk`s cښ2EL.9$e^ b6;P~xcxe{3"QɷER!/@3)RNN.j>vlمI߮Ѫ2LDDDBٰ6T*:Q7!8dYYYٲʙj4v%\X{0#CYSSM4SOd8~Ii~t^j? d08Nril޴>$YNσ L ݁yH^߉h|-,:TP`*dFAn L~?P!R;d7ⱻ5$=ҖW 4 4Fɔ'H/M̫㪪"B3;!8W@5e /#IbRɔ'`nlٰ7z۱e 4wuzEAR\sO zznE,DDDt6Xr'l6foGӾfd[4TUf PB#ji`YYB4:,2:X.ow_^wn]昁}[}-> bfp(086*4 ޯё(;Bf;³ wLW#l>{/n}%/z=xx$O`snu+Eaf""""/(1ĬpG]\5*풯4v8$:xHfaRFEVV6|{0Jmػw~ rzVxuoP IDAT <^KV:؋m&f8a7(}9@|璳nf85FgВ܂*J6˂-hDF< ʵ] )'OtNg*OȱV81.5G@԰j0;~#6Q/lkA.Š3v'JlIBB+w΀Aπܹ<HplNgNeI)N۩O<-`86-{E[~R>{,Kԩ|sC,COO/+). $*d1LDDDD4~J 7@N[l~c';~)b1x1:*쀁]!zuޮN/ŋ}z.Q/]^t* { "yiDD ~wlOgRٽslx[ϭ=`se7_`˳ eDcnIj`zNfRtD/ ~0xǻ_|?Ձvo]ni^ʒrTTiw`fI+:(2dE$gQ4iF,cg(@{Wz{vKm<n6@An LfܦuӾzѶeⲙJw~[^^|S4:nI?l#)f&""""v;Ѱߣ6pa<'rtIkCdxh8+*ha6ȹQ0z{ _ 铿% w  -wzv=a/5d,̊DDv},vtx;e/rWxvpBoЋ=gFl|MѶ劅[;jAp($Le{b1;&%xy^%obq؋ǝC$SMG#& ~~s{;x΀clƁsAT6?3xi뫂-bBJּJ;_Td)5\GmM*J<艈psN/s!C~UhҶYl0Lictt^q"+.A_ތ{ \EmOy0I$r]1V1& sR{N #~3(":gq" "QHDctN=<αsHf*13B71^ K-~\%#ݞ 0ACNg"ʱf V~J%OhBkZ-xW.5s\z}eƠ3UMZgMM!ڎ#. ~~knol"A癮 8m lnioŲ[Js|$]ii4Eק⭆#hk5ˮ03nvزqӕӐm7v3))244'r 6[=K悔Ca4o=dfKNNQ9UB˜iΠF$&7X0t$|*<:2HdyCmh;D8Wًlp(꜌=q 6-(&v= z|TT 1贿ߏrlnσB-LPrk6`)FBmUv}5sG-E\Z1V\35gG0bG|Ao[q'Y*]YRqsrg~Yd_ nApRYH_Bsq9u׾ "# 9+-77<>N,COOf-.,X:(Cf`e V&""""J2%s2upr^V?ꏠL6噑ɓ'vad$*M[qۄ_N~ZV\/!VVTt 8gh2oC)A͑pcz& 17Lr9f5d켕`Rh4+մ?zkZS #0zzd9nZСʭ8sj9ݏL(\ YgAg0Yʒ QUdv:LJ_̜u@Y*KO̹$Zy^%X_ V,k&Rht==ݢ b<ku͔m92<;Qs_mM^ÃHFnyNf&O??lG$:mPT0 yT*8)ĝ+8s!EvS_rT.ꪔ6J< V3wDC!FGǪ>G" G1aă{4rYQUlW~nȆ\~^pŪkX,c"NX^do56{EVv&³/ k`lQ:v#n!$t{+''99?Gz s͠3P3gyoMfI4 ^+sRdFLdV9>? Mȝ7,ãw=4?3xi뫂GfsLjD]Өqӂi(s%"ãCv?;Q[S*&""""RF6:$p5ψL(6lEDR۫haX99 @x9Xx9nNv<˗_wt'NsṊRlfN g*5eJ !":E$9gdCiߊ{ѼAb/GW85l ?ӫ~!X{T*V;227hNjHDq= BNg\ȱV&&'Ѩx_ȮwPww{ ~rG$6XfL/.E1K$TՁ{G͟p%~Kjn><1V?ΪK"ߟJ/sN"uVN|>\]wx){bCE="\ViNA`үLLy 4]@_x>\3[qXU3Ca_2I”Ubg=刁rfuh H# <Ӹ `F;ճZq.8wz!J. 96I۳J j^ `{n/Td&.똨%֝68펿|xx`I <n6]գUN%JtҼk_=2<,.yDnzV kCVV6L< $3g! /D5k֩?KKK Fdgg#;;ZU=tt*{* ; /Ǣk7%_w&KF IB1D$2$bZY_~?LJ> N}E$"ngc $tc/q:hbY\Vm&f͚=L:I٦ c~A\k7,üK* %j\!S*TiN0s|N\&xƣߏ> 'N@SӁIśbzquك#v|3R4fFa^}Ra!YVg.w90X'""""x6hZMm:әx.dhhG~9"駟ww7zzye .ws?{mx#za2L%ypزqӕӐkoD}cӠ=s0ƃ7«ۛ՛VۭR`6L/"9bY_]v{ϧMMЀz\__} n]FJ/LEA^D"ۧvn?P$wt5k(U,8Y"Y,Xqt* v{aJ]p[y`0;]?^s 5e09cOKn?OwO4-dddp,Foo/FGGpųƊS*!:lA1]3XzG-L2H6b1vgg$y+l؎nb=KGW;w=PH'F"aVv{%B?o,lvyQgr.)j8攸޶m+e_٠3_*.9T*TCaHHQ4iV裖OW;ABsf3 eggd2Ib@xY3LDi  v'/zS\2j#Uߕ;캋@"""""Iy{QluHjLLyL$X,nD3X,=۝hd2IZC<lݺU1XE7ֈlN ׌Hvtuv rL]^lٰm݊;şsΨ+GZFql_"8G3Lz+Ӏܼ\t ܜ\\Ezd63%ej`:Hbt7u!SNjPQՙ+`-hhh֭[d墲\ *2dbc?/zR5< SSէhtME_Z3F,^|MZZXI:P4-,+T?xngQ" "Լ rJbiB}ՋllFvv6I^oݺWNAg˾ʒ֊rh5G4MGʮ]r[[Dҋl_pNtC08^[Sښ2DDDDD$ o9ͻ!W)S NǝD' (jp2'XC3ObfoW,*.CRh MwO#]6ՙ珝R]*eR-R`Xhs  GEn+sB[NbDB!eY9^rkdW%@l6@Q#x<>KZ[.d場;hh;.v:ܦup{;t*lXVN'xydq78xbkÖÝODDDDD G*iU*tz$"ex%3*ӁիW'˱[7|P3)Qop(/Iobŋx5͸,LfKq^R$כX݇lo $v"'';HApĀ,/x5^_+[5%)?u+nu:-\3XԊ'6áf{co/";;{2szFssbm4f"??}Sܱc>싅5cf%B܄+Z=6UN^΀~ӋU#‰c8 ܦueoڐo'ϩmVY$S|^D)m|,"Vg&"""""ؼMVh0 D$sH=H4(! xfXVFv횤q VWw8\aHc<1۹c.ز+msAFŃ</w݁`P3F ͞+K\v{vL bYkX95MX,ד7hDm.]u@V 鍒U [vR lD녷[mqwug ;1,XTN[|&D:3)Y7ulg* yyf  "cp0z1꾞PٌBJQ7ϭwԞj&%ӗ7ѼU9~?^}=~nYMRj`Ծ>\u>v{VMʼnxWbr4MHXW2\XXV)(ECCyi޽[uYwh5 h:ҌH4ص/m}y&3̬jp8`2x0L|իWӓjlSRsri\9ՙ(%luwU8${&=ŋa-ڋX7|8 Cͤd:<)m]^u $e 3bÆ7n:(6{@`3d_hy9urb'?IhO?9Eaŋ]0̬[nU$͚v~O?CUOe`0cIoK[_=Hdj5 B;_֯-)u2240hx"DKCD:3onoB[>U4-U"dZ.{ޜY08pO>M[qE0ǔE)֣)]{4bK?<4o~kl޼)im2e zfP(GMv{Mz&j^ Ff]P,C(^+/afzՒO[T昁= rA_])z1VXlZA0ɜ85EQnn쾟4~N%LDDDDD=Gy!"#hJB^9%[2U jp\ 3uXzg-*glGRRj{l؎;?|_< uu_ǬYRaY8ɜ .g։FvɱingSi'jkrNodUcbj5V+l6C` °j*l۶U/,}YTsa46O7%ml|~ttynwW텧H7A2/xyC3^b|D"Y˜k[PQ DDDDD~sw`xDPu:f T*wbzz%/VrbŊ 6Lp8 Pyy<x$-,fRT5Ca<-:3}=S|R`6@ӧU?~ #rlngd^h{dCV )W (..hV~Z{%57Bx8,zwǚM$]euIΆEh[5^ZpJbF+v#ˢ-smX~K3QZ {qE{x߀H|0zz%-Ve4bJ,^|MBjp80Lܑ4nk׮Oĉonl7gqJPgކN/^Y:$[(ɓYy-;]nu='Ib{b]Ƨߏh4먭]"Pp8092],HYf"`8͒W@? ^Ñ@k׮5IvC7./όL4 .ˮ cNۼ6OE>\"ouu_O^`|fAΒKr7$ -X|߱IC!tyN/ŋ $&s]isHV*1鑉:9OݞUya"Eޕcos'>!W]=,/fix+ef){s\ulDc0r8@x:j*l۶UfeedHq0$l9_σ9CDDDDDmn; 0H RϾr@iiiBQ՘>}:9Ё'e^ѕtR:l{Vl|idfYvv6N W=jI׫`6[R-@ 0 Ǧngd^Hy9urb'? hL,COOd\M̟Brr7$eYӑfDGM}+ՙYym\(S[$+is)CmMw ȩjF\ H]mnٲ:}=L&\.޻&Ay<XrD_̪ <0f )Go>ŵ{Fl|MI֕ՙfV9 ~hDcvݞEya"U[Ot:X,6~ _B{rT`t&),exVBZ݇%[TdWgVp\0Lfe!EW@h? Y慠jQXXEJ~4;@w4S}enϔɼ.P 99;?EdiӦ?WYjG$_)4iFt$*z 4rK-VX4p8<ѸH5`'~ʣzӁ3Kq53SՋu!Iz[L3hAt!X ~6>.(eY,%Ӂ+WI|dBh(R/x{άVQXX7@hhh7CC l3{cc.q={'DBdNO@hD]Q[Dp8xq DeA(B",Sl/~lT} >Q!E*c=j. &MڪUO෿]+zlVH$ W]{]mẇQN!"""""]yW$*,dZӧ#;;;n>,:l&9(F#of9lFaa!Z~Nu[n?$L@}:͔+VW:#)!Q/m}E@sug) +DCßqLrL~\+ 4IaW|smImG,f"|=K fGu߇X+%haU`W^J ̥EZn </I)p8̻kh'HOO[0l?;\8VQ7oм}{<_TBj`@ (ΝÇ[ LMMDuݵVjE)]dH qS.P($ Pj``@ZZ 1"&(-#$]t? CuV/IrdӦMLЁa:mPY1ĸ$־<ٴM+_ǯ[nJ}tبinǕjh4*--MV?VOlhcx|#zFSmc߾Fim-*C֮][p|}}礽+BTjZ}W]rВ""P^^.WWrE3u^p03 V2ꪍrϿ"` \{ Vޮ O?7JU,P(I\|c\4(;7!`[w_d(+s~VE1:Yu*]NѨ * KţqgFB?Dv~`ڵk@cǎ:iG0nj_7o=Y(y(/_\DHNy%7o& i7$(3! 7o249Z/_Z7 ( {װ{YϩM:=cy_Kב VzKJa իCB3l6wF6,Mioiy[?0,v__LB㑇zH ͘WMMzo)[J UU%?P/H*Xm||=v햧0<lڴ:LuEۼy7ְ}O:^ = mfq8_M0ĽLl&->TcW,SSS&4B륫muvvJʩ'4,Ƶܯ=1ϰ[}W+9 BNx^쒣G ݎtݵ%?T/7 t 466*ɤq˂>*G|Ac|R]]MB3L@02(Ϟ6MƣJKL'C)cwsЌb]"ؘdYn){]KcķEݾ^)Kns^ )5]v+} $ q5#o|o 2,19˹a sX*~_6o,>a4G˩SST] -Լrt TcHcZ;_щ_!аējMr-CWA]~*.ldVƼчPq`-.X/~J>n>dقXO:=cxB#_PL ͗_~9 Z.ʯ_~͐UF`%=A 9bٚ[G?c̮锖qRr6B@)7m-ٽ-/??G!аU7 ^iF'6)4֮R9ut؈{E?X/;7Z26;L&#wkXw2O IDATAQpLl\~U0Ov6+~~s i;Zor8 %DFjjjW֭ wv+ZUԕEӤf4tzF&'Kh~6y͚5$AF&6qӮ?#Ȱ.^yI^!IB30g&I>JlllTI˶{/vʦvոs<ٴM\}wL$xfettİd>O~?ddbW[n&A)b14#o] B;oXQF;&6j[=_(f;KhuP($k׮$VLl~ V&jn޾%Ð}$mkXbs"1%x@0VDº 9~N|\tJ9~^~eHLɝ;mW QÖV.Q JlNL%_D=1+H=B6o,0щdR&&m]wmՒe9;ibbܐY'4p}ڐį/?%oCxTI;22~ .°RSLTl&;7P+,%6vL&%4m ͼF1zr ѭJ /׮+owjm?Xpp4F'61E,t- \UXRf*5CkSS,mfа@ hHW<?3 Hjޅ Ph ͛6mD؜fellJKyʏU.9~Ҋ]s4(O6mWy%'vbF$4Ū!_ʷ CLOj/oyC}uS_eB3ՙa5+Ν7dEq[JJĒcxYIcʷ?ԟ (TSS#g{t`hk6;+3yq5yg?PosYp0lb'ܾe/~|SP$VW[3zr/yjD}&4;ٴiQ*Z~JʩʥIxNNsW^~`0Hufh!w٬h_JUj }Z-fV$S:lw`h)otBo(/%r8R]]-N'h7#ɤ!TV0l_}J+ (2J?X'Udsͩ4-MLSn׮ڦw$^|㷷`(Ƶٗ21jr$$v7#gg32:zW/))u C`AeTIh57íRb :CF&VjeY`0(n扉q>FƝP:{E?X/K?<55Eg@+dR ]ȑ/(mwN?_n&2Zǥ /׮+oW Yfa \AKF&6R)F'=,&5s52]eTr\,qqRiP;#埾Mp:]^rIYk֬ bdbKY'mƝj"On(F&QB'4rDvD]TEԬ\b||ԐAY*mذ%PNu)0Rb_$SI^g:N B(h {ԩNR)ǹkjjJFGZR%KKGA?X/U.KOb3NJ:z햧\RY.w"::N*/Z ^JpI.w ׶8|~TWWS Y7R5_%%%vŪ%Rr(xLR)V+ū!% &8wFn?}BVby ~cz <C6l@EEnUĸ@v655eˀ+_j E+C֌!IlUF'=߈W17-<5Inr{Em1(s߀ '$lF(o7LjYJjUU5Hr>d2?|>|t> I_}G. ≥Wj]xސՂ +ttTkVWu^QFGr^Q&Ids폏Lg{_^iPw@tvv)mooI7#XT}x[?PSO =`0 (Z-gO≸|,,O,mV.<κz׬YB-`G555rD6gg3Z5U ͮRybٱ% Pjǖ|S*/5}$6(xLySO\Ri`PN'䡦Fۏ)m}['.rDKjuy͛J Y"mJV ,r{JZ䴜޿iSi.bV(&555WOg$Y~lVYK+l(x<8ٰazSmu/?Cf+Xڬg[k~ 8{ttp8M]f```WmA)->0LN+]7Z/|V>:N tUߗwF,++,ť 1uxߩr$>Jb3z56J,`E.+rbAXܒ޿)m뵌\B3P(ZL&%JJ5[s%4iRT'/8Y^UH~(P97˳C`atn3~cTwۿP(I,M땵febb`JM[|`Wq,10}$6cI+n^'w?t& Cāo>GP1dӷ֛7kV୩ǵ1 ׫U'.Qj>R3LJMK** 6,@gMfn6;+LzџXvCrg-?~G Gg^/Ĕ3zUHgdtt Ѕ{EjBb3l!J<ۋ6dEP(7Y`@Pۏ)kWQJN%-O]Tڞ+·f`~Vf$xJKMj~8)*Uף,))᪲fqt:p*gqvT;αJ~$Sܭm`0IH"bWtzF}W٬ۭ8 ;F'9r rJ)Mᰲ|Gcqӷ_޼h< uvv)}cd,9:d)K8Y-DXU )kپ#X7N,dbT^m(ڵkKzUT*eۏV%4G6zZ":d2J4o^'uuJoN8;r f%aAfUuY^$4S*A6hUYFs*kRsH#,-m<_zil|\ Bt:Ge:u/mJf(93|g+۞bt:HN^q`eB-Y<99. v Y0 ,HSSzAS ӷ_1u<V Үzu)K]WjΩlxLi#Gt]RINf۷VinmmSr0YX>׫>7;BѲ, ,Pybع1;͘O*5-jF[QQ!t`r"֌{]vk ,UCYS*Ԭhf;fJ/kky,q,O$Q:Ӊj0lvVҙ}VZٽˏ0YSC^x@e҅>|Tk|5z㺲2 t>>jIF( ;2aTjZRxtYmu|CZ3DD錤R~SPYq-Vp8$  r`˵mUU`˶ .++ Ҝꄋ6>@ (MM{ܷ *^d\l[vbU'nTVcd=^Xa5 vZʹ>ەEfعJ~ 4:;/'N*k+JA}ϢsMj4r\SS+w?B!:SGIeU,K*=d'9odbT^k%ii"^ j\f-ћQȃ PZ٨x& 裹E땴5rgT\%E,14u{*4j`0HB3@$QZoee]֕WphLuff5k͚5,q(zU'T(sJʶD>{`.em%SUkDY$4 Uͣw ~Sh~xѣǔEfffUkjj^8A|P"*3fL\RmjËb?PUqzb9TVi޾ND8NEZ[۔=b8vR=t쐎;nBe6m3  ≸<y.8QGe64E@uf2=f@1"9"w}>n: Аjο@@P*9mڶv]Yf 4\. BL!vYN:35jϸu%B#+)y+FA]vk;HEE(ZWu%ҜN/J6VݏhqTiYY{*'.od2)~$PLvl HˣDbԥaL&l.uЗj?;ܽ3BPLb*iڶ.]xYY[ht8i&N$@ Zbɖ$5o\vZ^,qCewFn_!tj}?$Sj鱢*̀ ::N*,֜Nϐ ݾ^".5>>JbsP׬Y{k@sJ5Q$ly͛Jҩ@ Xa0Xss $^QUF IDATYYr mV5h* ,:S) D&TJM"U+**(4T[[v.`lV2QYҘ\. o ,S+֛ldhHĕknYr}x :D ze5=yǖ'yVzɦmm/ѻF٬$j VQ`yYSICۿte%1g)~?~MZu^ŷ]y~іZPMOY*Z/`"g{7oߒѼsLq\tU/y[B46#x>;7 "T*%cc&T1bEBwY44UZ`۸u%XmpPXss{lF{.%5WӥMKfD"Jn~ y{%xłQOC^%|Si79 ;7(cKDbْ~2bEBOJC^%m]~Z`3iCۿuN~,N`Pb%]UU`%ZbRм}{T4iiQS'/L,j&WZI:%5WTTɀT-SU[2ּ[+P:fVFTjk,H:=w;n[8£j% }/26ykהc$\y<re%ޅ8nŒ?єL.(1ݻwky|<:|?$XLٻ7oߒO4b9|N'T:5/yɤd2/ߖfell̐|~(F<::0UuurJ;k0ZooI" $;k췈^WҎ֬YÉ@MM.^RJJ(0 ɨr8RYYIG J|Cy"'hЫ$4zԤfR>T*ԓ *?X'et8$l6+#MLMM)iqF)p544(i/B0 H*2]߾N$=' `5 !f}`嬦p8h@C*X?0nWy$5zS7U!3*/' I+:'d2J&^W" (`^~B25]SN]]%q8vZNF*L&O-+j(ee|օ&5m}//3;+7oߒѼ۲r&\.6X/Ytd2)id6 VzdL^Q&ܜ)c^#KY~E8VSS}~E0 H*eʑW_mY>[.`3^W*iKu!t [h}rdY%3yU|<  n积Lb ^~yM f·;=sV􌌏vLO"VVzzӶ711.߭庢bԟCTi Tk. ٬am#)-wp8RYYINUY-ԼU#q8J4jFN ^d@sʖ)Z3c&WZ=^>F6֦>XeYSBwn[t, Vz}[LȢHxlV+bBGu:J7Uv\%@EB~Jڱ*$lHJdR\㥴fUvxvɀjf8/F0؄ܼs+vo+WjqLN`V&Hg*4H[gY1mR5槪`ݻ[EE%^xU޼wnےUN*̀ͩeR.p*a9uɫU{Pu_L,Jie*^zŽxD;rTv'&ZrvZ46ۮsJJL^痶x$K̦؜N';#w&TҎUpEl~JM[Ľ@3?^SHLAH*ʻ # V P\*igUy,bM*DZ@E*+׷%5""w?ݱ`/f8]~e0ࡵVV\1QU+=-jWy<ٴf4^Q&։Ԕ퍏J:=CM`ݻ贈D\_ۮݥCڽu%n6=&+CEѪl6Z%v;MKaT^kwlz쥦F/_ k7KB7+f.rd`C*& |}WG\j+t {/޴摑M=*"!+ 'ّwTjL:mHoL/Xp8W ;Sj/C:pY3BlV j|>RL<煢 F].^v5(igbb´jH;7j `JLؔmfdt.A7UxWW_fxߝJʍ$wdz:{^mmW HMM[9~Nii$5],V<,YO=E"ۈ'; IFÌ=A%_#Ҹs#bx>JI4:IMs*WIŷ]5lfVyoyCI;fr8RYIШēN*7Jj.)!jԴ-t:8E>UUCEoV&^ W!: 2shtRwG,LU*#R(N@PWxJ6?/֛VJ3PT2%I%픕9myJWUqg8 `}{vŬ'u2<ʕ@ |Mj~ %bqSUW(^Ɍ9Uzy388(rix<аW[-S ->$d %O6mSmR)F']Eӹ`贈P΍7o y/Y~bFn{5{b19oapXZ[ۤa/+¦Hvgg3d4ٲ2{MXh-u|;TP<: :(x`sfu[z*S4ͦ$b1=+7K$R/OwK4#A<}=@OZ}ȔmEJCt.XER3Pܼ^y77 syav*ia4ND꤫SyB|رv K{Q⹾V+AT䭫ꘜN'I@n] v.+ {{ygvv\H4:mxxHNx͹ӱuy=}l4e[#f B*UfpMm ^J m(;~Rv+++mg}}礡atuuJ,dz{c5HKKs!T2OJjv8l%YTi`Wo\'k'^CDd``@ș3؟X,$77UU^*ҼM+ HorlVG B*xt:tA@SQ!"i={yIC|>F~T>6S*3ҥK4QEsKJ> e ?Ζ:8m<5j;<$@Fepp`@ @Pjjj4Ο˫k7Ijȵo݆-rѱE9v]}Kn鑎ihK-r=ž<ٴM|@!s(C[$Tm%IcQAH-ukHIg^}WTQЍJ͉ܽ3"+?A@*gCh4*--M ާv%y9|UۏmNH6<`Q9^g9ONu&-$pi pZĮ̿RJ. t|D"u|0~ՕҸs#@Z])QH/2|[cccz?JdlfFF(CCO-;^288(gΜ# {Er}olblBBN֫)yN,}M$y7J uy盥3y?G9bF[uRRnU++**XeCWWD"c ri% ';6,GehLp86ݸN X,x"Z}qgk.*,M0̻Tj.j_EiVT^^Nh4*mms>*L/e[HE3ΒBItJl6ﱑQk>2#UU{^VF50_/+WJx~T{A!yL~v YĆTiQg)_FbRE6 >MqF÷fe||/Dp#Vٳ='3b1SZZXǍ$EJER~W\sX;}PP|s8KK|CJP=)r,`,Y^9tX@mqY޾vm~P^#7ri--|^*b1?K3^wnꪏT*%x/lvn!^cncڵKfK.ICޥpmܽ=B dmp8iǓ'Oh_@C)'X`Hg 5<{.{^RRmNIN-rCCΘKyU>_h_)Vp8"uJD""MMA9};U +oW6mk׮Wyj">ɦm?Dۙr)+hQ.RTmE8:mUqxxHZZWYu@@Pjܔ?|-F**5Ϥk澾sZx^immYEbNSgΜinnᢁeᚼ|s85ο }d_ұ Ror3`YC[%4=KKPw&0ku8)ԩN9w|/cfUiܹQ^.0ed6S566Fs*ÖE8Ѩ4r"&}VPt'd7];::ٗH$"?GMhywSSֶ>v="KLf6߷S|IsჲlmצrP=+Owәro"n\RcJsqѥJsí9N8^RŐAik;\}}tۆogku<}=XЦ}ҸsIgdbb`vVϤf;~HΖŒP$ yon"u{ݼ+ OáeRs_9b_[;9s.#'Nt,i200K'5[YcY)IKR3`gΜ.9yC'5S8=Nm$r1x zGI K=#==VҥKz.C IDAT;;O`rpqE5(U7|;xLٷBJnÈ/^+3=#=`bIs`;#MM*injJͺ*={VSͯ9L {6Iv*]H-[EY\|GyZplޫ7"]IzU4Rs֣$e㑎9|WWgMio?jʇ'{EɡO팍)YePMmvJj>{Gk/s"vT$y%Ehbl"6V6@JCC>-;'Nt-==47,iviEgCl7 EoFmf-2<< LRvxxH:O0|;UGKRۉcJMyXרovN{l9sZjh+'?mW::N.X,h[I mQIf«$644(W.EGG}`:L*r9uTU{]v ) **5`cB땣G?cPN={ NuJguvvXTj åKAD$^ڀ?1+RKɦm\T`wn#f =t{g{D|rp뇾-íIOOoI2MN?ɌUxuUF ={|_x<Dr!9} R1'}sp?6ITټ+W~Lcx>JrQ ^:Wj.|;gsU__/?Q476E:wZ%- _Z3L>WF:풃;_R90Gl^]Hj.]]{V{ Km78^<|T0Rs,'=}a``sW wtuB -X镖G2|;dR$5v7+/W%mmڧrpԩΜ{{ϒZ FiuEy].ȑjXj0R/XV)tBTI]šߔ>tvv-s}}xF(@tCC$q- ñcG FƝ2n_/U7|;Ea?~\VX#Ȳtt@ ϝ=2Ov=f]uo>PfSØNbha2'gT䭩ѣJ>1:EQio?>E"ϫ={Ť'b#6T$$r\ܺ5; ۗV.]]̖?ԸE+ʸRO6mWɬlVG Hpe^3tuuʥKڧ\ ݏEf褾>ʕW"3=ʻ ZQ*'-'9|ME|&u"NJj h9EhvyJڧ6%LT__'`)`If+_@K^< E΍r1+P' N2d2I5c[ڭаW֭ NSS՚eh''rөgOrkTUZv$m`&wUmd2{+5oT*YMF/Ր+]g?A[rikϞ%44]gΟ! ǵo=ocaXUU|^ʋcnj_Ҹs#'/0Jl*UCE/VEWoUI\RZoy#}0zy]trtvzz}˪ ,oOgg3c.pF۔U+N']_:x߲fK1?׌7A`Z iDJcTl޿/Z[[ܴap8D_>,2mQd\E I099)ի?5+U.ni9={NmӉڴ?6DVe'P|>=ڌGfNSY hDDDDDDD4eEf^>t9(**N ÂxSĘ^J-8t^p;~?$,Z^t~P0#X6ͨ_z5\Z..9 |~&7rMR vŭ0yp2R ;asC%Jj5;!EC`&xGȋ$NH#`@B>)CCC 04<8H~[ׁSSSlzz<љ̐"li4sʄ?/2hA{)"""""""RD fGɄNzi<^,+Lsl6v)ԲV44 S`'P1 DDi՚jo8ɧ*Ŷ rTW$]?;H&uJm`Pzlv|s"Q:-ċ""""eC,$w}!Ik <HqvoD^^e|^av6} uQdfjRh[2S|E%R*v/h`d'"p4lv6ٮ[SS#zz<.#`iotp#lj&RyVUZV1&U/Tr_S&x1'NIuy%;&q_]],q Ia)4'W """""""Ūƪ"I !Nٜ1NjM9;AaR8Fxjfjٞ#_>ԬRx$Ѳdf2Ofs:"J+rNhr~_exzDDDDDDDx?z>heG'P(J:p1Era0ؑ -qN(RΝu<ۻw;ҊZ:21L)Cqoz)ly@&ĉsg,g-p8hmmto]"@DDDDDDDgi{)NNN +Ϗao NHs~~Y#mQZF3>Dj "`wN"J~v%fSDZ@f\6r _Ɏ$ŒĔXuuh2pA٭WC%k_UK^(ߺ y҆("j|DʥCl!5H_233S~=yۉTG~EDT^rv_b' Fe;x~fYVp8pqI“%GDDDDDDDLFAݡPcccl (-ADI/bq,E%ɔA9L"JڱحMb@_\ ~3e'nZD%mK J1>xk榦#o)~U""""""""9XUUE."}_snY,eZ9D$z<^xug1CZrMf>Ν&|>%]q +xQ'WK ϋ)vvcif]<(v %N/t8z==ҝZ54QZڽyzI(\,LNWfٳ7_K vܸnvBVH2RgCR4СzEGiOwlfZZ-|$^z;`@C0!Wdt~x{jMmlh8,sFs.cJtDDDDDDD~?>>P^oG5UNuY`In<fvXi;ҡhjšCD P3IJ<ݻ>@Kf2/m Bܱi.Nڳg,466K־,4DDDDDDDDrV]UE.SREl6 &.2TPk6R;GB)͖ǘdBsQ(eh4)}DDK^y@mwiuuxt:QU^ɎL3UWybbܹi6%ϏV l;8q\eql"""""""J{_BUK~(Rd&O! e>Z4С&BrQPώTVk.$^զ~hlldJ㫹M!#$k'KDi:m%mwb-%/͜c>bTPj/'Ukb,)CCaX֔ՊcNrݚHƪ"TW&""""""|6+ϋp8~h4bBV#&Z`&B"V"ΐO2i+ SjidE9djVQpr wQ2ͨOťݻ;~b-)(aG!1*t3Lr|4%L&9,uki96k3}o]lOSU)+TOLLn{ӭhRCC/<ԬקT f#1=,5ё1I uu;S:gx%oIC騤n\I1==#~v{=u}|T_Hik֬[VG46|h3zz<[WGDDDDDDD4ƪ"T$a 7W@5Lm|ed'JPW {ʼnSrk| YR3Ԝ* Yz KTe6q 9Th&|80L)K7$H5W_=~6mRsZBtE IDATo|GGGia 97t:yg[fa0h>vfl#.cVt`E+~~c`6gCcu춡0\.'Wn $Yb%+5C!PN/a6|Q3RɄ 4lKZN gx\b%C].є۶Ce[R'qF4UWT3ӐjN.ױdۣ؀oٳg~#yd03Ӑm(&&&* sR:;KVV~.oH/Zy@-bi]$i||=h:JlmzzZ}W[[67)ۙq]#3!BBR!/zqR I%p8ڱojsgx#RCP*[22Ԙ@WWV^͛c ͮhypݢ\ }۲vڵr2R憮"Ͷ쯍Z3ͰZ|L}$<Լ I)*t!++KV688YBAe/e_CVFY`ojR&ՍH?nAY?x!"""""""ZA OsI ϋ5LB!Amtt\,a2ɷL].9҈^K"Crvo$[bnagh|34Z[/?-hy}ޓyMLfǎ@}!Y4LhllB].xH"Bxf P3%Z!8<66HNnksLKX3} P Y,e(++N%b ISbUhޡ!Cy VT&!zz<|رZZkQ[[ 6){jvs<)5l2pHV"DM 攣Ѩ֨15ťEJc(Hu2L03?;"nbAx+i/PV[fp聙C۬ ZiZgkM %ԜĨԝ^f{l,]X~ {eZaaۣ3,GSI{JVi&"""""""Z+qW풵yej_Jfݻw,2< ~d2رdG$1Ve9LF .{9ق50/AKr6N'mFK)Qϙ;w֡uu8`pz_ "bM樦`0 rk"Zzz<*aVܜ/r 5(g9mY x[XB>(6 ̄#2R&ZH57<yeM)Y ضEDDDDDDDLy?nGa4dbUmիE_?%Ujhiidjȑ&I1<(ǂ|vf 2d 5Q9r{֢ @i8t:~LH)|>E_rZGsNp ]MOOczz"t:fe[qfnl6;jkkET]^ɎNsbU>y$_~lhy!+& v6n/8m?t;H, ̄ ,NjWD$ ~&IQǔRSZԈF٭jűc'XEYxjؙ)h6ť#,qfToСs0L@rbVjVTr릍C$bI˾1DD$0Ziƒ5U4WF`@P;o$Rߏ֖ Vuusg]$RU< """"""""ؽ'}&Ipfs,?#C @X O=ed&&&{l:T;pdSW0_8bxŒ,c^NnPs$ #JF#x0)ApWI 5jv8p 3/)GO8j&Tt ;(\.\.455Ԃ:< x""""""""cCSa4dYY2 8v?FўQ-UiM b\ƒ]kّ)h6j..-kI;śI""x܂jiW 5Ӣ4L(O]w s&ĜM"-6[mfzzg;D K۩),"ʒj}ܹs=\NV_& FL 0=&1Z:tT]Q%^O}HlW<JkfF# V:"fÁǏĉ,Ԃ}0|9QڱnI迻oX b_h4jh&{ťE,et:EiG0L u:;$]ǎlQ.Wf,T/\0T\ősIʔ G4tQjVi&"""""""O1::|/ zH%yJ yHtHU @]~)\ NÎ """""""ЏG~.Y>Wv՚gBC]_0D^^^ZK,2vkkk܆uC,-b˒ntY|޺հn'7jS+j˙|RVV֒nbb/j"Zz6RJR&GLdfj0>.,|E3Օ##@0dGQ%ᥳ8} .޸j`]> /sw`˺MxvE5U 5ųűM`+Ru/G߳nvτ{{qgqֳJ3QTW䡪<%i_՚333 jCʊ~&Qji9%J;dTe'z_`ߐ??onolm`0ʣdÏ,zʶat:jE]'./lTxh468/ʨ""UW&}>t}/wW-`ijwu ݲn6_J[996;haUi6h!~T ?{ڽUdʴ֬i`Y+!3)dWugZ>ƙ֏eUY8.8-۞Ėo$8yyPLf:::j&"ZePȃJ$fI""9ٚ*w{V˯Uy9N{'Ͻw_ųmT.]l%嚊L澒o?E<ŝ^\~)mGn>C@&7T@ɘLMr64*ύaIjl~? Ss8`rrc$6$40;m fV~NQڱn}ݺohFn˿? _dZm&Bg Q޾P`Lv;#ϋrMn"wRr[t+b5O5208Hl!gЏ/ɏ\Dh{o5W-A  ifug}oՓR2+yRzvUs3 0⿇@p&r/4-W f}/찴Fu#],mau%ҥZVlD_T |>8Nx eehxQ(_{Wݡ>I*DDDDDDDB˝71LLN#49p+vPɩiLDwx33z#UE\N\DTk[Gǵ%U4 "HǶ6n7<7 AO 熞V+lVz^SudiA"2l2qjm9>5 zu|Tq '=:rN}3[X?%gΕ##йlٕS<+Ff1RTrjI/_u4%D23#V^f?%ߛ;W+\,`%3SZ{{Vi&"""""17aj+LN1!H5c\#tZ5L0ƲB3<ǐZs$؜LM&T*ᰠv% 5@ eprvr2`f =lh@+xҎuCh@ζ~,~!j 9fF} NՂCpp@|TȀAP96U\.CԊ&) 2=F*zS$(o))7fQ]Q*TWT%-(GDK3yfӢ Z`91~N`-6 5囟.ԬR(:=0Jk ffi]pw촽iXsU""Up`"""""RHxiVuL IDATξW$`KfB) 7~%z/[VdF,[RWk0MIj!~&"f ˹h((rЊTxZkWxM>oA q2 4'ojDo&SCC֖ͫ`bbgN>k;|[qAeJ3! ڙFLY؊BC͔DB~N>nU5DWpg);g ?e(wͲ 4gfjFfGYc۞@0j)g7`t s? :yTe갶Qd2BiswdJ yqTẇhr;%\;]0`` f WdQr\pz z18Ľb(Z^0:oh9Ǥ Du1S ՚0ҫ5tvՅիlbtt4 .G 0"V1rJv ƺސu`1`4>ILLL`x+yl0{>j4֨1:5WƵNA hoo{P($PsJll@rF3ņ<(י:!-+C͔_)TT3 e(GyeG# 5)b$GϊֳƇo7weq>L,M+D ?0!/1 {1<<ɤmW3xv.;CtSl߰-rX9NC%VdT5M>uCGW`9DDDDD|\຃?F! ,%iMNMc`$|Pɐܬ :Cfut\$ ̄QL&ifi,II \-v۷bDΩQqn&< qg(~YF^n΢311Q3x{&UplOf1405@{{{ܡf)e<7HX U9Z9fKr *˵0Lzg!?'Ee0 9K 019L;HAJ3 oIL V`eqW#~5fEoz$|/jJxyMT|JC 4=3, ^xigCS 2,HESGN#liPU3}\08$o o 4+蜗Gi U幊Y(ի5jdd1=-5~i$8::*Zpm&$wYURlbU4dE?~%_qqݕO2g?vy;wg[?9 Ek3{Ef1al ]CFqDbr\p\8qx{6 v6Y'JȹEpjevEEW֭AkXr {Q_J '_ vрTTHvuOFz+9Ż_J6Q.CK#Jb DuגU/zg}cޛb/F>LUG++K7ʋˠB˸tdR!8ܼO;0n<45oH9Ulig}>VaovFa4 e59K]yll,*Rju~(l&<^ׄlsQaJKPT4S ?Y guϻ%+^uo? 4Zy[P303SA<*5;\N8Nx1$VZUJ`)-^~d̒ek=SgݸK_Ǝ3{yU,{7nڵ?E[s"rϷ7Yhqfaf%htPT ^V̀~*#d.sE̥ONMazzolzŠj+% 7_~9՚_~VvC}3zJ JfBtNVi/RoxSׄ_0}purLZZ֕(""""$3W=v@#9/伺$d3[՚^Y/XE2^cd1:::+t:q13̭l2f'XUVI1f^UQrFFL,?y75 GGNZɓm_vM(E*874 uuP__DbTjjPTi 5ӲtzcڸsSabr w({V`ijwb]Z=0s{&ʈpsU*cx+Jjg7%~WW\GCs=#y?:n &y0ВMNMc`$@UȌ5RH&:n gρ=\٨k mk-+NRWkI 5tfhoos=/~BKK ZZNRᕈf^[mmmK]yJ8Uw  vma戜 TTEiu"łfOìPsWWNN hzq8q6 .u^oHeM 5;;^Nv +쭖_ηE^~Ym+*W-:P`,PshwΞ>ޝ; ߆6?-J_Nؠ<E;{%ȫJsbCa7If<4})$7bPJ 7W;z_˾&3IYyrr=h^ȈvN<)j hooc0(AVs.-nl֢VPG6EyXS.ldǫa6/@_uneEfT4-ߏ53x}ݸBccchooӧtv^@~Q <%GPPsC[)6bC }=7!LY(\WWeCs,#Wy}V Y 7o%x fct3)BVVVC$^Lj^t߯K^9c7\3[~-J;Fn~Zp; h4v-!8~o!'w$%6 f("\u#[֭\l@RVkwop8) Y>70661<.NCZTe /GBTb/)*֔X8z#Zyo}C?Fx:фwFFT<Դ(ǿw':_`9'75WƵNhc￱_s@=} )D6ϵYYY [$ 5(/&wdi?2!%m[z"{2TܱDItg'Ͻ'J[kHJu!ݷԆP= !4UTg_·-6%t~P=mݝUk6hYђ>tw%i[U/JsRWπ0§}ujgde;>;J$_ p-Xe_TW!/[!0?X3~WxzMc2T-Ǫ5XS6Al X; :dJغM3!hu+PcWfuFjLtYzQq*q:i&vѨa17:pڶc+C+#y22cA(}<,dul96( F7#C- P3s#ι;;^Nva 8;(Ĭ]-6o k#VDc0_h]vS">9y=<6<|Մ_~%QB̀՚xԯ%k'W/ D☜fdn;oiMme)e,. . "308#:2:2?}aFeDEl"} ݛI4i?j msܴ5ܓh0NMۦCŝFBtaӲGҧv+@6Nr8չg ;܌Wt8hk5A&QW߄?4WPqY{Rlpn_4iYyPsZf*Tj%LfCs+)[1ܐ2@Ae2_Ǫ+kaZ]!\R)Ff„\.gjudOHCb2@TC$/ U:\=aELn7sˇJֶ@uWw.SCX2L,\G63O;n+՚ OāCkIi6d&$@(L!BB  Șh&c̾-O;R#KLwJ0"9|߿s0rlnOY_X}O-n>7\H$b8Nڬ.NK_h?6 Coy>܄=|7 P.L.hqiX%_߄9|oUe +jP}P3aB,0i`6b=60d76!ED/,!!J÷>oB,M7uBb "f+bba|>_@@!E;%EιIj̈́(ӗ+$]JsE]{'NhaB Jc2bqUE!BH}4`2J|421f7Zj Ix!"Uw)!tsK5W&鳧T&} NWeX_mvvvbG1+kP{.ah2g@^~~nC l}9wL6;iي熓2!?vO)#%H(A( # 5udwHCu FUY !S| * ļ*>S=EFza;w<7lh2>zA:ی&4[z=Vr ic 6"" 9V]Ӏ~~,zكڶjqx߱Gjz2FEjf -M} E_ 1V*B 񣮮_DfP3UiB_<9 "`,CK,[0iЈU<% 677߅umyy5v*LXΏn̬Zsnj6jI#)M ;,.'R%tBh4 B!TE]C "*UpWhdr)&NԜyj'`JTsr~ə@sd<%HHv}޻,QpE>̘ lM6VBHki2`ÇO>q5W*ǵkNZ\3aVIvyIN_Bbѵv1in^W-7W1x>>STFb1vetp<ɸs4`5Ӫj>sMkۅ⒃LڪbB&@HBɰS| >SBȀ|ijwp PGQB!d(p1uah!Tgg'|>D`sv<$1FscѲqHHՕYy( rMqUHHL!CƉs^~n_4@:>] 󘾾 Lm{okj6B#`zAQh: P/`87s[;lYyi;j>_' !3n"##\.6[Ơ`̜319ivQ!BL:7:7:YyPE+van \2}C:YXΧxZ}FS;A)CMK "8X6lzZ[͜w#FEZ?+6]+ mQ TUThMF &_D"H,7!B=og15A]|j 5< pZsgg'N;a Oyf[b_;7t\z&A*p]6t {NBۊqB\nIY,3\ŔQ!RE:pȰ`h LAa wWFߎh$BB!0b4S;IYfBuv  p&Ԝsa7cQiNEBH$b$0& ູW=<*>u5h7Yz=h疐csOdh0ZQj_ld94`D"AuvZ1闩 ]bDZcY2t"^}u&HR(}oPQ9*zG.9ήJ6yFs+lYe^NjCIiTP)#`T& .¡çj 6z`00edR .U 0 nGj() !BUԵ}vz Fy>ryE:ԬR+Q09l̘ ]bB%0!s4[ۭ`M]rڮžåP$iUaQ_};,Uk ^|>>G*`h62W]u= &_pLsPF+CZ#%ز&mEG!B?j 5v3,QW\ljw@!C$e!-]eޯXymwScpLZ[͈@,A*\t; 4xQc [Ma9YB1B0 7KˁVr2 R1gY꯫X@!bsHGgg'iUB!.kë7?03!$x^d/App8cqܫq7 3/~^pPkIBHr_lgv4>4d@yKmlsfvYtuFk!r7rm>=Vs fD kIi[@(@Zf?xeBH{kͻ04#/JkKj 5#`fJˉj`CҀAwP2X FH =9Z)3&cs1qxh@ TFBBbԫC]}ʉXVjN2ZUyZ[a?/lK0]VLTUQ1PD^ypB7B#%GaY (EU)<@j/ 5R\3aDWn;p9rRa1nz%z XӅ΋H, o 3Ǫu0,hk|Yv`cP^Z_72=7n( x}mh5;06;B!$(LJ^/r""Wt<ԬKus"-3U/z@V!$vvfM=3f_uџMhm3hv}7,ƭh‰p9Pq ܨooGIx=_DZ!(`@ m>Y:f՚lD^uvvB(B"ӛ !aUfhu@?B᥽z  t ¶Exg{ڛ;Y|Pۮjl?#mvhcx,pB,gS]2]( /~\967Ϙ44Lh2. ~[pp'9@V&}*.ÄqP*ھJy'n"$PO_}JA N'ܜB!BafB<@ h6i0g,fy^(=4BHp4 o0iO&>>u50:(CCN@S"*edP;v豲{ܙX8wfNS `9pV},sJ}kf |׸oaSIiw8Pk鍅0IJJsdd$)'BDb6~k9SN<>d^b`rlO!!&~ۭY6|1lՌ*446XKNtUlɤ~U]Ӏرz.W/-soVS Z}@+7[mV>s5`4|s3>U֟5f z{_LAoDdzykj pBwU(6"'UCfB!f;p(03!dHr݈ \bi*@W+-3iuNDF܄ӫO:vyw݄\ÎӵYUQOWXj3u8qv| y`>/ph)3u3@aA.~u=I0u\n{Ic.lEtML9>UcQV*|e} !ƪJ3DGk8_j 5`LpUk PXJ~Xnai7a᜻g;79drوF7ǃsgg'2I.-(/çsW1Nl >*,ۮg: 7ϘLSxs렃 1 lNIdLJ^ZވȐ`h LA$NfB!pz F2duv Vfx 6Lg֞&FM _ۙ`ųqCLoº?a6 5ׇVWT nw:ܨoAMu#+Uw'#wA$nI*tAJ^}%CB>!  PQrI</M=n7*Zp²JL&\ΝjHNN `zDT*D]]MPG*T(!3)R  [>k)k)X2,~qULѡNc)P(\&Vr6f8]nRRMFM8ZVQ3<q.Z] Tdyocӎ/h ! +E玅FI琄B!ʺ(iE' !dPsM N3(1uq#$+kҧ0rUZ}^Z:.^}}s5^ :cPȠP! HaV-K%x饈\2Gmo? }PYv>߅Vv!9 Ô{=&$\]泬.!`7.F2TDߜNl(d?IC~N* 7A,xۜ,B掮뼴op9F^_{ oo|fk; !$,n.O!B9}g}j43yP)JăLJ$cut@,1kl6miLs=PF+h (dr)~/!Wtq89] e-ڇEd6&ylLV*g;МZ\=y4V GcP/+y}p{UjM04xojL.PD"B߾v`i41L?ӳPsDrrL۸ֳ(%NZZxbJ΍CfR:Z&nkֽ_}ʴO9fOfڀљi}ta?` O\z2)D :2qi~ 7jepW0;pfً f4ޜ]l햎G`V3i+LK$b<#T#ZBl| M BxALۼ[p͵g]ood j7@*> :&h>+ož%^}2?>缛LfL90sLL.Er aۙ%ǹ} yA?Qnhl e3sAfB Ds0C#x^XmWaޖ݇4)g@'+^koļv @ ڵJ V?d]FNIߵaf& in&Bpf4my;HL HX`\^2 5!C{%~(p6ms7ryaU鼑((-YB1\f㐕AZ x`c mjz2^z94kޅ}qI3+.hvw'NMiTx摻4koX0 }q8}Nl߲i\ ]PcrZdrE6 ~#&&bsIPsho7`\Bd+.1 ku !R9XI7L'7+ϼ@;p0G| >Og{ KA6bNuG`B!dXxs)k:|D"{Bq($*E`V KDeM36<DGk m(Vv~8(UQ4aBZmHHP9aRҫ}̵⽍ߢ&ǏXۗ@0\:׫J,]gXTXp3_Dr&mqJ3P3_Jpz&K8N'}:t:6Byi9NYLEB($!ÎfkCmt/cDBڀYlض>4 q%祣ma?OV? H"3'Ljvaj޶;]\rYz$2d&:z IDAT%!Ӎ7oyGʏQufBȰp[AV(:nB!dhں ^h/ ]PR*0")#31k(,5*4}4‚I$ J Z?H%BH wD, F)9ih:kn=Hb)C'" [R?Nrb@zl!鷡وƀB֚̈́wq86o^}|^j^xՌO|h:0 v Ս-~*,@3L ļhUJ\7KL.f36N1وGxLB(B"ӛ!R]YO߿} E!T0ܡ%hUN C.JPe_W󝛙ywbb Vh>_Q l}xXVmĒD͟>!rROދrYSH%%" rҲ@*;_kXltA2;mt$$7&!2P!#7=y?_X \6[lt87D)&Z hn&BPQ׆w}fcˤQG!%^X&RHc f4q*;1QP*UPVj9 Ô=B&!~*z^6q SPUQ g?~u`[5r0 >wUr5 |ؼ[g_w|^*\PM|oh#2R@~N-eҖL&ZrR3L6X=nj6XcK:*& ok֯efVQO DE[ي\69'`whgF ޓo j2ELQ*⏿| 2I/e$B!\hh򵏡AzOKҩL}6$RDU?TWO3oEjF 6Ŧ`nv [vŽ'HOaR\+|eUړɥxc+).}-aGmU]v^Ll={ ĨՀzo p&< 5GKKVSX2~L`3(1o߾yMX2>a$\{;V^0Ө篬cŚ3/ww@oRDaDB*qNߵaKÉ2JPXM4Jb D!1/t36';=gV6k@GbXy-ǭaHK%)w̐< V힗ch6뱪j|LQ"co@V!-3V d^󡡡]P3B̓P qXq4iȐTZ]/.6Tswbn @!f ٝ.@QI8R8.nJP3=Ѡ{QVSt[ PHo`$do4CH$T"FN\IEBLX}-n0C*<qRs2YB!plKf# eR$h0&; ctHҠ|C9E} -FUs* Es! P]b(z  Ն~O2m75=/|^*'oى[v2Gt+R(`cx9:< W*,y3Q(Z5X-۲-tu !J#1%ޜ _nY{ IxPr +QiZb b Ç][Q<^zL5caRA'dh,X2[_vŧ❍얃HUcB(l >2S1u\.>[woVa|v˅wf$7k4"!&9ك>?s46|>4B"U׿%?>/HH*;{^Qu!!*RT1q,?W_&d"?'Y1HUB,J !V:&d+pE~b*eH:j8x}}˚0:#2 ݨD!ys|8.2)2SufH<|ty̘P+e4@0"I‚~jn5i1 Epz|;G9ttX!z)Ng V@UE &CGfB©L۔ɥX/R+dֿJo<vV*:̘8 jMa_*?; +[9P JRtZlYV&MJ YD?t;cŊ19pܐe{^BB/z`upk_QfxNw,Äqh$ƃ"ab` ˘WUxo*0ʺJnAb:jwX9Oݽrr9qn'*Z-`E+ڿ%Z3 %/,ÁCt+y<B.)1HspSdFEM jmӷRU0`d,i !B8aFN ǜ[yt .&58V^6R4ʔ&SVnNSfLœn'={Bzkͻn.]3f_[U_ΞuLƌ>c߱ T2,iwLIdּ 9̬Vkv8=S׫ڸ oy>Μ3 3L@(T<B Wdd֞X,FLLÕlfLN1alnL_V5f@(v8tjAt 0Bc^4@w?Wxm1k&cLVjU(#-!3&Bj| x<[9;4*;o&V?WO͉w" EL3[11o<b%Ah?u_n(9P*.2j$Xo~- 4aF@fFaδ1],HG~N"ՈR ;(J!AZ9=U2!K  t{vS%4c3ЪdH!BHȼn/ <^i |b1}b͟͟SYJ}Fb8:7Mf_ ;tnV"v{WVW݀~I䑔- ?2owb8tO~<:+ "$c1Y NjV+ʥVU@V"6>CBiÇp`ܓ@ \~sRsQDgg'RR8W&-ǓͺNg|N~u#a1v)TU]wnfi7a-*:7tcJh`9p *%8-[d]Xݏ>ێ>Τ ޓo z{͂/ƶ"VLr^LP|04a@$B)Gj2K2E=hmkja";E玅F) BHlw+G+Zw52pY4 pz7^;:F*Te)EYu.1DDDpj5Z+C"<YyrE_ HYmx92M7{[U%bZH"Ό+Ʊ8  P8.7*|&mR Mhַz?cl㐚DLoZAue _4vR_P3PVatY2~L[񐙔.6@svJ{MD^]A,yqޕ24wNe$i %ywHiVh J06' r.|{_lF$hEX1'l9:*)$zc#ǰN]$!DBjHOE~N4(JN7DErf3sh0!PFon8ڦvŪY9H}>7py{,N-^_hh$"tޕbBş=NKP ˹w j[ॊaibfLw}01JJH* /,R3Reg@I?gנFcըmdƞs}7ysI[KW.ƌWnj<)_,Djz22SA z էkKfP@o Q#1_a/X|Z&,ƑaDB*2M*ok֯eޮB{}9ك~w0S 0g긠-CFj`& 5zTvOo4tޯg!NBF:IR\'V.\߉װOgnj6X򲿗4CnS[ I1|('P0qnȹ%H7YQ*xgTB!AՙCx~q|^ n>jZZodqdu 0:l熡C*HqϴC;'jߝ'pN^cάͻߎ1ك^&"9wҗ<뗘v;7:*{aƭLxFFh5[Q݄X5JRc0elFe@! yl9pkawVjz2^zmS[UoX>yoφ1f 2rF@!$p6| ?iB~P3 1+ud7%ɺ$ibNlf<iWa޴m7._Q <'AUg] p9>_9^k>Ѳ*Q_()gW->HHN79FC#V%i08D@VjFe& 7=TZ.Ec 6#"͎ò'`B! |>1?S`ꩰ]YYo>/ FDBjyɈT^$4,V'v^ B~@nmvVAE5>z&}>a$\{*FCr^y(hbj faѲM_U5cЯ#hrjcKP_?3x?>õ :yl~E) P*8XzYJːJ6caP@'~_m<A3usոP(8(#4B@UVZDB13,9|_kja01!g%A6EЉ1FC#x|s3:;vdRdH91yL2 H\Yk̃**.v'^ 8Þ#u(60%B~o?V: s~̿6#@U+[x;-WpYJj4duR%f.LV'-k&:R5U ,<N J̘׎EZb  VX:ܾh>`dA.uwִAmrV!A/hɥ;A(<֬ow۷섾 D,[P֯P(@|L4t1jX(d9\1͌o=m"xȤ-=Krdp؝Lj@2* czc^_!" EtE% gUbב(.cǵKIda3mm;LIǧFB.,]_ml;PFIL ^Y. %><HCiuSn;P`L<52]GE+6=nhoT9Q daH/Z]sjsb?[)y׬67vv՞D>J4לIB(>&N8Qр DjZ_ᾛ1id< !B.kF|Q=tHrFaVa2]@oь +s +-^ Ft9TNDŽQɘ0\rwDZT5 B=[g_Y۷DZfʠ>J"[ ԫC8p=Zr8̘8!\r<Ԫa"t[dDue R3RD"F$ԞD*]oo6جo_A+H׻4Gf/dO X2r4RtIJ4H2Ь)UEwv0OF)F ]&IC~vUՎfEiurR=sBIM9>@ZV! irj44bǘވF'FB^zHxXTgf2.z_ܟ֥v :iފMm(@}{s=^m!ƊSh@!rQon8e >׵δQ=M.̍T7`8 SUfT5x=@"HKn(j51h5'QttŻt- xG .V1ќ_U0%UTzS+0"+ḒKj N¹QYkǛQv^^y7KҧKy\2mNlvT4 ?Ż5,|۽`.xljP;BñJp3w=I{~`r>M[7V]ps!lVz9pH ']u8XziM;>G.rƅX|>T֝A. h$hVuu@v{U7v(fXu4y<$'@.ډ/e:X¬_=&x^4Rf6ZUg.L ]7dnFvXmnh5;'GE:JMq~y۾2W5rߧNjw7 XvB!`RlSN "^\ޅ IDATFg'aH.ݕK j4Ӌ55ZjsFDB/bf{o>fl ,5mͦv 5a]x{{k쩸} uq',w<볰;!EZnku:KG.Ё `޴݁Lڙ1qdO4Ӓ fw qfa8Pri"eXX2&]*hlBB PH૽[۷& 'g#1Njvjshr0Ƽ+0^>PGI@.!^#F)P_z')p$@f:X&x}Ty+:.k¯^s2ZB!d82?F2,T5QRmDU*1K+7B3WP}SxAaEKCmnj6Vdxt95=_rz4O r诌+ V"J!0y j5;6Ͽf|u73FX2I`wؑ>O0gYe()s̝vʮm~!0&+5`L0P3V!'5YrRїe]Gy:6|>kNcy|SUji&i.IKK7d_őE?(3:qT>:cGdd(~q2j]({RZЖڤ% M$M4m}i&y?.{7Yi (T +MЯtezkeUW2-_BUzJԆ$:`Diji|ٷ~f+.452RHOi :u04kfH_"{-\n_~ u9ȉ?URc_z%_^b[Ÿ\.Ù8罓﹮RCkAo60Vgk ͧ1yİl.,Rz&gMz<W?4/?{; ata`Mu~Qvʨ iIHKJNɯDo6X}2ϖ.XE479R[DdR n> VLIf6:pJgAEqZ -N0Vspu: ڬ.؝p wtVmsbPk#Z)HXHϞA0Wno5|̜4 YtfM*\*.w׷\/BEM)`n/L(=ތg0[C^|x~c8eh`dli28|>e-x 8~$/w;(O@ '8l~GI KYm}.?'%J%wmy\%b%ˑ,OqQY2 &>\.qqh#98^~~-Ny# C\F nYx fc^f .?,58X#nfffzn˃H HMMc-~z!`eira:FM̛~[@'"9`7_[~fFvp s^r@*4Qb?tu 'ӟ ܂$^<\;j[Qv҈ǚQv6[ilʼnf4 `@\ Q G Igwg7vnEvz"5AAD f/z+5x[_L4B41BE:/֡ Ł.Hg'εǚbq"2! 2s|>Fj`9==^cn|wHH:+栱^:ƜQW]YlALL qAD}G@p)8[$℥ ?(uu`fgD1MJIK\>Km𳯋1u$Fr(O@G{DbQ@f wD:iT q Vz5L!);fV|,Վ0Yf@j~b~<V}xpTJd|%hcÚs3Hj R/AR31V߳.s7eBFf?k*Zl kd3b@ztz:VOh3/_o-c`Xn&$4'J~V!):N35bsWwJA&]| 2:IMwxOEKp2YR` RيԁS: UIb&nȕs ۃX"!;C(9pN|w r5rȥbAA;vj@!|`-_ӆB. y-I`-lEBa#t{avsh 2bIy`w>F23jA>σP(ED?n2*4{<]0keah>W̙:6%$HD$3D,'_{;LJ@؜ OӅDE䲀ͽM7q4u bl?!I~Y@Ef!_W獗%7^T70.6?&fW 'NWcPZ&$b uL⦴;pH@ h dfP%(Y>\ {vdNńyS A.THuwQC0| fL(D%vS6LvtvQ10+e%">RqШHUJEءjFъjQ]ׄn/7wЅ5`ք̛O BAa_DKM>f rwֈ#5F[t@مZ*k R0KФ/3OߖNXZ/ῗ?ۧ 2?|猖Uqgbsf(6߂>6eUhGG' F8,7|hc9LC"3#HBĉpNcO@(\ڶˀ}pX$#FvŦ SC9$5舱})orSr1εn/8V^Ǟy@oj)/bs Vf"lqx7??B38:ߔfI HG"dVhm_j >bs#XX( 6Az-6B L bc"oJ^D!#U; ;uumlЛ;`% c0w`*=$">2UR V'B. S 1{J!ʎ݁(n6<7݂[18Vr  YI _j~J`i0E \](=ތHbtd)gI\3@CNίvDe5}gs/b%LFfmBnL+'*7$ @Hi 4qb!SqIϊfq"d ǽ(OzE;q45>54kWIؗ^z o_b[R!znkrn}S m6tv-)KX(Ʊ*F 0qqya}l:<0Ÿhw[? xY`]~_F Bav# xLH/JVY߅}GKa.5aCi!*UHU`#QN &WY{=Dq8ƃLcMݴzյ`OEjsR؈?t@Mc+tt8< x C"?-YIc0'g[li&tu{Q! R<~|̜4 +iA+BI=>{+u0!WgPzs(L$q|,Ls,:0}_|L22}Yx9u'10x^<:8Dmxvr@fosxǏ𫮉R ~2~xXXj)DR:s@_Q MΘ$U`or O@* BjVӅ%;0b0$D;WamN\.qqEtpl$5 ÿ4ejf Q>Y;l#6fzMDe'䚧q"XB37ƨAJ?Y3 H#p<f~Lր&6wuw`Տp26{; 0aޤǼeIj^0nR%a`s$gD[e0'fvMu6T1u4-iHAlluwvl NWB%37`a-I5Q23A\k eBA#In^|ٷHSb!HR)Qetuux>.r4D k_|"4?qhUFfKUu8#.>Y9py܀PW}'*1nh<,DD;Wo2^ݬw_,5DزpƃtZ:gs aNspv@RϣhgRִSA"=!SHK!%^Տ|gG@*>=k۟=P*@MwXj;a\̞RȚ:i6h 64lL-vg'ΘPuLՉ˂?a =E&; ^J: ][EA "xB|yz^>w> Z.w*j(= KABfoFV #TsJLߣN&?n*<#8QY̊.f׋].X-6t`Rl) zk@:y^,-؉Ohn<n7{E$1:bgO ٛH4BRC&h+YK3 Be8\l|%bz0%XCfQ?2|N0^]_Ph?ajuN׆F vg' "Rp%[J83%,3$7 ϿEsGaܐTj :'IÃ*3Lv8~5 &Jdf"/8K/t2:`:Wo=fq,R~AoEފFKȼ$glZ ~8x >8QYuuZœ-K+oaw`Ú_l5V]d`.{CzepED?r0oB|֖^c:X0{]x`@ ͙jCKf崕n#$oS&(X*ibEFH%RhTRP Fhf RhH^$JUH!Xb~qKN!}ՍM2)]+N,h9QىUzCCnRxp$yxwbLF3zjn< /4@s\eЄ|WB(Κ{B!^W}Xh@)&>ذ% 8NkyOQ#3+GMBnT$]rFFѽ`?I"Ll݆SШ2 Sl$tfX ;msyBye ;\GU\|K}eh|tf2c",-\sbwC-N5ɩIx}pxTi?">Cݩˢ#&@kТo;fOMgLP@L!-iw㣯? j:D,V1Sörx\$+F5 ~o#^̎YO/BZR*V:e9NeJƟ#2J05ߔ~7no75F`lwxpJ׆:] NtvuTSN5A.!W\$G3I)Z.0\hju4h[QRވC12/BAEsb?~@tws5;={{svo&6{^ӟC&2vŦ[ ݅O.`d[rE2vz20(YUϾkÿ?e);%4'Hj&"3o;f0Y̰mi IDATƔ,NJwVAo2LX_̼nd:`mܸw=Kհ!d9<;/>Ϗr:Znkz zzzP(Gkf{{Nh.\Z&lxmc@xb飘:c#pXdC>v f2s4x﫰vh< xyLl0c쳒b552u#Шf5ڇo|wPֳ&ϵoy<.4 Ҩi`dy\VcS+OElvؾ?xeHSL$ʪ˩!nB,ሗBs┮U͔0/K/V1ĀNjEX]\B 5$3ťͷ Rb&8+ifc}_& q^vؘb IjO}GOz:Xћx_Cg䗛{LJLf;<1`C'% >7r2Q9U,_镗y<.X𹱈23X/ hA#egKn[tH͉=::!J'$=ELEъO*C "{+uh4XQJ;  ٴV!Øxdxe]y%n\*B"r*e\P ?Tgfzs f{T9WPYkܜV?.|:"DZ|ea|2ыޤ?w$)HO|GjQk_, |^e7ύ7  /N kW("+>ٗw`Wgu+FEFf$b:1()q)2<;Qv\FBmxaC Yp2Z  KQm xw"GXy'dfĬR!U)Gǹ$9» 6> KCn|/sC?d/p Ll%,VL5[Z!J  sn!*RV[;&5ljP$S1v*6'/YZ 6m8he.އ}x`\̞?:R!4\R!Raײ=x\x\p1s"Rgl0w5νjjé6qeH3vc(RqШ$1G%^|s'9W7P`BV d\n~Q3᭏wp&\ELLLu|V .s Md Τ@0FфM뷠lxY)"SPk +p^׷1 qd8Xn/a$Y`}3߄2Nl1v}\j\x7ҁ8NgW&1XZx c-HNM@EфO7m}!)_s/9Vc5qTAz¸{l3EE{R_,V*kl+\d!# Wa7X{-O?cQX DXŪg_ /a @ɘ`'j( Pw clhN ,oAP&3X(-H>^fPļ"<1fOFZKy_&G ݴ _}m0v(,YZд ᄮW}|S ! Xm,Ap>^g@%cL2 y91^:[FR`b݁6l ZCD/b-o6 hճJJJ@&-+V4fb0!5W|Xz#pR3Yo >)d$ɕ\4l%b =f}{}?u?l߳m~vGh6oޤck񐒒J^n4̾R%hy8\\ӠwafÅ#Ռɹ ؒ#X6F1h߄hI$7Laƀ>QLѷ1CID;v0fS}π&6[™E|qyP)S & 1فwrY"`ɼ",~}vN_ӚBd]Y(P",ҘB(E~V:~6k"c•5 p{ 㳝{/lviŊwVV{*du MzCpw1@P@|# h/MbKb y$1!&9 x\ܒAnl^&:$%%Ө! +|<|~[n(9܈cpuv}{ID|ܒ 9&8 \ic#Lv^v:QC>Hi! "ɉj*rfϻ , u{&?{n}NJ2}!UT>b9Pb*'2ﯨlgx^, )neMUeA4_ɚoo> iHnȑJ<ߐ|"* <Ճf!1dfTE4*)R# >/:kaiwgV4"BC(\v\v5^ʢPDADTYI _OBy g੟O X:&|u~TI1XLH`Z ,a/ BL̏,)vRP(܅sP0,ɪ$$xEI"|U,-!ۋS]g XO!Y)'2﯈萪V^D|v;\8ZӀ}Ռ>̘%K"cÚpt=3@8QY/_6߂>֯r,5.cf@$VUj'6)s0@,mYnû`w~f}83_k-̈3'Ĭn;}}W"͈ /8Ki8bM|rxgU'`H,zߔ~W}p8T*H$Nרdsy<^1Ld&"V)$ x4)>CGnŏkB7 T_|UO! :68:j>Yghni6sc/Y] BEކSM0;z_Re6&Yiɯ_G O`Xfͻ  KRD)Z]{a2YQP3_IMV44CZKy_"/+gw:!K _Bu.͖GJJMFVL2c"X<I)Jut6^@fGRVOjN1ٍRXf bR{Q7Hn=;/qk 8x m9cۼRE}}h>>n4g|)vyس#u%cT,_ׯBBHR$''ù\8y5 $y<^?m‰ӦX"R4*2SLX"!N u(Bu &4o>#35F+>^ />[5ㆤRcAQ  d:@q4ö}T8fz#6`wxpJ׆:]ΰݏy*̾=BmLv궢" 0~ڭXA"PD'*x/vcMؐ|% upv^-XZy8n`,{r@UU?>yE5@a߇ύjk1>ݴ-sYu"BOc^ۈӁ1P`FjJeJe<,_j^IMl ;R3\ 2{?(QOx\D$ɕD52He)>;O֠,0G}Cn npXw;kyjf=;L6WYv:|<RRR x0ύC)iԜٗޥQICsc!'L\Wpn앜#Dۇ#5 x_>})<1" xHh%P]^;;Qz ư|scNĐl%$b4Da0uN׆SMmaY!1mLZ!Xگ^RO\FM(Wl-fM*63_J,;Jރ0V ο"? IMB_3`w:+̢LQo_[R}~:cR%d}Ƿ B0ҙfBR3ڎ>04bM7jfDD\:Ie՞b]L=xq|ĴD{*cvZwO\&Ӄ@8t}p;AJ#꼺vu#>V&rOD7|9P(}PI2*NkZcX`JdAHi\J#G$ ΚF'C. ܒav7t/Zb@b3AKVF {NFә.؝npJV3ŗԪDv</NZQug⅘;5Yi?gK596y/Qd;r+G#_fK!3G33:Zn['Q*'cFޒ;YL;vƞ'F+-+^}T]ٔ 8N` e-A<$a"j$5 vK暆Spun6T>$8$!&;ڱnP %YYT [#?ULADD†9 bc9歘;}(cpapg.R pNo.RbHXK >>tx<0 p:QH|"2X?n[76wǘo=a'IU @P@>7 gwYv5ư]ԇ\*B:j_"3W# nچV&B3Rffec/5@Fͳ&3Eǻ!)[ƌ~1#!FL$D 4Y;v=;P=3,[4wU]X^-i{HJYWhMCu:ڍ@L[A qp+뗪Ta3g#C'0@! Hh+N{;]^XN8]t`O.VQ)0*/*eqT1Z1111<\.\ ɾڐ"`޴<}O-=֌Mt0 pA8Ng`IHJQRqAb>QYj-$`Ps+IK#=YLdUs93N4kEm6;DFf+.4l-[ ؉1nh8:oXUfϮ c'*? 6 B' rsݍ>.WHl& šh"<Ev|2vGjΡ6m)LT%h`@3eiwaLJ\lF[[uK7a4s!^̍uaQgeX lŽ6 OZkrф "pDxhMF LHbqr+;ڦKSVKR3+HpC;sS)S`tHL1:ÁL"DH>/p/vkk/HlMy\,[;-sga\LgӦ5n4sGE @y{Fl柰;-ZI1f*;Ƅ3scp^8u]">NdldfX](=֌ZcX7Sa nO@WHՙOm& G]hHs lπnwZ.h yrk_ad+}#hƈSMyd-/C2D J>-Zv; ÅU.PAVph1p:lҘ#\3&1xp_(u_uh"`ʵ.=Ɔ5a2Y_W!# HRg ?[Cև̘_,Y eLHII)<~$5 I͈؎v`\)S +G03batqy% Jr.;YnEYu9kTa_DfBsMˁg\D1g=Xi@oo݈$l8}Kb3ANDIñhoZ23>>yh<M.6D|EnleÉtwy}g5&z<]^E;byRNp ]݌lS"Lj# 1D䩥haC:kmǃgS6͗B34kq Jq"̞?wϟ1i޺&f4iƒeE$4MfHfgtLپr*ދ =.,~rAORs mIn;}ubekAf 2QQx<>\$8yϚ(;YZT7ֆ]|ˉZme;\sok=]d~UU#~|K:B?9kc֍bώƎ-sArNSh9!2#7%r?m8Xl9b"W!JFSxebF'Ee!ꝕ*ìs/b\nŏ p 859ꁉ\ד%Y"cT^ 2S$3G 11scÉX,łÉvTw'Bw0& v洴4 rK@*0@LG2º x---hkks36ݬWf5dDAĈL;.'*X $}X-6\rr3Ȑ!CcSj\gk1Zv~(WΊGAKͭf8\8<x<>]XR҅Ocᬇ`wQtٮض V'9kTjdhLPD]߬nAŌsu8o$3_cuUW-k8Z8q a[;LN5xma;R9_Hs * sUOr.ÃUzh ְi[U莍$Nx!]BfkaleژL:$ ]ݰwM4+;öo ȼ<:A VBsVF {Ne '3쓙k$s|2E '">7(iʑ{NҠ;ݞH/epF" )Jni_+?;G{K֖m+!pHbH r;(具tRF7Peڒ(PRHYE8!vOyɲ,[FI$IGG?9:::n_p%BEx vdS2x ]γ!gRVa<~~_tѵ$j5\.WXyPQQ1kkkrPW7gU^uTq{3`w|*9GÉc8Wd>3C]]\]P&Wqm/F$5lQ^ iBX`O q!%dQVϋM놳ωcpu'. 3Otk#\ /_fOJBERbɒ 5;q-^V5ۖKDHW!R50O;`#IZWWnѠa{ڸ]});jet`Bo|6k WةPI\ -ĔH,#׎N&>)DvF3u5V`O5rܥJ9jpt2*KQRRX9<amcPdZZQ[;vow*%Ezz-`eQW_ܔέ:ԌE=,1 Z|%)XC7~҂ξdv.)sa0l;Lٱlnn":(!p‹|5)n\~eJy0306u_mg- PkB $ bDcfXHI`p>_sQ3 7t:'zۛg6ЇAtvv]bqbƜB(r8g_& =gCXOf0qݍWc)fj@F/^ի`ʕP-O-|>˅kǏsXM"ƫS)|yfO6])$|W%86,aڸylS9795lUþ,2Y+?mXH3?Ӂ+_|e@P M`kfTTT 3sF쩚r39YaW"z8zoh5X`3X ۈԬ)H` X߶R&~aH2,=2+Syf(墘l_Ak(Z1)Zk+Pǐׇ~OTι^=Չ##l&hEf7 z\x'N` g *9\$HKD,31 ̨dfPŋ@&%] eV(cm[?P\˅+b?ې\!;dB[:jw{gSBTYթzgp uI`svvV\ٳ/BNNl߽ob۶am(-egH/\i֣r]Nغ_й4t,[tDdZ!YWJHthCC(QءP׉3]mI|LA)W5_ŕ+.` FܓWxcǛش-޵;d^f3v'șgp VU$juןu9t:Ƙm4ǀ,uY&BU@ xAujsFmQWW@,58~7;gaintu 6BIT 4ŝ7Aw\ueFAD(1`~#  1EtBQ 1 `d7e5g/}GZiK/v;w"!b+l%Q}NĩS0dibmЦk̫OaǶxP Dmqٵ:Ʀ3Mp3 D#6<^0(d^x LsWd()jWJYXt/ծ׷:<;ylDTzBBh?^}y:KֻoI>Z9_IjjuP*UtV6Ctt&u47m0 [Y|\?:lz\hn¬cpr7ߌ/}Kt _F \Qn;f> W -⥭~m 0 R)tQ xTABɠ/YR_]]l}a/<l;Lן̈́B!/YWΞp =E{Tls'DB%"L&4<ЈҐц~Xrfsr sZ5f@mm- ld `㋛ABBax_ qd#,}ӏ _CΒ&\+W HB6 "Qlo 4x-?,S)B,%3pIRC^' flR @fB!񵿮 m)f\~eJf^x< ̰4|- CHX>xV7Xs`hlwͽF!A 8zNe{6rs8z2QzU;-V߾eoٕT ˱r*\ 9993zLVV֤D̨e'$:u5ǰcn!uʗq&}E]BaijjfMA$*9*pGY|كM;ޤp39% V`ey%Ue0 TxwRM@c={Jq93*8?6*.ЕMo<wP$Va20r9]4 ȤTЪ\Zfty38؍+ mfҠ vgg0ۄox\ȯ, r9Sf tv߽~~OPWs _DfrGn*,Ce!TLV͗] DSR/-LcDSe UҾƫcnض;$)ĭ?%j1,ga0˽s /|#mkh˻Y>w)]Jf,\r\Z^I3f\p>غ=lJ[TFwAQRcZZZh(to߃z'UoN}e"! JKHB6l:~c߀Ͽ}9pI: rhF!se+;Lם̈́Bb-ٙf:4=MS9T&\P~{jW>\oH$dee̙3o#|y'3"-BW_܄gp sIsvAV 7cpI]y3ᅚKKK9>Gn)h6`ݵh<ل[wcǶt^MQfdXe|^2IgKEB8CC՛X}Z~9.-@7Ź@,U|eQV8ߺfkцzkDZ#Zc?篫JXsiY%.-ďnTv`1q|?1L` *eb,.nU4J*LH,+4c^{?9Ս9o?6~ȅT"djsQ ?exǓ_ SBxnW%b1~KQV:y a@_C}HjO;9FP\hpǸr11M%}cɱjQ6N4h>?7C* /Amm-:#0g+6\}vZT\lwϭs IR .@ep٩C0Ȱgg7!*mk"^E@ÉF4hBçzT&Evqs" i6><A8;se׮FeT7[!!hP?EnK-#>ugR9]s5֣x ˋ.t1݀W//*wvNDS}BcH8.-ĥeA}*;pS0H$)n^ť6kqy>AZZdRFHiURt\kƖrb#~lQmXW DA#N+bN%>>@0PBHD^|oIfgWL`p} M}U̙{j* 3I6a!2NU q'Zz9>Rj5B!Z[[c@L? qƏ9d]1 ař#7 |;JaJڜL\<<{~Z.-BkWÑg86Ps ৑C0uDoߺfkцz?f (J-@B<#`0ژm9?<006,Y{x6T5D3v `3G8pmv)H$deeaR熤X(Rڸ>IpLQEzlnO;)j5bPBB&׍hd׭(FN/Ô 6?>@'2#}tkR ݯ\<φ>t #m=D۔21˄ŠA@&C!C,P!G?]$d0g VUU*/^ݑ}/ˑ.H62xG~l(|G&V )Dvl5f 1'qU;ۻR/V|--_-AO"b4Xwj;~rntۇq%(C"jPE&zJZNW?f; !Lk]^{hJy ?oCOxoڻSz21R14DV^ߨcmE.vh*d2% ݯp] ډ|>ȳÑg?'UWslؙLB--Bg}JEBLS+,x8=ߪ@%Bc0p-J b=B9?G}C;NCT(+5֣MhTf7gnP]cSx${ `BfJı>4j5,KʴעW`q iܞSVA7 IZ7_gz`PƖc` ˅޾oO{]=džmX2;kA d`֫=bf n*<LhBPwֿy'p 'Ybs J%sL;)Xʢ{$* !焜O6$"6Y!;90S+F{~? H_a'~7IrSUc-ϗ(P%ڛ gMpu*l7gA.}م0h 0hZtJH 0-YhhmU`2"~|II)c[X 5)t̢MYe|%go<۟ںS^^O/4$5B!@$U@2@"q'Zz/]P.`~ wեJkTJ 2his=t/ n"B.pv"wY `p_DYpê 79l6HKB&B.X$!!V%ٓ^/&ZII)Dl֛xpw~^[vdUry6DWWaPph1h6Px0Ȱv>WJ],szjkkF6$^sΛD4JA癟g jN"dyq)/E6HX[`\@tuDW_7}Nxaf qf|ȥrcm( mB^0 Z5!QVrx` *&CHmxoc- juXɶ:`pxM}f`qJy|?;R42:IBJ b7EBsf`5(qNO& & %%D[[:Y׆~ί Y x<1Y(ZZi0 xco'0X,P*'TSS L\k6tF斜IR5Q7iikIi!@2@nw:9V-ua7C硡!455}^ 6B~c5z=nD,~9`p} ]8t#[4X1/3Gp*RH*3!,0X[Gtsjv;D"aT8)l~Ǐ?sbV+g BƇW$M 3 y~K ';v:;;g@[.%yX:6l ËΡG%sPȳ|D45 }P3!S  )*ӅahzȤTLsAcsxӉwwwġp޽U--QGY|$}޷a,)[slhJUbVSncph mI9'17BZ&$I Y*f>q8AmVmO&yyhjjDSSSfbmE\H^Uy݊A*0r3SE}BIiolD87rk>ix؏A"|қ6/4$KC0ШI`4B< *.^mprj:6SW?<#P5 Ae NlOiY&wOuuH H2?h"ICzB 5Z-=yv&NHhu+^r R'HR (0"3'ʐaLW/ׇ.KJT$6g~}0,\tiTۙȥ21tj9&$IhѪ$UmP<[N{\RZY._?A}xn~sj:!$EkÖ='yƉ}^ï@P ڦt e"]#A<++Lf@2|B5aεt"QBH*_0 :uTDŠ33E+~cd[dټ###x<WkNx(r@&qu@06*<{o1g쨷D.=lȡ,MB2QyH6熛GkkkTRsN7nb!5:{Gv~\^!C~[/BRLw0<@sĻ{NǕxgex-!|FTR$ϩUIb5v&|"xV J "\S->ضczlX_utr JӦkӧ0{\~7 /!,$%9/!Q9ۊ/C!2%R,K&./EFfŠ Rq8,_uvvN[?/XٸUU4I\quuUJ^UVBV;j=7iih&$HjUT9Umό, - QRRŋ@.dƳD YX7E&p0tz;ЁA!)C^ڜn/5߲haQ`3i*(LHE!b ʊ,q8TT(++PyM\y~|]Tm2!q7tmY[ uue)!pH 5(t}CX 9Eȱ9QV `(1GjLEkKK3+BᎧ~~/k 4[fVQ~εѢW_(ݪsLE:Ii*=C2a,ȥޯ?\ZZ/0ڝn0LzDQ|&N`fi:@!$E<^;@so:{_ߋ4t WUJ5_21 9lf *)&:A/j|w&OlgV,曷`(}98; "$R +|6YdrF6U%$9YϫdΤ27TrܞA E0h(0{ :"u #@~f|vs*5,SWWX{y_md; 9>PťV[J]JVnl60Ll&"urZ A6V-[6#~ ѶzؼTD՝2+S˖B)'# aIWf BL I>hUX`ݢε$f[u{ydć{n{"BDBpdGKjO۠J̈́dg4G7™pi_@B\2xn+ݗI9\4iܟ[AMկIR 9n:]zU7ۏlV)%6<:X!ۇ+A/{DS6W%.Ьni.Zՠ03!aB,VgG< ml6:VwTk=ޖf D@BLsZH 'I9saSmsR 2IWbl6jP?w:g6f V$[0<266MhBV;h5!Bl& "H$4F*Ӫ$X(?ojsiii7k 6G[e>a<^:h!gxe|~~* 4kU2t yEҊ IDATM}UӜX \]9+!XN)#Ө^RBV&JyQMeg7ȧt0cj:'F>|igxZhP3!p(IK5|"'} WALed&̠3@M>9`T@12ַ. uuuQo1*lcy۾X= 4pUe>rQbyԕM !*X0;J\* l/o@ Z]T6os'Zz!$ wm@R.AӅ(n%2, |nͦջƣ03!y9_"!b 8?* E>ޏl^~"$}dɈ>Լo߾ighhF<; \BAa?&ĚAKKLZF%K(Lݒ`3՚M=lQ@5x} 4מKhY,`U#a7iiK "$ɥ1ʄB*P(DII)JKK#z|Gy0dR&=< W>BwDClD,#w^H6 ш@󺥹ȷki~F&’03!,9oYWaT"JF'(o 'aF:!Bb#9j1V*G> !#LtŽFAd&Ka896:u %tvQOCCC1֭[ކR@Uym/*Aܛ@sZuKsa&X(ՠD"KSm=TvV/^0PY(B,f?'^G!$_؃`ׂ|R0 gtl 4e`afAEעX>Ϟ`fP JFɼ껨?)T3Q+5g;Xξ}{g0j*XE !?ޤϤШkzC#^$0 Z= (̞HDCxb0#˒l筷ޜM'*/Z@0/ۦR=v?ށ߾lehp܄ؖKD0UTuX5XY kJe˖CT؎7AAc#~z=xO@"$wZP `p_DvF:ѭ&@sO$.P8rq~* VAHܪanXEk&`$FGGЏJMװ|oW P_Ur  5BxdnQ۠bKJ̈́;8FF(,J5m\_ 2:t`ݒ$cg߾}}}{ř3-Qoga1 _;Zx6Rן|&:|Fe4r 3#COvX ʄ\9VSNf¢{æom| 4*w`~)!/HKA#VEGe V-ʆݢj;%%͍ݏWe$ W]`7(B!?z!2LQm'sh5?AbTC!AKH {b?EBeD} ?]X #`ޤ?`s&lX,Bb@.*`e;UkbhUssE}^{z(L!Xijj9sMQEH)e d(-`X$N!)/]C~fn"G!+9ϻ9Sr2W)WQ@ن{ FGGy6>21-ͅݚ V4*Lq9R^lAY%m桴4yG1xQ(`s08_C!pC0ȿkbl{CYڔJVZV"$F\Ig}=}x%}ȧtpg&u&Bd;XNm푨VѬkgj&n I T6aSPS\LdR3s!G^pk_?Յo_+3y/-AHXG7Yt WWB&1Bl& "8T<ǷêyY #ja% û;?E@O>j:!^|tzx׮bYQm'DNdHA Vn(FC`#`]_~\L*@"Om vVܰoSC 0$E:>wިc0ȳӀ%B6 g|dϲcoHQ? nBInLL4dRP=^.cK憆xD|--x?e+hVܿ!4w]} 4|Da5:!<'Kj:9ϳC.MR<`{Nu;Bf>:t"9ҋ؍5G +B ʕz 4VIDD1 9LM%#w.jPVdjl$6/Z^nrR| ]W {ΕD4:!DB,(0%dyY0h#X^6w)kOl.Ws\oRY)WRfŠ`ӎ$EDl~f4]-^IZfC|i^Jŋ@T8[Nl^oFw VB'_|c0_]JyS Jx'\sj^fd,`Ҍ/:.z)LGn(u[y,/4%ii0P)tB8~m`;Mېd(//;`Ay1]輼e5]~bu ƽ-"qq,EBR,bTC,CI:Y"~|(lz܈/{NE݆XLw͖='q)!$HwֿyWm\<@Ŀ7=<+SU )hV˥4$1 `L~uF|R}nEPTXj8لͯoj:c0#;I|>o9gWuvvZju ZlݺO>0{v 9j}i5 NBȕBÜ-wA洉396wfn/:F?n2`L7@P8xqLg&MlVt6fϞE!33 jźukږZFII jkk100>}JLlew\Q^kA<+v''mIW˰jJybn*eb :XIQ":s/֏cQmaUmn~-&;F!$ƒwū6k(6| s =LL1( *h-!I(@Q&AS[+" y18=nv]p[iix`ӁFzYx/Ǽ9A^^VXD i@ dV} HB;SBܦVaA,$wM-L=|nI(J{$*_; r 6hNjT )(8co#gG~&0 jq K`#8z{Gyզ KnEq&4UiiP*ЪzdИК ն3|6+ߏيMWh?`l[ڰ~#}r:z '},Z^˯Y˫A+y+:y9PkOh5drI#*XE!S  ߇d*(L߮X  F@B̤j󷮼2:<~^-%/yLHY&¬WA,M- W.̆FyH݃qK_k_,ktBHa޴G.[-z;'6R9TV"^G{rbqv&@#>ݹsRDBqm7aaGGGqmAFH 1 33!Ww/vI"d۩o\@A!$R 'C\{>UXHer:!Jjٳ+38"(e vI|}WP^:D쎧~WmzGrѥn_{ƵKa20itByy.T Qsssz̧-gga^&.=>'s23I2&6I\JiH[*]DW+삋PED]vQV"֊hWҦmҐ&14L&/"mΜ9g>˗%9|y2s|پHFBQ3Z/m,l{P {;4Z( ͬLT&d^ښ\ <6:v|UoZ5]n63FCϷph2zq\*fO\wlVM5>@@2~y޿tߴg`] ,J3 lQK*kXHFtZ-kQ/q? h, DlǟTԘ>u'sǰC8-EmUhs\WݚV\[[y=/n6ohB[Y^FBQ.<""< TKX[.HϽ҃JBNFD  # ~mM.itHccسs߻~*R\\3f|'~ HV[ QVkUl(' dx=f6$"ek^(T*d29oyIS B-V z8ܶHJKhmDE/J_yA'6fwbpP[܊֜I:.*Y_, &wb9IllD93)< Qmw qŌ:-F2 ,wY tZ!*#>d2/TbuhmZNÑZI?krZSSS㦻Ȉ$R,wa 6AmUwm'6K:'0rZgt|ʼnrXWFYeH*5\ 4-i 9l4|j8A(kK'ԉן͎cSK:ӨQYnEf"U*S,dbh(&_a4*\?NqH(-:T򃭂y݇qn*fJW6 3L1bSȆkHWc}t=?kh'?qżc![Ј$RP.CmJnou 9d"LkΚ<K=PC$:Wꪖl0(f&4S. C!şIp@pD ;,zoHvNA(*ϫ?1=M1֧C?…F$1V Āͅf"*4&Qc[1aQQẄ́f"%3ͨ}+y ^N)'rSׯ| .GE Gø#H6m5ఙLD󒈅 b ؜H݇dRؗet9y-2)< @ ?sA W_YX2Dw 0):Y]TՈR33#>E#ubs2 ہd"f"LzsV~mp/r)1@f IDATZTz+>VF DTj\]CXl?V+s:~W(f0X[iK)u߾n.D"9xfG'qe>t9XT!rwp9KQcNFD4g8b MvEiX ޡ$v#|Z`ԙ0.EϸS_E<k055n?G\hDyh2h2 Lar|#A3[u+06žpHFCy5敍h^وf32 0Go־K찚K"cN/`g;N $tFeY%9hkZe5KL?_)ESXwQ GxE$B%4b3!2@m*b}ڽj uD*]>74wAWN/kB$"H((b,u5nl\[/H}ܖJE&4 :8l&.0"h&5:EɅd*%Il߶? Qk#hGy3Op|⺫ЈVaaC,xp3&8J죛pG7al4G:П$9My`2QS:j=Lb&"*LW3%51FL&s/RJEDDYXz[7ߋGO"}#tpcgOXӸ[44o3o&.B{F 44,i?wkN|;'Iu5ַV1#GƞJ.,z0 8xͣQlߋ f#DeD}hn=`h4.F2 H%ը7JK x3I#4܋RwKz _xlt _;V 0HYX }p#^Nٿ[zEpV8؈\q219>Iic+⼍puX4?1g?b8FJt~wNMm5f[ݼ=>LDD”8ZlL&_^l?]f&%ZT^ u^8'"qԸQ1(A|W*b,?9m?>Hv D$LL͢yaW{o ֬iSbH:OcղrAއES|b?r1E/.ǡVpm{tԳʮfuQ6 Z.."$abtJEKQaj^ߋH,)uvaCmbUjk &ۉۿ`tDޟ2 笠sHqz8Ȥ3##3&9k=l1j+@-\T,;G3ULj&1L(-a%&""񓻑Τe?Zʷr.ixadcxm "&4$b`AnĚF6$6k4Gwp\-bӅ("x B$":دqoM#kI4Y<.+.\U.*B„f"⑐ƥըpEj٥=HOk (*{ߠV˿:y$L*K(waq} ,E*UQV T*ջVGY)WaYR,T22[43H6Q* ,uƁ*b,u嬽p4{__Y $̄f"B:(5'{fˬja4|֣ƭ?#(#;<xJ(sذyC6FC1%lhUVBNFe:-wM$!R53;H!HbK'*RXkȺ-Gw\`D b4`Y"O%WMuo 80  NjBŗh &h67"Q?wkNۼE$kCIhg"Rx_1q[qYa06kbs"ƮvIa;s]sȓLѭ==ZPp;}HHQ5js IQs "T&p/2 e/bG=o]Z| -+eH8~.2"""\r n#0s47RT*WUf'DdRxGr[C`$_ZeǪe}vaB3-Vk~C[KpbFSbx{ :i1qmP|Es=dd?+6b jcAKS0Gf&4R&[.n|S'+Z3rM0_\ꗏ<FDDD*'5' K<װOix|Iæ9TT3uŬLDD4 km.GEױ}9I^Zbv^b`B3-Vk~ʥ尚%`5/nj-Ǫ%O$ wT㨫qmĽ8WVZyd6ఙHɠbomkrifwW#\QWe>[#""""! R'@DD4;~r7 ضqCz\ʜw:8zX :|ZIa2hS D&F =0 8 =וlE&G)< ڣ[C5Fl6 v$*;=6!f"xDTc;*szK$H'R0Z ko}OB?FDDDDdkY'5165J;ADD4C]qīl@NۼEDNkkJw/d Dc~dpcPZ -_F{Fʕ+h=&JcWɤ/ؾpՅP{z0r1QAھُK`1 ;پI\;i5f)b"Sdblt G^="a~m0{""""Z `S|DTr̔Ac uE,cSaB3bwjkrX,낫5We?…EDDDV,܆ <ْ{xd Mc00gwn8n p9*row?oFHVODy-SxfG'')ڣ[cJc}SQc}k7 D$DL6+%yG:!<9{oluwa7),JXj2DDD8u;z jHNۼED{kC\Nd2군Y9H6q#!M6k]xSՅ٪5OF8hi:ޙr{WUu:-l6FC1wE*;=6&4M TV.-$? aoHp;ַeEc~CG$ҼQpRd2~t#)9`$ "":lG'1Tūzz [$|Æ*.* dg*VŅkł8P ,y>r tZYp#(')J/`DcyͰjl啲3Lh&"9 )fYFV,V#~]ErM~255)H]7g๜Ucg 9mԬRj9 _GWxGrO=,I/^[V{%jNz"-%o F5Mn= C2}UY/Z%xOxtaN<"R]+sذqm60:.M+Rl1>FhWc3k-S8uObf""""s:oWjK$*DDDg]ܼR9k?>A-<ōRktx"sޡゞ@NJS{9H^ *%njG".I?1Z&4D'GBʥ尚-lh1"o; Z;˱Z34W6 n#rr<p˹$5Qe2% A_<4m紽zX%6VI#uQfTEDDLմ)l՚`o yͲp0n_dMUF|6 OFղ+: DH#>Sʻը Fj6 ۞vz*{jj \PDDDD2N^w˶R3si:_m˺c9k?>>}hҝ 8l&5*Nx"R%WF..\(++h:qm=6Y[Mwls=>`WO~o( **$KD4I#4ܫȱ,z4-uFOn{o^/k{y$ElrA'N2DDD/?73i_G| gֆ Z%٠HZY+[6+01 ly6U՚H^DraՏuH{NqYq6"8K)[*Cx̯ȱWvE};Du}Vw~EDDDDo;g;@IDrb6pk<""/muo-9m. K#F {MɕU pm0PYY9q}H&RnQU55~IOVኋ[1T@ ~+Ӫ`H!?IEMn>sQQ n_"lc8jDDDD"j^(TJoR>W b,;ǹRH6Z@DDr\՛Y{OigFՒH]TĊZDTR&Fwhkr(R%3Mhk/_ 8#ldEUꪰ*nXZV;8F."*>dd}t[HTWvᎯB 5_r1t:皧Y?kt"FDDD$*j휵w:8/N~o(gU# IDATD'GB ě4f_j՚ۻ usd_>wdEUu:->uZAmt{04wl\b,ɨb!]FWE}}/X$*z^JG?EDDDDd2ڵYO|Tr|2#YX Wi~ߪ b'HL*eR_6군9ىJD7 pа Vl[^*SqSؾ'ɂܫ4_|~'ѫ44jlhm Z V d,D@ckZ$ +6k),ozuGǩ"VfD'4Ic|_[gk/\k4x`n纛>RG,jDDDD1ېr<mЛOS\)r[ƂNJDDD4Wp+sޓ۟F$&%NUM.1CpQMep6\kD*G%_{Zt=vg''59WiYTe/jޥ'6tZ5 ޸Y6Enl/\ϵZ3VlzXK̲=0dQv'j]=6YנY"iyN)d7R8K?Uv.""""[\E?3LvmNОJ""*xrҬVq~9%N%[-&,2i_g $\5vomYH(QM+q'ɨqַsDuQf.")'F96!U2Ԁ6ѲB;dj#=$Dc6谼V7X."9@:b_Bvt*C/Ԇ܁乣O&sQI 91BNz2g~&۾[r|;.I8l&V""@?R(nD}}ޏh4ӱ]~LF9b֣J1~vG''ǶA&#:ߌp&#IxlmqKvSk.,h2in>c<(ƍ\/j[.""""1gWjA{WѼ&ju56J|e6`(rChLYݕs {;#mQDOD AY[T ~Q4&x%-w!"N2Fd"ȱirD'^Ԇ܁ _(Ft=EDDDD5umHQE9 5yG?| 10ξ9'[f,ixϿ-6F_os֋wqQ{nKd*%F.$"yJ ^QWjTX{yޏmnng=;P .[ӈ]|<0n<.<"Z0B4e?1gH'}AQZ?DD 7@)j\6Uvti_Uά۸{egx}"}Ͽbq76l$""")(' Yh>I6rZǁ㯢 AB$&Eq`mӚ8>Yƭ]*hOl"j]=6ËDDKaU|,*f8mWQn/nG08C]~lvfI$Iŷ[d:"ټxO,pu-Y 0sN; 0Ic|_76-qb 0HLscમ@f*.m4׏0?$e0`q5U8p$do^o\S@+g#ި|8ׅ'IgKӽ7;gmm{ R ]%b.6""!?&芹&7dknn/0cn9oRYVkdض#_EGD1ȲWnZp,Nj]YQcyt5ID$T2Fd"EYɢZ k]/sc tA۸eYy߮NW޾Fp`qm[敍Lr&"""AU%5%'"""/ x%Nx%$4`9i+ c˿RVi԰[ $DD9cQ#T*uATE}{W%`0==={/(y&8H$*`R3-gwtʲv_[~5^Ls[*ժd[CD;1?5:Eni``R򡦡 j]rּ#o%:;+X{jlBy """2 Lkv|՛#M&\-DDDTp^<wcQqYrJS9٠bEh""1C~$b2NaޏKQ]]=quKoelCqt\lD$V#O!4KyKH1?2U_m$n%ㇺPTTY9^ ]܃cO0 DDDDq.휷ԜoYP>՚)i:Feg~Ĕ*=qh}iԒUR"4B}=_k{oFc=$$jͿz $ )<e\2iL+rl+4CRX9։o"""KF!j<߆L&Z(o4ZW4LfH.4?- Q jHDS4BýSUy?NѠe4(*j>8FBQ.6"ݳ;;eW!d4J6bWi^Ze0Wt5lCD$xdHHq*qYE}S*VkρWk-=d!""RS܆E| RX>ff0w~}\o_B$"\Vi~NQ4 :,uJ^ C1o""B2Fx_qhZ6iQV6{%ɵZmЈHT#(A%u:\{y4w:*dWCD$"wY<ù:=4 wXP+V (?;q E<ϣ ԜL Sl6[""ξ.\/`0$*ŭ|nZ*/BI,#(jZ Myfc& t{ݳ/j{;ȈHTvwcJͿ듑3LFW!Sʝzrj6@UsQI$J(&Y!syu7r=j)ݷދ-=`"h^_\̳mVj&'CA "YmddX40.$. *U'B}B*܋vtĒzFAss ^{c˺m˫!4.mT%p(xę*͉dTv.;K"iԒԓ>,\DDN7@WlVԸ !~x2pזexG׭;I(?8vn`4̰?ᡳ_z߾!DJ0;ILL|FV/J^1Z\}]Fy$OFN|"L&oK&5ex<Y)?kXXl=?{e3ղgeN7)w~}Vg^@%\)ILJ5DD J`28GuAar9y?ee>=1g5 Ilf<>Ń}LjVn_=10{E]Ơn̺Zsyy91<|zcuYu6ohž'eW\`9}ߩa$i%-Z2F23On?o$=s~ڶ{A ijzў)qcf (%'-VԸLZ4-vx('#xmOZ- _j-yI=v.Igd0Q~):&Bio™.Ӕ-*@>(g`#əJ/ly?^~Ju1ۨbbU-"|u|d[ZZZ{(R'1Ԛ5g2Sؾfđo%/OD%|&CPת)Ūe.8n<1(>/@ՈLf xv7 ?Ui6h50kD<2DlbU_]n_ɔ8[j}4XmqvU/R<ݟpJ(7| " ? X^9{Vf4ͦ+5'""""93 0qvnK*6'QNoFWzB5k447O{̱.\Uu6ohO */cR,}Ar؇cV^3ˏ'Gb9+74w{Xx>ID&F|p,jTԘUkN&8ލ5zwSd2!s(5qz2m8+'zsp?i@DDDDreeOAzM6DDm|j(++/s ]^Yt8H(Dwؾڻ1>/pd3+JPWe9娯3`9Nn`MK5`2]C]~'*Vj(ϤS 0*u~ĉqDbIQ/~x֏X,Lj&"""Y&q:5VRy'Krߤf;Y V,mqVz(1E^+!՚wN[hOgݿ\BvImw7>WzfG'>*Le.(xߪDga}Ay-t*U@Qq[fJ (OE&(6ۡ5<1$J%%%A2$"""A_L6M&OW٪JRu¯$n)%Үbx<'i"""""r8a]"s,ŜDD27@+ʺB5k4֡_v%5[zT dӽԼ vڇ~8 UߙRbaI R\n 5N!W]sN+>gwԈh[f]N&e5{GD\]:x;L1<ҏRwCA]hfǃ[Qt2@w [Ved*n_PiGBQlݍ#dSBsL!4G{]~<8 azӋdsWֽ?2Hޡ(}[fVC (#H&+Vk]Y:h4OΤf""""Q&A<]DyI^"""""ٱPai9fV""T"XJ+ r5.kI܂_}ߝ IDAT Jj^TaČb;pu*ftÞt߭HfVa򺲂Or#/[H$HdwXxUk\%lH&&AV药LlT*JJJ0>>GDDDDEeMO&""""9)))E?Ůl5k8!d(:X*[s!taZwC#aLF08yx}韇'd?/uyx 14伤Ҋֆ \nIo&↳ҜLfp?(ZZU&f:d"!ؤ]Z;E\YYuR3&5MJoHFJJJָU*6K1')\5-vg=5<mzXܝum˫CH$g&3gvt_&yp"kݧL .JUa5뱤҆W*b}|ַ?op-Z"8K͜ DD2Jd(WYZi$Shti^{{~w?((V,ee<bn@RB\MG{*UYLv7̶Yd4`MK5 L#HǩhOT Hf2iD;Z:8IZHz=$%vu2"Co,Fg(qk5*Wqw$6a D*n=M8q LF61 # E\zfG']%F5~8+Ĭ9u vŶݲƵo'#<at<*J\}Xٻ GLO $nPU@uUMO6TE۔,3҄kkޘF|ؙ1xךݙDX C˒H-Q%j:u.#$P uYx~ 5^x?DD?tp m^՚{{{!TUm> -iRͿ5&""""QnjpN""ɧ;uŃ8s?;ԮB/b\\wwh&[XZ緯OĿ7>B*Wkh|Ru:l<.+oNW|oh&"Bfvam\QGvn!&""""+c#4KմlH*(fl|~nC ېenϧ(j_y4{?Ԙ%/'3La=iW[s*WFPX{ SQkZ!}ɒ$8Y\GU)@r'lkdx<@|Ȃ1FGNf$B$M&QVڟK&Q.+G:ә 2YFꈈj7lJ~b#ɤ%n}琢pc""@QU]] "]q4`t$䶥oN,Sm{jR:Ws R)Gv;rEFM7A G{Mp6[eg>J%uCvv2 x8Nf`ZO_(@ey<ZƉGԢ{~1L"0OMYQ07Z( 9X{|bra>6Γ 5'3١~8;u;sov1[`;$[qC$'*Ņ-pR* D "|jюz=a3dQ[)˘K\;LZB6 $Ddf W8?vMg}qj>. .5J%ry`"` qr i ׍"L6U*H$nK#ٵۨ7 *re]D2m)Sޝ?kgqr>S2rʅ7F v3 @qj(*DDvS.`nn1M`0P35 荄C*r,v;n1"𞟃FVvɝ[r}Y;\MDyPs֌d8v8g}L᏾Ik{ {X4ijQU]]y9 :Jz<2j>㦟%浅>}$-3B\Aِf&j_]@_P7VEwz#|R*jmܝ6zC$ #F%䓹zf;{x!՚Ѩj́@#$Ɓ "C[xz-8=Lҙ.jV&%3SmiLV0+8֯9 >3n/bQ){\"dI@DaBno1y8ХN՚'89jS#xdJeˌށo|Y`Fυמg>eJBRctƿU*Um,jH ?{:U]'us{W*`zz8Cn ==kC;,9^gI(;Rm =nى$81XbYJ+ːQ[Uk>9ƭmB?>瞾Vx*'9ĤA/""";tYQ07Vv5յM;˴:ssIёHg2$ /xϡPi>{Rfx{m"߻ķ#h4Vi4૟&u߲ JϥT ~Y6(d1`DP3lC͟7IwD F nsgNO {%(zCXJYg2+߽<7@"Xp'ƿ-ܼ)Yj >xr !};969s5L"N2ls )  ł177{89:/?IPV9@:k7DDDDaD{1"L-+M5LH*5uCJDDDDf_ƽ W d C:/7B$ODD=;傦vA&&&6~vw:) ~bsUB\o~v}}}LZjwIǕjk@cA#Vѽ^7W""0܂5u>1nܼVN 㓻w9ለ^c@3\mZ3d3]: @8‰Ú۹qa}hm\*y.w2 6_z$k}G}LmLos.R*-zGz?Nsc809uA]O߅hHֵMAqw|\{0^˜lG$7DDDdCZ*<OirՌQ.+DDDt2\-|Ys\wǍp/ N ަ˥Jjc^kQ{dY~P}!={"O=7{ ͟\QYpAͧz٦JPsTC:_6oZVi&"\܂^p,{Nj'z!I'jDDDdGeż9DbfڲR$g,Q+ګ]\`̰q;'"mjBǼxԯK;CCK.QO[j,3^y3Yz_o|ޛɠ-\g7}6Pmz/UM#zX٭Zp<[p8 x_'/]d#""""]&f}-Oj3pw""":lnráΝ9Ͼ2>K 7n2t5d . vTZYE齜/@.SΗQ(4yj$Zf,W|'M?cuf"i4Vi7sw[PsV4@2U2o L?~LDD̜^p,k{~,#R[m|,5]]7etHDDD3gP';˿a;udYܸy ?|H[in[T*0Dѡ[{ή.|27>""jnһ ]Uoٯӣj`+[Ldc劊y ?]E*Wno/Z gB͵ZðJCǎU*YBۿKp`w`ec/#>+{e4[kEu:N\j;>vhDDDDY6z$ qTʊYKDDDfGe\3,z[t8XES5USenVΟD;'y݆lh.9o֮iFGy̬ɰZ3c8n7=s劦W*Uܸyː=2(W*DDmf8ԥ^ÛNk?DD:{Hczy>UԽ_D,jޕvx,up,[[,CG.Qz@H=P3ُ+5_ڀtE"13R3 i;!md:.m DDAU)5{|ۻtZS#$H'"AOw]REC6l*^ DDD?ڥZs_a՚X6Ȏ2Yڀ^%LYyf""":Μ ϝ܆QU}kU.Vi&""ؽZ-"uPɼ6QNB""<:XEUFb>oHb>ӎ ^:QұZ0$}Ͷк!/ X<΁ """[4s60KGP.+DDDtΝ9A8D}eM򘞙1ozViVi&""Ԕ5X7 ڃo rgkz\-LSYϛ\&jRȠѨ븪J͋KZ?V Bdb"""b\z"8:㓓DDDtdO]~`^RK#:~7p""JjN{|ޢ.mae@b>:'"QlUJ\z}js%Il~TZ 5j e y%N "":r~P_GQpjߟMO'ZnSxw9 srvfIv-Hd6W*oQJg2ÜDDDttCpym4~bA.`&""*bn=ϛx"3m*N7ߝl{1Sm&ݍ m|T[O.rAkcf""jEier i2 LF02nܺV 5d fEȖjӣBͦdJDDDnt¡2YUtMX\Z6o}0LDD)flj֪pq @Uת&浇O3ANgzf+T+5^ӵ(U+*gjG7ژO P,`qEZڨۦZ󐎡fϷj^\ZFRjΟ$IVh:{ER:1kצhD3WЀ)G$FGNp&ѡ{3//HR c&8qr([{/CDDdZE1` ;buooFy<RТ>}~[T]6Ny~" HTuCCm?S*y?c^S""*b赪׼?ro|Pjky@DDD4L{WhDP): CDDDDttgo\Xa IDATm\.ťeCvf$[[>UXvZFx'z]DޛS6O ; NB""7 3|DN Gv|}J Kjg\_ru cf"""tNPU/m''9Ȝ;s'Np\' O4UmLt8r |pv {tX-ƪ`ɔ ܓgj61,?é;i5ލ|R >v{Fzt8Po48 M@p: qn4J6SUk1ʊ*ʢN.lYzPw>U0C͵Fe-r2Qˊˇ׏5gfZ5@?>{L.] ֜yCj#B͙Lf""":2p}es0t2<<\Kˆ~^CDDtx\9#1NOOdr'BXJe9W1z,#Q 9 6wT)>'X#_2l!=?{+֫qP9f*R"zD''QWp >w9 jeO69{4Cn|sLDDDdڵ)-ԜH\0hݛxDDDt^{eܸysyMϟ5_>YB$֥-e"":T: 9mzB.fY!22B^sH?C͇l=cxyY'7rG,P||:ҷX5*WWWZA8 qqRQK;.x"JJMS;~wR ig\_rri/;nٚ3'cz5$ܱF+ct:u~wO( CӉ kj!}tkKv3`CDDO)d YV=~\ωp8j#(c{79 撜xl( 3ik4nO0\@\S綯S-1*ҷE*5k\ R^-#"}UJy4u˯io?'i9 zQ,9³ϰl2i6<%V:j7DDDt"0W~/A4qCvr0[[7*nm% DC2eEz0778c(M$*zstuX_h ԩN G6iL尜-r:|{RQ[nǰJQƴ\SQΩ@K%@\JZ**@b}{dqXI. GWN T߸mmjj @U˟~ݻ`-=q_"""su#B㓓DDDd #'K/SFcxB[4d >K9,񘈬cj8`՚~]B͑H|) A$9tEŋ Ջ7iY@r#UPs*9-?J mDQ\)NC+;o %@^W7 vW*KI]Q]QW*[NkBes %y|HC=aDm7_##lX 5zp #Rs"1sUNJLuҙ "0g6S|xoQs; PXܟSeYa^yjUp6UqY\19c<:ܷgJk}w{m7޵FFcπn;Ҿ5C^nmSm=T2]8nbUTJ9v{?֏w .x%^Fg=zw*-greCfJZu5ή.n dm'O6֏ 'sdc}$+,[>jv3[j' X,rr佋ǘ!""Θ6k2gcj79ёDDDd,MѨ _/,!JDf" +#WwoX}Je#zMQh?G0==81ÙS!I"'9pn4מx\6*:[ow2|y6Poq|)cB(RB>Nc]Q0*b>U\67vvUT2dϞTM)V-}Clԧ1`m5ݻ\\"""(syv隖H$fCC93aED""""=-2mPfvj&bsP9RAF\=jTk=#HyMfb&̉N 3NDamt7.z5u2֡>w @9' ȮT!k_qCH:jT:%"uwRY ޚJ~2˛Hm2hX';\.|Aؾ_## CDDDDl2iM٘gKdQcED""""tߝ0_CnmVg"A0yj3+y.6( gh=*p (V6>jD^1Ǘ_=mqp8 I.ĵӵw_UZ?~{T OŐ/Vc|&m}VlY=;r˗:IuSz61fYeBN'.?C6/,8jε5Y RFRB2 V!֬׺p8jrA>n=ι=O?ךKZD'D I N'\#?Ap@J U(UժZGVx#XC~jZB{"`Aۭ q=؝;x%jj97l>qW6iLJt:Q9h+5'3WlψPY/ sёKsإAMOү>ɾC3>&8akf=B́@s91j>5 ÁzKr?(zze[(8$o>֫>{zRSQSP*5*WoY\g0 /lYUm-sq7 :E'.Ա׍}"<~R~ҡf[-n#4lz",W&"""jwFUj6;P3E izqcC@vEAvE٨<*BZ ٳbjѰGvBsLTQspK)^O൧OnIK \qCO.iS(}FعRU *5˿ց^?iUY_Fcu`ۜ 6W*jy7ɢQv gLJݞJ~>0">Ȯn..q_>^|oͩUj Aa4AbsXX2**\VbfI9DDDd9ӆnBͳ$ε JІϝvb'շ? P*9(n9m$BsR›y"^rŊvdYnZ^P"S nf,+vd~Nd-r86އ*UjZs+ᵧO൧ON2ܼE8}jNoDsv`DǃwrPv05_cg0cЁK/#wC>7B[rzȮT-(~cnNǸqt2݃BB~|qq m;rRR9I""" & ~DHdrبa&.MDDDd.9Ahg~nRҲ}dyvl/^4GBt:ybffssI\qVZUԍ*:3ܼݱCJ7GXv]]pI_~`gC~7B>WSXxM5{~T2jfI@νN`GY|g7Y%Ĵ1CʹJE- sq #( r1}j.<\J] V9j!!?)D[٩ZsOأb2 <Rc`_~mOX$.I@ȿVUJ!מ>g߿3酕|8\X=TΘWj]K:qh'kxYT)dƠυ嬾 XXXGYrDDDdsI-wF2 OLN=""":2LІc4=z֘PP<{jx*UjuTUZMm)@8n=|Jg pčr g("jUm yѐem7x>Yn3vL8^8x'Kz$d.nnkȹXP,UP7L߀W—_=|oy ٕJW"KZ TѐuenP#~.gu|zxqx7CD6V2ɚߍ=!Oۡf{<==qc} 5@\ 홸}#5R)f"""` +O= =C'GG~nRҲ}2JsImRZZ}JMsxy+@w+ + 9dV*_.غxv%lTUD[M?j,7]D;P,Oh3e[#?;S,q+K~r?Her%@IQ1oG}x"d%+Kz^T*Ŋ)\=צX1D8\U[+鿄O kD$a@(C~7>w O< 3M # 5GC+˻-?wc?~uQ'MR!9aC$3WL9iVG$""#torR6x핗+/c6{~7o*sϴ%C6&е` *UUEVG]m\S [V]^TUیuFB/#w1Ldr5h[MPa.m~:6_ tp7hܶsHp:|ՑARBVʕ0GbzPz7 lcݦK$GԐ/*U{W`1S>ֻ}Սjr;DX2"~aSǻŗ?|x#<>D yr]z9+#+o =# !E}deTox%p<~~¶s}tw~|H$}ZsvuItr0ņ֎iW!ΰڨR Zѐl{ [WY_##͡fϿwOO83m#T*jބ..ޮts#uCR2>dwi|r?ex0b?hfD%n8;;l.U:l'i;ԼJ>O'Zj/[bEFA?tܹ)C/ U/JQPVLё(.x,DZxO]>2c4=zFJ1/ZWWQYAJ*j:UJ UrA/ή.n! ?3woZjև'3U׽vRBjzo>oy ٕ`!mUi6(H srvu1LDtD*<:㌆<Rc-{{z,jVUu+Mtv&T&"""2+EI"1cJͦ474lh/Fɺ9 ^qrt..-ҧXg+CmT(UZUE~ ^ 0ɂia_FxhGe[C~^j~߹;J{v0o&YԎK}'6u"13644`7:NDDDΨ;֫,-[$i ,.T9jlQ;b;0o%:x\ҞgWrrFȿo""=K 5? fH 6?v*8gNkj#u; 8-)5p2b,;(/lRJg$yFDDکUj A-P~gfp-;scgXfv>Vj&"""{5wuʨNI\plH""""Z$zVYb̼mK%  IJ.Gn+f¼%qƛ-nV^&CVT$]P,|6~>HsADT5K _~х_F0󛿜DCM\?>.STn"a,VP(W+g.q`hVkrc*w= @pK".dșBB_w ˵~D(Dn7S[m?䤮E툈ȮLsը=M\l̈¡*ZrPϭTȯuS{(\SQVjG=,ZjmI0ouЪ;9u Otk 5|݈Ηsxee˲ןm9мfe8]vwfY*W7{ E_@wh3G=,eȮ]/Dٕey9^0 #r򱨺v/=<E'DQ, ~֖-o[DB>TR|瞾rd)Tj.R3+5a 89ODDDƈ q;U'[fz=m?wqqɐ>) lhVQZ4VSQY+ȣGUO_\Ju~<l|?""3Q x}p ֮Tu5bdHX} A._X>~#N 3YtӰ%wi/jsO B/}4~ް{::mz\jNbQ/7:5U@{()8t:!: 8 <P]Zvxj ^` O^xjͽ==5tuc[DDDDfa⽹Dbfʨƍ5_8l`'㱖3=;k1bm?71;cH"X񭾺L}~K|̕ZJ U2fWv!ur:>8*Q- o-Z)u7gq^$WPS[Ñ؝Ļ;⺃xd^{`:-\Rj!,C+*kxҫg?ڪGlx%|7d~U^žPҿ}$ scϔ v?^ڿKp.`hVko$]Q]ѿ0[xѢ+{|-VTp㛸|}WXcE]d۰oTDDDDGňu2fdF=2>S8񉈈+CT3m?wiiYdЗu,V]̛I ^KcQ3 "hP(8pt~t7tl_|b|OZh03^rE!{)L/2UfrVXz"!M?c`S)n\6f{}?wc?|0j5$W&"""[Ig2P X \' 5'3SCC9AKsMRmb$mtaViެ֑\Σ;|a aErUMy3,'LSAjJ17la(DbR8F&iyr|Okޯ{ ĸ(BM?(НD__)͕jٕ} x ,fJxFz|4:H?X h~7kDsmߠQ|x,pt= ?}*TypshٌAd=)Uu$[/uwodO:*\>jί䱸ޞֹi`Ïpu&j&"""{1yҕ_KfU+U($"""Kp9vS[Z^Ęy=[T_ާh]_]bYˇTTTUZ}jvۨ >~Y2DDm(Ҷ5c/\ Baɏ'qr0Hy_p0E>{\"a/\RVJJ 5Ia3y{^T*Jڑw_??5nA9)jt3LZ>M\U Nڍv:!!%n7Yں*%CQ,--7~ّ|X :JJ _`f1Y߽/}~$37V͟7vBUCH|ܿ5ʕl5׶t^AA5tNyNr 3l;2@tFh~7B~ބbcRfOƵTɛ=Ijjċ=E!\+u̙8ԜH\5 5R&e=Vp;!_VKGnRsbvƐ>ueӌO@:_P Z:'S7*j5Վ(:z\""I) /^j9ج|tNi-j:FNG~AOm 4ڝDM|3GAp `)S6SPZ[?AAvu~ CX6ꨔr<Tʐj3;x,j.v!'W2$"""j}fδ7׍jM&qinDDDdrY 2v9h]ZZֽ?>Y(:L9Vյ .s!1LIOF<2"ϧPꑎZl^X�68ۄ`+:o#1Eٛx߃ \VDu!hޛcxѾ#G/#_PڪDfVN˨H=(2BұnagW)-jŻz{zޞdYӏS.\'O>'((+ d7o<#"""++_K$fƆL9+xF,} ~'?{2c6pPm*:i7[]YB (4L~Kis޼DN|Q|QR j>y: 6ku>nE%x!A"A^X~E9NѮ:O&{N^پșӱ-Ͻs9Lb{rN&Mں'I3Wi9J)qĤl+D"HI` ]H"ų~](/=HӅw.4FR6|cY_^<1jۺ옜Q Ofϓr* S+'G~QkJe HeJ&IʩL))F^d%N.kPAh5CLps۷w17/\vQѪktʜSS0"""ҽ)MW;QȱZF hu9 ߡmZ{κ_\?L`=jokfA dVW 9$lreqD}0浼FR*tf`1ؼ)W]A5cKKoqY6Q?8lb0Ь3R_ nh P(U]Ԝ>C$j_fejՕ0NĘpC+jNΪdۮ6Z.!IZᕟ_}+رûٵ #g5FRm3)5 i97+P+< ,b8\M"""ƒYdYٗؽsc.wbBi8EvFC'&id7B.O]^D$/X{ ["eZVli]; }D[[χQ,_FpWk<~YuoMwŽގniE$ʇVi_y/LeJ!Exn1?}- Dڳ>$tX_=WW>í 5,:mf$9m;tFB}gP!""05Jj P3)Phjzh.$? tbA@SsorrrueoilAh@t%Zv{:\Țbqkg*J2,ߚ6\0Lp:a2 0LpK_@4vX4\>T*TTTFm`͘3QZ3E)3.UsypT|TFЦI 2 irPB4)-5T? ^x޵y}rs$o{o6$noc'{Y5JBJD|^|ezng)PB=S% ]Y϶mu6?lMVՃN†hJHZ/X0-FDozzzˡ*K!J%mN++t^C`^!p8Xryhn"~ W9nnՉmpmۭ-d CGcH2F%B1DRC`4`MH6 u6qrPBNU"3k "Z9P-a^!hO}e\-$t[YhЌpwM } ߾u)PxN/3UmDk c3:@DDDQ)}^N"h?T01yE k3v` Z\<5)WaT"jm$aff===J%U"v 洮zl6npnUɇt#rڙinbgvm5nn;WK2txO#CO/o쾳U 5JWuqݴk|qXR몫ZmUxn1x?M3LDW}gtu%NkzvlKѷKPl,:u\BM?ؽ'X i%M?uJj&}4KuQP):WU .lϮ]u6S⦵uX-j`ufKa>C8Z\DD077P=/an^Nۺbcv p:x,F<BUW#y\4"5|;|^w: ZV; .^.N2…ˈ*0Ɔm 6ꄍιz4WwfLL\X2|p4!kJx Tfh`lG}1tXV!yTf#p8oc˩rj&"""Sj&p4U\9>?)ha"""Os{ }vGݯ}{+jQ{[ND +i׫:OfYud155n ѨHHB}vl/\/,x-p1;;Ӓ^깆[صӋ^7Dɤ@+n-n ,>wQ R m`MVkփ߻;RA|]՝7WVij˩L))!"Z%IXXXñx 2fY۹Xj1v-\* )|0bm#o ~g?bA6+oP4"""ү)U5&iADDDY/hJ>vMmIh1&c;NM_te"R 7{KaZOwm]Vyn޹|KW[>svфz{{ص sy\xUCSxQóxf"jYqB3ȶmK#_(!"cA#*'"jSSWw͛~su|zΏ^(Y$žoo_>fg ;E~7Bb)X2|p4!"R@ )߳[P#"""RZ+b/MDDD:6z*5O\6kog]Z]4dr8B CDJ-@$b넿z3ÃIC/DT \f?::^?U$<9l{4`7]Yu8RUbATWA0pDD/TKY0a3#Tfгm[SX<^{ߪ-2=]QsTj&/:Wj&"""e7qVKmro `0PT(  0ш6CL ؏UEb?h3I@"j SSWwl lsϏ[vB yldr96{3 P( 㵑 >;!He Ֆ٥ 35X,};|w淿tm#{Yb3DDDDjp?'jk. <p*jrٹoY U'*(ː *e_)J(W%^ Kd$%D4w 52ZaRL]E:nh 0Z[Ѭ1ɈUhcI}c͵D36mKd/0M#/Y%6NY,"Y>@[377T&~ͼسĢvDDDz&e/o1LS[={3^LܯPhr/SkDDDO˴X,pYɸP(Uks Tj[9t3  ŭ 0X,bff%o9-~c*+&y骡2 eB;@?::loŖ LӾ7(j. M kq㪄b ~'heDRp4|̪DMKE:}{pH{#l@z?T＀,VjVg&"f0v VBx|KYX<pWfLȲ.G{ҜjvwmEUB bRa9ȮZh+j kڕ^w|J-T;Ѫ&Cr5,z :;;ݻqR]zeC͵Tbo\yıxyDDDKPhr/ydŸ́ҵ'yX,jL+=Y)ʴ@zRCd\x.XRB,E4d&"tlPKyllTj׏V!>33[o' Nܺ l'^qY-,dP(!Fٜ|ן O*.)W?7?EF9  e4ʺ]"ڧL% YaTcٖ¡+ .\`#ec{6|Mxz\rX]1V/!b"}wp4exTZ^Y%Z$-q|OL?5|;loM~mA(4yJu6R3;jnX"T&h2DDM[^N6 _ ?oV[%0Y!Wo\nl'[owkB:;//Je4=B(G`?[˵O'Uy턫"אR*aJ~ϝbXV>\/> J-`lll{hЩ"FnBj[E+}-bfѨ.ڢX,$%"""j?iJj&""""Z]4)ZL\RbDDywP(D"H$HC*<:D{'k`6/-.QX,[0y%``'\CA`uOi*\mBuWW^ؖ-Gm[,~"@"AHDDDDzҐoCB͡~_@';iUK#MJ%T[#""oB!D0>>/*ۿ=u=8e2 ܉2$≳Ijnb^YN!L,@0zCSxhJL;z;]n@Tu'b=o 2BaeC@@߹ץ2$Kq|Cu -odeXj~cZeTWE*Xxyztw""""hoo̶![P]}S,-[}S854r{>?pysnܵ׋.BonMDx[tȒٷ.z{uo*\zhnw|Yo7"7?#[`l=Ԭgs6hϥ '1NrC5l,] 37/KVؒJZKu%@WGFa4ىD"qr9%gBͧP3U1͚RX"X")42QTU[ (.}}`Uff"+THm%y{e5:-$nu3g'M#3QDfǒ.W'.'\'J9 ,óŚc~pфTdFȁ&l j 4KAfwh5^(󡫫 yϝZU~-O>ӧ6z8$َeY,ll33h_hCDDDD &[R3E\6*siĒRU9Fљz2^l: }{zzqɓK_*]aHD%%6BKbF86tt!f]Nxf9/ Gj!T9bļ'^y ~x6y.U&qu?qiI%az}p\pp8p8`h< h}x#ؿ j-YfXKbbȝEDDDD'Z1CDDDDD+ml,0GYtfq:^ _ 2422P&|ZqС!|{0LDg&-,Y% ,Q@h8mۭn[դR|htU]g[[o"tJLH7 2.NΥ(RRߒ Dq1vr+ftuutdځ?n 1ƖD"a6F ~ǎ;[-o# mbQiPsg4.ܡJhc:300`[Ī;~):4Ȳgf"VZ{3%jcr&lfP3&#"cћ"Gl&S\Z+/Uqy#a)lXظWOdct:1fZk(VJ-$& m[^` F٬rŢVwͩFX ?IDDDDZQ,*X"h2 :S 0/+rPin)v򕯨^XH|IVE&[W+\r6K`h`*Ks 37  Q" \^d`c`pp'O†XQtl/}TJ}LD79mM{:r_|m}1 6r֡\.k9М&/7j>N<Q""""ҊCͱDhfR#ߏ1u<Ê-羄ӧqFDa#X&[z3I65f݀Brmi5hZs( XD|U].7|>ﵿ}p, >`6{1]-9$$I$^%JQ 2w.mVϫ!R_ggSnʍg "Jb˽r?|4GV}][]U,]MJ.37ݴ`r `çn8P:l6Mx?Ȱ)f ͂%Cn~W۵GVAP3i(p^VUu3,ݎqi6*z{ӫK_f͆{#Ve#i `6Xkj 72ĨrjG!퍎qͼJU\N˛w+ooPhr7@s^z(BLVi.ʘK!^9_,щ@ ׋;w^q u,,3x5 5)ybd3fF`s#nJjIXZMr6Je Q" rv j6Af PEƖ_WLoFSSSlU3W]% QxP25qf]"RR.tJhr|P34Hֶ#`{5ۦϥ1M#"XLG*ś>|> өًpD"eݑ|juj*HYb`l2ސ 4Mry{-OΫM&#i&zr.mO%l`>ST3WH JTJcÇp' IR6ib@}ݟY o:1mMkʧr岊L1LDDjgɃ*%J na!WʺnA0A5:Wo#"XMfKJlX-\jb۶mSz1663_s:?]6=0LTl6FЙOHC]L2Y>({vxn;o/~gvl%JQ0㶳!4AEAXRY˫1ͰX, 17} p`cW^yEe~?DR(4Fh!7Y\CX9|#7@ SZ;O5-H הP,L&d_frfg# UbZTULhr1j^l`r8M 5wRx?C g B33LO122Ue^Sfff#/8՘C;>XY>ُpvq0~ `fؒ{&m6:-&bӀqP>hjԶZVXV)ȑ# 53|?rll Oa}CyRELOOQX,T*ɾ^OՍ!DDD*g7~cέPhrߧɽS~ȋ_DDDqAXIH]$k9BF0%5?Vj^QC qV h#JNB``1=B4E8B,EXN0 ˅@  ׷f688jMjhl"UE6 ΜK?8zh޸;p׾ _^cfi>^w2Ղ|Ͻ}zFk?kN7XϷPjʪmn{: 'Z=*eQ`. ˵*fVaַ>8$>F Zܹw6]ll)܊DQ$[<\.P 5L?UFoVBͧZIU;y6} @~Xt偈bX" IDATh))a^^>oVUe[Vl۶ 6)С! &RG*Mv6L&"Ɇ߷/O>x^s޺?uē)@i>1wWxяb`.hRB8fck.[dfDDo AY2)Hރ$=؏ۃ;w87Uy=?i)xg;z;9plRUmλsM5zg p\[UFC6 xɓ?Cl6} ATezz .gClh'b6>IvDDDJ̓)M'~8ZK~6+R욅ɤLBbkHeze ۽t_ fvCdD*XXX`#Yn&['BU}?[ 4Wk_w b4/߾7S^qح?$pwxs/l~[r/ܝ?cdYTX<ۋl:z2,2Ze0p8`s :zWjC:*͠׃{D*(98a_ar&M`~|쁻˷.ozjNjY+DDDDkRbzVҜmҖdA6AC.. @>.>a ݎ#G7!x{\G4p{o>ryχ-`]WjDyr&~psYvqVӂoێF&4߾`߾eBp8*2 9~)|SdCl,*D@X(&&kV|Vd/fZjv>"""҆B!mPh6DKS>ŽDP)7QPx>x^|kme˅0a l6 !6)u$p$~e֧Vbvvn] 8wyqR,Ξ1r2.Mv{wa6k%܋W/DpⵋgR7{?-j]Dltb :N9zpgǒDΝ;'XTf@49 L9<*(l*New1\QJ%4c ZJ7᯳8th'Oб#Gb#HJ͓X˵D$_=4;;p;ۭff@*Dg_DcaD۟n'BG!wx_R-|ⵋہ7=Ў\2~r!9j\jl[.,:;;Ŋ̴)G>ӧ16l6?Z ~C<gch`l=T.ea6[DDD|>ʆh-;`@{P(0LDDD`2`meaXD|>A|^x>Mp8xx#~ ǎ=ӧt:С^>† Rzջ"X۬LO+ӷQ8찣 v{wa`e_9<"s9p7-n]v.`^ݟ|ٯ"{}]0VTZUلn ;a o1~r\'g>l {GaCPK;w5FT5$f"""R+5ƨ(<> +5ongYa..KjV۶mέ#G:uðl"-,,=}zg19Te]JmV 9z*!*+0R6OMv-2t!s/!-e_++WxOYuH\h7`2\tQs8-5`à$@ G8Sp,S[(ol6+$8]<@HbRQ MLRcm3՝<5H>/f(ܜvL&Oբ.^bp9 6Tʂ ppG#wj:144Ć S"k$IBXdI _.͂`D_wyߟ߫;tpos ls5Am68NM[v;9<:rD[POy*ʹ9@Z>]NzNqnޝM YTX& 3wApG~"1yfM. === #E=O}jȳgCt(Af32dv """)1 Niic4u54S!#"""'z'oozof %n0kev7{fu1y N<86k=iڵOS'w 6u7:3)l_Se}_ί_]X- 6J-/ljG._|{/l7`2oXnw·~YVx^Ex36=0ǑDyhE�\f"""RƋ kicmZ=j&""";fe۴TPs@ ׋`0敺fg?>?eChfO! _q됲u}]:)5l1 vb6hbgjCpl*TJeL'l(,W$e^G&"""EeŊ䔖6ƨC-<ˈo v#/vHZow׷,Z8DOO,чo-CÎ lŢ*|~~<]Te]}MYv<ǷC* 9;}-R 5D I W[d6za 5FFq+l8v16 ccc6ItцLQi\.Xh͉Ph6H5I%HA̭f(7rBVXVx<ތWѣiN+;xp!d?3l-d xgUY׾`?>ི-tW()WaN7"NJC[!oۆpTic(:;;/jl3 6cT&r.ޯRQEB͒a)mB͡~V+NCDDŢ"غNDsM^,>@Z ʝ}vl66 } ?ߑNY fff7w'okM(_ql{f͓~Lgz\/z6[N,Ko73߻{fiXh4f4Jpi6JcHV7::rF>&"˾lVb\FAF6Oܧ,ǰ)RPށyͷAIQщ@`1\ 2nlk0 bcfch3<˛D2D"yIj, e"ď߸z,fh6ɴ< xя_¥uZmm,갚0 MB;DP"I]ͤUǏ?301$: R$h4BLO^.Y܎JZ OA,v4"[kXBTev#ƍ4-rH&]jkkC[[kh[Kߌ* Kk0`p:d(x>A΅dp>|wO!!do*ooOD/5x*O|Ny;[-x汏3| iIj+/O^a@;tX +WfͤT/e|6z{=xg9$ZG8,jrUiN&AXut: f}vG-,$_grg --Czf Xh-MWiF(4yJkۤPv4"O|uirӜʀ`0@Lr׾|7"fg#(J~R1ց'*վTjtv:mrcylvkcZ`E\ .VcZIdZx`];0nC044Ć Q6[bP(Ϲ:D6~w19T|=._/ʹ_BSgY^:x))Y3~ōrfM#DX,T*.=YLWHtCGdZxf?(IiD&X"BlgsAµmȋ^oYf}iɋ$Z©k``Ǐ?ņ L kQb~]M&[.* &:a1 w>8z~vu$;0Y|M`.Y}nTFG/8ݾ}; ]70,jDf~Vf AB!bh>:JR+yQc&.IxIu75RAS4DE~<6QIK.Xk!劊c{ {nٖg1 q!+Zݧ?r?&83[EsW!FОPXl6t00p=E6:4b6AJr]V:ڔ/6bdJ<j?$- ;$>~.Q+xa-nQ Ps>N yJEr&u_8`2a;4ss3܁ɤakHNfcj*[ 2nL ۷owlV +l)+RH~F5HلO>x/D*{xкx_C$::ILD5oz-c0n V?oO\xQWz<KCCCx3A_S};xUiߴv(Qŋ]G2csuæi&j{F]^&'xbz5C58xpc``AIJi0bT$IjcXX$^^ 0S}v%|#X.lR M^07F+H&KxQuvvJ35c /|6 6 ǎ=gǎDu yhlf:щUjGaZ/6.˳$IB4:+DH&\2W^Ui I-?TlfB &J\0efY$vM {N ,#Գ^ܹw 4jj6ܾmϪQ\);'7NOڴg8lr㼭Tk6ڛf#Lߗ-?*]n7OFj:׿U7JD[566*2ޙNZi5ETdlVjrNz*9Mm i_P3G^ySZ04p|҄H]&'CFg!IJ%6 14mF[aWAmPrӾ!2Պn Bn[tfH%_SSS.ZK2M?~㲢;oE_ʍ6'mZۉO~E՚Ħ~fVm&''5~ p&jqck_ZwM<,} ^M$T*%2[qDAPOf4\.7]x<+W&0;}vڐqhfCZ8T*57Q34&'C CCnXVMoc* Vb`P⦹Ԭ]. vbI?{uy>   D -ْH9ز8qSI*Xڮ٭qƎk&oֲf\HP,PLIxI\H6n 8o9Wp;}{s Fm+_7MrR`jjgϞaRU$K_wCO1r5fg<.|mw;9Ȗ938zϰEO';֚Cy}W@|?VGN`wo;;Jt:կ8y96B1:*>$fܕJ%iV>nx IDAT|33f3u;9\sYgN={9J]RIgV+Q*wjnKZ<_ c2ݍPB;W^ l8N|ߣ &J%[LMMmLw:O{|Wc}O.d` PB.]A;>.vv@c8y9G?׿͖737|/"y0-lE#hQ>;d+v+4!\9CVҎ"Jf9qiN֡VZxiIk6(pj߼va2;'`hɸU[Z@*~.21!oR|&^W\+~/"o$! `~ޘyl6DfK?n7fަ(>"` !Dqł=~+D`=q/e(#F`Slih{mkkS~\<<3e$^]]]|.5ߏxWAM!+8y96 B$4rXwL maʶrB‰cxWg05-y-b|:i^?:Q"n_Ɠ{Mj2\#\wʜқfB\8u%:by cddOKQ~<N8"sBjDXϘ ;bZMyaRKs pij޴7* *!$$׾ ?UԸo BBS.SԬ vǎȈ|Y LTxl"jdXC$V.Izؽ{7Aԩ /Wk?1t:K_ƩS/1u0!1?3܀wipJ0_}+9Ma׌zD8?Rt,iQǩNTfk6^w=G..=dje#ac`hM d&&&rvpp188c"fqTG5q3cnHrZB!8qf̛@!۠RZ\!Ǖ!H+jy.'ܮ{'ݡC_Y i[]׃r/bW/P0j'HO>1tl RƗ(n 蜝_P:6& ZϩT*|sKD=vVaYp84Gr+_K/W_}ś-{3"7knR*W.E>].>Txsö68Gu]G5?33b|~R׳yp^:11I#G&d]!BA8.߿Ctb&DR8jsVaMe醈ip'.N760nzRL?th6+4 ۂS ۹6YZO*tOxB3o.p|9 slU%SKHlS?~_kl3(ab7kE `?WŤ:W{+@VCVd=npegWl,6Ͽ|:t{ǀ"E7B UZR"ӎ:ݡNt}pvvv.փ`W/!x?Mg6~Qlw+ۨ4Y9r5Ʉ^ ɶq\8u%:FGGo(t:qs8u%nrENz.L+tY2䳞ҬY)|g!H,'6n tQXr[bjA 5Hf!U5ƬN&Ms|>pp9=rzr[փ˥q:n !(D\BMn!⨒yҊ쑄(fE߇Pߚy'rKKx7bp8"j{tDSB73CfB!Du8*2{`FNx>G{j߁Pp7}҈롦PFNPL!*!4GDߒbjJ$D:.'C'"frEZ*oma n sQVQڽST*,r4c L*|>/Ll2Y5wۍvɓFGG&rCDZcpI!Bg~>f̸KSkJӱe󸰻φKq!,lR|]CogZCCb9[ 8alY|xBIeZ,JJjj%VL&𽜝q9WD̾|`4";b>!0"@V%ʌ"P8#q,RLDܿ:4M>ܪ(j&-.7E:F fL"*2:r5 Ʉݻw3߿ǩS/XqZ$&&&fn5s0B(objݾSsXV"sߋ+?뉁ci'5B"ޠ瑿7["Jj9=!Ӯa9WrasCD̈́B )w!۔)¶\5[aQT epsB!3 piĭG!5 Av!1+ ;Jp8)hp7^b !D:!Uby <{&!/Qx7weJ!x"jmr["eqw33CQ@{{;Dj\.ʄb&v#Z&S"v%1S(1' v5RUX,l/Ff ͊\ W|\ň1Bi FeϫA0פie !d'#y!b[/&ិ|J\nPBH&cVW?C6IZ0¥̆`& V^4ͦ\*+ffӄ?ܸnooCBj8ݾ3ͥ2q|{^<%~r=,jœ_L\DG?oww0K+Ύ3Ol Cks_4:G'E!l dY4)5%q@Bx4#}ŌǏ `l#I^` nw?{ҦȌg'QVbTGy YBHvt;s\GjdNS. *b͜Zm0`6[`Xnk^zє>&j6ʡ:g DQ3!1•ejn<[85@6_:Z|W#2, / L#Ozx] ?B0 #Rvɲ5vn .. <B!;2hfyVIUU Ҏ}|@4 2TuvlR\.X,\.\. ˠl>;!Cvh$R)%cjڎBZ`] lcG7|? `6z s3T lAp);ɫI I(24.1=1C߉)jvB-4:D uqˋ~OLNYQsVC6WMa<2&H,_=]ñ{q`7ć/GC>f2|b|^z>;udqԺUrH$:+|xB\cG ltǾ9n(p]ģ'3jjjlFeq_1.dhtG ! /#\"˯L}7p &^\#qzxѮC<؇Aֆڭ[s~1%Cߣ#2^q QB!0::*LŊ61lR%jsphAa~&# Qrt:B!/̉l~bjy#cHxړ)9h="=ujAKaBc@6ȵqyi7R(5jEJ%Y6Mx333;PL!Du&&& )+wd:SD:5Z dv97˕ &c)8&"(KR1/G+xGC8yv>$j5XJ_崘v݊].\EQ3!FriQ,敉;0Lw"jR0|^}GƑ@"-b)eͷ6b#s'~6ZLU-CV\dO%dT*U/3Qɦ15~ o`'OdD;e[,VDQr98s_V'B}e\L6&?j݌'q7}(hҙn.`x cWcu|'o`_o/8Fxed90Zarz.k8 O L BQc68bY FFi"v;;^- pO>LMF(n&RbP.j[dBzg_!)%&D{_+|Kyd jA0]1yC/`N_%)OVrʐddk:ei811G BbrRSnպ}Ǧqeu?.(R^[VCdv{{BMq*W*Xqc&Ό\{&2?y|'ox}>!ϭ+!jBDn qsq\ !E1\f@Zb]w|>G-%5?~d}{.]ݝB7ps!ΛLͪdfng\?bL5G"ѡpGZ@"Z#a\# NwS.N:(QNr&ҺY_L)Ǐ?j[ƍyb__XƵ|C͵Z \<ʍYdscW7{D&#b\~B!q B!;o>h2`6ɎeQՔ,D4Cen"GSXggvY_W_ "mv>x*$")Zm͝[RTE66OX1d !qju;<.Ck44քfHd2v/zAxbbg9rt!Bsg)U"VbِK,gu5: 2^Ahq]TP(P(ߝǿ78 {|O?ߒL#s*>=~/cEܛ BM,6XLIk:Zd]+X,ZmEFjJ0s8|; +?4l6T*́(KE(`H5T#!H*j.KjBELas3 tߜGpJ5B2!D '<͆BAN5[ty'6F^s95 ;B 7?ğ jX K)xv]8H[(P.W/P(P7ڙ IDAT3](WfswNx?;'j3B ~w@لJU8ߐ:6{nXV BȈ1\VqlZxZ5ifsbfg"[bɧ4MCRA<(,1G(uT$Q1%k:>8 ,,>Tt ]p%dXs @b'ۙVB%j{mqyjA8}Jx7~wa?ynͫēiē+"]vܞc ŻƲ5,28?~or\Y?œqs(ޜ!e+\+i~޿8'n,]`ρ hwځWB!DE1\MD.S&.Gںvd2bf%vu|].^l&P## G>c 8ޅqxq Eg_}x1pr?yټ1..EnM Q3|4"j}>fѣ찄BA\M&m3 1dY%b&u4MdB&6+i%VIȾYv3`gPXT'Kt"E&q%HII(KVμ7Z1eYq:*l~' rL&/r%#6R0QjL)\V B!hP@sbJX>Kwq{CLL'~ϿşJi"2&f.K섂zcWo 8~!گ rl;~ 0S#9aeݎgq||fB!DֱĄ!a-2\Z#3"B. 4JA,ʤ|>/0wfܘϾ*d`xP3>tHmc aB & blf#{}?-:}i7em  ʐɈMmP*LL#pB]RYebZnCD /}i5ߖR}"ΏGXΰH6_/OG7N7 ~}ưܚ{׏Ω~sI\Z۾.c@?/GTBH38}zؐrVMXYtZx juA"EdS$),.iH,^bɽB֭[ Dw#V5Kp5BQU*2.|xGwoߖ?/6E*KFQ"Q|r`VJ|3ZRω :rB!3oa.B7`t]cR ,--7fN̈́BT&`rrRx~seG^N CgG'u543 KQ,!G.e8:N?5\_k:lXfALdQ,8®[͗#gހpQ3??O߰#B!;`>h6[:*l.Bقj"rZΥͺg/\E\AxO2&#HQ{4=wn._n_+fyv^ԍ)\zT7R,Pd@y2VL !X̛vj(ew}R^#vaxtr!Z7 O ?ޮ-;8/2kntcV7}߻VœcuX)ßDmm?t,}VV_w;tXǐ够B!;k>!8-@<|CA3hn@Q32,>'`l} * *x"rbWݝWE}={q uKlsYLݘTdjǸ1Uy}sR ɤήK(KFdv=$7DV5K݀)j&Ȁ۵+  L&X,6ΎC go_=_7D2d Bs1 Eί;7r1rJ'&)j&B$ettԐrCb1ꈚ?xצ~O1Åņ֯P, ׷8 %,,!_,QzCpu; ?o'09=07q GoppbԆ}C +HnQ8ztQݑBi|И="MdR2Pm4RDR wx'ԿDƲ|[ع{}v]ߴy.6|,Ěy81]ك`7ݰٶ~TK"8-ЩYjr_W=ʋ#p=2֏YB \N!"lfⱣOn{ 4ˌfe[}%UCZ=:>O^(-xVe\566~B b gb)Tk5%bi[Rw?OgV\fiEpL`na7 HnqvO2V\.Vd2GBVV|1{,]&53WEϫϟgw Wo+QP, sU88phV,mpЃd=Wv߅R%5B!2xO ~6Fln{>>|w~6EPG "Slp-G#hRÝ,!y!Tʘ^Cx8K1] 4Oںt5y|>9>>NQ3!"L˵Y{8s-S[+>(lf}xmfݻ{N/cyC??!ŋq̻tDnu؄DRlj^f`ŭfB! l6+\*TJ٬DtL&j5J.j"aⅫpp{6ۿIEׇƓGĥa߷'>RrXud#TrjU,دB[BDp()#B=Axe;\t]Qs& ˎŜU [;п}0D,s<<^zlB$jXKL,RIZjȁ^01`l0?8yY&KW/6?RqYmJf' ƢVs+^Zr$|bC!5B!lzNMJTCeF5 tH.j/˭T y|^jT$jwv !ߒrbfBH'eƹ4_#jN%xU(]P(!,rҋG. !dpAN]bSe5sfƗ>=G(lp|Çq7m 䯾8ȾЭHltWg ;{LE*B"hf5LBר wXdSY}Hd=: ((J/-T.>~q K#dUi糝˪ ;U.$=)^R !Dmti^%^k4ˏf2M`wWuub|1| _` B!=vXb.SijgqRMρ?=* npo؁#Ϯmm?SFԜ屔X_QX~6B0Zf\j)-Ѳ]Wέ#jKXZp$wRHzĺDͯ ;GQ3!pt]]o/P1L:jL.}X-+%5={D̈́BJhJQf`7'jV^ ?QóϞ3g-A38t+7[:}LJfz &jnB|И=MXy7o.(WQb@-芹. 5MCWv͎P0ZdrGoϾԎ`7|> [1c`RZZK1Jn)Qs$GEpB69#[gWGM/ IYT:H"ѥ)"j^}~ǔk&'lgf BH0j[K3,))u01]o^x rz ӗ, z-z}ʈ޿8' )˘gBgϞO?ӰؔeX\ "3d2/4lM)VgbQ_^b`2cS B?YtvÔ+U審\.Tg>@liwNۯT?l64e+VVP.`2]!\.',sc't:wO^d"U.Jȗ>MR'ʈ}c-\(!u~ǐrC1cS *4819XflBk9g{ o Slds +_~}T \ Bx\DX n\Y,8ׁ?*j.J5Bsauq\.zïC>\.IզN'-a;>CؙHW[u7LRD%+`9JMCRQK]UQsRAGR{PzÊd2QML&=riUU,/&V)4ZNVSߪzWEWSn|x^ٳ-%jnE(B!ɛol6+\Ōpǹ7saǶNdMbf؇>u.,îYOOSnC\`CQ,U)["j>~ \!qfp:TBv$:ڄT\[h.\ ZE݊g#3\r)ϾVE>Q躝A0JbrYg4-2DFZթYZ\.RjH&嶾هi> <WS&cNٌ\* Slwm:f_ǐkF1[&h><Ix=gf-ӮM!ȄQ.{Bע7z[852C88=6rm2E9κEʕ:p==-wq-N15RgsyLN/CHymJǿ^2:!J,6QCʶ VS)'F]GXl$_76ϾZtP1=] T:AK.d[9&ិ|JED r 7o.4l{aÊٺfo`)x&; _)ͤB嶸KMA51݃ 3bݸ;ڽ^$Sj~^r˴|>O/B!Rdp1ÂDL28f IDAT@Q,oUqnׁc30t\2ZHnAv#ݎ?^aq7rYv!H5mmmʋ:ki3[0S3!Tv  d5u4AVNB"H]T*>_-Y+5'q&r ϫΫBgJWgryϔlzv?op].O{)S+BE{5\Zc||-Ѷ, !Hk'$Eu*\ {?LqXJPn}8yt7Ƨ0uS:YjFoȃz/d^?8"ÇWb#ӃGw8>v:lui"W#3R9! @YP(w hH\eBNcxb󆔭 9-.%jv=-V4M.BjT*4^vmC}ҥD7oί0zC?`7gQM9#3sgic/%GSHt$IXBAԢr%N:;}-BgMaڠi~Div>#ҥ)]m=Z,(WHre|煕p j3-#j椓Bb󘜜4@Q\lIy6\dm5ߍf3Hw )b"@$t)  |_"w2܈jd Wnđ/6~s DZA?2ԕaص tw0ޤ_/ uk>v 3fsll \@*!Q.& &VJ%k[[[ uEU"E7i|_s rY.Wr~}8=wrƞ>th>;ο!թT*ފeij(KR;gٖm WWΚqAr64`6oyx)T޻:W#es.C:}$ܸ6OnBk#Z}w*tH`88u$(uixPO XFbi,$rXXa9+~o SC߁N"fE zO]k''R>@؏{MfljCv{걐R>(!j.8~ O?LC̄BN!mbNsJGX,gcV\.2hS-}:A&]vg>624N]թ++x__NJ?P'gsY?>.]d*{jn2ecjŋ {YyE+C\B\Z{hF3~@lU梼!k NzUF gύO?'!Fn\?v*Bac6tiTLO lw\..uUHz|5CTB"BzGYs-t:}Nh63;d a܈Fܞ-#WxpЭq _KI `~NnO6nRM܌u; u֑L?944Ԑ!BI NXEb+e`%M.b,Tڤmui&[##o.7ЬRU(1¥+1yvUXڄF"xaV.J@)_VUDVmMlA =Ҝd^n7Oz?qgPQaG׋dJٳ5B!2<byC 5Oϩm2aƵv݊vt玫"e*хe e&onŽݎnj u#Gvw'uf&h4CcRP(LK!1Jl6[;RIbr|j !t4m\p]H3[L:|mf1wu.7]+ _>oE&H&1KeMl(C-n DpgJ"s&OH24nCt躝I/3<7A6Yt8*PT u  %qe Ƈŋ'&/8!1je!%fJ%urw3 xJ(l4]C o*#jƮ 5 "j+_ !yp -o~~ZMؚͭkiəHYw"s4>gˢt:KfX\ťzg+ طgߝ9uߩ,$SKH+OXzx"޽rl5NTiܣ {ܸAY+W,ģk.N0TKЬJ;VB$'@C>LO>N|IatKuh7x/$̍qB!RaC#Х&]B1 1Bv c2A>X{{q29=wShyn:px1r98Ʀsfhoog' ҼO +[Į/..*[]o,61buGWw6}( k{EƿbpTzioQCARHtU/mV r:\Щ>Vcy"LOSC;l݁&琡<)Uߏ. -ᰣ+dH]Ϟ=m|!"F4^qKҧ +KYacMϱc}ckݪ5V5ןZ <{a.c'b5l]ׅ;RI+کZ&J ȄS2ڮ'nזʨT*[vy&ԇliʳաPZDGrt)SV(p&eHX-h6|7\\6;|Zޡt1*CCCǣ\.3;#!W_5n̮=8??T 6NղaUvLhKfӶ{BSWxӉd2i|m\0[LͣVIpWT88YY8bdJMR\Nu uc) :i*N2{Z[3'Bdbxb=+nLJ!z:̈́4fV=XH_XRJ!Lܚ5<&lBHKd0H2+q_?! ygr󾤣 йP$=JjE[r\"*'G+D"D"Rްl &F.3 ^48>_p$lVkԴ 6|'qYa뛜dfV\pk_`0Ѐ' gҶeZFwyh8l{lBR06F. ʀNtp8Y`\<}Ƀ^Ĭ=Iz ':0p hjjxXN"<71o|q!j9?Y$q1Ghȩ9T+xFCnwS?r_.E&R֤hDyta n+AE#Q\ 6mwZkg[VQR 9V3*2٬ >;q Ohn',Ԩ%B:춅UJl(&'14A"1c:  #L` B Cz+{„oEΫVck Ri*XyVnŢlB0•/_-*~\V8gqJ6f$6=3e)ێDtS T: j&!A$ƪrYLȥ`45֭Qac:y"!U;vv\|UT ]8s"& ;w7ox2J+l %tٕ\ڎe.N B86&He 3nWk%+xIP}'^H$N vmL&i&$Ib~EEז9Y`Ϳ7M0Qߺu!l`>ɈkdyW<s:CS{W^ȈG6|8lpj#&|1!ðZlhwc5hwCaPDrZE yɔn`<7m( Xh42:?_rm&QwڹX,vjy&l.Z."g;s:+HNVER)R)LOa6[~sLF̦PvjmxlCճ^nW)vD\{_p 4+*dccbVM>fLȑA7D3?W\%p|60g> X!Om^IcvntϻL&><}j5͸a@gnz!#S c bYP|XjmȥR)tH\/^ Ũ PymG->>f;S4N]5ܲf1A5|[۬]M ,.Ss*D8D8\x_~;[ o^M nXaؐL&0@(@0D"@|CաV6wlV DҐ5 JZTYw_U\UxOڹD"t kΔF W 0b?X1Y%&az`^'ii!l'qg'`OX_WQ1vխSMA.^T m-\D+y0nVkA!9͙ghgx'TlWއp,H4L.OO 4*nPfASQVRa} Wٟz{{/rE>G$dA@AM?P(+a!$Ib*xvdٲ ėKL]47'547>;Cfjuhoiݸoq$S;Gb9b梺;(R$i'QKsfB83$jŸcEd|L"| hlFbZ$9Wlۅ9IM|y8]SSIf>gj'[-t`0`(<ﵡJ!O~ v;7<= w.;qZ z=bqattMMMB b=lbwn7㾴mlR)Jg1K!L#RQ :"Э& 8#7umQ3۹5 .555Lۜ.KuUTUz]mSE}.ŽoS'߻H,r:{Xu+j)ED"/ٔ!i`ȃZ vۜf c3."Sq&(tE"\}1(D2AhL,.]a.jnkiטT'^.?2 2 }Aǭ5Ǒh SBŶN~*50404 [3HeHf2IL,3cp~kCPf8?T vg燼D͙LdZ-k 1YGBd{>22\(N_Vщ6ز則+f.aC4&?Q$J%\\ZtK ed*jD"lf&A87PрvtwΔ{9ON18쑽tX vVyAV 1x݃ k?NutvԪhwẇ `Z@Aϋ?ȥmJf;./m[)lnjZYdsy$Y$d9dr` ghVPD\P#She棫=}Hy??͛pG<'Q3AAsWRy'\-ϫT%ai[oѫ|ҁU"L`箿 UFXԴo L$X-WSTU0OȺ gZE?kX+umfEΟߺ FI ^d߹E]o\.7'a4`6[hA2Ṣ. IDAT`sn1dYa'f*{'e{+_9T k&j>{,8z0HLA;vpkeZn^}ubV)**_$ nZf^o!" " E: D͟['=Bmo>ϴkOp v; sh4P3.?ń*yl;95W}!8/@` W^-;,\ hi@kKǼA i$ c5E}Sgު6xFZؿ\.L&|´J$\u' z65HpU\|M.hD˒CA S 9QAZ *&Z u | U0F t$ρP;+r_&'Fa2PW䔟yz{{I$OAٙUNfm]D<*kk"\<4b4b7fQF*nzO Kqr86[U!2o[s*B&ZA@A\6Z-{ pqUc3NlaT|iS N!Ȥ*> 6Gt6z[hHS(jg ",-Bc fsΜ{hUجƥv|[q+ 1"+k2.fn:MziCk8[,s.jhAHzH%7qAWd9pdݾi]+۸o.[s>G2Awx:s쮝?:vI-JJ az&H#Oa:'c ļJ2?[ka2h~ǮwOⵗ71kS+8u\懑Hܚ  FTAc_ gzTJmr6>=f6U2}B@`jg46ht7.=Wa˖'{}jAlV2xYV(J BSgpɔ\h4,[ x=UumVǣ^XԜJA  .ɡP(`1/M k;8;/H&k>`Q9qf]`.jnw #g_dxRD8b.*~1u\FĊߙʪP*EU@kK|P(j(PlϹOfp:WRꓽK;hrF3n upgٲNXPvi~}Y\t'ahxdY%Lbbb Ng}MBk6D]0 YP \4׾Uќ>f`j1j?3Sgd/jk*C$% }_*,FB器(Ҽ:MziC0>=z._E04,t-|U'lhԋ:pDcDw~; _1̴ͦ'ΜS3xqﵠnx\' n|^<Y4_㗶D{Vf>D"DT*JEQNuF"Bm?9󗙶r  dM?ńNg#QWxSd9#֐5,U[Mh(:U[.Uyd,jbe5TSnc*±Y-} 8yܲ7ߺu ^444`hxP{sg%IBM  M\6 z=]BF|D0ٕThÅWYdfJIGA0gǎ ut;]Dx:*T|-F m (5_at,`df(tz:\5Dl0%"r&KBmMq-ZV\j~DHLA.`0M%lE|DwSkhZD%=D"yY}|b9BaC\.0f5f^v梿 VNE=n5\.'mL]YTH$Bf 9>[+%bQGV fZpf\x_B#|.NTgQ" 4?_;o$v&jN&8p`??`n&A$dA@AȒ#Gswia~~ jQqR#I,2V*$XgK>grs(jVUJXAtJ.ͽ՘OU)jxFCnw'k %^XLةYPiUW%p9|z$TY; !jݬwKGW$]z~; fZ6w3{8o,bYE Bر[kٹE)Lz]m+)ъ@ҨXg)I,iߞp,f rYT +bێ7Eͼݚ?۷? P(Df B|u\SSS Aʢn@v 9[3%I3iTLLOߩj'U}9EԜJ.hWh)6*isOoöߔE|-dYT<\gވ>v֨)Z k;^M,[s>'/ )]WBfw!T*'6=%[HoW%ΦHi |OVnB& ܚ4 'jNyZtk׾´H$L&AWy4Ԕp!ZD"AR~zYfBL4 ΓrYQ)R uic KW!.sy}~(% y+~X٥Y`6/F扛?=8F3IeB b9JZ9JphuՍ6:,6\ۭĉؼy :;; QWGA|F[\GFFUI.'&=; +ʥ0 \G`ז=r{!` tP0V-FԬo!Kjͧ5{y~XkUl pXS s=lx".^Zcc`6[0::Zps%p/^0bciT Ug?ʉOz`(_3 mm5A? 7 kJEU~9/c5\tl08Ͳnz1V f3tqxgD͙\``Nȕw w 5K$S}$j>ߖkR$WQ3UN!wlJUlV ^iC~q#LDF.BtV+;ۋF H&S-I$^j+ϢjP_w)\~ 𕗘ۭĉxp8q>G$!f d]~ƯO^.MNrbBQU?Z˼F166Zy:CNNX&]=5[BmG/35vkgnzsP(J Xv:K.qnO!L oHIwO~T;N-Wbgu-w~jup:r6@>HJMA %f,iq7~gdS񌒨Jy25' ph0 xF-k!WGϾG+IZ:cv&ߜ9QAh4jm4;ŪۯbrBP?GØk\mki&jfܸDrk&Q3AQ~g F=c0nCl 157;MQ b1ꥢDXg.G}BG3ےؼݚT 7o$Q3A! /\|ưFZ:ċ _ I5Glaܭ\2G}crO; d$h%uIgY4@fm qwyVsdnH$%*xUvv!H{z<҅WL\j9`R99x*t:Dž}?c2`1Ѩ0o͜f_#Q("BDR\Ƴ۷1mwEuLN9uql޼b#Aǵ}.>.jdcLn$j.frgARQ\pm/ (_fڦդŖ8v~K?ߏ_|YLXkH xt[\bp( T*9O}CwBJ-+ biJ 47>Fup=9T4ȵsD\֢Sn4£Ug_> \1WмT""љiCË;ڬ;BgVvEjJ[Ϣ$ oƽ>ө3EN|)Gg緅1/& J>kH4 _@8o^@A` Qhg â^KNj14E57ՙ`ЩKdޑ[Lݾ}W}H\{7o`͛7ILA,+oO\7\\GFFLn %>ߗ=bYsjeh= 9gQ!:KRdm Hk_I\ZԜL&8PJwZ,Ց( 84A#GBH(`h4UwgaHyz'fk161y9;MF#LFz0(4]5L<0p g3/3D$Bf `(v;X4s,r,NɠE({zu6=(!i5vP8`kkq„PۛϏ/ v [z{~' ݻƿaf<'f bػw~RH,!oR$2(Ē~ Q1Dc5+je`8W.ȉo3;N{H=P5/^sdۿ|>D"|¥jbf# py:,fY}+~\Kp}R$/sG@vn~YhQ2Uzsn6![ cEajSn޻wPL&ArkK3\.+lz8,:J8N RAfXQKnͅ^{y? : g E/n }5oYۈcƸ5;w׮]Cgg'6ɭ X(vx5ȥݡ!!c\rY ANg6jJW29ūpLLNTt,,Ԯ5%h>6rj_kR$sQs:] F-Bl2AmQٷgsȶY-, ƅx0i.nVmf\)9~B9nSAKbϞoޥRbm%!]B IZ@&"Qs$"Q3/ :Mn͍uF"Bm/On}߽{Ĭ=rk& 7bFC.`P= Yʯ.5„o=1d*Y5y¥4֚}}~|"QD9Hxu frid*Sf!fX`hᑪCp=z V;aR9y浏tr5@o!l߾z^1$j& ̎;>^^ }cׄBQgoA_[Qbc .{)xKr/FT': ܚ{qB>3y,|%f 11xnsNOGD]căkjQ10LwFw9rqL +މa 47Ty3DxFXAxKdP988W Eui`tGNh!$j&˹>A'&NX븺5' ݻ&r" k8KL*au+(ʀP\׈7(@'Z)14P*j*"5$")9_;o$ځ~͛p8GnAD9ysm_T1}>K&2Lt6_&|3/]mͽg2irᅤyK$H&U/\~)ԅ4V*Nkg^*5<ѐ X,2*1lh4**]ԬT*ɥYUt(&X.~ӯ1vy58q7oAggc a8AP|︶åBVS•IZ@&/3J<PAUS 8c2h UN!x Qsw O;L`]ַͬMrk& Ν;T"I|nܸ|>/\U*T\x9nsj {}A_L4A ِɔnt&jV(ExFҷ)H<}9Hj1:΁~ W'OщI!Bp/ =#n?@cx5…W}=wcQWWwAAnu.'Ϗ O6=GR. ݚ7vE00.@ێ?I(Ÿ_E6''Nc׻'˛}c Yn}gnz&qB!XHAbܿU&2x +;8~CmGDc=N!3擩$ @6eUSV[BSgheڹ\.L&ͤ<ҨIs#߂(OBDto 8M2JKaH3~chh hC ּje+^g:u!F{۷?-AQ{ IDAT ~(vxwlr2wiE!J2R(ŭ%L94ՙF D(m|.8;pSE.+w]uB3i͛$j& /) FmҬP(ѳbB<ܣݶhpP>8əz2;60-4&D0X=w(j.ĩ3g}U1`gtn^}bZK?rYwG{nMV 91-}J.CL@ myi3ێ@t"(LF7j5:ڸ5߿?Ck^rqF! 7X5QJ7[A#OGBQgo+#ŊB%#H<â_^bg6!Eͩt#O2o2҉a(bq>by `) ;ώp?ļMQ]i[.MufkIм 6>Kӄ_D>r [  [z{8q7oAgg'h*A˽ZO 6ݛ]} aH+#?H>w;h`( a4ASK3HRZS}wi{<|RͧWΝd%Uƽ`UشRђii7<24[wN>l`oIw2Q5t4LVמ[8H,~>#zN$Sw&P60ŭtwi~#Z r.ZEuiҶtˀͤ+Z:+l }VjJeBҨ HerE}~&Kmw.[??3޾}W}E{.wT󘘘@cc#   ?яVI<͛7{1 F~9~;B<ĶB #Lyoٓ ۄ,RU5Ngfp٩35y$j3v7">b1XlYVxnu7֭YfF#|n F(9+$-Z J!IaTgBZITRb,\wKB/\s2ݒk.P:LU|Mش̂T:)pNg*drO#qsknki°gS~n?q&A(j# s|^G)Ks EG T %5%/<ю6||҃X*Vi$ZfF-n5ՙ`5IE۾Kݚ/=H 8p`??`^8j`AAđ#W빗l6ˬ!aco9(@> (ran7I2#XR_Wt& _1y 6\WNl #QHy\;H$`ڊ%A3Ӫa5ud%lvac 0c2?C8tlytg]W8Thv4C!aIRĐ*]=5[m#Shfnپ [4sq[֭/|>1Ҡ  d5|\`\n:h$,l} $9hHO0gHrzN=DQb6{fj_h1e.tDWBϭ/hH|~,(5rYd2hyymϕ!\hG{aYR#Ո$ : L& 儷[g82OƳ6dc LB *7Ͻ|xQ?/NLIX\ 5=C%je1Mt.'f1NBEgd/j~ QF͇D Ma1j-⌅;[ g/^aMh ÑjtlǺ5%9j+D6tCR'XL@FA 2˭6o\?=Ƶwwd|>)QAT (7l"cׄBQC'3W1 !ɕ{-F ̽f烅 jV 3 ڒD_҆SB5{'51sցz+F~Y8 PAT KjJ|ח[V6H9PԠi jfÈ;ZXa3NZYㄵnNsk{h5|e \Co!&myѠ  :ܹs022"Kri.lSIˈn]+i)q n` 5R1.>6O_ yAH,hrقY85:6/m6{e`hqJ,&dDAܔ7[ c{l199IFQ ?ڵj5\hJX_y=%LQ(jtа\HV +wDN f*.&d,M0Qm"I.mk%^پ6ݻ1 Р  $k'/RD&3,>0Ee>8ULTQ tbEͅpExd,d2/َKhOYGBjJ{h@V(5t(`\>OA " OOsskuh wwa"7 byٹs~GU을9tVXNPtۂb#$5JEaeEN'f1`1&j64hv^D vwݭ]vޅx6Q bA|GO6[ƍ |fS"MHh%ANJuK; Ss/e"cB@d֜H$ z?KJ SqًW_oΜ{Q*j( d.D)!yG:-=766={cz) *r~r{H4ƾ;-65=z$&=VTgAGM;fA I`%R)`ԕf$n*[?W畧&|H$k{W(  ~gLY-r:WzSgd/jxFid-)scX,Huw^^Fh ًWm +\ F *"RdƉyӣ0;\){.weIXV*DQAܰ a1:1%lzJ@ aiT W': \(_~wݭ<#[s,\nunljdk8`jABQE ?ۑd066*6Ks9D!"~/N) Uztֿ֭)1mʤC!kD" );c&OnވMzp^H݃zc'-( Zhp9aZp+Gop9L*?s" Nc*D$c ƸJr}Y#lYfM>iAH ?* E[) (V3Ewk>r [̭^y "[w]z^hZh8ADUFuElŋ,Gȥtxrj懢FN!"t>'fB,sff^:/B(Q6=:/=d+jH$tJ g2l^(FuknM7._ɾsįd ɾsxn6l ,L֯<*7) w$fy1T )@S ƽ̷dĝVD.Sۧ$ aއB%yDD`2@!G޽{OWZH4r$} aiV*)aѪn͹\߾*TY^;%/~]F? ~ye|OazzZ}A.ͥJYDPPp9A.AC.eҎbfΥ+{G=0eӃ!QxFMa1/*jfq@1 eَvtw!9q+ƿۏzw_xk;Ƚ _Yr[\kQ\1f"|Otp% ;x}. * v-jN{wV0E 7jT흿8a/ c2jKjCtfdg696Xem#[65'?|[.T*Ex 7pC6g׮]z_K3qiWz/$ B,Rs6ֻp34?{wyAMRKZP7BH0[5`N3csf๿d0;3w$c\xÐ`db8b@+zQ"k9''zzbYҟ#ttb7nH1N՚u>PP ]Yx[Q{捿ۊcp1#2h .*'ȸB+*Pw?<=^ o'.r8tTv"@j m;l"BK$p8(..#"R^g=CJUޥgf"%#Pګ5;"Z͛6/:<Q2ANFiQUU$3H b1uϞ*ɋŢ/35Q1ik^vh:)A qlmw`8mm D"P9r IDAT(tor%&aCK1ixA܂߼;oP~ #ʙ&6DDcɟy y m.T{Hmxm#aJAE_0#"Ru֢Avf`GzJ3EKAVF7o!>0>|dY.KHZx_ib[^zXYbFb= 5tt5^ߚ >`Pl,f#42LF\'Dmz=rGN`1,ߞgF_$ڼRY}ZZZ0az,DD/h楕SRJ@" N[,T"݈h([ Ŧ;UM8 %i`{vlRWjHV9?w.(G^N,ۗiwunNj&Gw=yuy(Nȷ(2W]ܣP3;V;wS?痔DD"eu& ͭ^|yIHDJ3aԧ"'.$DxE*0{#-|h4{qKmY' I-'Hp`ܸq#"Ҁ5kVåuHMT9I쬬,JQRS Tld[.dL0VR(Lמi}UjDXM+,ņz{{qpo=q-QV2^,۰t Q}!X{<4'Im.EFxвrٵk'JJJPRcZ[[1f:"":›i!&,TGՈ\NlH"5+ @˹iB5wƻEkcR/p8z?яԲ"1zh,DD*nZ444vK 7:U?RRR`63,! \NKeDP3%a\х!e1⟳t%%=Vn`綢B/Ŗ W-p0xXV2e%P{7Q|,(9ɲ K$H;u \=^e|? S tDD ,Iu.[3Kln=+`$"E0D,܋"-"ѸjqϼI0&O囌:Jfq xSujO<{vb_>sfMCȣFƎ4ۦ>܁?7ߎp8͛+%.ddd\IoݺAQ*JӃ'UX&lLz9OOx< ^GDkÞgƢ&`_įY__wb_ rOg0`ZyHUU6m(I[36^frSwQ)N4~G*1z=߈BDwywn/ gfd"Ӝyo#֋@6v yC`O*yCŰ(UO7biΚNt=> vُ93amsm`wGiNբsU-Nl\~F҂bL&LDD2:ע& .RwwmzY)42OOj98P۪j=~zv(6^j}{>BTTܑ`2xOGDx饵e2谼&xX,z\N$ Qz+) z6g޷ˤ|eF8fv q8x`3iސhsubG`'?+g3pwի0{M/?`jo`ĩ:Ѷ%#0|0itƃ_hb[Ŗ-(rZ[[U?=$I0{FDUoAvUVi&"II4a*=XQ8i48^$۳u:tPe577#ノTqfj[V1 4 +E+c$4cڰVфp/3PK,&mђ%SRS`Ŗ\͹ߎUoG0<45@8M8]({&a-={L-+ɥI<҈qEt^6W;:̻e~7Rl\ѣ QXXuhmmѣ9DKk%{8:*w|Ͽ7RR\K&)N G|xTGn {nm{OKMo>H$&L0׬Y$rX4ɨD"C]ҡ1!$*5&,q"Ȏńξ?<& m#aNhj d޷= {}gGw綢B/ŖEJYס?\`YP`ɶ.RK՛m'fϼ 7M.Բ4*Hnsu?Ћ6W"ܞnv\NcG c{|ӦLB٬YAX"##VHDk֬FCC$m-[8 i:x|O5vu?NI\QAIDa$Ԝa[&Z:_=&a˜<ژ9;ůJO쟅/ {@AK8%X;.Kb`BP",u9Vi8S{G_s"v8*݊g5=p7WG?1~mm`H֭aR;M.qY߯V7/ͤGQ`$iIg2~s$ΟW=bO΢yrU}{a}l&"~a2WF P 2M\Har"Ry'Vœ^)eCݴ^xZ5tCC3mCƩ?Ћ??(8ӧ!Ӝ!˺Hn<ʞ E:;} `X\Qa,d[/M.ㅧC&7.# #hwuʲ}&6ˍ[fkb{Z[x 6\.L&LHH6mWIҖ-njŷqk;>G0RH3sF"RK:„kNЉvUGw) 6xh)Poǧ-˶N(.ªgWb̛$m?޶xop8ۇi {nKҾӷ(BZQLo0m:|*+Qc(9UUUx%^[V1 #PUjqD*9fyyT}+}=όe$ۦ`EDDrJh.eM벹nD"ѨʿJEE 0#%y^5sd(.Gwu_!Ur6hy.͝5 +Z*Zh4xG|;>աGߏW90tBkwuG)". ϴ{RXr{kj>;w*r&ɥ++i4ʊsEy#jFXd'NI}0 31Ɩ>Do"z;eŹ-N^u\<$"KLw ΞT;`n[(;;Uع"2YH+";azq&O>`d%ֿu=p*}mt8|{{]0t(Zݾ+z4g`⻱t]]GxoG=qJsՂ- ϯ~/,x"R-$!.vη:ppivډC9O$ASSDDCP__5kV`GYh{ń^>ނ( 9@HrUko>ivv`ۧEobX(Kw+>0LD$>&3&Nv:::4238XE Vo9jG"ڿ~2j8۷&!r{A52ViNCה{fv^w/G9Cup{qLF̙5 ϯ~?\p ]Zxۮ͛+l&"չ8~l]2UHղ2LUk0`&eKa4tRr̒mDD!uw y⟗\.bQJJ ,+EEgF,=4[h@wFA!lɄRygm^Ps2V삤 Q5沒XRÌ ExUX.Vo&"I<)P23C/6oD]]"f" x饵/EyxkȵpZ"Rj3k TI<߬KÚ)]F`BiDDJ#GyI(.?ݍ@ ;U$b<YTS & A&j6^yp8(hNCIr8j]~ol nW?]3oě""t"SϠzog$; :t*l&"@ 5kVA6UL=όѾQs~ߤuX^1T/#̀t^=XQ~ %z;&/^`=4(c$_C8oE"ژh42 +uH/uL\t""52¡߬Լ{u 5'fal !\V2/]B=_ufO)I|<~dmv} ȕBҌ:,7^m CXTH@s(+E47 |eSD&ϏAJDc.Q1LMWNlxnPf G@!dLD.K3\XbQY LFdED$Ϲ3Ǝ)Lux/km^Psjbݖ.]|7V<&lݞn/m엿 =[lk"ae'\p?/FQkICń3H] 6vTD<=\+_U>Kr004#ͤZ}& eM͖hh{J;DD!Gٖcۤ)ىH$}eZ!UY7pKD$h4,ITiNO#_" )6p$f8f{M Aqrxh)_iu`5~^ƻ'NIvgW➊1x  /N&%jcܳ_.'Y1u\d`3zh/VÈo>C0RIIKfpY9+À5OoVII6!+L(~>O*55f3 f)$R*-UP3Id2HQRRx}I/Þ?R!5 ȅZ٘ e4PV2e%Fhr I=pGǑZVrKfw*{> 74;@CmNb0 D߼u%jV6W'w@WcF-7B4GSlƍƟHnr&\2>ay=ζkb}|ǃۧ>p;鈈O@ɠRI͑HΝA+P($H0׺ 5bdHҮaؒ5/ˀ!|qV<< Z٘MdDoFY'N7:qBm;% 8"L(.rՉ: #(IG b8&7x<ѣE{Mp\`3gP\\̱HDÎfAGQDa^ْ5/}vP ݶ#^G v-lK9C67/]|7V<r$^͉SuxoNw[Q1$m`jY c>|AZ8L(%iHp|7o +Z.)m_X6 "Rܨ+ IDAT<;aZ; "E|>|>`˻VpYO]s KZFf4O@󲅓.>>C0%E9XKD^"ߙ5FC&&Ow 7(I{;lvI-f"k[n->Jv/۹s4Mb ##,2T&K; *$]'7 E.VwYlCr8xվ9=D0 4:ddf1<@n_ ٖNAn~j9/鶩!҂TDYr63']fџBvM'..La=XQ o%I[&+L%ؼvϓWdrn~r@ L:n%бdE^آ!x[Oj 5aYx֜@5QDD?j4;aZy-va6  $ I6b‚c$> ND#WyF.]/{z?^6N5vSW5#"\K:RSFLN{W$ml^f"+hD"p\`9 LlPSf""yœ^Œ5MM43בj 5aYx5xjtY">rGڡ7Хja^I3[Ew}6a,EV " 9͗t!Dr@WU#[e- +))#`Z%0R5GG7rG$mMi"Lj9 6c% 4KYB 8LjO(S;XkU;fYC5.|Y.Ghjଚ!/'[wy[nFL܂>~~ 8R )_H;a=ĩ/gڕSyuX+43Vn$mM,b;a\CG1v5M(Hص3n7$mr(J{[o&ZԱp^Zg-njGzyVssk,CUhcty(? JҞ=,K6oDe;1LDEMM ֬Y^,=bμ4B(v8𣯯= b` 2LDhP: 0%* CJ./jCؠQ ̞qV|sxx}ZV"˺\p/X#w:qm΋\wC)].א+Gf .5VfTS$Ass3~?0"RzYhr7^z ~'84زp-8phXH3 (w h=b$O~dl>||? =`3 UUU4_ H$OAq%e)Fv l$jNOKSMfQ#@x(5{9C dĜYcbݿO> fϼ &=>?X6~_ DD$8!ޤ6v4uDvǂrlK"X~*D"vn\-[>P~hiiFDp~abV:؉ifw?́KD /[0h%`'gرZz_K/m`.kXH$"Kx] VLiHIaF :VjVrCD4tBwFRCwJx% j\ѣ53_b9zፐ1c$[=ۊ~26n+_ AA[)RY3Qٞ?΍vJq8fնm{>̿?+7d2ʲ.-ر@D/:*dG@4C574;w,(瓤-9BL/,*_~DDJnZlڴQvhwO/b?0|{i9%e[9xcI|+M\_{GNH֞͛+s!/#H0LDW__gy /G'QB(B$@bViNOne3j&"Kf%j6qhvNq0,.U4m/G0,sxٕ_>G Ù?N R8Jh:d'H`⸱q\D" lnmubݺIM/,D"\.lD$@ [ka#>p_ޥ};ːkI &" kf>09E뫗76fصkgR30LDjVUUUAo<Ϥ4}jh!y<V14 #CE eUXHUDl7Mdpt=JyG8j6^lSx/eX,eH֞PCWmh:] Uk4¡ٹ 8I/b͹꿏+Vk}wWhj{n5SiO`s8«C*zA9sF*9D4<9͉yty}9Tc'ԾKIlb"H3aNRR(7O~K 6:~+]枞lDh@?Ӳom$4W\LFy^|>(jbAMD$H$ITjNIRCWmhC۠=Jӵm˃9#m7y`'(PF?ٹͳna9V$팲ĸBEԳ% 5*`ikLF"Ir>_A0T~x=T@^ê`jY`ˎŢwuYYvL&;6VN MHMIV<|Njz/k԰KXYd 5s _iv;YC4Z`=wgWիd] 8ƾ8H5;]aWTo=qj?SX)r })jn |>nړ;\__ut*zD"4448 *[n:h,/$h{o~`HSPK?(`&"$kfTla 2ҴEC`Rl]__E X针uɶ&N@-x{>Mק|䊿o]0-Oa Bzzt:;H2'<YP+5wtCkg:  v)ӭm(< : ^0rLv3L4o>z ..5UsىH$rtqKd hݻgpY\.Vm&Ay/b-njU|=0B1ᦷ_Xt8kI>UGecsP2F/l^4o-$?}/z7"D 5ɺ3{Y?Ň 4u:'L8dH$2C\s$—=VsGjK=@n 2Y(WrnJKôqӬ['tKwa+UX.%b5N"9*DȡM#;Ҏ9@}?ЋSun@1w,(\& \l^ e 6aݺp:_񠡡pDDP{--njKdlH_ϟܾLIxVj"">Sm,{d5orgN{dɶpo&l`/F"455Du~(]HaUj ߯H$`*2Fڝ?9 [O<O]]]6mĦM<Ԏ ީNTn?ǝYj)8fD̓x⼠0c_,OM_߃S9ɞgƪߌUD' [:nGE>{,v;rrrxQKk 4I_A ?Xx?f27oN>x0jT9<mg *vhŬ.5=n>}b}VK6;v[L&up"%iEi^%Tj=*{g3GD8mEEgU:F1kDYxUq5>u:=ƕ`LDWPZ%+N( Wۖkmd~ζZc`+DrUhx# x{<þNƒEw⿶}񸦶+w>su)`鰯Em?v֭(,,T~:{,rrr)􈆱@ _g٧HӋh0M--f#9D2L 첱98՜nfk +L}|^Ya-O@nnr! aԨQw#!S‹-/@^s>5ߛP\3o‘:_J*r +Gk1aGG::p `neS1iMPgцp$Ƴ4 gٖlL)`=]IiîOC 4@1U7pDKfmJ^ 5 W/?s|$ 4sJr%;p~cAcssSJf2Iڋ$^g/Z^MܞnUHV ܱܶ!Y0SS`y+ߏVm&jjj $Ëniׯ  Ҟ))#𿞜MD$4iK[onA?~3l2ԒpԜquXU"z" sG9ՙMz`:yfz~!ߍ s yNX, OܗC?*ݵrWp>I"|\z/+}\C]:v}!TaNT@/N7JމSux?IRkfΝ@ IDATĪ6Z`)f]&%4f@ڇExxtn];~+WX gϞEkk+ սkXfe '0jMo7VP!"-73%둻'C%#'agyE)-${?!lݺ׿=ߋD"hhhAHDiFZ"Ͷ3V}fY4h^. }4[tH$%j)))Z^ņj} 4ۍvc﾿g@҉FsgN`k?Gh}K$6!iz:Iy.IRsqUTip8{8JPg3gSހǾ<^p4Iz Gx(o8Uf;Dg2dtL|H@5Kzo%3S* Knń#'KPW}}~Q[[zq>H>[{uM9HG' N/ }=ԆSFqI %elee]4wrgNda={4I$hiiKDtM6*b}ʊrtX3M?]MbA3g4/n6H$@@/|^AH^ٜht߸Js8w~;%|5Ϝ7_0 5PƛAzcGfo Js/'AÑԩ⅑ bYpj/}S,:xd(/I `yv.|c}8U-Q{"2i<&~ɢ;KM䶝s ) [oUTmN$hkkCss󰭨Ae[n5ee4zßa#w?AND$42yi0?w)ll..bo-,{_ jASSg]$oQRuf(i4w LF_&x/>Dwv9Vހ}h }A9|NnK`^ 'P)>u֢N, E.Yz{{e][ؔB\j=ЬץH#Чhcv%c5wr&\23J;wD"477`$"'WLufAe 'aѼ hrfNg|Lef[-T}H$T' ]_XUYy89tx6U!Yuo%6p>> <6Ñ0ެ *jBWj>TedLFFU6֝ęj;ۥt:yp(T6%4O+햼ZoVh/Ham$fM+ gbfM>xxWe ]]]hhhAJR3<eF+LP``_k=<SLG%H))#`޲%f5rMFWbmpvڵ? D. c@֬Y"֩v>n8'A5Ks| P(PH;>'zш4+ȷxU[QvcS8txw0ű#ݳ0L':TQ oGj` W;݉\LGxT(ܙ$os|q;$/B_Ɩ:v | "Ko@jJkբu+=~a4rgMǂc`Х{QUX,>$'R@ ^g Wgct@h,n_Z4y0w(x""f:yХjICOA>imu`0$Fa-Y#h^.w~Aӭ >ѳs`wjv7x;j;ܯ?,G!*5[,{IUg3Gjʪ5VSW-UwC 4 "7G!O- &sfMN%IpCW}c\pzQ1EǛ2-F0lXdylVc`0:tvvje"gd_)+f' ~|34`y$x""^ K۟xo; X7ÖcVLݻ?8thkk D@}}=֬Y^ZXUG2Y0\ͷ< F=l#UuG"aI!+NR&V3Y_ !%9TL~)APf%Jb{p=T:6[`q~I;;znIfwOwIP8/2l5SEp87ȑ_7/*y^49'T:r)^}}@זiY r@ݍH4p:]*[.dԲ{|d[-lU[K3z>L6:.zݜ& ;.I/6/s矒>XP{h񅒷ק`‰unj-܊>bӃ#G"##D$[` e1c郪EgÛ:ϼ/زͶa l8NJIJfi$μm&kIg;I)$iK~? d@ !e3c1X2dZdF$[9\ s<{&17͜T A0 7 F{T_]"P:T:;^SV.(@mz2"/*U/|?B7t:.R`9xݷ<ѱ_9u??+}L&y{ hI:T0GleGۤ<F]m=n#`Pc`@]' 2փHL ;3PZRJV3+"((YGN!-5F_\\Z& QD_n n t q;> Y{=xބ ,.j1n K|\/%oj> ΘǍwtOHc^dgg#;;RBJ%}mF&34"h椥ᕗW̏;3+ϋ+3/ic0!ǧܪԓr\^p[15NnهS[R8} n;|?!q]!<:2†l?KJi nisr-f1t7 Ⰿv`PH<{O$څLqn]BWӅ vI1(ڻ |>~hdjZpL\K0S&4<*ImurafCsB wtA0LNj;]=b!/xT~>B>^^73 ۅ[_Cooh"3Z8W n^/~xW'hs$h!=qV܎jv ȻnggJJ b uĂ?8ߊD[^<19Qz_;wd [ `ٳgaXIQ^|ou$U!hɍy{ ^_BJ9ϛFAII芎_~RJ_V.(>YGM&#~wjwa``ϟ磋 JpSO=Ç["_<1q\ؼ omhN ASE?ÊE_ ^Kl$US`(۾0]k/(J"CQRg2[Am=H @ sj/ϗLHؼ0[<0pSX7ǃvSϋ/ 62=UbGG}p\GEsD2$%DˀE Tw~4]SE?n \nOp3 x5HKMMsI1-Qyٵk'| tt(YӖ@%00z ^{uZ00l҄4%>G]7. !GEY.~`-RLI\kxŞ ٘/_ĸTx fJ;@v;>pz F-`ܚ:y]yGvOysj*hx~=JS#?>23HOOO>;0SiW^?j_;IfsTU۝Β/|oź5q 졆a8CHDCIU;:Y!hF70^o;pNMFp֕b1 Ƌ8l#40a3F@GH kӅlhFw_DzpӘ#"7. jt'q3ALkJf-rX9 ߻o&#Nx'QN4sR/7х@2tdGoqxՋʒ" ?{ 4<+33ﭭG_-[>cş`ZMv477~PL4=ߑ4RT[1yXLq}H7yQt%.i0z0^~lvl?pdK%7'm6[&˹gon,'oܿ봔(=#>K<#8 `س%aT_]"PU KӅgV`q|>wzqڿ={t۱ , rrr %>p*tϛY%qwg(O2*\hZӁ@R1`2b&JQw$&FoM,<-ߴwaYkiťa ̩G@Nti= 㙼8΢֑6d#Cf&xN03>9l#Id>kt {&1anrHnCZo^bO|TOC\ԏ݋??: HȋJ`0Yp+?-xhE=gƧ238Xu'ִffH$Bnn. (JPՌZVNxRjd4O `)))S qa Rt%R Cu1=xŸ"egusGN]`\nvډ}9k fsCQ {,&?{s8Qg?~g;aDFt: ~n@/xYY"F7q3c0Û().95C^?V=P]5:DBGs 0ܐ<> kplW':ڰ|rRb&0:ʒLRX10hQψ?9l`ezݽ} |cGB+gDDO찍v%].1[s>8<4έ]_b`Ks+:p&q̛UKMKeT~nn݂_ JVjEoo/t:#KLDuxWꫯ0Rмr~w >?̓pI!h>4wOϧ iȖDw~4TL$E>>t?6hcD<+j!2S7kعs'NgHaDhnnSO=_ F !h>u>͜4btE$ȷ"ւf,nÙ3}o$xs9E 'dI#\ukOyq4 lL Njxf(+~A;D H4cfFq;!?:6.vݓއDL0E`A! 0 7\SRIýcvx 15 [Ɩq!/[ǖW#OƼ*!&|>~ߡUmk2pY,':x'T2o\ƚ #a Ks|/Jn* ,batZZ49ݹ]EQ {OY|+n6 WkALܙgLj!k$9u?ܓT 7*ScQc}GӯX SRR ayD0>WWZHЯ554\? ˥yZq)WΘC, }N4 ɠ=;fv-Ͷz.3 Q3`%[sFtLȒDhF ќea5+)͖:(ȓvzU̎GU IqmjqIhLJՋYQ,'q3v|&߼ݻcB<yٙ/A?AA !)ĬJ9Y]CAD# lj1^X[T3*-ͭ0YqKck398^b &[Uwj3Ėw [cfME,wkD7>b)hD4C'ܿA [s IDAT%jKKwLy#j5</^ϞNʪatt|qe'+\7]6%Fm:=*fy\+=b\ qx} _ +lyϮ03vnl6'ZE'׭AZjjRKCƽ=qczi6.4+y/6o O=>pbsXl.]'g{O{a'Eȑdoͥ "A'5S!/CZjLM[C} \/napp|g%֮] 13ܙ_ ;'UYѴErěWGt&Slv!h!==3iW kR4[̈" p.P 򜚹"g7|^74}h!@'>zzհ!ۨG053ƻ5a3#ZJ ug MQ~ٿ*vFs2|\ܻ1ǎyph%O &j=@/-X ">.-ǬJN4%q3A0.]e`w?I77 ge/7BLA~NRSD8?x6 wgDx{.&X. $MC$ܤ6w1&Ln斀e~֣x;tt(o3.w AT7SO=[ )w_Y@+6?joduxSS 8o1"fZ!j֑u |x^j0Ɂ+AD#=yP7f siaҜ?-LXxhifLftHL|?_vf~"9s0Xanv8v:DT "Y!eDc)S*;w0*%xsg;JՋ>x+ .DQ Fss3^|+ؽ5q7-XUHSX8JϵUQ6w%bV4-}9%%T,It};7 +5u ٧ǰ1e?:IO$h&HRd d k%bmV~g&*Z|<߻o+\d2b-xۏ!V+z{{IL$z֮]_ (E4Qq|~s7ϯG~ V<\ |>o pYJ^eW#."n hhhi; H\ EK!477.r~Y*D Չ{ot&`~Y@-e|?!b3 "n4(A, ==~(ˮ3Ꞑ/).EuLƞO> IES 5>-ӝ fg\~k=ix<6b#AfoddFTXRYZ:E!DoTE sP'u|ahk5A\ǧ O栥D̏c^këΟT4ܟ#hZI%l>?8~~FYM g_d@RY8X 32R'fM.KGI#b&QsUtEӊ|ҶCEo^ݼGi6x@n?[L%(n@NNMr xhi%bs iC=0tgQT,7.$  jdAa~n>ƒ//!?qpp Z% '053yAvF5Gɺ'@[{';/;R d$1 B.͡v2ljo\pHⱇWks|9Xm:qZ=> RQ9/6řZP Ƃ]a9Ƌk]jjjpeR8N ##bbnDuزe wnin DmV+|{EuS qӐ-@o1?܃5KC̪5Pձ.n GzR 555hhhDQQM\艸R{w3ZZZXXu{wXSw?>Eo (,c2E1Κ"?##VŒru0|>o?55 99%h·.$II̤>L abDcuOdEY7S=vFO/t%LtOE\.'iI<7uwt,ȻR 7rHa&9DL_t.AN\] ?{^8-#xoGQ]^gG4#6 O[~?{s ljw5N*Tc%\nܞQˋ(=Xtvv@* 5\WR8N8N\x999ʢ b´Bss3na](;`umw06oo?|ILA܉XM8ڕ|volj3Ӌ+!1kl#pS%fWbYYgxeT*üy hhhL&`jENN-B%bN" 4-ABy̜j߼ ͇:C8ߖGG h1(n1u(1T$j&XⰏrR"B`Lؼۿ:nf+Yo3$twE᪋s:KxGDəI(*ѮAqz5غu nryBapp:a܌fVNv|_j,hMxew;:IٟHLAJh&kts,=.(:T2Ϻa^}3S`OQ sbt[5,67ksm2kNڵEhhh@yy|>ߕE$n&I" 2-I]V'~a/zꄷ!o>F2)sk|x56}5ۋv,TLIIANNnHkhΟ7 7zƟ>QįӜKKJQUxyG |8t h`.$jf>Վي=B)j$nV ii**R #n{+~6 }I >yj0^}n23 w>(H2a…ͥv---P*Y?|@Qlg?~܂P2 &!--1>jv{"tې!qh4mA*͎1}U3YЫRhĄp{\q^3Ǿ=c??ɖ."fCfv 5cn Rk2)y xx0I }ކPJ(fņ#qoCń夂I `L bI\TLh4:++RB1:fLF% ^f477޹K.Ī16w\رew;:Ir$ӍtAH\]"PxC2S]ȑHf`LjDkQaΜsAyy9 [|PZx&i/u<(ivs6ɑ,374#SW[sXЇGN ǩ9?mH0",p_^V6i4~̆D,@Ѷ)0ZЭCD㘓P&[ s"yp~4a3pU,gaE"ώDE2O[?gh9?rKIt>|p; o]Ldfpb   D"d2|aD2ƚB4,)S'X* $))SP$C9Fkx'\'&I n{cf݌_(++,rC],9'X] JvBMbfՉ{ot&qb #\n=jC6[|H|{)6]P]5yohKsJDaؿId?&H 14<I&W*Z-#@`eқ玶dCZ4>;25m63ZQsE.3O?:4Zttuc0B+x [K%xt*lj/&3b3[Fj$"8.Q-^r\N*Tcp}z|u:-/X}w|MlZaZX XL PTP&9HB4-y~k;& h@zTK $9ZZ֭[QW7 fA.ϣKQ*PUhooO 'QXSj;3sPXتcyXѴ{$; D$il2mIIb5CP 用35pﶴ yij q D A5np8{{&_ ;[&NX/n8@M͘2&N'N't:B!73r qKKKB:xUឹ >? VwAonȬJ9v\ @pFek3| A@Y(/:3 0**(ʤͅ"_%Pc1;}?X;yWQ?+dR cs$hNkҶBa" h$K2\.,["*qf<+g}1ivSPH澁>lttc֊Epitc$jff!Qsk-vF5jgTbP7 ьA9KDx^JqGx\.V.[oAzv^nꔔ)Hs[pzr{fU1UYP u`h \qop8d Q[Nܙ$xKˡv񊷘9xo6?ew;Nv?\5taAQ?R؜~>ۃ$wdk3pU4=z;1͝4p8pp n 硬qBR] U*Uҹ0j725bfh/[k ьؑʺ"c{>be;!;; KsN6?.+_5:yhxf(?IXO _mXHQ3'/jJOh_déohD,Bqha; 옜4uAK:{4x0x}W'mvlv> $H˥8AWwq# rCG(Dj.'\Q:$tGpz;WAqsT {& Z\秣eNNǃD"!s0+TCV'2ŭ+qE#}w#A3AKb)l.#\̪cV=zաȚm: +"g<yyy$PTuP7q>7 U/\ Չ{ot&jDc4QT\fqHpd N7997;zOj¼"\ЅV!DG[ݚgӄna5sW #cPDĢ+fU8|ķ}s [[gy}0[~g +YNVA&!As }.n GZH$A:NsB5œ܃%{S OM"0 Ɂ:vz{ Q3h^P8U}]JI0B*]Gᒃet$R ] [Oݓ]ݽV*Q&p8]xkC3,ūxn%pq>zϛo&&FH2^95>Ʉ+grq3 qZT" Պl4,`Taq=ܙADo; wfa@Xt>?>\fd ʨS%&!m%bf.͍SSeS8˽O7ᅧ_>c.|?|+g$u_)(* Qs|_,4N[45^cr^(ֺfȤQ(D^0b֋#elbP7 uI{5|p<K3G]m=5*KI!I`&ӏ>cB˱Chi='+&%f#7N- SGTA>i|/.ZѱGN!V.HN6fhk$Q-p4AףlZ1>K l 6 -VsU9`k\8%^2yYS}Λ.n`*U/TL|~:.t|ZZǪEOvQ*tPUPUI<L3<q/?+ɝZCq|JARR ?' z #}am6}y f'%2a^ ,S_Ȫ4̪cV<; Yr,׋i,|4,ĬJ98sjm=o-&cݚ0=x4\c kNx$dӅ>ݏ߉= b޻rAV.(C'wHL̯)DBƪݝxk7h??-B)]~ϛƈx FyMfx#윬x "Ϯ*qc8xDzYuV{Fta bkA9ڋ-OlQcC,K ADqP/Vo}a^7SoS}h?ӏs 漂eILD2_9~yq dۋʳr_}M"숋ǠE w| }bϒR4[L @/RS[>?nO<>֭y +g$C]BJʔg# jNKMߛ4dD,Gqh1 22}))AMyXq",7C7loYw)X5JYUrXlntqXlnj\"isPd9Nf^kԠ0exAA$))SP$َG-qk ;J5͟''pИ`HFu QB @}ހw>:ݰS'$h>BdeXiPFD $ =_@o-56EaD7r?g;>9M__p",_̨KTTW@Q@ow/ MEyoO>ttd7$jN փf&Q3 ˈ0A 7ɊS}8uVIjƚB4BgSE$ YUrV[A~?Sq-5LA$%e 2!Ra:~%"W*\D p <^/voǷJ5bmHh?ǹA+&;u"&ޥA/beP1Rٻ8;O_fi 0I1EJ HlMseK% ޺MսYusons:ogeJl$KdB(P`Hi0D# PIJ%t{÷ob!z=x|N4,]' ?;z7aTpJPA~4>G?+lxUa&4?f+@6MQcؼm3Ƨ u{ +Ps4/sq{1Ԭvmr@slb 3.7JKwlb5ʭe;͓2bq,0Nb zoAF :%ݤhkm]9dR% A'Wۏ>GTBfJR&""RbjUfA$S↍PQ^A4dovn;|'c^81<ჳ$9ݦuh.H;p7 g7ױY  0L_X.S3bmY/zw~߫ǞsEgۚs[߼{pOKasl߂u[Xj`50*_[nCۘSiDV# 5+k <j4Y (Gf ;q+N 0xs7?:߇6TuۊDvoɀ3ɚ~9?WC/<@3e<jƧ}~+/_܅/sԦ79?o|S;u# y0JWg!cv63 n^U݋iw{20ԬvcU/kϵݸ+mj&"761v'%qɈoWVG1Ĺ,LR)|^LfC,"w/@~^l8r%w$Ư<ʎ۾ ܀D{cP hleãϺfQ$"e`YYC}YjKSօ{/; Gc1 y»q+jo?s IDAT\FLp .: ;1-wzZrk7/z&#?фO4>E!J&Sx2>>جp=37g0<@iAAixS{Ԫ\?{C -"OjشѸa< ]xݫrXe 7Mxm'SuiU0x y1 Ijʍ/֒|}uφqQ?S>rb "ٸK 5/L&3!TJWVZ /^Ky&0Nԧ;3X, 4gWyt<߅g[֨E~<*KG#I&N8=I9jVqf| @blbVK֭#g'jl؉-fa{r|wq/F= 9 G<cyvYob! 'g Jy0ԘtLu~O5VaZlz,Qep{DžY?zZX<.7mچήK~~_>5y|U@+w&ۃSuI NzuxܞH$,ڮO&s/R*I?Bvv_jG:$.sk=>gșd[y+7DDD˔f5clڋh\ܮ`e7Wu՞;>VW݋"YN=Xbx̃H, gn^燜0a.Ά5Yu&O.YUPrۖtxǁs=ܴX8}NPcÖZlTN?l. 999,xڸ_|щ2h>;F}X- {nx<. 5LN 4ﶣ&0Ǹ`7^Ƨ3:RJ%`nw, 5+q (ŒˍjflbOyNDD nW -s 9O8w`x DZr#yYycaQre 5LDDDRr`+7 :< v|pa=YU;^:˽è*/_xJX%;h)&f"(.YV4Nڶ~#Aіn ~f48ށM;Pzӻsx9;wpCݷvl:xaD4 0q~ vL+sOnzHsi|f?,* 7ǚW141/?\Ĕ Ӌc(,4rfjh΀+EM:#F1Ĺ8> ?yEuVsAe`ڷ]t`P5 ղO>>rm/As%)'ǖZۃmGk[ LfӒ~+@"3:veeeOol#$=V,ǍAlfszCjFOh4%1 9͎5 "K(.20bhFg=;d2łb7(=rr֠p Ӯ"i/5.!CaqAUy)}|MDU~pzw2;aᯚO|^Y[>YyJ+Va-C[k3Ol. N۸a6y F3M4?C(q a$5K1Ԭ|8!~cE朜Y1BMz.&3124I"x=rH,@8dh,6sn]w JXeiUϻVs.0 >G=A蹀ˠ2eXYQZ/0vZXɑr2)O 7_PٷZj7b7'Ͽ=*xIN>cb7IJ: ~]8囓|2h5Q‚a5_|}Qڞއ}G<Ea!d+ (2G OZ>{D2q}هnjr@P57WHg4U0b;^\ 5+ۘ}2Ag@}h]lVF$/ kYڗ|mCbtb>vvtWDbr`hdERd ?8`6M,v.?/\(ZeqyCx輁`]Tg+}/ ADD$99kPjC^iwxRy5T{S/h,KWq9$G"܃GdjU.L"Mde*eZPR<`.!|`6e'lz>zj5Gͤ"sf***_/:דyj:4?K_TKc׎fdP]!Rq34+C g;<6[q?\Pe(ZQiZA\a_nOe>Ngf" IfAML r\6/γX """ ԰Lm^z &p(Rw"Cqֲ"CUy)߶gR] 2YΚ5Hݹ,l;.-0Ȧ[sp& Ӌc(,4rG$pU\تiTzokR")ĵn!@߳IU6*_ԗ Tfw 5+Uqa!H'Y,͹H&,܏ to*/ m;kK Cor aм /bɈJ#]E0OîiL0İcgR1'Z~Ϻs| n`-驽̺5uZx~~ yVk.{Qk2~D"aLLadd4Z*`2h4z7"Ǝ]ۡ֨TG_Bg(qPs8 &0rȼ׫UلtjPcWTڠVk:4AvU(.9PR鳒HI ;ctth5پmOcCU CNVnl4DDD2 om0"]ص9 Λ7OmFV)֯TXyAل{6̅.r`X.S6ܻ2]ێ1Ԭgc/W8D}ш7v0`c)KS6[e/kϵxf%6WFAp$*U}?+]pXQnBHd(*eY_D$>:5766-GEc1|ًO;{gУew=oJSVAtmҤV^H!tpzŹɮ͙0^eXˊPWmò$I.o^g=CF2bQH|ҋ2D"@ <Ԩ}wnO1|^A$*kӓCC'"G=ɽ7;0Ԝ]NBq+ dtҶcV[Ҿj͗lڲf2Yj8Ԗ?ۧX鴒yC 3.78i^fBdf xM靛l 8SV`93Ԫ\6\b)JKqLz̸Ė]abʅ)òb47n3{jY9͑ILLXd218()NHFnWVfNO!4}>/Z-Z7B"wA*"HSӏ,:L(-uSCYnw*_P-eև=ҾBӦ}_ v^+Ciۖ^B>Cb87)S ã}ctolܽ [ؽY&\xoŀ3)̙DDDAQaňp$Iq:umqsH kFCar'~}&vq&ucrӁABy5|}i5oa&%ŊnDPa-cy#u_ 5O/!ԜMۆOrfq?BDSVEu("Udw{Y0h.gێP0JPY"" La#_3׽Ξٳq+E! 8?7Ivdb;NrfI0Jy!c8zƭ}>3,ry͚5}c}ݮ=P5uU2׭$/Xj&bHr(ۦ^o@ccӲ~g{4ٳެ y=vmlص!Itmn]DDDTCaNo^ݶMpLS7qf)bvLb1:.3L2btL $jt:Hc8.}q5mH$p$*{z/=xCi~zh:Y(A㺧+TY g@<g+֩8hva9VyO=mK"5 W= 0\Rjm݆Q 7{1v{45.SdEh*⇥@n3p+p$gJlev)V~)]^Rc^Ʊc/tww PvwZo+ֺJ|X7>FÏg^newf"""Wl4\%\YV|q>k,D=(l+/ó<çq3^)}w<}6[5 o:Ι.W{oMuiZ&Ɔ}{ppלXKD$ǭ@=ގM\)0ԜNBX,jsA.sST'?חZ(X 03=1=c‚ 7Q03HݹâP2z`Zbĺ%(3=,F'OI2֕Qw㣏O~qkaЋ߈*l2ʮ[m™ ]MuCBbE,EE&L#ƽ6R6[Y9zu4"vc[x_m-R_ukhԲ;5D\\\?agH]4gi&+X<ԜWPۺZ؇3RCkmƗhC#LW.b0vmmaa T 9ʋ1vmb¡ىY>,ѷwبg1hrr֠0O<|<0q+}:X+ؔNnOy}$g]%X/ ܙs}x\v2fvb9S6[j/kg9(PBw'N@մ{ɿ{ L2TQ۴ lUfj$)'&En:5?Hcc033.s+< 7{h`6cm a-24`Oa1͛2@*|h+ADDDX3"H "!VG/4R>v cӬ  >Ty gcŦUH 7 G013{ok$ -hk;R܂_ܹ?7EW*B Daam™ 5PU':z&nEx.v J)5P3rlbJݚmHưkO#_ pf/ *+Na6mC~~!p*%V zH𤂔klb1N$KJJvmma=tww!q"X S.LLo6 %<ѹbĮ-U,D AϕLD*U. !)Q.bU?s@wwΞ@ww7,57\G9y= X[fy!p0ăiBQDc1GZp+vo.g1(crrT@`8_ @xǠ_߻Ol] `tBӒ=n+SM.%hnnAss(]c0OܹO~|v)-D"@ pd؄⒌\폡T(|$‘hF }׏qNhiFDQl.fD0dF#r 'fl'ԗƭAn:߭YWߵjȲ{<.twbמ{~~F/w)+ZធWUWΆ7~؇YpY+*Blm܃+Vݱy`΍}/RLu8BII){ǎ.|y'#Ec1Dcuytuͅ笯! B;֢h|].ݾݽp2TV+503\Rs>(<0 [YV?9&p61MND.ťس |G`ِ V Z3X^ ZzhZx<۷ohٚ[߽|ɧ8Gϋ> }Gګ? A@*9R wN"z F"PVJymJYfs25_vk͢'/Nrdhl!? ͨez{VNU0V6Cbs alt]IFLa"؄&B!twφ ߵ o/ybAh"Y jUO/J3ADDDy:H<䷫] VDg3_CkVkPSn vd2p-l(|"(b4_]W.&#Z,4(=hiGxDqYT"1L1lU/\fLFd{uvLOrX,&NSRaNDVer܁@[e啰}VupNO93ɀF"DQLN.^dII)2DKظȁc/Ғ"nWhqw '"eVJf8ɵHCt P30ۭvc53j.$-GCXPi;Tjq>COQu~e啨۴myk*5C$KXL+UU0 `@[A4Gww'nTDrrɭxVVBFRs|9!_z@f"+/GGQQ6cav-!PssKB͉d:fQa6Rv;{!QWr,#M~HDEXżlh5vckiݚ;H}Y죈D봒誧QN͹y?[vij{Sr|O+nc9$r*e֧cbM Mg;ݕa$03Aayah,p4. 7}ǎgQPP ej5+LC0:`wx0R)x}6C00lp Cn' Y3%?E 2c,B% 5ڣj}PH>Fq|'ڞ'e Ix=n:CP$^L ls ! 2 %W/`k^K?ɮߊg6}Mߩ-hnnA(Bww'D$K 3VV`x*##r_5nqQxQByy>?Ynze撒R466ea+h]<`,,uxW⥣pg'f*9R we/`L$܇RE<h!>vmr@ԗ.{bd5 0>CYUXI0X2uj{{a[W+Am8 P? b^R0C?`kYՌܒF>#mT @VXڌSgf4E gHHz SLa5'5GdةY]3ӓ3d>ԏH$7/{f- j7m{dQI!nO2݆`0 bff] 80LDDD~!B$b* 'GshD$khm=gz@'Zy&MLZm/Teja`؎QjW2/)PI18TʍJ osˤUc;NlA&ݚjvyI/&Wcj܁߇M[wA_Y"cjq}͓D"f`؞L$ܙ$)~NWRRz_O>CDi+ 3IJBX0 Z4@4*LDxӛrk;wX0"8|" |܂+]H.$ e2üt~DAr 999!H صdl%ax\o5mZ C0T D}M[%lnB$^nB#'Z~9Hj`˝gq ҼrX u;v8!("=%^UU_5{ >@ϢђPb6cc!"""Rb/ڊmEqq37(1<'LbttD577 pfǡ꾂=D5uZr JtN"""OɪqZanJ*n.B2nY".WWPxND"aZ$*jN;5OLQb }U\\R7 o_$a+(6rR"""l{s9vo.gf"Tyy>?uA9d2}~_]"q+$ 26YFyQXhG,&ã)f&iqmJ@ 5R B̀5G i(8n}|m<KsvՏjL`VfHmm=~sk=ہT*Zv5C[Y """"bf"Z >Ç!k!VN>9}/9(ʴ#(‘b+=v  6M ^!Yyx,aYqaY5,dfz$vǰV:WR<6n ieY)arKyd2HÙ>J%K3ofq3[\W_S꟢}|w"QYloJ3 BDDDD \7ԉ~ 2/ahhP@3lըH߫Fϵ>l"κx+hOvB333XGDKJEZ>'P((VBP3-kAN0;5ZBꎼ&3PfۉD"΍+ô\Y*ʭe.e8'6[5+!mmv7 7!HسmDQςђ͍qƇsk!, y^ Z[ss ~{|몫P'֭l2⥣ldEEHT4wrVBP3- 5/؄-@!L8 #!𞟻fؑr fE7 W= >8BdR[[+୷~g;rT$".{DDDDD+Ҍ>ߟi?DY,̋H&LZ$Ps,'gEҺ5oi IDATžM8sKiBA|H-,-+8 !>WN-CʹvkN#w/7DuXU+(Gsa`bb̈obae^.7)2vo.p7nw3o&R uvBBbTFt: A$UOCtH&rY\vi%-nZR<8i")[RDDDDVG[qDJ 1v_Jfy|;GhVTY⥣pg'f*Di)GLd*"d1 "5K4R1L+T ݚ 54ԜL݁\#͉D^+CʡebVT[A9w5.]P(I1_'U·H2g"yڹs7Z[ey&&&revtd}{v >D"@ ]\Cz qhFy6W O (r#b\ӑ]7&NIO޻sھ\dF؎;{m6MVq,ǒ$JT$K""Ax&g Q$88~f4)?~ODDL78zsQ,řH yah0, Jif.1LKk|͏=]pwH목~jWG\H!t:=DDdGYSYJh#LqLkE@4MtnSsMuDmR)}Gx睷05DXdqd6.'w.; BDDDDrok3xnMǑs vj1-:A62oP2D(x\y 6Jkj3\׎|zLk|'Ng$3 `"j7+ޢަf>.fQYJi>h#LƴGUyR`4rg(&WH'`36A*JXn64׳0868ɁDDDDTݝLEᯧp< I8:;&桡C, D,,#)v{E)BRuZNĢa`S*x$dє&1$ljnlp&93KJ-AL!""u`J3565ӦIk5V\k<=;_l&׬$!Ey6RfI.W+wV4r,C62-;<(rECz{CCvoeA6HEDaD" @55g9paN$5?(# f$8OTa0UϑV6~>_KLiFf^SD,f;65KBrqEPqWU䲘׷;L ?HR,54ـ=;11~8f*x cH$3`35g9C: ‚lP)9=l6ZSj~޻w?zWy NaKq"8Z]'/|MZ hmmWU-уuYx4S`S3mZ08Ců^f)D5ݒ)}9 ^uٻdRqN&5]>poװ0>ho8mvu!""""ڠǺx_kӸ$gjf<4t@P@SSv='" i(BSx<=DQy!#A<%7m퟿+٘L"f^|E "ZSQ81>tF7cXrl>TȈhEPQS+Jc92ŦfZ7bs>ӧ06v R0XOL """"ݝؿoSc6\"y}ėt^o "U˕3"caalN׷##Êu6|cbquxpu4I k`N6572R͔f"Lk^MfjL,E!HJIT[>XvnOap))ΧO#Zr& V#m݃ikVaa.;벯/¥"KXLeL3?Cp *rjE<>25?|;r%7Δ_ ݓD"wITC*\^|[ZŻN2hV3QYJ܊T 65NiebevlAۄ,`r3LD>WL,,mWW~pgϾg< MʠٲVv+ڳf=63)8-FbS3Iy@bZ3h'<ܣP˨Nq#(Ac JXgGsLJIlkɐr$08TR-L#˲H$k&ؚ svXW&4iYгHjtf05ͩ(bf:A[Ye;P(pmv.[llմ`{O7,fiWK$UulEdaϑy n13;/mG"w,F61ILk N,6ӓ rri5ٹ6E PLrs8ŋ12r3H$⒝|ٲQ ˌv :& ,f#݉;W}7SQOFJ096<*^oߊFfd^V65kZr|vp ߑ:>`4e ybQ8N>nD㕇7m`!X,2ISç5KԼc;7ha$𨫜icڧ_ٸK$,vwocq&N9#Gw/&'' "Xa5ێnǪ浘 :X4 zA=ec]Ub1ͩƊRs:߅ֿg9Tndf3=LwU 2h`0d$Vp Stl"Vju3;/?WN &#8 a-XEPdr)ԐLaZsil&5 *\*/@mƫdRqM&Kq3<>>󘞾Tj BŪ40tj`.ily9Y岜DDDDD`NfJIp)pwR3g5tchphrbnnN1v㭷Iyf2tt1??+ʬg?wG zi/0L9lhN٧'W4 wU[W9&u3Ei&E52 NksQ:aazf1m߹|MutxF{ԩwpEL#Cf|ФAˌ6G3zϠkBUY0@$JI l"^4իg(?CȬJ2$t:%mjfYja6[$["~1W/bp$66m6u5_ ݓw-Fp:[`l. ӈZ9aU;wVWۙddrQMޘLҾf HJjKk>ydclJ%"]:fr"zbQQXꐨZ99Z Ir9F4[@lA߄n;jniQk-=?V """"ڻ QRaL%FX@ x}&A$aK,sX,jaiiIe/].6R"R)&m-pY0?l("\l Z9[aoUfjtzcADc d|&Ŕfjt<#Ir.yzfwGc |#ͱiz=MF>H!L&@ ;{ Ph~5 ctl'|4Y [0݊63fAوfGHR\yLtchp9b(T:MM $z<=,bG:-JxlAF1QŹImCM͂р! \ca5L$BVSѱdѨib%5WK&\;@ /!9 8̝9'Ab)O2u[n]nv7àoZw͂&=̂gr.qy`ȢHlCC?{+B!&$IUUf# K2^6O. O?)\C0;lٺkgkZ[޹̓#CpYHa4 jjCЭ&,IK@r+-Piӳ$5wrz}eF9}JcL,,q_@4SaA;k5 !xƆ9A|:z3̫X," >9$tiwrcɏ)$kA҈iR$5,V*&gl|1m*Zb6&N"k;HR9_nrC,P)GSt,`Dw^~KDDDDDz?XNd&R N9NNK6ޙO.kǎJ>D" ɤ-UkpS3<9|R,L&drfL3Lshw{' I%'X 0U5:}{bR\Ir<@DuSDL& <B ӜE1"UHq)0K+tYq _NBdqs 0WAg&ðX؄GJU$V ՆD".ͱ3+ؿws FQ6j6nj6 <{7h×xo]Ha4 k&JWK.>>&MF#4ܯYҚ_;?W9LDDk(,YD$.&`p~r3Icj>:Ӝ L%,#قCFf{+BuAɉ>&P(Hlt(zwbnt|XN]ֲgO혟B:瑧р$˫kFa׬F\U6ˆ}"8YҁLi.}M5V|+"";ufzt: tz hjjXBxCdrP, ;Km-=x<=8rdyMFGitΝM"Js.!"""""*%0/0GV\0Ir|`)70 cQ.5Rp`aa^~r_<;5HB0a2 5Fa9huZӏ+# y?| tFyf2$0/|>_4lzыAb0$;5SW^ \n`JSSfs{}d2y :t:l6Sn|>n|_Y>k9w[qYnv6u,Q {ӘLپ}14tMD -2>3aE0A%np+8.B(Nh4m·߯fbÑxJ6D"Q`LL$鹙ǰYm ,xe Nk%ER3 ,EI(:l6NrRdJ 6ם("dQLP%69RM\j!?2yil'-g"""""RT:ɹH9Y*طo?ˉDy 5gR3- E,\o醾g I[T0::\L&NEldRMεq`Жۭz0yQ560-\dPHf3-XZZB.v/].dXs!AwW#d4 Ji^;=&o@:=hǟoD'qLT6 &6pkxv7 ؘLUWTT5jKk>rZΦF'j&Eo`ghHFGBfC( IDATwMMM qfFgQNd2XZZ(P(/EMε!f68qPDDDDD)50ZMD_|̍4:Jvg?cGK~"Chvjuص)kB{g 1?3П GtAFT@MZ Ox]^KU;>T\]5OV|&5Wv@V=nz=qrwKR}q84|A \P(@E$rDQ]lrp\D8.R`6FgK9ٙ &f"eVÞ$y-[7u?x_/+ cDDT7N TMljS[Zg,wGwM2>lTKZ66>Y; 6K>f*baUb$f~s_2DP(NQ(Tt>n|_'''0:z ǽq6|@DDDDfet^.61UQAGF27n ɂ `0 H2o׻v_.C4ta~Z-+\7ܺ~kǟw{4"ZBss3 #DXQNqK@ƦfoxO LkWܓ#֎"*R-EGc`zLNN*}a'USͶɽ bF(3;)\E7: -ۭlt&""""O4//"OY>x}4f{+BT~ N I>/aAEvӒ'cGe,@I^hV]{lm_~e?DBLE LctK{\ f 65SMS=D&S3Zq" .x}, ޟWYٳy Tʓ¼$fs8|r$L&W8~Rñw+֍aoAw%W4Fkk;H k I65!ܦ]fa+3n jMͤjҚOw_>zhI,8#O ޲2MF;w+դ"ձ陹?J٣Dqptq+8%阢TVRl6"У_ޓ&ד) -`rr<99 Pk5:w-nљHqX `sr#3)Kg^;)}dQD%)~5e $f#ɠX,J2/?{d| \{^ !=1vQfX4phNݓIvN& `po \njhj1Af+f!7X%65JҚ_;?WZf@:.G>_$X,L4ƦنKҏ{y65(.655T4>rYd2;gP, idrj]q ٖXO`j>&K&""""RD\#f,yˍ˥, QE~ǛoXҥjZX6bҬ\+ؿw,=J06WdΟAߞ}hWv7{ O?9SJ2^XD"GKM20BU LP^Y%65SIk~0 >O/},?ΔfW> Z|?)."?ihy>t_̩E"`!Hv::?SjnNEyr9sWn'099$g9N8."q)p7AH0hIΥgM`d~]vor(&bj>(lYfƱʙҬJna6[\.+x×wlA: :7@'ѻm# #H~ߎ<{禀Uښ9UΠL-`_X7@0 "x힝K_ xTw)ͤlj&EՔ<6>AAZ&< *dsf"j |Zmӆ~GLg;Km\1`vx.W+"@Դ񹣣}}//˗aܸ1[nx5VsWrE(7=|?DDDD0}Y:;zwHb&"*pr4$OS`ly NaKR"EXƙB!C߆V6(ʒ\s%/`iiIzU|$" MͤҚş뛘eR3I+ͱDkx wjjick?`cFv\|\QL7?o*P(FLu'>',.." axQ6+|bUc`Т _nenҹrr)Hf > - CDkJ&(W^9)ۼLfh4ƷZmHP,%'hADh,ɴ@CsH|Sd<{× H2^" ?DjfY9 F# Y)ͤlj&P[Z+0up9YfX̵~x N>hDt?ßAID _gfU bA  F_G 0 L~Tg̈́v ۭLu&"""UO&uz>|(DnDlS?F8m^r'j4lvDaI[L.ax |_E, ( xsxH2^G2:eJTM͝nfR65{*^ş:}n7D>_P|==DPF`ҕ:wMas3i7ǃh4h, %[czv^Ҵf#u. N2+K/}Z5Q(bPzV5!\p.?@:ffY(Xnr{^8m6DDD8.O%V etӗ}ff"J N(SޑmNMMZ U677#J"&!5?|;VR:A")V=g 竳}ر[EfZ-u֣`p*2RU)J08x^jÒ/7b6%5yD5zVjڭm5{6|{$W$cU![Ss8›oǎ}~H$LTJs.?MF <<|/glTg"""P,@0PLD8Zڄlh^zwb0D$QniWOBSͫ --vJ6O.ò7Kd2A<"xvakysw xxNg+$,NWM.1Õxj,eMͤD/c9kfu(3dJ%-&X:^㭷 }}fnaaMDqފCx…swGY(yTs)љDDD^t\J`f:x}Xn^zvoeaHVhxÿs;6'F@j!K2CpX# sU-6:SJ2(d~rن9GJT;Y{s3elj&+?SIqLJ͍.Ň\MͤwW Pj=eWNĉ&V0QL#B!D×t |33,<(չ Wr〫M`Z˓s VϷܼ\"] N7,'қ,--Py L]t"k5?3V%0|>WmqكtE՜c;6b ; „z4!E2vMS'wҰeRz4iDu,TFJĦfR;i'VMviDgh9AF_; s3|79ƛoǎ}W065It\Xʍ/x5mcx.^KJ^N ^6_*J09\X2 DTOfgg##{礄SV قD".xH{Έ0Lj6=F>C>V|>8}Cņ#CpYIK&kt`7Xv#q|%[Qí>SINZ70ʤʗTgfyFᎃOȳ! ,|~n'e ; llVB"Z.?@`9eT`9y2åfvK9dԱ`DDD`rc`3ճBx< '+'eNGs2X6,--P+-ybp$6WE$q؝d ܼuJ$hi @T!N/Z6'Xh 5I#M>R265ZcB2}ԔM+#QAܝm }-V |nE S[^'va2oxAMD\=6:W{n lv&"R#D)6/!z, յy ^ 'KQL>Ep`aa^~r_<;7J06 S!i<zͯ:z60Q* sT JC AY@ FQ%Vp ӳs,"F/%l$5Gcq \|D"Ƀ657{ϭ*bQ0"-jl鴈z[mrtlj&5PGNuvqJ@iz'{=kbr dP8} {Ӯh=ݛlhh,Νn~~|]o>߃(0Hk5:x< ׎lv&""O!fK`r.PL|S^o_i9b0D֓ҜJKp8$|4 ZZ슬D&3-YH/?{doXD4QY=cѰ쵽9\iշk*ƴf"6~<:ۜ=q[5AgΨƯSH_ ttbɔ:Dbn\z=} E1OnO5g{ݟcHbF{YLDDJ0V IDAT9@8."Mk߾vs+|UѲ4sU& Mj!fΏ\{ds"dx&-릛Az 'km0Z[yPXC:hd! kڮ晹inH(j n9R65u,2>?1T;>lf DKVX7?S8 OD$5:OOF p"\dTDD$p\D(B )72O% fbP:;܊e{׎DD`Ji'KQLUe> @El`ii \V/]A_,ND--.ԬfL&L& ͻDJc,7[j SR+N  Nso U4ᅥ}oЬh`;UQ,,K6/?ǎo[gsH$any3_>/RjnB4ǿw.}Hʦ济LjGtO؞͉9\EJݮ.^fR65ڜ z3N.C{^V)=3"58wG;>×T6?Wgd2q#Ԁғ[pht^\\D p.?gR5;fE`3Q(%-"q0R<,N0-z000έv1}HLi>{}: F FVǭ{ds4ܼ+zOGqYnW5PJhN:ΦFKi~9qˑZT%y<]/z?F&5Cy65Tj=l.t?ovsG$"RłAM~u\xRF]mVZr³Ӷo""Rp\D(\jdK@p9Fe"H&D^WNUՅX6RK(w pw SiXD8C˱߉ǖ [ј/PcZj<_;5\jslHWq+8)Ox[ԄMͤF/c9Gwݡ̤t:ͽ*x~kc|7vK/5رr#TISE MY9331<|dKT;S L'p)2 Q _NMɂ?ɗSܚTLD,SJKɉEjUb6hXKmfHNj'eFtqּ>Q!}Cvܞ4z[mS>fR65Ik>5Il-6a,\ z==;U' [xz1~M'X"L)%^|q{HvFY:05uC`ЮJundԱhDDpor8.E۷nVx1}HaBʠaIbsh4p8h^܌T*L&#x.ۜÑ(d29|$kٱ;y`o]^\dl5Ħf%nu{]g+лB,UӔ'rˑꎻ,Q08;ͪd%=BAeH},fAv65ȴ~Iv<{Iw/O6CeT azv9,V&FLzpLpz0unhDpmZD).7NFf/)Y.LT*71~wj2 Nꚶ177+xg?cG˷ds64<\?[]^<׻g%*5/jl1d66WʠWO_:-3j+7SKTlcX-lj+MhD};Dq&_Jm~?Ϸ,7:^9i,7nj"ӝ6' FDVJ].%-'L]n`f^oٹnU}:A ;DMb NjC"dy\:'Bp$IXu{38usXqػ dZLx~Šcm;{#-24j4[驷Ψj[ N^FjĦfRݩOQ튝\C#E,.9~d93V۟K/5>cǾ č"!^"rk| bf6S|S \ L Zt[VZLpcr.T:@0RN]K@0Q۷>.tvn-'0[,B H&5Ogfs<,-- QKW![`XD<(JX?|'3[82t{wK2L&\.$qdYls]jhYtZxˋ/unfn\P۴OpˑZTf4"㉔ O?[IdxgϾcǾ#GrHDӱDx˩+ OuYꋘ#Ix^qdԭjz&"Z˩tS ۷|QVf""'۷oᅥW^9p8Td2bQ ƺHkh4hi#^dl6\~R9'Iجw?hNf壇w!\pp%&xc=S伜m8Z-/OO)ΔfR365Ik~6wwg;7T/"_lz#"mzxM )?=Nױw7 QzXsᅫ@`" VJ;;m6犤gѣ"BSioE۽^o CD@ ?VȜH&yAh 7֊ 0 dif }e[X," ~?̧f撝<رc)ZjV|ϩyϴoX>f.] \ŭڦ}[Ԍz Nj.N|/l;Q}F,L2,ryC>.;U|@)y\/75L0&Cj7TMe*[=ufUg:ʩ3˭:y{`fvfI, ؘشe2eY%la$ Ԓ流–OwK߃@ [gCC]k<%3y#|~u]n Of[$وmnZؘ՚LNFIJ-/U(,zuAv|+*JǥNJP3) _m(.m¬,1ejt'GjG~ 6dFnN$;2Vv)|#ѰP:RHznF`C`S|D%%F"ZZr>T2tUx޾p bsTt|:/5EΑ ӈM*`x4g|I٩UˑQbIa"RϋUh(,,m{ ޕfAQ .|o3WEeE٢{t,D3ڞu~^RfTV!H 5Sy&:J%6Xӣ1%4esQU[*ƃ(<# ISgRƣ9vXL;`O 5Sۻfs']˪]Q^B5;%???kuxč+,!ጚ7k|hk> /&TtTwpEvX&`Fv&J<˴e uu ""JŁf^H8,vq˶zs^^>j5$l:a(OJ{ЂA8 C_\v=+)Y?RP~ :TV}Ȥx F yBv'n9ӎKW\r)jLA4WhnܐkLR3),mX Pk 0CCz[lE}:s|>h4vQ<vTwZ{as}m JtjԨ-aQ2E1LDD`ȑؿgffZ F<.Bvɮ9~~7Cͼ~NɴMX*9uaj͈*ȱJk)A}%Gf(`l>@1;y -(Ӫ~éT>F$W!Qĕk\ޓg~g@ImmGKVVogllf""-vZ{`jsY,<3<3Q^vyџ!^ v7nYY93Q2uu]q쌙-/WA"|"FGݒL5 65nHJ{gVkCp?i:󵞛8t8ܣcI~8," *8jb8IPSyLV- `G+u5 \rIjLI4v_?:9I~]a2;MѠg'Ɍ|}q5#wᩧƍ؜}222+Q 5f=ΰsxpyeE09הDf" /[9e/FׯVex8{ۅ1ti7k4Z~â$| kVAI|zGK\߰/z>ՙݣ gu9,WA~M#Xa='N H!4(v.=$ 5S[\!הCu) 5젌>ȃLۦ{n23776nBKV͵YSpGR 4mh 1\>N3P+@M6v.9.Oã #wax4;&UVPYYhP_߀ 3Q*s&''vhh!ɦsعq F~~^޶;v wlYQTjEh%cL/-/cM&:38h~P0$t\4-|>4znFÚUmiTV]TQdp?iդ1>) C%wP<0fWִ^G/W%q{pFi (0LIl}fs~6k@sӛÞ $3 HQaf\8tO8tOEKVׯ ΢ݻCJ@D ;St2.7ը3Xՙ>;fsy,q&LCZm1DD$KvOȑ<JttKVBVV#OdzR6^\GHNuu~V_?@n.N}MO6K>w_|\KCJq].9DL.=PHfO7?y%$/aQL7MώPdW?GǗ]l\xIG#7ekN'tbj.|""Z,l@WpEvX 6461u^.jʋP_[hegNLPYiWuyDDDrz~'p vH+ܜN%D1hy)i}~<,_ߎyx{ܸ!}3MNN '[Y 1LRIVvg/Ex",vܾs׭ו}{6ʵ2)c ml}v_?n XH3v4&FtwJfM bޟ؆g~~^nvܣ޼>?.v_MD)GqQhllƍ؜Q׈2J3-vZ{$җ%U^3P+@M6z1 GC1 )5 -N ""RHEQ3"fߏ" ! I2+-XY[ SEyH4Ь/.k+ug ONfᰈ|Jw~-9z my/lߖeb‡4#-?Oɦ¢N0KϏcXcX6iƃpڝ\K$`[8qҺ ڹQ&c2 OTJODsㆤU$eaМHvdļ0& IDATt̗:A*Weez3f\a?~ǏׯWyŻ YtDD4ty7޸} Zp&U#iE.;wN)mܸ ZвTŪDDtv^@W:u`PwAVC#7WXF4ŕ.^5j >_ќ4;46ó[ZH6l$2Ԝy{2)FqEXu1>4'*9vPPi]:t 5S$ór:lQ -cQ7>ٳ_dX!@ @Q999M;''z\w%(e>/@s~~'TQԾOuU+mX =t";M=lFJa4-P_6ǪDDtvNWcΦ^ھLMMva|܇b=/WI2]NP()iev|SETۗhh~‚Oz5xy _?䦴GF188}cf% bpfD_"4n ku8ҕN 콂`ңlP3e A{6;p\wpJwWW!Qd'y쾊+-Yۿ@G)|r gͼ5<lfz,%]]]ںmKX,7XY25 0s~F2vB̑>7˖رG)9R *N(9F"rrr^nn.4-<*Zox"GVO?Qj쾊CH(s*PYQpUD\+)Ԣf%敨(b+색T0-y}y}<" g;J|GlӂC͔U`Ji3hnu~` yPFD >Ǜ@hiيYnrrNuA099) DDWw0+B)-sfT]6"5s"mYbظq~+wGw8| ۏ+FOϋq?t:= VQ@4!+-_ F `l]6 \W5i,:\͏mNg{q n\j 5UhXR}} 3X|ᘝ4W8~8Қ:e)pR) C8t8^|o!c(BR#(&SSSIE "N>^x掎SXndm_A?~@zB0l2DD$vhb'kJ57EMykK!]LY0*+MBsh庺j""9hB֏q&&6֭Suu xw[ۏȑSSSp]X㿎X\\wxiv|~<,_ߎk-7;fxMdOuڂgFyg"nݲ֭15ZWPQ^)0H 611{n~Cw Iq)Oӎ(N k e)lNWhn܀+I}I 2&ae.$ASEmʄJ2`4O0ϟ(:sii'c 7[,'psDB###Ʊr媄.6d|Fՙ"U# p8>ĂAH9Rٹ y+1ϭMRW׀*7DC U}'""b^0sTUں [8p#X=P(sEE:h4U2GAA!5Ƒ?G\vhXjQdDyxmL:?ZMٯg>!g(/77B`0 7BJuɉ 2DӒpڝxaj>@fݣ#+ٯs lowV{P3:z?O2nA 6.(BBv>Dz'Gq/ڭ( W~ml)lȨGS.@cc3lي _ՋioS}:/0<||G=7{ 9766GCR XzPSS N'""ʼn0+yf.[l?ljN=+\_[kǃhp9b8mܸi Zm1DDDK?+E(qΎc.X=ؿCTo`0 //0=R`bb>?`s o`HVk$ɵ 5/9W^nJ~sE $=3Ԝ9o('z0ʫ*f=dq{2#qJ'zJk? mNYIl}fsR)mv NtO*9K׋R#Ljv8eVkX7``Y\\suYLo\s'R韉h^3mhhm݆7x\5`_㭷|Ç>>99wPPPb}LUsrrv#,Eyxa6y}!(X{29Y¢Y7k ʀS_r 5;y]M 4{ңlP3ew1]Y1e񎵟AsㆤUoVy'+d>m.v_=h`]B寰jE ^<Ŭ.O= l*yUd*((Ν/b݉S\r Cw󡦦jMDDuu hm}age 64ƎPUV{kرcZC?99r]T7oÇb߾dn# @/|caa!}i@3Dyx{ܸAy_߰]ʪψiŬ]=PC?K,TcԹJk^ArQ6b F=WJ=w=PB픘(&<xm,_K;~~="juZZm;Ҕr]ucc31<|X}/]9j\""* ;[,7p Me"""07W^o0xJ7ގc.tu]?{tl\PK\Y/`jhn14O^IhO?)B qGx5s؂рsEEH A/&yBAL/MƗ+ۻ\zj&lUJ. X Crq'<FYĈ+Wcxэ0 %!TVv~5&'R扉75mƾ})" ٗ\977EE:hf`RA?=h3ek-2苋n#Ƀ3}xVztzPbt}έY_8>CK@~y$?:*{(1LpRI >t~ped (5>?}^̋׏߾?'۲Q&R_?GwEtww+ 9766Gl]u36aٲeL""6iHjV -lE}:(++SOmAii/W$sbn݆;v\y.ϗ7x#ݧ֜ho]ϧl47nHyG Bmp*/G1Q 3JkLP3={N) >~͍V2SSSE*͘,Fhp 3h{v Fl4*6""LU0U <[,7`(JJ0Kﭸds۲e90 LDD$ ho?s*+Mhm}w Jk?IZL@ HfF"ݢUh|J z<1,V9 %hm)/0f(ѱFźbG!!t_G &&&dNu~~, {. CwTl+>naj& Q]TJ=һCI>˞f9 'jrUjhh8ށ bs۱s #2Yg.-RB>Fc)JK˰l2vQ:~n1 L {PŰ*3Q"U;;/ȶZD;vB]]CΧ9摤oD{C~Up}>/ 0>vnn.vn߆< -T9@K?>7eZaF*UY݀GV7O##t`isp!gJaWP+M)ko0YTy &U*۝v|^x^F3sw@P3Q կUJ. Xœˮm4Y5;HˍHV][.?y7Ġ?0K%7|ۅFVl8/g:sŊBwO2BDD$HU禦ͳ[ՙI.\ˋQCӱ*3QbN~?mj355m'pA͓{wEE:/.]S>/ITQ^8Ou] /lnVwue: u\ :ﰃbPy x<]1(lj p8dY}?^0KQSSuKF:υł!fi5?؅m0Uy;v98!>WV}06A @Ic$jyyyBx hyI|~uOLh˻5i] ??/*ɤhX=08h(0QZX;'ApN cv4f[\} V=:c'`ع 6glf^VUxJHZz[ܯ/1uXY[l.(:/_{5Uڞ OȩعEmW6<|og}hX|x., ==Y98:;DgxソFAShjڌ 9%Ysk6c^V tu]c:LT_55+`4F+1'jٲ Ve&""Chhjڌmhm}Zm7`5GhZƛva߾p䈼KᰈAtz^_ALMMI^W[`,Js$t?:wo~ LNzzn*DѢjj:,"FFE ?S:F+~k S]6919> ch*wDqFq|'%;3Ϙ7cCJ%,%9-V;^7:.\[SǛYܸ͍p\'vbӿ'uHZzZmxl4h]Źg:*|8uNL\bș(u߿3EBV{՝tfs-jjV_Giiz;f$tAr0996ڵS^&S5v؅dOMMv! X@nn.t.s˿ع`aX3" LWkNEYRFTyPT0W$ 暕}~$=} 1`#qwFK5a ZM>/$ev} 5!>W~6!ZD1N|j<0cӉI!.>A6/z]#ƘN=d3yG=iKnk*bW%FTq޹EbK.bkː3L,tZ{`܈NjD`6@MM-ҤNXDDDJz./̬Դ&Slˣh(v&ط#>|ͯl`|܏P(aD"G(O>m{&|~<,_ߎur 4,"pth #Tg%N{`BU*PƥvO`C` jI𕛱1/C2FAώAg\U֬=7XGǖо~_fYs)߂Bn(466t%H%gǐ35eYZ%%F) 0d0PQQFp IDAT 4gMhnތu'Hc.>}Áɦ?&''tX %KT{jF@_CeEY\A ??B- gG熒+*Ls_`96&pNbu{՜uuWyhGF!!aAPn޶mKL,7-vNj|5؝8v8vnKJ'=`e7P36j6Wp\!p `(Ue(13"<>$rsqaˀL gWc~M<橩oIP$ Y sԢK R[Ҳtȹ3tIqX,\_߰`5I"""J>WRb֡f Rfc9s8;iK:5GhZ;رcu# B/Ann.tB/bgznFد9zY6Tb{߯:>r,Jo3_ߺS;v{|#gǜu*GzgϞuz3Un{~ mp82($h>!S7/p=Oj3bv./]՚g(h4H@ pX긢g'-5A'N9yY`J3Μ(#tA'aE7 W/!o/ha 5=a$0~|6葧Z*>b5YH!_R + P\mX6hVp*Ouv_šN:\Le6le9 .]x/$Ő3dSyf9RYN 3Qc9y*+Ms0MMa2USR ՚gzWc.Ntt9NdӶʵ|g}C;<_>/X߰FfnD2 4%CAP3l_7wppt5hJs&Ukvzp5P$'YfJ۳}йזԸ!Jg-n}}.%}s\'Μrd%!g"""zXY !#gh40VQVa9y5 eצwjV=o~_pȣ*BAA!"xҍxU*a4}NHى/ˤ(?ep8:( KpH<P3ý{DǮ\ >GBZZMtd}fh Fsz\.,fjj 999$(qbmd%ií>zn.Spw~_}dSu; `n9Ry:|msWX,=Z "ׯEM ͵NZ:OQv`9y4-6u[VWb] ln`#>EX\嘘fPQ ŋ|rDLb"hX_C͔8Ķ{NKo*B*MҒR|q`@iWl\Dc!6j6W>{rë=TdOW@]Q&'>8[}By?j4Ik_H +6|ߒ[b|\`Q>My;|-466+JK(/IJe˸"Qb9y"!榦hn<3Ứ1˦=ZoZ[awdQ9o}KiF -75zjcVTVc'v_?7DJ~כ(5VWa}Hxy1:;h @` 5- >0_!f'<=W=%=Yu~>LsΦr/jj>ao cB0؃-)O)J$gRv-DZ#+ OcڶV8gFs0LDD$_}O)&ԬR-GMM-4I!(]bNCTxFejhjڌ?MoFi^nYa\۱c˻WĶ03eXRfZ~{_\U'z8bbf7kUZhFܳBznfu¢J́`PmF c>u/bH؆^ןz dNy?dnnȹ3rJCDDDrA|޴www'eDDiY!f9T{ 1g)x<t+"ǪR;z _DJ.<-t )XOF=#ioé'u k1LD`l6W#!Y2JiPWs%R 8fUE`|CHQëB.O3Ty{hkll_*93䜘BkZ-;(>8erPSS+ Q,bN ۭ1IYol#AUm(ى/ݧ.SbcmAWENN=~̏ncn C "FFsCG u:!gU(.6܄;vBW=WrmJ3ђ1L^2Ұf֬}ЉYR*$ OHPC)QUYK{np62 -bUSS7| Fc)WBJ(r\kr&"">p9v_ejVr*,_BDDg9y8ꔴۗQMbUCbR-w~y*E >™sqC6m2џ5+}(0nmdCR5v5܄|5*?BAgx)荳s]ΨN.!%cEן;`$Zb Quc(W 6N IREHO F;/_ŕ=Xi =2?N a V0/鹕ep )ϟ{n;v~+Cejaș( Prd/55f DD 1'CMPղokj޽ԩ P̯ٹY[|>?4B>?znp)ryTy(|3 TQQnxq:}\W|i.%`+{CV\}sЉa#|q3IK-1ّ Y)_E1 ׷avڨ/.JN=?H N !g""">,{;*PsUUG!""c9bNIٷ)" LWmoC{ "*MK-O+ 7MikW ~k=7n B3w)T"'' u1iFYjj_c^i^iG x? X ||)"ANbtzSy弪Θw=ډbP3Q|^nPU${}>ˍн(S9$Y&O!mO"mᜃj\nM)"T55xͷ4f'CŐ3Q|>(Cww'uٲTUUC7p ""a9bN@`\mx<;ں ޽ҥY>}g]=֬Zoa11/R*}v";Q?#maHj.S֩E U^Wv:*(v.A0LAտKFzUU%HeU $$ѐs$mtr/eρJ<X^1{dlY P SEY,çzwФX 9'CDDDKSعŴe9XzbQc9bXGR }}þ}#㗓 -7=91h4)ՙ)PsE w\ n/+7^.m1Lw1]]Th~ zìDBY3U+jp_1Jp2ka;GH>͙CIE)Dcyj~͍2?~mm3b^JJXec9r&""Yرhk~o`dry?,2C$Fȶƛhjڌ{؛$B|o3},U]~*̪$"NȊJN$D_NLNd[:W=Wu{6ʭ(v 5IlfsqxܫrɖzTz|<*ʰzVt Db!1 u~b(7Wm˻5x_lΜ{6T!Cs]]L*veÇw*+GwElM{2LDD<6e9ybV߯v|^ņi3{SNd:R-=%tWc`N;L41lRwx"~q{s ׭pvs*T;IٓJ\=O nDa(`lNFB}0?<("$1I{I%E/Pêft*܉HEfJ۷ᓣ'RmVV]TQXSSEʫ C57\YiUə!g""4vXm?,@3ؓ!aRA)jolZ67|52 j䕊COi  1Muv,!ܮFSV(a[7ܣn paw:0ɜz]W:\ehr1L$Q+aJsCo#'[Io3G*/erb@;;ET<ьg("LO= v~f9rN.Î#G>r&"Ls|sI(bN.)|3)+x]RbУaͪ_755*ʐ#I[NNpc QSr%j.OW҉n\/xPйD_2eذyI_, tDw8?p 92|W_ 2r1L A%{@)vΐIWQ^fd$<3̡`,|:!Rᥝq*:/_M|U?~mm>͵,Ðsr1LDDbdc5f(bN.3(VF^W׀?޽)q]#nܼW9,EѐPpS\ ZF&&&jVw4O= mKb~/|p?>+*^6WŖqwP3l~D$K*'! %zvCF~ iq֬!aI޻ĠwMA_,`R/ju~ӟ%2[ b9r&""%;pCه,X~]Rb*(a 1'C%cy3& Z{ؿ#Zqt0`:?9Ţ>8!nrl P 4 *ַ4+*4N>-˂r#Q~%f"$d{P0BM!1)I).9Uj ݧ@H܈;6 6 :c>aTQאָ_R:V!tM.o$Ɛsr1LDDJrAEO5B!"a9b&9_**0nJ<檾WqS_m8Oo[rybb_DYE>~ ݗ?Mk4QP`ANNoyDY H@,VI j?&aQ0LX/$1/q@jd$K,FhKs:HDu[ Wq9!@s*: TWa߾2* ^/{[dYH-x?}K Y$3X 1\ +bP$|f9rբG"Q t.q4HyO >9Xz;4ݿeeeIPjl/q,{sk!J H=6[Y#c5H&&&008NYrR 4?S *Qb0,CDD Z<…sع9^+!QCb1L56a8) `WС?F"Q|~;ފ\C#0l k):]V+rs,ZXr8F^^HWmܔoFQˉVhjqZ,/e-(qj&J0YnEkcbI>PL (\eANN^KVPx$Nɠ0м]tET=ؾiN`B!!gr&"d٥9;[ 1'8qt7A^]""ZCL9Q3`0ocdzp86~Cs% B LtykKI{ 0((ph!78wZil2þޡծ4_]jHeQb1L$Wk&{{ug/ UۭYKa@pbkaRƪNljSwci~X{-U}7o%,_ODaY,(Dwi6vk%2CL1m^ɢPFɤ^'{vij_ǿ7-)t_4icEaarrY( EIv}˷L9ߌL&3>+Dn "_t_XѲ jy-vi&f"q^@}O?ى\-^08P/F6y IDAT\/pU⿵HVDScRh~fF h5=)=9U3n^`9q 9;`6Y$""hڥh̏o08"d+ּz#C0Lɤ(!M; bɬdcApAMͦ%7︎ahx$)dwf135Êfƚ'>?k_AHd jrm=`}zZ b%M_]zh>4eY GEDȲgf+ Zw$ճ(\eAN&ODl2%eԜnZb]eaS+ 4OGhiCL975rF'g2ۡC#lCn;]^^BQUukX,LDFb!f d\~JKעg?a6//oIk jUᢻ3ҌYDW !%ك^L E{8@ZGK!xO.g?q,v]K:H:eL$CDɲf+;`QPQNbcuUUcpW"XDԼϮSs޴m?Ӥ*\^^W_F#7f"Hnw>\-3Q;y.͒$ں5gbȄ(xB?2 CD+LS<܊44f͑HΧ. {KʸzV+z>=Yp85t+_&+#20`(E3,JXYwV614nđ#x=p41yT<dORc4cժB^Mzᰢq&qpfzX":5Ohݿ-I=׹P3`RﯱUK< ,'rS:/F"~<13܆JDWʠg/O1Мr!g" KwYYY$#BQ!+3e1,NII)jk7n3^4؃`F?l6㭷ZpߠUcXWQu?;8"!]c $I$:#2:pq>]gOB}E⏳꯴V!˞Fab( dV -WW,i܌TjNDWdl}q"'E ꨜ>~ f"J$ř+tnEm&Hݥy$(!aݚO8W_т'I<!"Rř 1OWZE!HDT dt 676\nI~ t|"{0,r xhvw`TuiRpXAx,嬯X?CÉ 5w~sD|ޕHCN:n$~ ݗ?M:|)Kx0[w;"ZCβ|~y2(!i 9lD]WljHDwi͕;ݚ.[3V bvXaH~?JKX `W5Տ5ǟ`=IYјU ULUdgvДk,7ƹ\l/|+^F^!F1kmcYtӟH߆ ott4KSݘ֫f,+ʻJ3?G3?&WQ1L/A{M5?Ydxt:Cj _=M| x9k` &`M5XVv [J/4-M ױv^gCbL9>| 8rEҥyn.W 7h4r "J.]3f"\(QXhe!`6[-l.,,B~'ʎ4;``D澞5 dbp4yڍԙXQ=Yb(d3lpH/9 q-lʇC"auKQ`_qt=.Y||6dt_xNr߿}$!7,+~XB"bY ϋVM>m¾ӹ `6Y$"eRS)5+J}>v|z?"dzo!c( 5%XmF0111Wjh.֙ˍD ,e_ʲu(Du levDDf0Q`@vvLH~ xqWv'|.H0Ű+g\gșhq[7 [~vnُNw ,IFY5?p"Y>3yY`h~ˋKxC ]FhGVV֢;(GYDD:ղ2%;5,,vE"ь^^^_Qb'g1>}pZLέ`ͮ 7Lr3dEY؉A @wEtta9b&J Yڱ[|f3@ZcN4Qib(uj&J VX ""R fF 8?DIƐS!gM@MFmӹ v{% DDɎ"CzCa4#cb"&d.Νϡx 5Q 1O7y\4d:Qjbz=##ּX 6X=,Qj1Ll5kVDط%(/͛7X Ðs|^/%f[o!t<}y"58q%nyD[vtw_D0`QVG`cgy)l&""e J=TB=6[._g5H $ɈW_l Cʼn`Y .W nDm&8[Q["";yf4Oؘh4*dWq|'6o(0L`HS::Π{eQVx56=3 yS1LDD*,{YcH]eH h&"J>9lӹ uu`W@D9b4LBk4w]ĉ3B`f"҄.v +TTT {1?% WK`3 YH%j&RY\~ Ҿ}@&%nb!CΉpj2gtqf6"R#GZv]N7@ <0p'NΝFGG*}8K. )B̕U׫QU ,JDI788P20LDD*dJ"R Tx`&Ɉ(%H;B!7CΉ َv@II6nlfH5.FcL>۷!F# 7"R֌n`EY!f X,XRFQˆF#-DDb{e32CD*#˞al/DDlO>I":0BDasoo@KyfWLDJ.;BpdR!77cca!WN8ݻ L&7"J@ 3TTՊ , DAh$-_gejl<@ 񜈈(I:eûjTf"eOVc?d5(Y /IR^^K,%ԃ!Γݜr^*nw\@MF8PW v{% DDI‘#-–|D"cw9oū122P3%Ewx7fYI2 u3B`2af7Xcccij^ƃx=,%"d2CD*>o @KADDW`>ҍ1l C+Ӆ.dwp݄ҵ, .YYYIy-:dD(4*lׂ nw.]3CZgTf 6K"W?)Jhe2x(Yese RTJ=6[DD$$?hd14;,͋! hkkE[xvf3DD ފkDʂ$%\@PnͽGbyQBEh 1Afł"HĢ~vk^`eAHu_n~]/amIv}~Mo|赑juʲuHj&R1Yle'%'k";;{ֿW ۜd"c9 0LDK`ȹR<| h >}pZ55QW N6,-[c7'K󔬬,IĉxadďB+7$"Zx"Wn3tٰXV¢f 0ԼBf=f[ +Iy(] ;$qa-^ܾ璈^p͛bYr"R/o/4-8֖b3ɢ+0^kT3Ȋ+Vb=s^L""S]]:@(ə!BOO߄dFm&8[Q[ kY "ZlR&5+ Y~U? YhQ>\tg{3ñGU#|&;2[d&(aDcJ470ج%k 0\ZZ)EDjH|`χVC͍έHj&R9Y le{? VU;IS帵XL184%(lKR$я ZI)o~y"E*+z "2s{{00pEZ`0vtvJJJtn[o]dJ3L [G ,% L- ,t, YSB^hjz-c^sU.{%k I"x罣ǴzS=sԍf" eOVvNu~wTRڳ.KDelχ,?  ;w>lj "Er޽{޽33C΋yrjlӹ uu`W@D8yNzCnJ_ ^h4*dw? 2},2WCS7A.Af"$CC 5'Ȏ"IY_ڵ(y.[u9v &tr2gHj&Ҏ3؆c3HD4lwǟ;!) '! B!x5ĻO9^pX==]dӹ~m0,QjnۥhW4{G}~6nTDåK!橧fM1;U0wVhQ7E$( vҥy=pU&&b1LD4[>>l?7ɲ2gHj&Y le{?r^'6p"084I8$#{iH[n޼"Q<r:38`mmhkkESk+'Di\11,Uhjae@ 8B鬨xZ'Ki*lX%D5 @8 xnw'-x}qL;v=G,:p=R=E"m`HCdjSkcw=zJD4 pXzv'""l lؾ3_{{/@4ujdFmxȹt- D.&Uf1_XN:_>Di|qƒNjzBq%{QZPs"V ~> VUׯcщ9}^m/gH;j&u- :|~8DD8w>vMzm{:=R12ʃ!ΓA,"tvDII)mlfҀAө5t:F'?1[n`Dius;/ g+I2GղnX,X,((sH "(E$I,Ff:&w=g.">>V$˞˜E"`Hcd3lp\kcU;Om~IDtN ޽W<(M(^o޼-PSN6m^iP #-–I7@H½{,Nb׮P[M1r7zCDDK544IbD+pMMa>ӎ]NDO :zL,{9DP3ɲf+;`~,ka!'{Gp8,td ,vB L&UWס./ۅ,"t PRRMNL ЎcdDVV*_{VV|㭷@ss 74" zoC̝,28pT;2/N 32~2Ԝh;vQ IDAT/ D3B˽YˆŲ ]h"(E$I,F56' Xt"H^^I=9DP3Fɲgf+ ٵk8~H"XCC8~Vzm{:HtlH:yyyNSE!PpgT8z 0:: DD3~(.^-ؼy:O.57 sk38CsBoVmL&FF–x'O+(NKJIn+STT1WWo\S n̫~(Q$[c#i7C8}#2{pǴ:_ʲHM 5i,{ZmvjmUID齣?C8 by A4d$A $)5:nQnS'&bP0bq(J86[o v:_i` Ź5vq&R]'o !zѨz|>/N<;ρ n޼1S:]6+؝a7$s?Kwc^DD fJ44@SkBO*<~ND彣DŽ_h/gHj&Ҿܕq=DqΝϮ]}^ZQC4Z73<3ݠgT9V0>>ь >>2|Bi.;>s܊7%>*utIU\\:!5LX,X,)RvvEz;z ςQ:~^mI=9DP3QeϰVq=㽣o'Җ޽'aH<:WGKcTW穐s0LkUfysܼyNI(ʌsVV$([sshh8JoЙ͚>ttAGG;>d+pT;2'bAAn@$""Q^nc!28tMݞCDg/4im{[@"J;|>||$#{&H5$)֭磏~'Ӄh4b-d'"頳8| xvCt.Fc~R^^Gnn ^G8uZ{c7)Jo wc 2O 1ohLyZs+"48.٭Y47#ĩb"J+'N o%P,{sCDiF=6[^ǵ6p8 8Df' _ /Ћf] 5SYV#3\a`0v"6[o/wsv7;`6Y H4Iͅ^Oz=z=räBGG;::%Q 6[EBmXwd𜊈(͌0Ԝ ?i+Wu,8i{:NYY$J/ 5!Yle?Ckp,`78DzzٵkBQ]]ǙR${Q2YV>J2[9 " # d*LY  MΝ/9hkkE[[+^CMF8PW v{% DCd欬,H'$lч~0>>.~vk^gx&1O}>/ p8PSS?K.*X`2d& lfIx?u_ MDp=ُVL>͞ CDi|` xj֖pH'4KbkT9ڵkQ\E1L0L?GB FGP0^h[y,@7} COOW+dII)m8oeq(m,IFdee >-dYYYy(o/1.W \LxQhl< lҜ+,gP^o^G4Nvktފwcy#E:?CMSA"HĂe~?::v [ǹB4 Ÿ8, YY$JO 51Ytle?C}hx'N[1'4iph_D: c,% 4$AۗVSBB_^8lGgg;^^gyuu`W@7uqZ+ۅ+lf]z=z:t:dee޽{3~n4[sLDK:1wtIӺ1~E`!? 3aX$ih8_a|~״Hsn|8q}`/g(}1L8|]kUUxjg4罣?|I2b߾XhzqlVe,%|A籱1BQB&TF#6oނ͛! z{< O KJJtnӹX iA00lh8;Uz a!OZ ^o@nn<ݚX 83OiH#PY9yYqjA 2[,f&[sn{r[GWO/6Xp"%{Gi%e0g(}1Ld3lЫC!"MUٹ9a(y8meHEE AQªV۷? tsryrjdm0Q4477g, 5Pmј/t"ӳy(<:E/vkKފwcbAplQꍰ*Wd&"In0ԜL?ɢ)4|?MDpL;Z YrCD@=m&awgޟ$"hm;%t_HL'-<IzzL&ӌɮΑ"^]]:޽wAo%_A_v@0@[[+Zl 8oe4 4OwAՆ~"l٢4zdgg'^YYYt:vkN?C)u> "jk7jvٹ.++ Cjjz,$RgG:QJxAf""JXl~?5'ӹ[lEggu>sOTUAq4u_.Y s&CDe/;C,ڀ%%E"RBױmiוp8XʔVt:L&Cg5;pxKnw\ NV'ut.|HW!+++%uAVVݻИDwknhx f9K- ::}`ECQQ17 u 3Qbb1h$kh8 8khx_`."R]aDz,e2,{.leNX ?ϻ[HΝ D;w>BQJ=|9e F066QbP~!\\[y|7ۅKϋVd29gzhQk㨯߯zo ~b!TuiD蠵g|?LudbA1ՍūAf""qxC1e,DE}~>,,_Sl"Rs/k״:9Df #˞m]hmC8v z9D:CCPpݻbc 5k "`(b%V;w>P(.vqE0^Ö-[!ҵ,())wС7T1fw!X, fee!;;;FnͱX B{H vo|0 . nw_#ǂ̡GUҺ1 2QrE"Q(IX$z=hk;.8,z6-'N嗰K=ÜIP3Qf 2=Ө_55E"RсfcC.FƺuYL]s,FD h4bfvq^x]<,έ 8ӹ .W˂xS:@`2D 6㬬, AQBFg5??ɏq'Z(rpqtt>2GUR1Om 2Q @ح9#l]=?~BRN ?$˞˜IP3Qeul/Zkx|:j+tB>ob!(֬)^o`!V`*`Pl2 `ll,xNdgvq^aWvvxv{%"wY0 mm0 p ecuIl.HH9]deeF4IzO>ᡔuN-~"? 4j&=Ȯ^-tt"̳(**QI 0LDDڦ(aD6H+-ݚ(Nw[Y$l 5dVu=㽣o'RrB({XdZ)1JKX4h`j"h<ۅ_禦װexg̼}qƟ-[nL8y::D$2`IՉ ܻwYYYƦ0vxPZVQ%~B֮-{(9_]2dnk;yԍGl_ˆŲ vo IDATYo""")tnEMFt Y>5Q}5|(`{e3̙$l 5Q@镫8w$gzB(KԣZ),jwx%̴P蹪*z8~W|a2΀-'8xv[l뽵`TFјI2.:Fa0$k\8`ddШ&M T1~fRd2es$#PYY0)jeC)+|vk&dQaOKxG=I"bl_N?q}<~֖p2()Dwiַإ9SBtlY yM=ZW{!/yvt6[vjBz:PJJ֦mmU]Ph$nNdy||(FFԶyqՄ~cZ캬 IyP?hf1< 8UIdnDDDZ(aDyo,&qJ<.a7[3%.V˜E"j&idV 5`?Ů "PE).^͋(Dlf~W&;vtAGG;b* L]8}NV3 ]uiڔ㪯{f!dDNNΜ;>>>/d* D4m>|dyӵ]Em&Ս>W3w #;[\zjD"D+<%͒`ysL&:lQј zZQTTě,( }p[}@R&)Plb%n5Sq*榵][iRmUV{lgk߹{sئv6~HlyfZi6YwD'^d*[< )|)$EA&'Rpkc;|ۤ'c߷dtk`DBi0jiF!Iq;:垻c6&%Ҽwszjjj2]t,ۏ>}VAP+p^o߁54¼RRſ;N9`a*]Y-,,qi__ƜC:NloMr+U7^U{;E{fHAXv-h8B!UV v;`-4>>ȑ{B/-t;qP3KzG/yf)fJ\4 9Ilz-jSm- ::;-[޽CL,D7nWN1 QkIt\ѣrFݺ Ty-,knnnk<SO}'gJ]?Լ@$ZG@ܼ]X|t(ܠ Uccs)-aY+TYIdK/ ۞YYaItZ/*LȘqutvY|4ȵn ;hF=444ӧOxADog--;o߁voaW Ȼno?zSuy=r[]]*?z}jnޮmv(kʋ b"aiMOO/߀쳺[OL_z(4xp4IEuf|0K%.赶79(Q?=3˖MfdZoo7].nN0F]&о}455u5٪ vף=jkPA6V[۱U{uȷr}7oo}S5_3 㶂/vLZpwh׮2Uz  r$naddPsYݭK˞ߦ[3;6H-vfYfjpC?cOKS;GgojM[Lw,N#ҥ@Nѥ@ jmݣ=-I$tpz詧ӧOJѭy١yi$TY<ۏ$<77{ (pXlwybn7d`&''577z'Z٥/m ඥ>ԔQ{qʀ߿NװF{;!y43hΏdz:yI-[-驢ߖ*bMڶm#s>  $ @MNNjzzr!ٟ}ǒ}t:c6 `::;e!W ܼCva4պyBa/^/9~}KP3uL$t-;ӌ?LB4 9IOqqt=L&u{-{/ҥ@NB!9N ,xûO\k疖!@ sҜ_zr]v[jР6emlpX553WSSSW? 2/Dkn57oϻݮ%9䤂 ȑ{B/%,׮Y*K/t:m!LJLX B㰤VI v\/#_c*+Ik6Hh(qe{>;D6[ւ.AKNԑ#R__r(1==w=w=vCy{[4zW*d٭:NMM-.mt+kʻ xdEE@904!AXݭP35{MˮYgaӌg&fkf è/ˎN̏_БfK3hQh|kT{qZgIh~Z[d]>}yt\ܼ]'Njk{5f\OyRyG^zUWoTEE94;;9bejl|\nS]vsViF7$(qApKtD4J 6uw}Q4ڨڷF6K=;z444 M#ymvy{^ReeHp## O1r h߾:zyK'n  k{CS`5X7ӌjv\_'{=<-ulٿEw^9v+mR]w@SSSjos_zt󪭭SkCji٩=l0WCl0WittĂm8ݚW|fƫ:}$Af#t: nPeec@F#=e.Bn(N륗_Q:0f|v\/#_c{e~G)0fpK΋CV}BK3mHAXS%+ "͌Ժ5??R4طeǁ]žߦJ˯(NyL3>l]d~Ig$R]m62$Ivw[vHf\O$" kn\h竦vLmmV4x5F[银XOT OxJjnnY}~ZvڭycReeHpX.>*a;1;;s~-[Yoeq~NB$I/<01f fa?}N?0E]^wP`\; z#Ep?jkҲӶ]b-++̌fg'NSY{jE" r!.2ÇUv 2;TYg(TZ6obdb_Ą pEOXv:K>0af" #L3aԷJzŽ?ԗ=&(rc,67o'V,D!J0E/ug;u-))'|pz璒\ner\ZXdfF{e5KҩS'~ۥ),I~_PHA:4P&''50`*1(F=5fI'V DB5i)p5ȤÒWK[[;mc&"fݯ{S`GQ@}6|IJTvpޣ۔W:55eɜy43tW%innVW\ܜ\ViiJK]r:KyLZ57믿>}R>w-1ߘ݂nK!a$ill~ lۤݻwg|ٿ>/Qb(i=>æ?lB24QHR]ZNK40(0nX1X.?FE:xq 8竦Ǘ/֩!TKNU]@C%%%7fN4??\[ZZz5ka4(-Za铖- NAfI B 3o߾ki}}V7m@yW4>1a!ۤ'|Đ}^G>/i1ŹegPpFk;bM:q⽌.szzw4ژձ  ;^7"|)Jj˖wȂ=S"1eM(2xg>I8 >S c58ӌ0[%=bK//dE9|^)$-vi?ηsߗ$m۶C۷Zȹ7 ^OOYeӍ5/mVWO>iIb[ܼVAfۥ`0}SF*ֹsR$ G-xI>/Q^hcl$BrHI v\L_$PD::;-YooY҅#K3ΧO1v١e+Zؤd2%7MƗ{Iw $ļy~: MD"),7oG~X$ԜNaY5N?~x4gMF%L3>a%uu ?=3{rL(P5`ɲmK3n-kʀԔQ{qaUyzzZZ/QtsH|>E" r3Q5z UYi*q k3?sYwujjj)h%OUP3PoNtCx4c&XP3˘faCҟu ? oy=&(pv[& ܼ#'FF)$-v#,#h߾ڷ5l9m\8T ORؘe:cDoŚ"ףSN,!5kt(ܠj (jeen/^˗e\.jn>~;_/K(h޴Vk` B,e]ؼێNw:1@*ԼXc 7FG 5cـ'CS:z׳:T4U۷T4ڨy]41MOO/[yÎSSS s5Gld^ 1HlhzzZ=UUU5ɰ} 5ic& N?}M3>l fY١t^-4C :?$PR}%޵k7ƚ| uZ[Hۏp^DbHmm$[Zccѭ2͊ŚCV4MESRZwj4oZŚ,yޞPs__z{CKazSsvm۶ÖO?r] )95?AMNNnO1{,yj/ 5h0б>of JX4W5ܮcʼnҦZض  Їݖ,7   t:)΋!DbBOOzz?oY‹U|URR2K_#|˟x?}K勉7:=t: nPeeH~ yezzZ}}]wr0V?>K-i+Jvk jdi iIj1k{KuT[˄GtinnAq߿*ji٩#Gƫcqk#dنٲ.-u]-^JJJb] !A?7:Ujnޡ]vFOףꍪfBG466jUWod>vƗ;>1q*+)2P ^z %.y1P31SQ*i?}ι?0@eYKkn*GƂ E6ȑoI~\mmpΑHĺ gplN֕V IDAT'k6nbM2;B!UWofR/ŋ&|vﶮ[oM ?mai'M@@wt$dtP^z}_+f(%Y|ԔQ{qK.c?T.׵?r&+dcHAvVsv[o`P!np8̹jMj >koea|4gMB@Vf|0K]aY {~  Uw67Xb ~?EY о}oMMM!) dXlkQT<|ꕕ]!57o|>ێvz ! c=a}LX 7_xQPH!+CkCzog|(ztZ? vk 5:ӌFӒԮc޻֖{fB;ǖ,"/v+c{,V(QkIR__xUDbe:FF vh0|r=`mۡP0AUUzL.ĉ40Яo~?}yؘvTY{Fd|>р%O ΢~IIr4OIzc_8 X*ֹ3jz} 0Q)hx^-mIRvt0C͹ 4fnwf{C_ԟ˿W>2 C[~NA8S_eR>cvvN/^Twwz422Y s?|6˯h(qo f@ѩ@Nw$ʧi=GUyK3M$Ҡ~ `M:xq~dZ4ڨ:%C]PR4 L$t-Z4MB@NfaCҟu ]rڱm ،UwbtjF>׮]ԡjd_4ڨhQO>5 zc:T*IxPRRn\uU:fc3ڶma4̸^B*+CEחJ%ա]vSu^uv]4Ohi٩c_>M[;.Ȉ^y~IMD@Ιf{W;6?b1?VjkPF2H ܘ2GG)lr:zS'?fgdPW) Sp8xp8lMzW~kjj?D6TBӡ`pG7?!|fg4;;I]xqK]=rt: j!KB̓f& &%7 5$d/??M.?d҂e^EP@^zFuܯd 2=ȣJ&Vggz{5::Rt >}=2bnn7 57oΝR7߭ F}߯P( d`__POKݜ'''opӹ_)//_OXZZvZs},aݱ7-{Jp6f@jL3>a%uu tZ#_ ?[tPHgddX. e|.$(nt:6j`ؘ$y_=/Яnv[T2??j_nJJJxt:n <.'DzmᄄRReeHphs2W"V.%r.iz)@@hz2IS8Ovs5?c_]0^~E_zP Yթy)oĒ ˠxjHĐE.{~Q͋A/ϔpi%UUjSsv}s׽TVVI*@RGfnwĉcOQ<5;;9IWg.UVV&ߟZZvf<,-^rL> k{@af@ fYèo]٥-ܭ۶1@`fZ,⶝8%-++EtR@^UYYLӼžubŧ$U!tgUU-]~i˲esm۶]m.|Uxy)\(^7"}7\~B+;>;~-;ںGG>&ʑnQ]3b<|i jwL3>a$K uӟC<8`slr(.nhٲF)p)//e}:wW[(!/|wm7o%%%rݶX*9N]|yU>[jll}5vӪ 4IH`PoK#:|́3;; v2p8,ΎwFdt} rb\cq`4Ji(qO`N?~[lŸ01\P3d3QX3vCzfF_y>6(TYRW[tO^tx=tβ!kh_z<6B cE؂֭ӹs 9 _9ͻ|>w_l>!,I _LӼ pJX c7gRuF;oEHŋxBjjjhegC͙;6>/k-݉o&^~B L3~2G-ӌ?kJwT#3r;4~OCTiaó5U|lHX" x 7NNlOcS,ִnfrGT*qUUIIJKq:ʐn b229]Ha95? 7ZSg522\dlllLccc B$ӹeD۟o`XII@" faԷJzjJys ϻХcddX?Y}_t]݊wkh(c&A灁,;lΝq8ngUU7}׾vD?lV-l.e~B**?e^{Y_R"466 Ԯ;ҲӒuJ$4R5VI%)|e)֭dV^'LKx}4M_ZUUkק_[r6|zƻotdtyVuiv˲R`0(ӡ~?/fY9۪HdsQwav] )@q0kvuR2)Ej~~Aw滺MӦo fy4Q_ϩ|E\LJoyB <7y vPYչsa*L&50p^==4mZ VG499y/z?*.H"Ƨ!f|* 2$O1@^Kz#R"6==glO^wM&mTggo^3S@# L3nߐT@>"5֫福ΤabԼ=׫[??|A?ү~{G`ox~Pw29YkG|255@`iYZ 6_^|9nٵ9 soz**ܞ@zw 5C a oI@t2Bl43VIP $K3t襗~Ev eɩ-[Յ ]x1oFAWgL~޲%ևWr F|M_Y\5?'tկz׿kmNo<ț&n7b?]ڵb@iJ-V LJo J5C%=@) BX?҅ CGXPhjjj40Яٹ\Gϧ{{Wp83,Gnim\+ "`0H1@A ԌLӔn4Hæ?C؅Ab|BI _TUUS@~(qh(:d՝=K6zi&@A=n e/Ouu(|iƟ P3۹za* _466Qŋّ{qp (\NSuuڲނ &ɼ_ǒ6B\W(Җ-*mTUUx\yP,mA?D ftNA8LfW{;p\PSʘBPAi`|^]CCCa,&뮻ԤHĠ6( ]]422L!ܦMkY5ȱIIj`[?,* ת5cm>z0 AbviN$jv:9%~n jjjrP\^{eP[ܻA~ӌOPvTJ \z 'bYya~4L^X gm>_"U_kllZ[.h(mG?if-eeJt2ʐuҤ&'+f;pXv8 izz7:AUUUӑdŋm'NGyε I=k:]zE,ִY>߿1CUUժ]z}ro P3[3aԷJr+ϰ~RL&e%I\~2/}]]V_2Vh\:}|DVd\viE<@#)uWvݫȇC԰ k| jLݒZpr>_X\kڍD" "K~}hÆJ}@oiƿGfg3QeIP ī?C=='N ZّNVf5z}ARWp]1B~יtXPVS9ߟt:٠ReeH{:d2iK%:*/|ңݬͮU֩v[s4U@F).l@a5(j'likttXy^ݜ ̰T*|"F'*UUU/B/׋/>u.":C;n{ӀܬFGG5>>ٹX?:[ԩzIV^GUY7J%oG͋J$CJ$qFb[U[IXѭxypr> nvʐ~?X5X\^lrj&#OLOO8(4Ò]_Gx?VȪ>O333&NuEۏn.-ufRuFUVt:)RÚ]W**2f@!"!`]#mP9@I&ϛfR ]Ȝr:{4L}ݳž-~6o[[~NUU@3˗ NOf3 PjPL3~^f[8 {= ֜N Y}́GII糯皯Puue˽ @Ś(pEinnV㣅0L33 jPL3.vG2yY.M2:,,,hbb\/^9z(TQA0taSS v0 m9rEi%CIS ` \_P>tPJ)b`F8.]Yr&YinnbL"(GI~ccȵTW\aP(PAlbH"͹M,,,htt`MJ:d f@# tPlJ)bd IDATg Uv̌F T8P\.B+OÑnwfgr>^߯P( !fPt(`+bXdaaA.MjffFW$INgn ʥB 4OJiPT hfld._;-A#4Y19ud^ҦMԤ-[Uee@3եK#kzzJssZXX‚fu.\҅ ]|9P`f< q{b*錤;b||TC^EљFf O=>^I },m- 2yYsҤ|rgЅ Cr-ʕ9j|\zx|zY{BQZXX𯗻gܗM3ά(V(j0%bH9Sa啖B==Y^z^vڝ:TU}1:gbwb$ꮀ[C_pOl]߾k 588{ݘ7A oU]w,7TY G;,蛅+{V穩)Baw&Kss.[˗ VVf52ӌ?u5177QL* Z:Xlncc-Ȱv?UUU+kʫZ.o~$t/n(&p8)M\n~MOOߺ.UTtRk{+IA0I,E(R$b02ں>}r9|ɼ ;4+J&(,á2y<gLZ㣅0IIM3>fÒJ466](h/羣Y8\XIMD6gJ@LFGG2?ͻPZ,}SRgR29dwkxu.# PJJJltDȱ1Rɫ7O.~m)|I:uR}}=9"T*E45u)'J4>xcnyy<JKx4779t4gUXo<X4Q_IA;%2Qٶ2ܼC>ϒY ..md:=/{zeJ ;Kk} nhhPuuV}tV55W*i2(|W$ҠgITZTZ/^\zo[z Rw疖A羾:uR勉#477K6̤YMLJVYYrzn422BӦw|P3|iF}.e||TTIl)+hǎ={W:1fz{̅7:2<22MK$ 5t: ndY:΋()q$gpJYH cjKy=Ӛ^5%L^GS^ONSNk)mT4ڨԔK/XYyjA&bZYjzzJNg^oQ4>y@@о}444Gױc}d2 _+WX:'w9zESeeќ<H:̻ En4FDZtƍ5*-cnkfff0/L.ILo{Vb[#fbW)tC#y5wH"M\7u,U8\xƗ=0p>Ocۊ"`Tq##35F`\ZWdeկ% Tri)V^GNgrL.[^qmґ#ґ#~Wz-\ ЬJSY+J&(\F:lZM3> N L3~07KzXXX航7p0Ȩ^szfR~zrw ;oƪ_ &Iuuu,gy>ڵ[<(:v+LZNB|^P6a::J9N>{nD%@tOIeHތʔqlLbO-mow]v9;k{'^+kl9Nv#{Ft"Jo6EIlB%Ia=( ݍEqiYdž """2R)Ůy6 TbtGfVv;Vl6kQVx޾l޼3Y`HD}sg igXLPT@3<j&"VGܭd w{kZlv򆛂s i29sR3ں 6>_#&l6V꽃aBÐ~1 L} Ϋ 3Qe?N8;hjTjVBII ;h,b?OMݯ/lhhtg`UQ4՜Pse2iUvVޏD"ީ|۔@!I 7!zKeeV$IB""""bXPsPhȜ4VB%UU7_̙Lh{.7nֶzzgNg0::Q@yy9vW*_F43\ Ӆ6֣^bN:Cޑ}Rb1S&F8B8 lv[f򶏏/HR5eDD󜛳 'IK~C'3zߗxy_;22ÇGH_u|&_[SUG4ݢ((›DDDrK 5U08x@DDD1ZԢφ*ř u|DO"(Ҧp&lvccaLL \S3@r9%!gy- CDDyk~=ZPZjʹ2-r,f߾7n =ڍRok*F[j怛vsxYUCJ8 V-~y {>=9^ pk*YsUVK(4Ph|r֡eZ[g*%k- b߾7o|0j^b|9VoE.Wy3\Wɤ:%)8#hl"HRY zߗPh5= Lۻw7{8|pH(Wݖ!Mۃ~ r:QPk*쑑aٗrDYJgDDDDdZZڰy-B|.b{=e*UQ 41g+#N_#\AUtniio֮]^ʋ*kAN Bn!Jabb.WQԳ<#(?yx=֡k 6oނu2ͧNǩSqȻ,h?d2iYjz״s$ }2_f,abbhY᫷TשqIRpGҔĜH>~Ywa_nt]UxoE[IǙ3'pIN]+W>}JVj6Á+bC$H/ʺcٗ[UU#A g "B!""""* 9vža4pattLo}}φzF ?7?'x --mnp2yNGw{ks~;qLL/"oۼd2^pI WXxΧNW5`p@Ѱc}l,Jm#E2q뛩L& N;҅k ]6GGCF*$QDD$/&Ԉ0lzߗ\.PhOr=tw'˶)҆ {L C ,kSJƶn%*5 u""""2ÄTxCAmm)tumYr̈́ qK|p`p2zG6)f`Bۯf476c.=;ի7_߮THq1LD "R$bjK$ SIU.B@uyomx<Çع 4-@,ԧаHO>ANDDDDd0CCx񕯬Îԩ㲯t'ěo7|7?&O?۟awx?>Jr9rMKRK^o|;eeVͶKR?;:F8.))򈈈Ԟ!P^NLDSpu4T&--mx'յEuaǎ}38tmK7WnniYp8+LX vǎUo Vi0.JoFt$]HY 5@c~VL?hPKw38@n3NDDDL&lVqJKqAIDDDD>떟_ ǑJOBA*pl+ʥ/}ٳ ?tʺzl ):|CC/z2n6L?H;9#q&b͍Oc NtJuͥ1R'|DDcH%<7t p8 6.dy<ܿs~&&o!8ρ5nʦ/竣mnBDDDDx<:8sN:ul"""bkSTx4X Wq$Ω$9/ ^yEٳ O<$)N۷?۟ocϞ]K 7"ɤ199idK婬ZߕeZog}앛,r9T]ݕH 5h:,_aJK5pE l݉Dv;NSfLrCxml (۟?}^MXeK^ӑo- d?:qqIRpMAD. D[+6?}r׻`rr m/M&,Mk;`itչ^~yojB#ع/Y6q>O8pWE}{<t:un.v32}q엉ej'X&:%)xMAD> k+#dlq.C&A.;b`2@`6B,ЕAM:p- wׁ04.Ob?AD2%"""2 (页NƟ] qu4^A羾^8 \g$_c3CDD6l~ SˍpTn\͸T*T*qͥZ 876,'{ÿo$Tbo F& fl\_76o?gf""""ffտ zP"ˆ%"""*DbQm6wy`KBΟ1Kz?4\\E@gKt76&I3*>V660LD!|o l6Lppxd\׮]S6;p8h4ʂV_#eՆplıo8v}]]J>s%j͊*TߜTa"""*vDPD޲X\e ͢ udy>Z?ƣ)k0 J:m[>}]]wcafpQ<<^[E>f "4f: )#O4"V7L24\ .WyA򸫰cP85oiA7"${yyt7"qO 5 ޯWhյJK-DDDDN /mn&Z 0J`λerאJO~L"*2Lf`-8Oea|:ݬhO?o+lp?ӊTjkuV턚a ]*01I 2`@D! 5i$NWl6D9<BU:"r)`bbTOuz?ϩ^yVZmmTy.gΜīF"P]>7V6LUX3E*wxkpe;w BDDDT`d ˾̒ٗYp i^F]]=?vO|.5n6mhFۦm yTrC`yٕ*$S;F0I-^"NU9E.W9DoJRsf"h'> tJR""maHt9`YQ#":m_A ]D(BhtD-03nAf<^׉_ecP:b#܁ABbbu[Wf{mNUɤ]J \sAxBm~I"ZZ4R3D (bf4-J"-y9'; ß>w؇c<#H{j&"ҶNG`` Xh0jdG  ɷM?}Ch:@%ǎq۰fEjp!r+u.:.6 #tn oi0RZj1\brr@ͺN]܎RnuWWl \پϐHiZ۷?={\d2 \Sw?@}]mVTz1tu6I @DMW УrXUYPettp)"v4Wisŋ{Z'Wl{W'4h۷?~ytum6YVL&R"𼛈H޹\Vyh[4J8a E7| =~}Ҩffz`l4@B1v 4CDD:"I L&=[!h-<f^۶L$hBG2Lu=hm]N ""NsbLTHe[իWTfbƦ͚j rLSxqOS̈́l־L&lvr˩]Vm6ڡ'Iu:yCDD:3l_f2}^Dafy1cH t0RZj1di-TP6_}u7U̬ ^2 MZ=hmh*/uZZA$WyfiRs?NI  "&"!I >7Tx`v'N뾿Pxt0tePHgҪWwر 3( ÜHih`zd_fI1+)j6Ͻj}^':ږiXyanF#ؾIf~:D"!r|M ~T ]xX|c 4CDD:%IG?L0Zo _=nDA d]W:B(B(<+lPox*T v=]@*TY=u7$"juaM[;E\B߅<Z[WsI޽?/vN<5n;Z \ UY߾}o஻`qQHR%*kTi)?'"""һ>Tvh7mhFC,hD j]μxqO)=~Ԥ׋;/I]XL45,f/KoeHj&"1I 0P9rYTViwp[He%4ɷs'nC:cƱkKbwkf\@4jUe%Tx@iQ&F:Y¹s5UXsͪvT8<2Jlho/~>iTww7|O<-,2rH&kZkvڢH*5o;DDP3]l`eq8N<+hYъHsyUlFT׉M _1l*Ƨ׬:6꫻;B:b#Hd@DDDh4迕~/5n6mh.X[M%)(0!7Oq𷟪^W^ڵTyR 3hU"@.[r}M6;5CWL%Aqϊ ঊ 6/qW-aG,e;zC9``sCWe]fO?<3'qIUՙ6U767`;qI8v}`Y24, ADDT[un\\@9g!""""[lYs珐HUNbc,X;D j]0J8hȺ帷uYA6<|O:kCկǣ,a_[j. hOJ{x""ZDD!I:3ѐ*Z֎Zo]ށfXz G,nl꫻U]ۆo}ub6}q5Zmϱc>iR)|jqK50p'%*) """Ͻ#yځfҹ`"V83Ь]_V7׋={v~D*D*&_ӂ__^կKRp+G<10LDd fC1bڮ\@Bܲ}{V*|k*Ըm|3ruޛxʭmDDDdtl@DDDDD" )4=>.l*@R]_^`՛|Ϟw^JTM?aj3=Wj@30LDd0|6#S8cYłoʶogOeaƌ( _zpI塵~l Q0 @,f<вYPccIDDDdHj$n˿nbHp!FFU4hԪ6fS kᲗqPk?w_FCz^[@ +YNGlPZZv2d*i.+FDD 5$_C Nm\3xQR3=Vݴmf@ Q󺰭nU_nvN2Y$; O&O<Ά%"""R_DZk˪v٢z3*! $){jӧOq$4P3nusUVϘnso$g?4huI >QMDT|j&"*R 6ˣ[=Z6FhZ.:qTSBL70Џ;`3B!4+(LDDDBGvcޟ-5nZۨʺ̦x=ee+~}L&V+;&DB4J2P4o&"*N 5`3/6o5VҀ|n:页~vAU8[տy[7΁~;4O5GeE)zyP(ggΜ,H[WÅl*A}M9E`C{j\ۮ2gW*D6;x8 lb6DDdD{{*N<}BNKDDDDK$H$ߏ c! jEZ7Eѣj6]Ym.g&_ӂ_k2`+@f;%)8LDTj&"" 6]Tal#hjn>!5"4lT6qh7iR&).ɾ̒;%S>} """" <Ǯ]/6 hV#4s*ͷJ$rK^N .}P}_h&""cfM_(}D#yzbna@+k7@׊h2 gC{Ius= DDD9t@DDDD$l6gv~/Zx]v.=-^M<\p8Yyr=L԰<;NUf""* 5 $)ŶC+ZPG73\ _)vNd6hJq5Au/C9(HSž__N.hDx`-Q8LDD7o""-?WPGEzL:Oz*7qA_A*egh1TjϜ9!""K j~E[ZZZ4}XV&dp-08vjT+,Z̨)( pO ~ΎC.C"Xr&iw(6h&"bP3Ys|ያ 4OtGl>; \TՎj;pWV+5'1ݵl6bh DQjݴY@M[@3͊'38WthHaw*o 4QbHc:QfÎyW+F&@+BO՚ *ZtT 6/#s($|Rd2Ui0 yֹi}3V܊eQ-TNYDj fy~ɤ 5Ѽ1/M[h2Xtc[DkھS,5l][E`s"Ǯ]/q(־I6< }+fsqAe<8u~JunZߌ5+]d =~Qͥz1<\.'Kf݉Zo݂_P IR5\""CDD F6ODgcujXefVh֘k(HfVk?kE=l[UY_ pCDDDNtHd@DDDԏeZfu.e\E!4\zb# Md2f)O 41LDDy0rcGgOXxLuTß|OaW5^CT/N~I!"""e]<}Rd""""*Z\e-l*A}M9VGik94lv,[V&< FdYNˊaw(? 4M`i#d*)+l<0  YnˊV<ϱyO³Z}+|^?P-ؼwn"""R]",.ɾ̒C%BͧOADDDC'UYך*lЬg͢hnjTiXTTQW׀J$2;q/|\as 5Qަ͏7~3[͗.ȗΤ3@2ilnŢ\uZo<> ٬zR,)#y]u*oqjY>@HDDDD$H$;ʺj6B E4l65]̋L&dYNi[mh&""όhQ$)xS l> eٟ~X44=ښV4e5Xrb?ƣ)M4Δxus*:pW~ """RE"(6 ˾L%CUVfUZ8ABDDD@'qS[W)w@3-?UJsEE%Kkˊ֥@f_ggIDDhlO>cȤ3^f&A_栗hL&ֵM1Vk֝RcJoho/6{wsQFw@DDDGG_h1cӆf21L O-f3мDdK^] eee[9RhxDDDKR, ۍآid202V]î'Z[[F0pe#fӶvU|=8|DDDD8\t} #ॗVu}뫫P)*4_P\ld\S\~cx'Xc19`( kUm]UtGYYWlŐus;j\gTdA/I\ jAeYy&''ɤù~sWf""1LDDayn.\PPz'%Yv܊Fy_cddi J#Q^stAׯJW2y˸UԶg.DE:ZbwXxmL׻/"xUYYdB崬Xxrg,h&""ZHV e&|i"σ͙~cq _~`o&Wz֥tX '{? \k]_^zXyiXaHȗd_fII۬KOOkShdV=NC}jõy]p~x i:{{ E NB๏hN_? m|gAcۖn럺%අ;Prl7Q*bq-SUA(mӫV @2xw{U~5 Eҫg=F8\[d2i8lޒߵ#|5'@A=/pdl0.ߴ~~m0t][=;CqKEW 艇[tJǎuQe 5p-33C:C[%~xP3MڶƿZU|^G| v[s[^_WW[a: {߿G ׬&r{@mKǪ擏CY8(ݷɱ' P"Pœڅx^R P(/VƮ TgvuutiI6ki~~n60n)~I PPn6@H 5_W*Lo7=֯U] 6o{ܭP3aXlܑ-*xY.W92nE[iNOxEGcco|nw.t@G\^-:^=1C555&dҖq6ޖխY^@lf֍' (8Bss+//㼯sB Pm7Bۚo 㝡Y(mXES0Hf'v凉tt|C(MDB]]΄ڹV}mmHUz ?c]B>m8mmy}]u(04`?Bp{}?";`;0 *_>mظ tfI:t|PS3?X7|) l||B#ˁ;U$ +G_qlmwݢ*Ù>5Us8"ӎ# vf-ϭz涼Sք@3 (79G6Z[Vwo{Y0ڹkvݿK9z~ g=F&;C݃,]u0XXl\y"! Qò@%`Г|?X^3H:zԹ.oqn#sBuuFdҖq6FuuM^_7x~@3! (*7r.M 䕺i:ߥ=_wnj5-2&tبT@xމ96]kxwP:3qjjXvf-ϯ60n|B7|Fo[KNP5Jͱx,ͥh)м~c_:mkM68^Uƚgm7 (aW'HB`PlR33 <ϩP=7:֥yMM :^z QI{Wmﳌ 4P%`3~c欕=zKc1ߵ}[ezkj iknWS\|LRyN>϶ƥ,n8jёq+}j#.n|L/zB)XnknUkf P3x!؜ ݹc߹@Wtnc_ն{;P4_,"9O92n_kѩ204t1 n Peec ߙN|NnPxu\SS&g"ՆuŦLeWYLks 7+|Ϲ$ @JPrl~Os&\]}SRy2{6oQC}9wQe=Z.w",jouf;R IDATrp"pi͹ esdܖ&gaU*T_lV 3mPRuNXd2i8mo몫^Gk%P3$9le-xy-+Sq3<9v׺_/Hyɮ r_h\ȸu!|\8\?>4(c=+5u& @qj,ͅJ&)G?wVÑΩQq2yp2<8P7>&P3.+Za*yvf]gFtiF>^y=ue,4?[djl@3EDPҼl>7ZXtLw(kem;LSE׶-ZߴL'3zR2YpGƥ[GF@p#٬^~MEEŪ5:`#':5\_*mtiƍ_᳒rL&mmmy}0.?;;ÿ! @j<w\s%f>fI +\YYaðU?4 5ۍ.͸-5uB@[KKP5ʂ͒}`zEq{OF4-n06\mvXTss9 %Sp]^lDb"hM1ҌMJ(ssss_ulmna( hj /Or%%g:zKϯz_ĜټEy>Z'.,$e)6lfpxA`2>`پwJv.۶t5mV+'T&KPPtj ?vtuZt4^/[sH  Q|_U[ 2dҖqn>"8@3j5ӌͱx`&z~]ЅK *f$E@AaUVVRy)kTʙla~?ﯭ(ky|U* (>@;rksu?/]@3j=cq.Ȱ}_s!2lFQlvLP555214tΑqWI"p9=@DĉX%f44lږq6vͿ:~@3eP3<l~`J%-.KcgG~ɴ\pHu5A%p-E+oXy%iRTP8Te-L2N[sU jk=le-W?֜ <6Ѯ{6`#l%ͤ,IcREp"';co]+**wM6>Mz! Ih rVhnnN٬qd|²2(3`)ke?ѱZߴ`#lIꘚͲD噛+5FEE vsv3BXcmmBB7O2C:^6wu-<.ZoDy(X]CfKf@)V=NC}jõX|\?= 潬 jiF&бٵ7z{ug؇BͩdJədΧQ;:v 6|bS)ο7[YX0E`,Ev7.P3i];_PU a_+2N^0;w '>/L2hfy!<0`s6Uz?pfMm]Q{{PKc&i%Ӗ'Df4/0!#ɲl|%`pc\5ϥʑq?@s,ICѕR>U~.G E'j͡ K:mOØ֍{:~YYWVCz`"x㓗yb:=8*cSXsɁ#ҩyA(tM,V\+\P98ifG] ]@Tᯔ{r_V.S&64ᮟh5< X<{2ؼd3V条;|FS3K0:`s߹#n|7 Jte[}M慚pk. V@P7{4Ct~ږEt_t:m85vS" <`:X<ܧX|d7~EwfB+l.)6҉3#b(7o;>Xݎ|'}={v(﩮2 /_))FC++'o@35< #yY|1̜,jsh4+019/ˮss9ŦR:waB)ͤuzpܑnLY q(lNm83,bIvG>]k< ^ҫg?ҙtG;fg:4_c;CWGȸ{'@ b_W4\.Gk;%>/# `n龷u=^:Mh|L{RŖj,d'^gy8LyUWWXTUCCm0 ƪPEE$}9 >@x>#f:=HS;9՟0'vKk:(h$ӌmi(IwH&OXt3\<:Ts LV*}  WW&dع%e92Yfd=١uCϫuk dAnffRɒaiEif_A##ös&moUW.Q[2;hS3L3W.<ցeYW+keY}EIU]t2i5u!:TJɴ5ӳY%ӖbS)M܅ )2:Ԋ͒tc5ٺ, PR)?;|\QQ!cs ح~GƝNftq 1cӿg>|e2A%΍sc}zjotŜqˉ:;gvFf2\PU`eW!Kx˚S.wI49EyO'ukYl }L?| ?;skĉ״mۧX>^Н2*)˥fzճ\ ١9`7|ir9 g%}@3# ,OJ:*g xyzaWg8r[DɌ;ܧ{noԿh妴s>tN[E;5cy۹s p-E eߥشi6mڬ>ǞNfwQ;J]@TpmŦE=#`vMs7IS}Ϛf Wa:%MuVb.gaіӃN]t t(T[;(2(7 :`1yhxC='\Tƚ.JNNey$:E,4EX@k 5x! -סA=wFoWMK7mC{aTqJl%x4#{Y \f`IlF?X2Lv^{/h:8̜DEG5]RظN7켞;|#QJ//k %s^no'\2YrfF<]l~jԭoڠ7/sNft{P)eb4ҡノ.M@}`0Da0 @a$=9:~!=Ka?u)s۵}vE*g4OI$ @5 4"،2OU?O||[IrYGz3dG>O+bc|>oo SXIw.Gqzp\z̲(|))00Оv׾7q'YO X>ӌ<ҲQD5Pj.]ɩIMNMsnk_uy.^P]Mu2*% c-lt.nܼsz|>?8G>gSGqjt.Q>J.ȼA{vjõ%sN@s٬y=p^ңX>B擒@rJ$gN~)sNfSN]=wӶM Wqdj&j4rXtivKgv3I pd'^Ӷm5;ZJ%I޹ވF4`N9n];v0 $IM:4OrX>`L3-IOR Mg>@ w?osL*|g(wZ=7ҽa/z+-̖_):p1G C ÐeYH$(,k*YVVҪ;~KǏ==8g~Э:9ވNDK\5zjotd|OYKs^$=A! '%TGER68;vj}u?"+[7즓⦆T{n_;UeTXluN],1~V=b1P$> QgoS\Y#כo(v~w"qRO,cͫNLvߺC[vp!Pi<-vO=e}ԵySMoIND>VA%ҡm[\βYKccr^.f@fdr1]T堡Q[v]pE55U^MjiZ.3KRCCz-LBpB v||1 gfxڵI _{?sp?Ӏ9Ѳݙ!N+y!<% ӌU~piF&%ul+KT墜6_i:щ:wQT5jY/tE-̼+_CUWWeY٢7?E@g޳A7,NcpƛOMM\=bSiXYwc07tgVws/Ihr2NI4IK350ӌ<ҲQ"،2regzeeP4hBV7,M̋JfK✾/,e b eYSWWx/2:zMhk{i(:sBCiWoڠ;\ѝ&&bJ^yIhY(`IIjlҡMFîRysUR7T5Ci" ֶ͗n;vy&|m0`0ȸ}ڴi355uPsuu?3TQ3S[uQʯݷ F IDATI j E v2ۡ{6or9bcd2^)-th,BiFҲqRImVyXSwq$g&;9|ZTiMJ-M2h9Oit"Gη47iRܯA/jjV=y]ɁND%I u!57ѦܴFMkT RcSi]g/t{waNCX|f-MLL(낝>@" @fdoKs^TGEPNښoӆ z->+7Zϗ:;KRsIR]Mw[|eyh5O-ߕOXUO?ǪZ*kR~:f"Bw9޹s$TJKᥐ$jnZj5 ]wIj\[Ka%$i|2TJ9w^ ڶC6ܹe,,3Xl\\ }4#Op(BiFltTQf J۶thzGRggI%-Bj6s(n5 QgoS\iuuuܹKcڿe1tfn1x<.pMg wS H&c^.f;iFNJvE@٩ j׎~$;+x4g~~"QP p^_#׎Ep0-z'"q/$ @qЩ"1+:6KEPО5։D)CC?TKK+zow1 à l墿ϫ _Vuu^y0#`螻?.è .ǔN2'M3+@qjL32l+/9Jr/17m qͭth=+%x^(adYټǿV}{y afS,6lt$u. P3EfIIl+KntbJ]Ǐh׎\|XEDٛW@Q帩T1 ,mnil,F;w$?P:.G2Ybr^.fJPL3򄤯yazOdY.K-]b܎Ef;)6CClr8j~),eΝP{ne }bKmKfJ&J6PBL3-IOzaxL?=O8jõBj=)CpJ]]*++hii3.ծa+31S<;͓dJfJiFJڭm\m&Ё{\x47V~w1 ]VB;<|H[﫮O~(bkmnC{6Ub\NccQRI\gM3rfJPzL3rec7z{43lWV=ԗJ1R]v2,+1ZZZ~}ڿKmͷyb33 _t:x<\.)?s.(A>J@ZSR;0د+ $dB4bP92O/RىQXE72#|^(j^7y&,I?I(JyJc(m(q4Hg0X<D8(P<ڳAQ$ f_CCmc56O~E41d+Si6B ӌ>f`®aT> (0mn=_멧frFJ%2S3I>} (#zKsvuHtXv{Xee6ѮMwK C4֌ǷS(T;wiϞظP3V糿fjl\ݹsvܥcǺtXPl!٬Qr9L:4Or((3ٻl~QR;0دD2v}ڑ[(?mͷ6IR,>sC4Ht35]J+DTWW'Ȳn[e^kwd2x<)?.(#(C9ҲS Vw$:ܧ:?z/ hx1<V[7V@3m~?lW0 |),[w.\pvG~K7 z-0 дA6( >bb"T*)4#_P~C@2ɖI:*^w&Ёk{Nm0tq& 7f-Q_.^|cUWWkϞgσӛopGC4r9z^<jfdrc^I}VRWޱpYZ=V,>DL3BId26>>f`®jkk)0J56S4-q]8_48gj\nPC}7mPmקO6ki||\s^NӌP5PL32)і{%} s>bi>;_\IJ2ckf&D2GWKK+`bqP"|># ѶmWXf[W5\SpBpV 75 s_FɝS2T\\+ἤG 4P5yeQI|G}zl3%)1L2X|\Htrڭ$ B>KM5/)C 75VpTx.Շ-+CSe)%qx*~J 'Y?BiFlWR;Lc6mjwĸnΉΒ.wz^nK75jY?"Yێsv ׹NWQnͭz[\fB5}+}?/ua.x֠5 #)S&ҴUwpӌҲSQy le-uuQ,>;Y( )233MݚnąEf-k~~KiF]|1IImZnN˲2,P@Jci]U;HPXkXfUV#rx!Ljllk' 4N2Y¶K0OS,>(U RD Eկ Jrz fe>ɸrW.ٔKfd4#OHW&](@B!zF O:^6k)t:R~4#Oh$iqgۣ˲2HtE 8c|ܪ}̞(,2ߤ& md2QyS4YM@" `Iӌܧ B-elN*ke]QsèZ ܜыJ^)Im;\F\iF%i#:~DaXl"x0EXr 6}V֢N5:zQYY-thd# 4#G%ujiiׁӉp~"竤%`3JQ1?R,6\.絲4#OhB\O4X</׹XEfYt@i?ca#8X[H!P2C.XTS^+w&BL32iNIҼ]?Ww1 cÆjiiQeeEҙk꼾iêǰ f٬x%ufEVB o'6}o?Qb&"PPP"Pb7vq[s"Aߤ 1`ыr^zw!B`YL3WV-lxLF,ryo% `@w|d6W)d܋4#d%|,I:y[YK׉Pbٲ=w'B^UR2Q_7TpYKEi/NIӌ<*r"9'Sҳ^=:px,+BkR){i-zQXTVV[뮻~C--- ͛h7P[SKlf&h6)I[w~X6B`L32׼6~4f!%?(@R$EDb"8R7iӦͺu뭷Nph/]Zë5,r49OIoqWSZVKsJʼ[:mK 'v0* k#.0ظN>wؘs[ˢ˔ZP6=+髦d%ՠS3iF^ԩ=8_a!M8,LA34t1}>nɉPoNa\5cuɤFhiF r`:%ks/H#ae! ץfDLxL\kS4#bp4#yT76w+k:۳qXH@ɾ9oaPX!G@q\m74mXNo,RI/NNӌe;j0%==87 ,|N(GjpKax"vgZ4dj1ȋ:𴶧D~0 pX:.\D||4#fdR'pg8j)N-<)Vҁu[a@,_ێ) pQX^5%ŝZC84#yT787z{t~%f,(S33ei$u. (B`~L Os{HtX Bl6;.ql3 r`UH*CC}ǰ kά# j)N-<)V}a1`06uLȄ'{'ΎjWjorlKyp%>":J4=syq$Axd[2TrjtpR\>MP'`f5}0ĉc3k~I~H|Wtך`Yi*\,K:N 'LpɩIB[XD҅R3HOs7(n׹1G<`ȹ)_F\aa!!O>!2ɴ獱NH7J`CcI:?954!6NBZM1y:3R~ -?!뺤:cnR3PX͒+oWz^Vϕ˲y6FssSxNKj0! Q(5 guARvχuQSl I((($ڮUx1V(F 2⧾LNM|燺18f2hʏp Sk0%c dOInjofV! m9(m뺤3Lq? ^]gz{G@ґC^oʏ  r=Vc#n}c: Pj뚤I=8ωG/ !x<=_ IJ"sYBYiaa!kϽ۳Nx +2~˟sɉ'd^9뒎.HLjo⇕8177DI ۷U¢`(n/4$B3t@V0ƺ AO@Zd H.SYFrr*euh R3ot4S8N1M &a3oY{=+;QۭpZX' [pWdOI$7cBZI1=fN8ɉRsg dɩ w C$3Cd%c>_u %̴kg!8`JBX47&$oWn}cc15IuJ~31eʏYTTDz79r`0H@ B@6 1VAq B23Lx۷mwkw-/uIuX X>_u ݞG(0 y<zrI&yu_ѱ_XG 0 cnI5zܞͿYy6r^f_iIQhR3)XcI9:.f G "iXcq8fmy^W{?QGEf]NS@. r11I+MNM|\ IDAT燺182LAA!ǓO@s1GGqZB5v5@2ƺ NO+躨`(Ȧ`pO)?&z)? ivcp@;?Ԥc1Qc"J ccIz9|9 eM3!+ ߡ:.jG1tS (5W0:&鰒bw%;je緲[me %pʏYTTLiDlܳ{#csw{I3ƺƮR3p c $]wsc#jk?7HBRN?#X TVVF+kgU֞m=UWdGm_ʷc (5W11ƪs>٩ٹCK7<nFp騤zc &9duLaInsvjsU|]DN_^`q  MޞHZ="ә$c]c \낤:IݜCh6͹Vw59yJ)5!d)&bpU.o:?ԍ?=iIoc2 Qjf5bU'}g?Ы49;۶UGEf]4N+QjduLa%?ZS:aFMmw#GXF9%4)**J1 ԄwS>Er N+YhF(5,2ƺ NR۳jjz ũ ;vfs`f  U@w~ɩIG1-5cXvfcc5H:,S@֝͛{UUW1 !<|B2әr]̧kYJ~J޵쨭Wu1#67'5KY~?ո18_d:sJ(5,[Rg1~˟5S &3z p`?QBpxpJvnS :.jQdZaccXv((5,+` -g-SwyB{[mg367Ga MFL6ƍ<[~K3ƺ@K X'$Kr(LڼuV=ݧz5ppx?eɉR K`:=ccQBX|:I$ts_Mmz^ee~N[mU{ssvT_R]LhM^/! B okʇP^IӒcu0`X$(W˔;vP[YYh^Md\VXXu\TTąKBBt{|$B30` N|ה=7gS }JOyb?{s̯+ 3!dgnj= c:=2:A Ǥf52ƺfU'}ؘ  賫qY08Cp{b3uI֎R3:cig掮 ^E~.eR9nQQ1.ͼ^/!)tcp@;i0NKj0ƺFkG %H!MmL?T`?{BxR+|hh`:LgǴXGD EX "6;m64{4g NM"pҦMLft{H3ƺ@A ŌNHt4#eW4%%!SX\ى}mTE^&Bֈuk(RR3Ij>iϵj_ B׏nxR+S@F+\c ewToLW@0 H:UwK:%T7vܡ{?L4% nmg99y bnߞT8|xeKn6Hii J͟NK:&58낤I=z)<{G>ɩ׸kg`Qqq# )?׻)b;fI 2^/(jZacE X " EQ?g~k`rSEᱱ]/}Uv(Oor#nq F NHt4usL4%UTT5H$r*@`Jm/=z 1V1Qf43ƺfU'}pN4U`*/o}I :!B7ޜ=iffzk~NMK7j& AIz^(i8ö/(5\X⢔sl,oxdL\PP8s+|xx_> /Qf d-NGzef&5!U\\H$r"X,P(x<*--} iIc3 Ơ X$M3PԎ*@+--͊,,Dy%fIؔz$, !N)94uQ&mj*7*lp-[Sz?9vx<^IdJJ6g9;Q^Ӓ^3:tf@ cc5Hz46~˯tcp`U?75Px6lV|eŹff۶}s~߅B3٩GRdJ네zII#Ɏں{E;irjbE?FKdzPROjLuUo c5c@f cIz4695oW=n87)//OٱyfHd߳eKyƝ%k&x8jk?K^%c5@f ጱIz^(i|WpٛhT#%6(,(3'5G"e^PP =GĶuut]Th6H w{Qd.JY[S%4TGE\,AП d{nԼs/**sx52WՍ?F%=8@1V@1[)I夒4Fzfv?^K .m[q-,8<6'~IDN_̼PwXPP=W//TC;-_@`4@1ƺ FG5;jeut]T<`U^u }GNkx<,-lv~oW;Qh״XG)4dJY+`uHa%oa-~}zsunVXC=l-5KRE%VZZ|9ʎr$,@ oI!,*\Ыu#ͥ撒ͪ![rGƞwQQ1j=&& n_Mg>tfU@kDRW}LRrRI uQVsz7 KTU=Vu,%'2)$y*9BAL˶S<JK˴u{nxxPwz\f2H  #N5aSm:yNW{ȎrӒ^c:3C%7jd쯄 B@-UlvzZs4j+sR$rLiWz\VGEMNM>Tcu(JXś5J|}f:.* @ڶB55)?[NOkbcojz)$ |9 >DKt1V8 bXcCKׯ/OdeOUl}J8f4UƭK<̌sM)--+J.7~˯ di|(Rj7!k)%j/L6#L)~xDeee RPP]uQY>QIce:3VR3dqjQI+yaGm\4~O YX{T\\$Iܡcb1G' 2cJ3{z g`K3& f:%oVb S躨+NJlb|CaW?ĝb/;̴bۓ)4!U@/a,ﺤzccLgzPj-Nm>&^ɛXC:yN};Gy-z'T^^x<@`W!S8ab1-,,uxcff2'HDmێgo}IuXN 1T'8i,/4T躨[~Bxߎ?R,˨D6n;ozCzf%cc:3҅R3jqjszI=$[~ut]Tϕ woA}5&&Șכ P(H$MMLikMKzq (5`Cc]3j7Iχtzerf2]e%fzug HD솿N۶7uk45p$c lJP7GkYeQ[jk?χS~+ ` ~zCqh4*۶7<@`JK+6c2!lJpXcCW)aGmMNf4]Sӛ*--sXL33x<lێg館 7y_R321V:II#jk"5zXG]#R,KJ$ˈo;oڽ{^z0nq]R11cq Pj@FY,^RWC+j׮*Gט"innNDbó D"ﰉӒ2ƪ3ƺF$c5HzMɛp#_:^6bFg4՗_~h4d&!ި獱cR321V먤%]'ԫRg?Ǐ ;~"fH$D 5?qt7TU0 A57Hs((5 kcucIzK4Ξ=O@޽G/x5ff9rH$dq)iv6ZvUW^ed`0zq@VGcXDlAY네:IFj?C)?Wiikܾ=cw IDATFQ-,,lXnm+++U,s:a2ԥKz+BAYQIFلR31ֈ1!I+ykD kض@`*eNjm{]Xd9|gówjhx ?K/NyuK3b5fd5cnc%oN=h=133iƑHdͥU}"_ f>I2L_ߧjj:M dz$c5cيR3r1V:IC|Cxw=~<>m۫.$G"m ÊFw}mn?K7TU0 C7tD?#1V15@[ | NIz4VnJʫ02JKK ,::}segRqXˮFF^"r]Ujm26'os B9ntLR9i\m:xe>ER3! ꥗^P(tl ǣjy<~o$Q,ˈlffe􆚚d#٥Kji9q?a^ә܀R3\竮tBAX8#8c(5{{]qt-[UQ}bD"I4jkzفsvUҥـiߡ̼6J/܄R3\nP=Xڣ>mVA`0C;zhD"p8L7H$45u[|i=ـi>?#9.1V(6z>_1I͒IcuKt:pGဝ;wꡇv9cgo:FAAxhFd1;\5^y~6(3[X#D H*9UX+uڷo?afro]c˖rUTlpFdښvv\ii.]Xeeel:7rRcmF,3w܎R3 >_ufڹk@9(5jltk( WUR%ܼڽ{)3TekDf`|[|\᫤~Zn.--=TcaٴHee[}H$PhmjzCMMoADcu^ UH:%i?i_)5Iji9_c={UK6p=)7dSDl J@$5rsJJR3Jca :F^^nP~~~>X,2a6p-)7SNc8 UU(i_m:pǪ&+ϟR3;NAAnXΆ47v~wx \←@sZ̔ @@>_ucIco/k߾M|Sk:NIfl^ff?{UK6p̎tk(AP>_V%FmfJۚ3)/ߪB/H 9}L.}26p ̎lM@ d8FRWI#5*7?=OJjlE@ d N II#5Ktt3LϥK:~环SXXmK~=U8~gҺ.f 5<<:6i~>:ejmmWU\\jk;K)3ef PjrW]dUH+uڷoZ֣ dxxPMMGr$_TC \Xji9 zJO[(59l|BAH+o~8c8f.gxCjn~ V_ߧ0R23(5.U7(9y?iVqqۯ)?>fRozz>ߵJTVVYҥv]NJn8a  wQj\r{:x唖z)z }k߾:f--';{UK.~MѥK,G(5XؾRXWIIɝ?߹szh5kj:2|JKt*++{wyRdž UƲ]$pHG>)Iq ,iR,41W[\EnrX0^gT Ka?]Ìd[_0pkkq5D&ӟq~ln7~u/ssNn%f>(q$7q]ӟ1ϲ8g?O_0n7b;9ZbfࣉOR$_E|\Edw2w}s.ΝE}lΝ_%cI3B |qsLMUr~f*AO%?}l{gJy)O%j^]ȍ7S`n7󗳳-@~Y^^̃13F *qs;w!2?isF~v˿ܸ#lΝ_\/pM(13pD7t5rM;:wՅ|82J߿O5F##j^]ȍ7꫿ÇKGW_+u,//{?5}!nz}6ׯk싴Z*skdNg+w2Jvv$%SGM Ձy!1Jn"W^Kz Vk=CLqX^^b>2s@($_>}rܸE.H4+/о1,Y:<|XQ30PJbp1dkk_bf`DP7T%ܸq3A`5,-LOW |nfQ'f*9wBe~1`mow'?~_ӟ!j{i6W>뗫$$-fJqqIT%rVO&v'şÃK.4lyy1ˋy[c߽7L Q30v+W7ݹsr4sϿ}N Ng+|EWC =Q302̓3=]\zf ۝?˿j'3?g (WM!jFNQ|5ҥ˙z3:<|Xߛ$n7_f`dEry\oj6Wc if`ͷܴ` U*//Q&jFQfRq ayy1披̃*W]S@ ݸ˔כYd0\olAg5v{s85c(jS_F<0SS__ #hyy1ˋy[c jMSH ݸy!WINZdpΝ{J*A`HZ^W^ʘy85(jR^n>cѸ7n^5 nfQ<:ֺAMInI!j&RQ)/7_`볹zZ篹 8ˋyp&1ksD LMy5Յ4Wh\6Ng+.fyy1 ޫ$_ۛwML*Q3@ͤo%9fѸ׿Hz pHːo1VS^ev&xfv׿Hq%J LVk=KAǫWlj>n|+ɗIYdx\FJ`u:[yp1ˋdpfOTIR^o>i15U_K>kBM(ˋy[ {)c S|SwMp8DG(jS^nEի i4Ѹl Bːy{cMʘi %j8bEQ2p>c35UIq97nL>kfyy1.Z7pznʘyGC 'EQk|izFJ 82n74+Y]]1z$Kks-Q3@Em&eecNl^Fr5+i6%c ՔWE`v+e|k/pJb>^ldgk&R s`EzMk K.ѸFjgyy1low 2^%n#j"EQI7E=BMʐyA 0v+e|Յ4Wh\6tB&$ s Q3+ٔqMk f3tlŴZ ϓ{y{IDATNno6p5Or+e|"O 0#^fO 02p5F`G֫$wv`FXQfR^nEF`8 GjʐyI 0&v+e|C 0XB&mf1S)7/"pVk=4+BC41yd)eG 0Hr+Mk&32In'Yj7_`|&[)7h:wB+i4.Z=a͕4ldgk*35L(כC>W vX<\e`f zѸkg n1d @Q3<>FJF^fs%.Z7s )7hΗh\IR1 0Z,//|AFT)$,2ΝZ=a`4+i6\N Uf~rz$,2i4d~ZY}lemq͕d|Ir7U scD|ͤ|+7Ji4dnb*Q#j_cn 2^Iy)f>KQ7ܹ i4ѸjAl|dJy|*Q3bzB '-2^E?JY]]1x2dn%jElʸy!1J.ή8{ֺ̭A$,ۛa5pdvݐy%ֺA&˫$S` EQ;rIXdT*hygk&E3s0Dͤ89wBΟE@lkk1yd)E%s0JDMr+e,p@SSgDvsH<پI/f~mFQqBcL{sq9ssS0 c\[uLI&+d`KEQ2n5&tuQ0?y8O~k^%"9'fZQԎwY&b{J"3s0DLͤo%9c3%b=ޤ o f&9pDy\2F o>NZD|nV녈"d]f8(jgS 8=OgnbΟz}($)#Kkkj&9@ %pCLMU27w1N_s`2t:[o"f~~>q܅+EJb1jɓE;F# Xl%jQ\M"kkIyygk>>>O15UŜ: Ngk3|!3|&Q33ܹ 9ut.^u=|YF̮0 pDp|jӮ9W9$oRFЉEm&e|+KΧNN>kwtݴZ/\aK9舚Jٜ?1]LR1 0QVEZuW9 BfQ3 nH9"j9uji306Z|boay2dno>3@QԎRǬagw`u:[_ɓf.2 `D08/D:݀ZN0B s5+$R'-Q: `fI/d~mNf!EQI7Jr"йZ=OR z^|ֳ>x^ļd fQEQ;2p^H3/klkkz<}QIIۛG c(j{s#IOSS9u[tVjAXM"9`` ElzWXAg/9]L~:J00"GObg|"zvvaJ/b^2L&Q3$)F\qfȉ@H[Mno>3 j+ΌT'27w0Ng+[Y[{Ng+ΖxQ9e$AfG8Χ=؋˫Vk0*ט&j>+Ό\NR1ZO묭=N˗/\]f\nט$j>[Q.8/gT%lշC繹^|Fs ^L|Nx0ޞ'y30Dv6ȹUwG'I~Ui|_ȉA%&&=v#烡IGmjz}?}]]Etj9K 6#3Ver.NL/oq$j`":7vX>yז^ۛL5; _ۛM@>BQԎgv|61 LI^g7XNL. H (jݗ]ymһ֣0|>Q3Ɂ+,zhgqmF C=2~>f!OxyfL)/)'@yr5@>`$J{^?k7_ \f``v6B'A:xEwU9)"jFJQ gҋgy[88&'e|ׯg&F(EQt4y>f&I w/%'c_40)D(jyפzwƪ}}A^B=non㉚F{.MGMc>إcBoyerScene2Shadowsdep-0.3.2/docs/img/DigbyShadows.png000066400000000000000000015726041317166637100171170ustar00rootroot00000000000000PNG  IHDR j pHYs.#.#x?v IDATxtw}'O{H+˾~,Y)VDM 8H ~$9IC&iMˏmK8nwa̒Mf ҁl 46qd8d)ײ-qlc]??|-K+]9I|}?!|OP$=g9"z#bqDtF)k"LfJ̗󈈹/-oF"b0RrbISgRZSFv""#bKdƎ&@(P;#3\תt^\=Ζ޷;PӒ$gK3) 髥[նF[2QPrN,͵%:{dƎ.;0󈈹K*=O{ N*P{t$]XP[LflT$0;̃$IwFDg幮)C;{/ L$8[I(\H_-]`mAPK($IYk!9"6J[LflT$T+%wVt1׵~,#Wx-P-H{t$]=r8;}P$T"%w$y约t@))8;X(wJ@EIts-ϤZg..5>}H(7J@ђ$=gi(Y(q~`&36(.%%wBJs],Ԅq~8[|?.JEJ Iҽqv:LYk.Pi[DBQr&%I3":,uM%[#Wz-بHJ$I7ْL uFBjĉs`&3v\,\,%wJ@қ#bdj>}P$Fqx<%RبHJJ%IxDp)t%+Y]`"_w>v?/u"r8_|?.ڥPe$ Hŋf\[>ڢ](W1>(["( (MKZDKs<+y5hعk8}nX(1wܞunD8?}0@uRr.[Blˣ}ٌku*4_|ږFgHfd]1cV$#Wx-T%w*$鏇;U+Y9BE-lŮde\y九c管\}(N>#Y;n{s޷Gg (T$I7G$@)+GDY]`mrֳ;zwO|' #sB*ܯOĔ{~\LM:MbMXxьk+gY[tK-TҸgHf5#1t"?wDDD޷ (T%tŌk-MKZ)CJVNNOsP:}FP:w$鈈q~`&36(&KG:t ŋ.e3-οVtҜ Y='~ܴ19>7,ژ;"""I'-q~\L%1uTJuEG{[_(wqi]Cq1ANSD{#"$|LEL C_:X_@a/=uz~Aꈸ=wD#"F[2Q1OLubE3hemſP_^,5M{$I\=w f2cpq.PsӒhibƵ%\`-(Fmi\yiDl<7>GT4Iӧ 0%wb-^tyt/qnqBkP M{GDDO>#٘;nHtD8?}0yJJVxPnѢhok꾞gHfdLGTi$I\=ߏ UJP#"֬.6냳F4ynعkh~1ANSDܒ;H^zP+:RmxVϲ_p!zwGɟi>7,ژ;nHtD8?}0PyMKZDKkJ@5K-TҸgHfd]1sGDD$I#bK&3ED@5Pr,^tyt/qP鼥PY9+Y]ʸ~s;w ]CP:}FP:w榽o\=N{PiUykEG{[_rݓ?~H@<ܰJkc=""I'bJ=N|?.&)0{fJApQRmK#ն4<7;w H@d*$c-bʉ;ѕ(NON{S1~䨐Jku%""ILflPLTC}]ݱsװ{yؘ;"""I'-q~\L@)(RMџ;H1}1 A :"n$鈈+GĖLflTL@mp{+:7=""$}"r1Ɍp1v[o{p<5=vCT:Mq~oDDib QrJ_~EDɉ=4Y?tXP{#"$=A "z7D_ɟM{m;b!q{DD#"ب(̠cy{t,okI@QrSOo/dI㼽וy wWj;P*׻akIcÌONLxIJJ :@(Uik쾨 -q>Gm %w*Mdy׮\=4mpG{+F:˗46\~ D3[)UWm*ޱ]D:/rlONLwWj;Ps֭ [6y`@MQrNW]3׻AH:^~]~ D1>?sSo{k.zl6ڕkstZa5DT%x}fJ̿" SRj/w/wď=yM(sit,oO<{ƕk]wvI7/`@ItoD B;9xWkkMu(]wwy[OWCj;T> ;}tEY @Rrd$'+̳}/%trbBsϕrl :;o~0.=C{0GJ-Iq> Զgvo4w*;%sWK<{oj?G$=K ؉B")0iJܱQ*i#GF%I\} 2PRʑ;@Itg/B;PA* ވh Te-Bj;@HtsL/B;TTR!5K PhՒ;@H@/B;PJ%ވ(P{#_*)v "b!A`$?6I-^: .㿊~UeJe3,zu]iA:u1v f^Vu,?]o`%;xf\w;_/aa=w_՗!%wi$Z2ky{J%2w=Z$%Դ$IB{Y[ձ,?>#()zƆAD6[-J;P3r)FU"m͑jmTkZaA8}EvM Kdb"+*;P$'+TksZ#YzY(_1Ž^%4w=~{*AP2J@ڧR)/ ɊPB:}=Lq Qr*J;cv2sEcC5ǪB;T% 3w=Z[$%\\} &ɔsTR{{[K,2@;z{+{YBl{6+P:J@YHts/B{Yteڡv:k!TSB(%BI%S>S-jm% bEѻ,Ѣ5 m;""!֭@Sr\bz]̬X֖hokU)vC^ IDAT Sgj{x'?k:w+_/g=7Py5~(2~nJ;;x=֮鬸=GS_Nkh]֟gP[*[x2>B0J%I\} R9wD"J~~?͞/4~(EL{?/%y;8~(zz{?K nm.%wL);R^S͑H WWe`ˌkx'?:_24ƟO_mpG|m;f|T|^#HSr^&Iҝq> eƆho;[j_ՑRh*+?-){l{+umog,w8GT%5nB{oD4I|.L0@;X|>C5U|%^upAy{%5$I1> eeE9HD94( =֮骨lTԲW:\uUp?Gk$@ (@%S>ځJ±5_r_ձ̗ ϩ~g>y%wQr*$8_fcYZ[yPIU{nxE|Gx:|5F_ 1~p|=7Y=pp\`EPr B{oDlJyQh|~o~@46_)_~ 5ekw?|'(;$IO-FDTK9w-'ʀ@=2VktVg|Y w]5/șfkfums_?M%w(# ƆHV,Shr|~_z׽fS,o/:\u /o|3nz ѱ=""?m;0Itg/$RxQbmHE{[K,25i#EўZV?>wzS?U|^b"/i|UpXJP 핫xݫzԼS(L? o|D+_KPy{q[o/?a,%wgIneވX-*3CL@=">ޑXՑ}3!,%w(RB*}eyl ^SIS'&NG}"_~JN.B;(rewW\^}B],mi>[d_FL=hl(ϒ?y(xo1* -z&_~JN++UF+;ł(3G_r_>D6;=視g͞*z֖+|(9%wF|} NŹ2{B;eၯ>)xyWNg"pXJTMj_-1О^+WtDT+zβ\<#;nѢXו@EH@L/+qEzbB;S56֗Ld7uwđDŽ,%wΔBcTҖx-7  =hlh(WC|EE>#Er/?;TB?pPUKkt|)xMCC}wU38Um-M@yowdz )P2S ~T/֥-lMdѿԬn<GÏ )`$wDĭ^vhlH6ǪT|gW٢|q%w*}EvMgY|O~f O9k6׾3;c]Wڗ8W}=m;ctT(%wD?J<.l5MK.8Wvwzݎ~$^}+ԪejmR|.dǎ]wݾ39y쩂twuyW遯>?/>5+Y>7\>S'O=~*;"IҷFD$Bg2 S*Sxq>3H:}L<nx/@xnᄁdoZT qχƆ?y?̳E60W_@Pr`|\sjmgɊTa>JcFzEG =?myqݵ346_}owe~vMgIihh|z]+{.3_(]ɊٷsՊw@%@ђ$%qahldŲKZh'/jӳvo%gC?,e_W}?㯿׽ 7^W{ffO3qs~C:%wږ.Ⱦ5F2kn\;w Gn9J̇Ɔho;;}UG*Zb嗕6-i(gxo\ݕwuiK;Ck~m7\K[|.}Gxuwu=$4>|o:\8φCwGcC?U)_~t%+lox}\ySl'~>7,p|AĢ/dEb 3I6ǞEqK]xO3'}06w4>pfPS(}7cX]Ɋݿ.߼)߼)"NXcG0恒;/TkshZPk>>Ëf8uu_34l+8±Eﱼ}YIu"'uQ/}_?-^G#6E3;cU2_~b-g{oǯy @.eUWh/躷/ŋO~c?|.~US ~l|ZpwlZ7\ז~'~Qg,%wxU"m͓ZRϜkv+_{Gbi꾿?GFg{Gוuwux缽ĩ[K7~ח?w?Wqy/5-@%MPRѳ36o?￈߿x5WEϺ*GD,yg]M}p?{wa l_<ДȑIѢ݈rNFAj9TpM{i.qSo.xmv lr8I׽]ع6T81&S)h-AI73$gq<}|秿>p$+5һ{NÏz uόOď」X3sYe{;+rCSSި^RR_ȋ|VG?/^q).Jg?Ѽ{/Һ#~hӆzTzcITm*B"m,ɺ>pz0޵iA޺.nVw?a%wx3W|m[-Ec?/|}wɬgK}WR\Чyuvs|]Ԧ{? K-%cn)P.өR{զHlA0KT1mcg&u>NFj`zƻooZ{=?Yݷ7ضsSS ._}&Zno^{VBXO[~*F./W*w?ϢhQG,vܶmw%Eן~k;%ᆋڗG:U3ۈt붺xW?;$7W_䡧瞏KJ975~ *S{߷}V '{=wǁ{Y{9Z~ /eD]fKJ뎂~M7]wC}Dv"&XKw6; 29333EE">wvX=t#Yh[-X.Pw:GDDĎ.9Jp;pĆbju⊍\?i{Ɩ;Z} YL}{X{wOo3R.2Sr.NgwK!陹gxcf1musSSYH+!ҩg$@zFC}ݚe~ƒs><%w2 Y85(H֜,GĂzk=hV;E]mu:":16>!H76>ӕk&CSSߖwlvv.:DϫbQuKuǻ#L )I&6d=i DJU5E!_zFFcy'zN]zoߩx_Ƨ>?DEY;pt<'sΌG PОpz0nV'L4:~67Wv/{NjYϨNyR@(%w2?8ՌAP :n{>^\m%w6d=oB561ӅDoȋ}mh8EI%w`o8@Rr(*zؙqAܫ ^RRSSW}=  g_rVhz*z}a:)zyH%Y83>!H /;?k8p=BXWOEOߩ8^:)vwI @^Rr(%ӃQZfzf.7WV/{z/u]YU2q׮;~/ϥݜrnvv.zN], QuK4m@t<Dzȣnn*@zU]$?s][s/Vr–c=+^j(//(,JU%6ܐ3񓟵O~n"uSp( }쿔PdBSwjU.%GSc]Tz(eOEI%w2?8y/dl0@zƍ%%\! gumu ˇR{yƨll/좎l*Qrlcˉ3ȣsE7! _٘MQ:޵iiט_/ܕ|)߷pPjxs[{-Q]ɃX*qy g'&>=WN^d2>oOWg'h{;}sզld2*X9rnj*:^qsUe4EC-Kwn:{TQ]ZdC1q5@Qrlc֑\|fAkC#ƑW+OwSXNw*'&cy e;p]:13;'{?k34<'[sw<<㥗sg} \#淴gʨ>_l`!%wຒ B%ZHRO~&"bQEl%Nϫ淳}=Fb|-og<_lI\q6%wҩu6,RUV ^>y IDATyt=uhvK\c$,.JzXIneC184soH&6̗ٷΗ٫6EEY ,H%1ynj]oXO3nRr tcx{wxߏ:chx$gY[PTd?;g_/Jm,^%wƓ^SSs]sSS7 3~v2'^1>1k!nd p %w`Aҩ,Pw%oqtF˻/|1N\Uv{!oc{yig淴' %w`A6`zFC} #7/ /[="Xe4;;F#"TDD kb$2n260"( N `Ͼ~c/FEDtؙ񋗺>XWK6gki ԝ^QVUlgQr&w77+tN64 \}yjjjzﳶ:C EJon^tz)]]f~+{EyigDEƨ(+e,z,'6͊Kp<?YQ*]8XsSSķOz:.)_oqcHJٹ{2HνJ&6DuUKcxlbU޲C֝Yxmh8>{7'8p=qc-hnw7+,?ux3O޳Yg{>@|c{NƃUo<M/@X/uƗ+Gb( g{+jdyo)Gئk [DQ"U|?%w`neKrԲ_gTyiO1ƛeĆ ٜWNđ:9+ᆋ3CweK˶?\qcB|Oo=W}T<ēx+"swҲzo3onXWZ ;1:~v;?Y3s4_ըߺ%^xqzheU"L\ě?ST:%wּٹ8; IU(HѴ^*Wr (cBV;164 @Pru(yI֡J!c=B`M_9%I%wXjB֍3>.EpD֡⢄KJ%OJDD֑J!/{{OF[ks'{^)ǔ^Mue*J/>UQZ7y<okm=m+zu9¡@]뵵6_{vŮ֦5h}>ru7KsR o)V{|06U?w󋒉=wu](N&x+!Z]3sqw DqQ"Z.~9p8җ _(j+I|]DZ(>|tl<ޕ=mOވof.EH}3RxOF4Z=M ׽h]еZKӳszx~6s^luk-o|pٲ\Rr`Ŵ,sdb\ 8?/ENGKS%wVDQ2m͂X&ՕQ[]"`%( ػUu)zu~KӶHU .%wݞ6[Qr`YKV!%w;s2X6hkmHH[m;Qr Gr>(=[ ,;b(N&,;9g;TJ-R)SR[%Sr e;dJܱJF[kP%Sr g'нsқn*RrX犋9&k @SrX]J\mueN@4m{vET@֔=mK>7U^{v  %w6,܃Eq2!D 'Oި\9Z9@DD'߽/Z]آd"m͂r"d">{XO>Gblbh{vFq2!0 Lc}m4^R;ixt\"z(Tãg}Ύ۶ `)7J %w;yC@Pr֬3B(0J526 `)7JHlaQǟ}}Zh됒;"ҩE?ynJh됒;yC@Pr֤޾S>HpLXg}N]fV;yC@Pr o(7J4{wjQW* ޡblbvt좎OoIhy@ M#qr"K=M OO8t=ff Jyfl|2{h<ޕiE O~.d=8,PPVޡblb2'󊒉ؿgW*\(ٹ8|=iٹLƞݭѶwֽ3B(PJ+hl|2{h<ޕؿwW6 _9;n&8<:Б8;jmgr;(,ٹ8Bg>c9&B%w>]'bfv.gsw6oiTE5K G:Б8;EDmٹ8Bg>c9*/{wEKSC' %w%CG^ڻr:w{]Mlf!@gPhzv.:Б]M;s2[cl|2i13;EDm͑(4"!%w8G_9*/{wEKSC';%kk{DDKӶ %wXED6ݭ(4u(VH:BttTyi߻+Z86)\ttuǡ#108Z9k hjzFJXx+SѶ9Z#UQ*l}}N]f;fO8BgML|v  (k\ttu:x@%{w 5XOm13; %w`O8BgML|+O((ӳsȲ\vգ]'e @RrVGWw|}fvnYҴ-ZA/mBJ@^/om\kKcxOSyFXu+Ql/J&.nmo:@RrVd;wȲ]g{]Ml(N&RTyilHU (jED4mh<@Rrrn-Mۢ!ZDDpb7$8<DH_b{Mue6G(N&d-ByBX8Bgttu^+U^m;9RXNUD"7 ttuDZ+45D樭>Ld_IQ)+"APgxO;:Nܲ^(md_Df25_/ LOd폎vhij(t3,;#?ꎁeb;\G|Pf25#(:v~g &&zJXJ}m²y&SGվ ):26>9_j폎+rMv/FLoNָc=W5"K&SE")sc=13;"Mv_L}}_;ٹ83_h_mhՕ,\YD|19[ݟ Sr?8z;k+9k45=# ֈx:zD<70!;%w(cqw~g ffV-Mۢ!j#UQyϩlw"ÙL̓}}LB{~Q2-M=M 6 XJ@>(G3qoHX L83zc`pd2jmgsVWz(z~-"z3?8Xo`C="i[l45DԃK?# %wXRjOFKSC4DKSokD<|=" k;,^R{mFND|8yo1q)@/\{ƺZu؉E_,"djF"`-Rr%8{.nk[{)J&.jmkX@dj7%q(uO^,ށUuKQ[]!S_dj> <# %wxKUhmX_!;"dj_ Nup ^_Ʉ\Gć3- ;ƅB{_ͽKc{}M4FKSR;[#d25߉Pٻ3OϤ$ږlid~{yI (lULԄ `i&fzV2Uf+N<1{5Ѝ!l;Cwd|-ZiWN?$;X^S*s}s.UvqY+Mu`)Tcx{{ıョ&WYu)/4UhSqJރqx1 ~;"j$k瞚~n[K4vN8yh"9sMg${ Kާ=-%wIr8o?pom+G^˔(YBљRr(/ߎrރ9m~k綵(T.S6J%?ǟ+A|ɩ綵Dì8=y͍qN\TSrJc.0>m-0/?Pq.mkYuqn|Ev*ʞ¾0^h0~0%joJ,GD?W@TcNj%==-LL:%w1U_W휦qN܈Maܶ1.57STw&;xഽf6?'~S`Prsƿxso9sc^scD|n:Tw&DqI)DD@Mܧ?緟^|9=,9M)Lǎ ɩ =R(P:"Dw)/yyLRVFBKDXN){+";Ue^`uF+)ePr`T)eWܾH"})e])eKEhQJƈx!=.Q0%w>"liJYWD1"J)۞R qaJ|@JJ M}r 3ʈJ)[) ,1<%ck(P;^>i`f5F3)ewD.z"+G[)eW%wR֔R5")0S#⅔)eM]J5*leDCS1\MJ5fxzL@9zz,WR@Qr!)eWEDWDfOav_JYWJ'DP;jbhYB])eEP@uj5~1"ՅB!T/XJ] S_/FC.'u}DRv(;@J)kJ)T ا??cO=WX./m@uRr2S+ފ)P3~_4 I5kuFdjI)J)[* PEU2K:;b㣏ėn0VgDlO)KC -M)늈5(ٹ֛c㣛=iRʶ5)TchJe}q>6n_ѐ d\o@eSrP)eM)e[#N@VÛ7Œ1u#♔\J(쪈x+"lįv}r ǴkimuǝkfZR֕RTG Ox!LoœR>0e!0c&{.錈)ew(T)e]F/7;Rʚ"bkD\) `8|$;shsįbx\C}$!K:;?=D|ɧSLƈx&쉈P9$P&D<C?LWcgȻG#Ps MB{ H|ɧg d4F )e =`b& liD<:!԰nhj#{`W0'Prsqǥ_f/쪈XY(|LR:";5w"iMn*;̌Sݯ^\ʈxkx`P#bK -;5Z t7:̤\Y{w|{!iWR@J0RkCm"s8{4=PYZZ[c݆nڒRxJY(FvN/쪈`<'ߍCߍw>Co_UW_YFoAսw߈ۚǎ 翰2.숇o="biJBKp)eG}y_<~*'6u??~5WT}'?T Lƹ3v޾qxAS 4t.Ϫy =%Ӟz,͛;O> drtFVq|; / 5"|hӘήϲS<?髱K&{v /yyEoj#ez㏞x:~_W<MsNrf Jtӭ7Mu8w@ Ϥ=\(%PrR4 kk_Qwێwv|s_F?ޢvDSH;b,O٨~Lƹ>fͪO_tA\q#6>HR(%\ 5xq Z{;*~ˉtxBIuWz硔)eMj;PRVFDW -557 F?7wv.R?jT__ Shl@*翰2ܰ>yaL#b{JRQH9)eG31t +P#aZX2SWvcz\9S7c;p 7{;8+/t//bIJ+.O_tAўF}ٓ>>9Q q˜1Tt_- ֜%V /5"5rfqw|J D}]O޻o2m;׍N~/vw\X9v FO ] Vs}őoL9/(O?w=x?pȩ뢷7=~@U/u8v@&1"--zP+0ֈX$[qQ}2@)+o۱ǿX/ы/zUrgd'ͳ뢭BV3n0d>bB;FI8e`-Ǟz"D fw+ C;PCS|,1 Pz􏸭iNY.~XZ?tx3NsfUݵP,?0n_i}8n k`̤yBi{7Ϸw|T2"J)PP>&=[B}&wFti3~/{ԢKވCV/q[5N8M{ G?:pQ ?}]Q+O@uVƃG{>/kW}T-%w*5uE*iL+Ǻ }<P9"'8{ 7 5Ҫ/zC82M"@h_7u74I JJ@I)[oED4&!oY{wfPq[S㜲}ċ;&/;zO3xێN0?N/7Lt53/Z8#Uo\HꄞwŝV?^q[{ZlVok7mci0)/3hIgG<=$茈RʮPM1ILܗnr۰>ZZ[@E{x=\{ >PH޳&y(R81ڤZ冏+PrsqWz/% Z(/)+"VIcbZZ[bݷ7z0J+VD?iێ=?9sD|m3U-e)}a<7\6VƃG{>/{(&Q,lxٽ14 .5kl28& _Y{{Zuyv꿻/;v~:}yCÙxiqqDž3h+ܘ u&I|۰>S3[21"biJB-qJX)e#b$&!n9>,hߍYgG>e_0Z3}1=KE Ou~-9sϟy~߻n5"nlPN_O^pPfrsqǒΎxѣBΈ.oPRx M!`XŖ\~Ig\~Ii:ם=^{OYDG1b}4~f^o_;ލc{m;.97?̭G[%` nT6JqE77v&kRmгQ@Qr*JJYSDlL+m_7cwpmsu{sZ9tǏvvov`Z~7߱ΎOWzm?W{Xa}|ɧSLC)eK բ*;P1RʖPQאŚwǥ_& Jr8r$!fZj3J(txq%Mk/EqDxݧ΅;.O^|4E_&Oչ78[o:;b}>=*[5֫ C*DTJ(OH{>oޤ@.LZi΃nROV; 'bK:;Ⱨ~&3".=%w쥔=[$11ݰ26n-QLYe~ǑO~ݧㄯFEh`r|gB {7ۅ111vrRchԐŚw7 IDATjq[~ªܣ+O>84ʱ /;^;xyyi| +Ύx@ߖ բʕI@Y^&+'=7oRp`Rw}#nknSsǶo'ue9_F|wByў~O$32Y5V9O/Pyc㣏g?_*l1c;PvC1Nݰ2nÒPƹ޷ 9>Jٷu~U=-^~mwI45ΉO:F8?¾q߱3/^s/)*grsq_ΓOűG2>WFDWJBK@9QrJJq$Ư!5k6fly*.߹dix"hV68|$8xbLuVC}j߽w_ŭgY>->.8ʸ#^!tw d|E  %w, /xD\/[qQ}fMQ*޻omMsfRpE~ɄXsܸcn\qaDDxiSw}k^kʹe^/Ǻ ?z4~_ d|#bKJ' %w`ƥ}""FD4K|9nfA0%346'dc9kO;.;.qI/;*Onb:Am+@ZxIgG<8vPU(0>&`&]]>n \7Rq[{Z(aMnn#ivcW4-/Zw3g=?j|ius[|7 n`,[qM޼)tvLO5%/z#^g|ܲ+.[nݨz5Wč.;jLf4:Ǘ3 f#5TXa}\b0Ư3"Rʖ)JH){<"Hbaelܼ)ZZ[%0]=xX~%e/E޳ۢXtỠ P);^>Vꗛ5k;~-r9OcD2< `)*)l{ -s84r]0&2]V݅* mg|̍.;.,/0t{?4Te+7|^%lLGĕ|>޼).2a@?Z4EvG}L9OZ~%.1/;^"qy`/Ǻ ˅1~kRʶ5.JH)[CNiu77EKk0LdBt;4S߶c/LgO+xSij?Q+vG~š.`*pFٹXsׄ1~GfSNr)ewE3(5rqگmw. fLwatsUCq{{Z^sE]_w Q_w9tO_urVVJiO 5jيkb㣛ECEDL5%w`J=Ib|xpXaPJ;iŒ8|dc8'?/|5;L1]wǼ œi{$0KPc㣏g?w0Ƨ1"^H)[- `*%`*5Eqz&rs *^"7;6/eaOgDt 0)IRxDl|/=9a 3}]{Ѯ,ZO>{>IygGyn;Tn9}ѐ;qhWL;0!)eM)e[#b4Jאźo}#nfa@޻om͍s4M~kES dh~sxSċ?}5gbq6;.t0,숇7o՗iKJb&,RCQ|>FKk0574¸}c`#ض>w5WwG}̞¾XXv%;M/숗_=.ďWa~%k%8ZZ[cM776%U(0J-1%zXnALy:o\2__?vqį} Lsd;v/O߹dV8?;9M00!cfݱ#{ds;zT YKSʮRtC(YJ %k;ne+̐bqPq/^;t޾8~s88BS'+.CG8q}_/;ΎE8tƺ"@}q5W8P断&ǃ=4ѕRPP %w$)eG}(]KkK}Ѿ8/ AF./o8Ny~v4xU_/1S<{ \j?k *@|l|xfQDl.o0V0V)e,(6>;9S]^sEx;{_k&xn250.ٹ{K|YkW %wRʚRʺ"b4J[60B wqDžqm_p^k &cKg*o6tͱ[߈Öjg*liDlNi!ot{mE uP)|Cxhj3i[_wv/ߠU`IgG"+9K餔-(g?wYY{wf[̪?{m}JU ?O;Z {A ~!3nڻcIgG70J])e+ .q|DJ]$JJAT{Nࠀu+.980M;^>K.X,8`-[qM/{wqQݢ農P.>&R5r[PpK k޽w߈ړ?}q>{Xq0J/ 4p;)eM)e#b4JӞÛ7Œa@8G@@fb݆q cÖbNRr"="Fi^)r~7YΈخMTJx!Ǭ!;~-nva,h7=}f47q-Ԩ޾#p&SOD{*%茈W6;T"b$Ʈ!7e+F}} " a+p `fbMqUHLJ$Ʈ=?<aPf)CIZF^š{G[b_p 9? *Y{w|V.AcD29PEJ5 WIc^<6n9a@ hk7bi7hᔼf{ZXy:⤫pY T:w%ł*翰2}ѐ;lQtU )"{IcڻcT_wz+h*[Ms>oX~%z?yゲϤCyߙuG)~ׅ㰤#ܰ>V.p@8KPR>[#ScӐŚwǥ_& (A[S8}xq>Ǽ_{Eo_-y~k"""^1tS+>w\X47uOw?;"Vtxi/Ǻ onO26RʢPY- lJPRʖFiMKkK}ѾuE #h>\qN;;'Ně&xݧ/^EwyۗJikNG} 6ҍw&7;;LyQuFZՠ{O=/z*Yu#O;pV `;^,:Ѐvǝk&댈)eMʤ(luD cvn iө#" ͪyb)lhEmQ΍.<-[qMl|tS4s:#kxPa ܷHb\XnA[F+#O8/>qΈNW8|STMўz-Pam 1kbݷV\# bMsGvQ P=}%k%8jƺ ˅161Tt_) g*CJJcj#8r':)x~m'Su{{Z8jL7en̪?{E Ĕ9zX>i5kT gϤ/Be.)"6n ߾/ ?p8YsaHWt?6_UR_W'*֞8wлZ珸* g#.0^ƨ>[Fa"m7Ln9ZYk<8v@lKJY(@Sr26\pW,5kL}k_|sߏGđ?&*sC]t/ h!P3뢭e^8}v}t\}o)yF=A#NG6fAa]p1@l$-wG2殐[l.Y’!=!cUl7%1];YH'r'4iX!X=3Zh?{vJ?2@Z׭_c<)9(͔"Npޣ5>v%sK1 mtbRߏIUAn^ll|vХQ_Eת.#k߳\"=dapL'/=yo IotG͔}")g&"7SNlݾMVjHeBs.<_#^w])<p݂G#%y@hD≤aqMR[q/sC)œڿ|7/ )EL:XNrO%(-MwQ Awt;:("rJdukd_w``0`c_)c8uqjk\ vIOoA;n%2ʿ- vDu7pϏF%8{@<˟޶bXX( ,VGg?iҭg wp|rK_Ru/ 9||L_Dƣӯ~}>mP8ӺnmOIlrh[&"gsp,ܳ{e_]'ܽ: ˢp|@hbZHeYf= ?~W^;A|7/R Ɠ 12cjy&v?%>y_pP.^ wR~ۧ ;ڱ>2-ˬKz}?Go,'uvȋ248HA,tt'@rgҺn-c!%"+%OP:Ǯa^t/z%e଩ywB|jPc[]m Ye,uO b]b$@)44ֶW%Bx&*ozFn]v;wk#ܪo..@y} $&SIeOX2a*3A IDATڝIbH n?5[ōH~r{T6f1}1C$ ׌x⃲SMK*K>A1׀׌Хт>W)d9)/=yNDL @p\zyzihQ  ;qָI]mu* 8kP0v4 b!DR](<[̀~~s>%ˣ)Hj| kalIyW6-ʏTCڅfQ֯: E1xR4u6ihlbh!wʀ{|SS99):10P]נ.3BXTMUB/3T6Z 5FſD AMK5XR? 5q^S]5Z*?6[oZ 4*dR\CF2 tm_8=>m=2~g@;E|sS&')6 !wJHQ<"rJDQXF_p@j [ zZ=]wo#Q(bkݨ?/*ngi%*֊QA(NJ@rDgg}ʖǿF!!B fI`]4x~M:?o~Xt4u\r:?7O$?ȹ |tOnS qktk>AVqj.$70D(."@lɋ/O{248HAo!wJ{v.Rt*<j,TP6BE tYurbY"ІvX&ޏQ \QI/`w}f]#Q͎uKUe?_5Օ:GZ  b<z[?H@ElgIDL_D]S*@5('-u@^Q!g5Օo pn& /S mDdxVtxP$3ɳG/1Zeޅ) QZ8>UkG'ޗߍEx WȪjOTxg,\0_.^"j5>"V\"Dƣi8v <|.m"@rg>#OAE)hq*(Z~_C믟T"ӳecRMrGMYo6 uk(Oo{JbDAw;("pOukdm GCK}^ dkPn'w!q;xT"cyg0vWc>yϹ9,u` (FzJ]D_Ŀ8DRv=$ЈB#cMtQ[uK$>97X^Qׂg?4;7L{ uT*ۿ}Ru矡y&a+o[< 00۷ɭn>E1t@EMTB['O_b`pAk soIYܔ~'{eͪfSw47^ tYu3/iE%<x<*Ҩ,3C;]t~gQpQ(ukEDdK/Klr6tp 7QrC=3 >-cFߏI04"/< Lw"YeQt#HVeF(ukq8C]PfJ@ncysnR_[c 1W:.` }wէ߲aV:Uڡׂ??8 PDN"@44_@4#Bd{fXFnF!Rq 0˪zgK8j߿':'O˖4xAe\dW>6trrsʳ-CAwt=% =ET)YF5=]Z׭P.FptɌ}1ix><,y`׍1_7<:y""O$V0rNHƯ'ZnhbjPR(2<<yNDE2<I)HoPH{fN^Ӆg)NWpXhd\u;lŚ DD=n(Hs lۯ'Lu>Z5Ul>.T"PE%i(:@iY." wMWnF! f&ar8q ң'{$# _3 B;6K'qf<Wcq_>0a_U+c2z[?H̜lgAwm!wJTQ uOlo-B92 Z8-h7ѓ=sCA36cVj/Z]f$ uqs /OXbۤ(3`yG=3Olouk)0G,hWsCA9zG_}Lvs.Մ=ʥ;@_nF]29E)p:[[F1p$jsC9?뮓@H~;I-RB#'$HJ 42{6n^@*nI F$HK?-) $HVSHʹ~G Tg@iϿ"N}sS|H;,{zyuT4KkYY׸d4>Noi*59 ؐɶ/ceIG 9x?]z- :Pj֊Ⱦ^$;,{z >y:K" zg];9:}{:ƹKS8W٬륺zz_j]~MlnmMЕ\~x(248HA"( wǺ5tpxYu`%=#<~XT9&'i42,ѻCڵ(X"54N:QfՔ`G=;֭۷Q`yS\x7}'뿼DL?2,{ᰉkSl}sᷗ ~|C5;: _>E1"0%B ஍;X\=DuQ,iu$/W=Q㮓7Ut*{VrO4k ȁ#obtd8ݛv3K$24| 12HYe_;M/ rڶQYo7O|9~X9/lS"0BS ஍;׹5 &"20P]V[@%ȁ y](c>Awirwm ><ّԃf]ڻӽiz _2 O;Om)kyH7ׯ]_  #69{?,6|9o)\~z_?b; { d'p̂p$c9zRK3:yxÝ+?Q]'H#o~5OZȽnUwo@&P>C9oOg #0(k#PzZ!~42lIrtrNeݫ59^pE)ߨ WS rwm'wTmc qkV5KK_st@Szm˒h tR zJ0XFnF!T5/p]''U:_q~~M֔:x/H 4:; dϫ#Ok5ּbR|`F熂 !wapFK8bθo &熂Y`k]WaʲIOIō7\YVV!oK:g:!ZF| C`ܵp4W]F)ZAqBOw_c?cYWY3ާV!^w]FzR[RP?0+\ŀiut !wpF:gjF~5O$3n 5@g`0(DRۧkJ;0=#஍;0e}JP`Z8}tf)'{!% xG1t?H)@PS[mp0&.[ w|Aዙudes1ߓ(A~X")͐ʿSӂX")(䀢x;J{jK j߯*VqMc {n޽P]gah4@rE.Rt !w@IpO;WKp;%߀HKKˬΝ;?د#<*;w󞞞3 ra.#(9B!w^;fڀEioߖrY>;+{zzlY=gЈ{H$'J:J(EspcFTͯ@Ѩ]k\3=ya3N|lm\(P E("J\F;0p$J`ZAf4AkWmShoo uyѼADAw@)rt;0>!wXViPH%cޔǏihG۷Yy Aw@Ir y F-z]]{2׬vf#Aw@r.^61Ą:<򨴴{zGmu>AfP @1rHl`4v)/t10P]ɗzv؛r1u~ܹu"R(jJ(4B~#iW^wtAumH75EQiooK^g%U,EP0S#=@\|&봵KSS.ח>YO=%#(pfa}8@j  i)Bǎ)Ǐ\K[[nk._,^w|-ј҂ ; ooP^pf~42N`5. }Q') 05#4Fޖv=<* yg[&"/P@!re:~JDnW%ദiNE@2(]KQ>W===y#߀:A6) e䋐; gWܗQpԱco4֞H{{lܸA'Ѩ:;lA9FSB}W]XOK$5ϯR]vn(H`Ix2}[0uvq'9s:~_s~h4)>gc||\w5v*$v['tzJoR @k7^jItR<dͪ%Ov'L-y(~JcQ _BMW  j^Ogߑ{G+d}JZpX"Ʌdvhtuu]sO^).f|_(s^w7E(6ࣻO[E SsJ̯ݖ-#C}(A92FipK4on`jooK>oo&MMM9?ƞ=]i/Zm;Q9A9D5ETS BUSTUiMzn(HL,Vg'TC#cw4MCL3j]6D`, _m}i+VGݒc;ӕv=rkFIo PtfN; UTc w`eŞU]hܽze F\X")\ {? BZxȿ\R}}}ޖvviii)9'w@}eB;`7 Op3aP ȁ#o7;i[Zl06H6x9?ʖ-} /mm?XϱLDR@*LOP3</S e[=[_,<}?m'/ug` 0sCҒF3ghb y-9?ƍs}}y\3tK9H"⪀2oz;̴:#ѢmkT+oo ֕e-Zhn +ݶ Ӈϻ;wHAΝ LP[]ϱ;ZW{Avum@Dî[Y՜w_bsj'r~̀i]t@۷>ooo#G]oǎRuτwa}YslRfq=%LD%>vi]BLl5VWt+[sf~Ocu* wY~fX\ݽ}8"eBzT10-X%fp߰#===ُ> {٧P R !w(!> wF)iueg[3)U})/ yyջэPP9]jR%{! f0Cmpu]=#7)+,D PF---as镕յ'}ӕQΝz~` 4xt|yu;W~;倢xƆQ (XTO['XV sʧ#{AwNC}!P~]]{W#<*+Vvx<ެu!ٳ+zyС#rw{0{Zalp''*g9ek;XtwuZӨޒJP,ܶ%˚ݾ%O>Q{$pqDWqYlʮֱx}$?9&[6ZZZ r,---y﫽-oEDzzG>efGq#T)E`MGp wmkTC#{>^LC]X/w.WunesHK|=l :tDJr\@ :"AYD5E,QB`ASTﻗ;@CQ1Ww]Ft~Nt^<]m}Swr7;Iuh]Ŭwa%jXNK!WVV\2 ED.\sZ.F}哎b( WQ)w[#[ȀnxBd(hbmSuw+RN;WO^w?rY,d*粜Rr QO&ܯcٺ}ǿ=E0Z ]ap aK&wN28lcl;HmKjk 4"DRb3?ScU\~bUȟd\Y DQٸqg~ggƒc_ǕM'8E)pp3 1p?%S#\!r1i3E:{twNw]^]:kĞcίU XurܿX./YAX] Ùx< 16ݦL(B|>~!ٹs"mr{x]""ݧlRϩAJG,@Q<Edrm!5Q9?~%˾wdͪv]zBV%:熂9?'cӚ=BAF#;69rpFVVVʡCGl{̙Qϖ,;`nųS_ӻvP<|+_^''NFO$ 2bBs݉0XTcQu4kt#Nhu߿V6\>JjK4Vڡ.!p$>Vh)ɱٲQ,4{___A3ʐAY(p,"&("B{Z'vvsb@C _@u2 k')4Z2lTUIn eo?Uuݢs ~>sm+5.wmu׉]:'OpS;wDF~SրH!wd ,ų;!w0)ETb wR7׷f߽)HJܮ蜎RWwO~#QI$?n^n+_^6޽Z{vKH}a=E) 8`Y(f<J{{?~,m~:tD\ 3=p$`YP%SA[crRryJL!+r*J0ۖkzZޟ^wTWGÑǢ<]:5]PrP0y__lܸ!""6/]]{tS3gzއ;lceC? &CLFQ<ȩ?-t֧pJOo[z%wOPH<4D3ڹ) (RWVVly4{ggF]ո?}Ak,r^\(Z:psf)GǦ-O,˪˵BjA\Ҿ i_#? B>#X<>rl===rBfTVVʡCGv,C!xϲLQ<y5 rJFZw}c k-&hre|bRrߝ~߲H}ygrxL TMr}4'%\I,뮻",%<59XB\.[_*2Hfg!hxƆ ́;x +@~RMݜkj|,S;jcQ G>O^.][`)OeeQ-;G趾1wuGwUQz^^wAOL`lųY_vi]Bpj-7^.\7VASN+VܹC9,"Sߨ3LLL佟% S_g9(:qrSϽ"rJL!@y-nYD!yrIWcd?z}:yxÝ+?-Y%"ų|x8.P`LQ0&E,Tb%(`h$}455Q r,SŲyÝ\8SASM))95ݱnlykPrr(f /mZf+OY&Srap(,/O!SrB0,y,WM\D"s2r9%S#M-s+[*<{tqO]EDzKoͪfiiflR ;R"p]8o)"^["xx]ݧlUfA BQ<;Ed ?!yN(x);fXXݯ8(Ք;HTB~A=wn;kDYRLy/]G!D^SrGtnTBtӻvpF!B.ܯuLOAV!O>HLݫ*@MOQsre sٻ;^N/:$;#,4p=sb1LɅ`$dƆl$s',<Pta3!~3v}m[?$l KVw*I}QOd5OϾ}Uo>c8%g,;z IDATd6JFHk=JQ[v={뮻VׯsuٽG{q~P](2 rKv}i}I=jE:hyg|vCnb1N},C21N(K._y8Sv^m޼Irӣ9رCG&LrE34YY,"bUҝ$!xk r͛s玜mݺkmө+W9 l%!`Cag-$!]qU{ l޼I55KtY9}iϞ$hϟvqfB}*-a^S(qVbFVdJ!qj%@Lٓu_o9btܹCO?=unզM8I/wIYuK5Ҏv9 kcxfE0F HB:A2^{WJGƵiӃw߾}ڽ{&ӣM͛-K+Ե^;wL> ؊@કuZ^WHeSȊ$we#O5PWwya 8ܔohvz7oMMMnunu 6=8~͛k]36===-ښ,ikna6"`v1f_dW Y#184+w-ڷo߸޽[˗_͛7]~=V-__?'IڶIϵiӃ>O4>.Y֭;q`vQrYdS/isw@ijn;<9}BmOnrW=Uׯs=;iQ\o^yegZ3Z\eC.m1jCf1FIwMf{߿_[nMԶmO{QoogG&m`ZYPf@(`{+R(^0ƩeEfIHBÛ(@bhV+Ν;$I?si>Nsͨ4? X oeSɊi6z._y:g>lݺE;wcm͘\>mڿڿ5XI-/Cw{ѽ@R1N!+ҋ;ކ'v5WQpdΞڼySFe۫MԶmO{;%@(Z^nXv vIZ*=fV +uv|Y+~rݰZǰCd2PU]MBf!ȊnNc HJ8%ݧςd5&gD|H\u5ncլH=/@j,isSW8/̢0)}$~J#gn+)`$Is%`GmB{g!duK ! ZF=nA1X,Ȋԡ)dS+9a};:~BMͭg>?㉔F eϖ w(Z^z3oFf!}wՓP|AG]H J"8Fغ_<V(ݱ'_7>ya |2|ih<܁))/Q( $=.<,p/h5+R;.I ·ޤ/, k瓝-/9qiHl>+Y[@i& n)!Y(`rk qbH>J8~Ǧ}kfAps-ƗF ǝ -?[/+>;A8!dKk, Ot%71Nc,gE@rQr$3(Np5W?8uF zTVU|<XJ[[P?&)rK)'Y-/цuת7 #EFV$%wH"cՒ=/\rxx3 R` ?q󞾁37-/9qiHl>?l/%d u$jt _ԓP|W ưuK !Cwb߲" 9(@Jjp{Uz-,0No q'GϖˊFMEӸ( lݵn|vC= H=[n@R1X,ŊI`S(~ ka}+|D`7ZZ'k?}cVߑK#E'XnJ1-J:m7vDIjeB 2](185ej0DյB᰾GH#V_ߘ'cu_T ׯE$L2Ww$`Vw$WjUE+W?}xre0r5T\ K5ŷ`f( l9cja5 5QqBqKkp~s}4R($ `7ZEϖˊl0MKnq7ny_߰nRR4jt Y ְ 3P(`{ֻfc1ocx=+;̀1I=o=I_Xv e>v~-RaQ~Ǜ~EZ.!w'?/9ϙ _)4 IM{g*ukg^<#/JjkK_wZ>9>]O>cRoZQۍqcx#+;L1NܞÍܬ+ MToiiѱOZƼm}:r0~:B$/-/9qiHl>?l<=ēz~v+g 3Gu׺5/3 l- 2[dx{Qcqjcx+;L1N]nk˂2&M:$ @N: ?b|ipe@jI(R?6W#MjqC[5T[Ţ%ڰZտ[#X AjVL%w]~ǥkUUWo|*7}ZZt,:~v }cVЙϝ _9[~F 4jjN`'~ ;?xI]=9*GWcQjۭ2ƩX 05`qJZ ݧp^8mxKK}2mMGבÇ\PO_z^cSϝrR)R.esK`j&d8%ZRԶXrM5 ߳f"E3:FD_JG5V+-Z^ U+o5;qcvV;2ƩUҝN!<':r+W%8W#Mjq)/7o_P4\P~;+_5Ha6VK,"n;{_vkFX 06J\fI HZ0?e #)Y0_+pnr{qNyV-Պ?\z|֍W.W[gv߭4b߲|1I/⢙лIOY}% *onER[ݵn[Sf WX,j,"&8ELAdFjk%~}Zt߰Z-rܦfᔏk}6jtӕ+)'0`?c=|e8X|+Qr% sUZ\4mPPUL9f^yjkT[G 䫨싴5cϙ 5z|6B@Z10%Q-j`pHM;V%Qt~)Ӂz74Y ܌;@iǿ/U8tt*)//-:q$d@55~}v2esKG)SxpA}38}Ss%<Șo޾V?CncX,jV.ziӑ^ۯ*Su .Oݣή2g&4:XR5xJ $ *RY<[#eSŹ9WҪXq.WT0GEcm{OK&>W cYb UN&|ߗ|fqx}>;9;FOo>F9& ,húkUn<I V%w\,`U^6傁oj3eفT Ti*Ҧ`fFQSGO_sKۙK&vv.ß[oniqP^2j]~nX6)7]fꙢc(*,kN^H-:u4ˊlruv/'ٮ7 5%s;x$K (@(/T^T0GEcι-0mƥ>+ Jq Y4C4jni@@)9O sd6%F&w ?7=TGaݵ 7ZcX|;+@I*/2_IR4#963/N4A^yjkT[WpR(`z[~<斶3] B+&~O1Nc,J(4U o!LZS|E`O@G8q@ 2J2+wvWGG#7m~!qEd"Ljy^^Rx,YK>Z;Y# Lycv׺5jjnUՍ`Sř gEd``' ~U v@,VT?ŕdKf%+H(y,չL D˧!=tz}/m^ iZV\E[f[2&5LYb UN&6`s5"`-{<ٶ_>5S٧\*uk;t3lY rӌq %mt'i4.nOr66y*M[ڒrrW#R,BAYC'uo378X Prq6Jڪ o$w ^yjkT[G@DB%㍚yM l%VBCVjj> $㬎Lt3()8vYw-m91KKTC=IdP((9~|>|e,9q-/#Iou]d gw(7i,]V\A@0Y ܑeY*/+֜[ZuiBpsQi܋ $mx x|^^FDg>)g^r54Y rF&+I SutّT)I$f1 IDAT Q|>|>lOR(Ȟ||;FDu7v_0i⍬َz#]$Lޞ{! `^yjkT[Gd8ǒmۣe)` 'Gĉ1-j]n<cX,d5J1NIHH:B >:4c/+&HħEv+ף@eY }>?}4=1 骕ujj>w۩/T/fVlF@yb }ڒ0ɝr_UB-%.3`f$ c}N/'ϫeYRO8Ӱ:GSڧ;m7|QMͭ7lY%wYg$I2ъI(lA@,KeŚRsKNbj$C($4H$O()ズ{0P7o_ǟyI!6cX, Qrqj%m# l Ti*Ҧ@E BH3>FyY A +ϧPm%JLMS{r"Es;x 8X $YPRI!B9d +S1OmjuF#EvDz eYS4C54t 0%KڰZտN@=լن;lT/i1ߵ9 dH:ܢ'N|Fgw!d$<博d۶|^|^[e) R{)d[ƒ$2ŷ dJ1FIkI&$_UB ꦔmۓPr/䍚, c}NOH_;x$%Qc]X|Qd cZIHS5H護с$I.W")aYJ" jniթS d,y,pq{x~ DJ]1Ne," ـ;`S($0UC5ŏځ=i#gyl?&e!-*|L ddLr/Cx< ly<ٶ_>W>// "0}_& ـdꭷUpTS~;Y3ѽBeTSgWZZ UړRrg2T|^|>~A# c}N/'ϫeY|@bP'N$f(:t45#8 7h(d*J2YĀXxwƽ׍_^8Qśi` A 0 bޡwGj嗩82>ٶ_G-#SdHP&Ze5o% ;dQZL] oo AVeTSgWZZ .?o{F]WϦ@bo*,㊵yd}|m׼$ӧO@jl1wL(V6TD&rY{Š_~̚|U ٶ0 H aWSљ+ϙ* 0_s erU }*-TSYIDE ܁$ЩS HcBbi2򄩁$0Us/_Z{~8ob!5ۯNZ;C "A8xHK/"4x,ٶ-+ף@eY ̢>BR@}D Pri%- $/OwӸu鲋3T@9β,DʴJp|U>: dUJBB N8`Pr0$iEZqenӸCj{uQ<O-KbJ"Y_ֻx~trK dY`j@DKONS28GiwkȟIMRTJS!dܣN/g%p`:NH(hfb0(H'>fKqdn I$/k 0+`)WQa>a@H$Tp?K},KpHE*-)VuѢ*]y0Yw Ttt2)TOmW_JyoiMz_֟}k cY¡[ZuiBY6Hm?ԕy S{" )yd>B2KID  F_4PϿ2axyVF  fT ~~G!SiI4-%\ bJK?'-gX{x&l%$wi3DgI SD tuW^pwS`leTSgWZZ Ҭ)~T?~Zp:>~zy$wA'-3>F`A~B2c]X|QHJV@uth4U:p~8vʫ Zye + UCC |_%vW8Q `\Qr:qz )ܪ%Q I 8X(%w)gS($Jw~YOlG'_VSQ}[tHd. ~-pީήkg>myx-(/ey kQp -%S'18Dp>U ^D ,"%- dP0~˓*_)'exx6HI>k+h~<(Spz]݄t-{5# hH)c $ dSo?xEyOOlݿn0pH + I?Ǿ~8畕~/Z7c| Y$&mpN8IJwwvیqjy%w)cS)@V:ҭ2m|tH} 5ŏuu˒al[sTZR,bWP{GǤhQ~.I}̃ :xc7#?P8Ӯ7)*Rb@6Yye+_Զz{OgNpFQa*MlOpm+X畩UkGoIroМ}Z}VZV^&i+>TT0:D:+/L‹/Oj~WSA2^kSNfp+߯m(/Ͼ𒞫ɔmnѦN0޾:u ._\7r~jNc]X (H:cՒ/S(/ n?ǾV\~t-  Y¡[Z)ȩ߂>|>!YG``Z{q~GIƵCi\#I#Ҩ`8ܤ\Nx$}߽{ua7v1Ne,bH&JPR=I \b}mL.IyO`t럜/IK.Z"T'/ʨ40 YE` R8NhEϾ^{So^YV-^0kmeǠ`2N:ă l8jmTgWH דm&vIDC*W?^[W䄁ĠN8IYww~^9|M]o:w̔EAR1`: ^b_nQ%u*xpd$XJ"2N<|^BAxnSJS_TJ36Ңg_xI7y">>ɬYP a;r#?P TI# `ƌqث# $KGtQr0%- `Xa:2jimW^0{l/ǣPmyw)s[oќܧ7Ԥ}d'OI#?2મigc,Σ`:(c%IAB3J":u@Yyd}XB,Rg+ׯZuǔ޾>=WOݓ?7\w "wSiYxxjn:8 XSEjr2&s)LMIBVFҪ޾Rd۶|^|^EikpX_w[RVnw]=̏I˱Im?U#`<}Vp*Sb08q jn9e8[cV}SAl$LEs|5jh8 >'U˲=p(sCk@xB))KSpoR)Ûp^X|{m 崷4bFVɢ`Ҍqj%m% $[QA>!@ ~U @zQ(`ȶy6ٻ^~^='I˱);[)HӧOo IU u}OW>O'";F;xc}ぇ?6!D9R<>7iIu$7r)/Ս<&c2U{GGΟcW7uBVFʴNd=ǒm۲>y,KPPe)` WE?ŋ L ڄd=:k\IHXWtDH^f`ƻcjHe٩dovӳn뤍FNC4SHB@htB 83w~53Kyd~_M#T8UnF(TB{-t UBB3:Ҧgβ1m Ȟ8y'OQBB>/5|8gW>NSiQww>J[yn*;7kZ&cTIth7ϙ5Sk[;;󪳳pԩjh֋wI:TsDk3Q?ƶG}m @zg:f`yrL?K.i~@:ݨ IDAT|vܾȱ[~^C[TAE::RVc7BLpEةX *^Ϩ@Mm]U=tyUSjGh*1qIJԤ>%$$I9Fo~=ʼ!ٳ yC0s;ֶۖv lggx-%?B nk왃o>s&FKeguMϜeM ǣɓ8y^&OLyCPk[7 a(,.ҊUze{s(T8B.c]*^:'8 r:GCif!-u|>O8Ӥ$OR^yi ƧCӦ: 4'?QPi~_ǏsKUoBu0}#ع8Z$p'Iy&[uı쉉JLȞ@spv@ JO~ȽW D}IU 妨?6!wW}hu4bHpz$[oh}4$Fy rsxJ (OR&%$dƧsڷg[Jb#$>7$;WR@<@;G}S ߠ$$(;3tMە2iRx=-u2ؙ5ٚ;+O927(8=]i1&>5&1*P pSةL&w@B.>;NUC)uwo$&MJQJO;gҤy<%Nɓz uu ƥMu"4w.[ޫ}{jcP] 'UM GƄד<ԩv~$1-UvVPYy?C&e3dOٖ6 ;CRS܉;BUT'>I㲂>Gn,w뼾϶G}`@pzI筍Ǔ4d N35`ʓɾAٙA;:h0άdKn*{)܇;2%mqŚ`@]~z=>Gm]eܞ^[WgWg[yE> rs4%?{_I $$(;3+nuOL,ߧԩʘ*cg*dM HOSZT}^%NLSR8f#w 6mP^~[M sorܥJR ^T 8^_λtv(pԩμ,^#}ӕ&+'qwH ;pFQVdr5.e{r\{r7՜M~ dW ʱym׻zDQ;0! v:7\mw 'j7,?Y9jkx]Zόc9ybƙVLKUX4-e98P%i ^~ <-^x|>5v0tu&n߲RإLp>Bc/T ij^rw/[zͯ`ζPza_p1JT^YᦒSVk1?~q96.N7s R@,im >ĈG6* {K:\2^*M5/XTK>i[5gks戾ч(xV5G!lqblM%Wc2y~wS`m/)-eʨt^51{yWonLlk;=wNbLaqVr͂IULp&BcWIᦚ++d%[ ?ΥL9j{LuK?٠;)LYe6(/?-c/er{-nyŪR1| |ZsfͼqܙVİ'+Tn1v*S;'l71uȣq}IFdp@ +ךwK3$U1uYb]%M5?Y!+b?#{8Tsd}>=džt~K7_TsT1hJ:p&q`u*,rˍ2u9a=_7ռW1*9v>sC:|^u=GM4b@&q -,6Ne3rbv:1xC79gzwiu?G#FEo?!O tSj*8dZ?c*InoYz/1x3:9jꇽ1}[%I}C:~?ՍޣSN-|i^VΣQ@ZTޣrcPLolr1v-nyu  WcѽKR_WwCqc}}}jGhu[?zUow99þN&ı"eܭL܁Wb iRqxztsy&&@km !8x|K_Sw24JT^Yr:q{%noY*;\o,'rkߗBZiLvp5'7 kN `HK`Q[b=k2-1v*7\i GT٪_h۵w/|Z~FLQgהd _qnݣp8t\5'vJbT {P7[-;b,*ѝf*ϧ?]9-^xjܵln,G&@U _ᇮfz@Kn_>v;Qce_on_ăhe;@cl `;+RyeR-6Ʈ ꪘ<q!IKRaw7(q3cw̞9g2Q$U9'Yq[WO8z#GUt|k|kgW/H8P[{&jmP͉z<|\M-rsU8;f *..тE%ڷgl] ՝`@|I@|1NM5WVJxg6|k)8|`9>rT<^ỳ~z+ȘƃppGD*۫k֏^K}j7JtM@TWVo""M@ h">g8|FX͑c79 5F4ǽ~ͷ.hrm%Z{caU>]umW_Ғi틮{ᚣ<\&wvI$%jVn gdh<&lggx .1 me@ cRI^eLf0ch>C~Z{*ekW  h/^{8}/w]|k|k>6jJrԴCq_ C 7@X KҬp; bU^پ VcWBu-L܁8a*UIV^Y!+bF乯^g{56?ٮN}ᱍ珗J96/w/\pXソ_\9}tceApX^>^|ؤ_fϐpylpvɓ') ]NQđIՒJ:J `Q..a.2E-(ںz4 2E``n_pxȁpG#o|Sƫާpm%Z{j4HRnY?|(!wv&Gf}jysrU8;O)SXf%[*3O`=s>/tAzϝSwwq+Yٚ7'OTRX\JvWdsC&6B@< Yl8TsDjg?Wo/GMzg؏^>׿٣#[{G}(ƢGyOSYܢu9Q?vORffkVY@|[~٣.#)$mf@l#8c*I3RE%Z\lՏ9;;ݗ~CO+3 @v]j$;?Fu 9m/oךV0?BSs:j / lYsKMJT^Ygx c`@"0c@0 qw5g+nttvju-U+?ieO#`𑣣pG#Gz$|ψ1DjN)tԸ%]gpv8<{i>Kp"XUWpCՒr:m-l1u(-eʸ?Ս/{K?b}w՞w!h3lmcy2&K7gB(aӫu9Q&umg$%2o5569UP]Sb!w Fco-.[~ <$Ii)S]٫ԚVI^%iB}ᎎo߮ʼ!8xY{8<2<}}}1= Gk{چSQMp;+Ryey)7:;CAعR߲TFz~%*=}}CeL9g^zuvv*VNNe%#41G/o_>baDt|EWmC[rKiŪR}ʭ;JJqK-A3r;yʱ5ovE"j>sٷ{Rݵleaw`7o_r9rt34p0MQӫ&՜S͉zuFv ׶v:۳GMMN/u1Pn+Sb !w cJ-.XTK<&Dm]jGuk~KU~/HԜQ>J[~^9E"4՜W͉:6mz5+7[&+@+Ryey)7[e] յ0y vrb1v!\If C MQKm]? ``a4s46׫-ʵ5+OH+V;^jjIL܁R%i[-l1u\qT=uz}mY  )󆠲2oB#@km0F+6ۣejuvޣv:j.E::^KC7:1{rԻ`Q..a𸪴):v~C]>~фٹ>񮫻Gh^N6E}[$Sм9y 2 ` Yɖ++Pn1P;;Pԩi,.dGΖ @;F45\שTTo;y)|r00..тE%ڷgK!i*L5&q&`Sj O̶Y؞2Oեk4{G%޵) 2x [9diM_ܤC},ĩuwEMg'<Hd IDATOUNf@&?YʟPGpzՒr8}܁{s¢yZOld3tR%-e@rk71q N 9L\v[Ӵ[b!smohX[Oޫ㡓;&җI/_pL@jXޡچ 55L$%s2Jb1$+ך׶.1. v0u :QbTҽn Qc>5;&Yv-[QIRrTۿ~}4Ν5u?ycy&Kv6-E$={u{d;8 ɇ<1풍Ct]a _ܤgt`oj>&GE =U9@{}`PkׯӋ/|>xaL{܁q`=_7,?Y Ujh<>SQZesl{4}JoUK^O:_w~k߽tAOgW+ߡ_FtO)Pɦ@jkN^jN}$%V.վN/uL{܁{r) 2qDUf0Cq>>wN6ֱ|օ˶WW^WCnj\  qbou䰯@ wDt|8f>` -lFm,6 me"1c$-qCyZ>9;C;~`?}sM@T<^F7Gή!_籇װSMĽ[b~OMHeK;W+ך׶VcWBu-L;܁1d*mq/Wzx7zzN 037vݍ~WՂ iN#q#tI=qf$OR2YHOeK;Zzvܥ&'CL;܁Uu V*U^A>㞻o'gW_WK ݷ.e3h*dkUh[+;߼,>==MnE+!a@b; utGMjm-WudNW =¦P;lBā!^Յ'&[~d6ċN6Ie؝b)S,Sy +۴Q7>2 &!w`K*wCEru)C#m4WJj[ػ{zOG$%nffjj%1* _k_۾U|&!w`ODPi#3maqj .azWw^tYkqq}`+{0#MD,gV^;weco2q`d#d]*ij]+gq$}4bH/w ʓ(P@V =SN/:karF;U.r*$g74i'oY. _5BW6=e)r2zHO9EZDur)$mfrFfn(G6J8^fp|pĚ>;:h\ASse?8.]bom-ɜ>^g+;6mЁ+e_;0LعJpq C3Ο\C~చ^rym8>=&OR"AvA]N/-UR& !w`P߲TiClq&/xF$'+vvFkR~m;2c? U3q``Tx  ;pFp0zNfvl=SN/{G(Tā! O6@ p" 0=&'Q)S,MM2bAaqV*+w86KbrmTK[;M ʓx@z&uIlWObijuݝvN.^c쥡PL6Buc/j-۴AV2?LWM*T-+Q?.xty(=6dg:Wi6o|eVKer Eӝfq*٥s4yHOVWw I䲋70Y +׊Uze'9{s(TWGc$-qCe62p8 \dkׯӯvReVcWBu-LZ\1v$WԊU+gq,%dKN/3ER;pu/<8߲v: ?G#8%*,2ˍ3mW`+ij-۴AVXk[;M(OV̭L2B8 w3m8קpFp@052c2mr܁1^*^7Zi#s8ի^&܁+  c+ i5|ޤa_lkļ0MHVq2UL!w"؛%;@0W1pJfpsbZsD:i.:٤&u pq 9ةLɴw YNV\8 Ddj.y꒯-SZ|s!MXe6jG\bb@?BT]xp¢ysLZ2e0^sǾ߫Ww.p|XUWprco >`!w@d+ mG=48:٤a]w?ϛ)|/gZ~~s"N.sL \x+V* i8@+[@{);䜄8ll}:%إP&#3^*^,]8D#B#= lR͉1 ܹn~m?2J"#d{٦ .İP{dj2wnPi6o|%0 mep3Bp5c$;¢ys !Z44h9QPn.M+k{N.:kap+Bp-cTfF @ yjͅu({dy{"Yi*I6܊;l'G[TyL!?G#M-ۻ{z'~x5+7[&+liuzo9rc쭡P &7"W2Εu'r8G{8B՜P@dHOe8\oR~m;2%-ep#Bp*7v:Ylp>:٤Sj OdN׬\P;\C٦ z执\c쥡PLnCcT҃N3/?_+W2pa;㧻W?}7m85!9m+,.҂E%ڷg*i>ӆrUȲM4Ä;:hj=:h`6mЁ+ܟc? U3m !w1v%Ns1p">g9& }}}lr`zC&+ OR"Mx jRm\f1P-m:@e`ưsbFk[&0{z|S-2Yd2Ţ0NV^;wɩ%ΐYRӆ[rkcW]F'RA0-m26̓(ЬlBeV5en66w!w1vV^9uwѬl՜̀LV@Twkktp"i6܀;ܢ7xG{ 4p&0Ζܨ&u^ۄ mڨurcWBu'6;;WR,,K8ii )EoB'OGKb[^A-Kw2%-ep:Bpn(lF& ޽y_>E``8`h4.%RY21t&4U c]*[Beڪ U[ݸ*:ucsGȖ%$KS)Q!-[6"(f f0p?dHӘk~*e@&&bzzF#`ߑ=Fdؓx|oGRIćJ}}5mRvRpD|8:v?;߻42: ې#zR/I:!w3-'?a;@ʕ&/S.RkҤLȝdJŞx~3m8@&&bzzF#k/=mʤLȝ}:|3\Vi j";?NRI*!wt2SS r '~T*n2iR$Nrn޵gwtc*W1;;`#)L S7IorUO|T*6iBȝLq`}(|9v԰&4'ODOӦLV ?yw&ST5<~DNfeÆ D&&bzzF#U78< 8}8vڕr6e@ȝ,8z_7e&32: ?~΢MO~,J^S nH޵gwtcMft kڳ;O2N5v SUrwasݏyǗ4eWTcvvN#ԓxm͝F'NúqݞrVQkk&UMh`;߻+v?rMF&9+Mhpgls ӐacG{"_(6@)W1;; ._(cG{R.)Өq\m-Mj\8~DrT*6e; 3-GDnCΰPRmőcIos?U*74Fȝr@y*r8ra4rs!GMy{{$$i4n0'?f;@+W5 crr'?rpiͰ=_ǡÆ Фʕ&dСÑ/S-6w;$-ryY3RqGD|*v?BX  qT˳͝5'Z:zPT4 AgmsgM &nlq";c;@+W1;; jmM"ZIז@ijV;9 9hrJE/_KrUX6û S'RwjMO0!bN8[LLNNi*mRq S/!wb;ͬZ]6wAȝz%}Zʕ&"vNSS/!w7lq34< \8rhr) OYBԍMlqkֺ342qI8{b]ܴQVInC.IS&L=Y[ܓ=+MNg;jJxRk,;  oq?a&Xios?m,;M`q[+ķ?l,;tS' lq`B4w\hУf͝xPˍ-@;ÿ3?ъ=~|Ԗkk F1;;|g덈gMZܹ`;0 ?j<4c]Y;rmF'67mqpʵӶE'R ?Q*O]5=sueN~ϨԔ6S}}MrJ⎈x"1dȨJu\`5 ϟ~)gh߸&u]l)ܵ942 $)_(v坊76û3dm\9vԄ }wXᑱ[Ξ3:r'ِ{TmmZO*""UGDnCΠ |/jڻ'NH8s3n8c;d3Ϛ4'OZifܹSv-a/˚tźٱQ@ܷJ^' 7w#j,Ĥ& UԹIQ|p.?Iȝt:ك{#/L ~k`Hup K{T*>l¼;o)==v&@2G~Mhgirj:VuF*12VYɩ5Lַ/=7 Ƞ{k8S+T$坄ܛ@T=)֖,ʖ]q҂_O XDT C~sGݏܟ=0Pħzi 2>1YcmK2ࣇS J޾OpܛéhOC݇#!gWQ٭_I85=m`-HSu?pocſFQ Wy7`9x-n7 &wpwYN{JboDlOݏDP0dHL j@tlCkֆ}SNjXᚷ? oCasm'73d}[^]ChG_q%o~G8}8>?j%>{#YN{zS-ȱ 6s5%{>RMLN{۶-wVr׶-fcXE37ܛ\\k:> M&!ǟ}OR+RxySNmZRx(ں쎝eDM@`y2!lܐ[+& 5I\j]5f>ۜ8 yG>ғji6v*XC#6 r&4W^&Yr\]۷6d}SBˢf|g5ŜܴA؊Z[EsӪ?{&.\& k ,Y[k&d\Pݏ3_zj&.!DJMD|;ߐ%ٵ}kTcDŽ` F2t rfr&4Z'@tݷ#>yo-/|sՁ!&tp!Rw)N{zS-'L2=3C#MdfvVA𼷵[AT9MȠ|x͗U4}U6ߑ;rqynkڳ;|J;Opu*Ţr 6sos,9^񥈿ۘ,ɩyo[%  Dž+޶%6wlcIǪ\bۖFk˺$}XN1侷T*_pzT*{"b{> K@*1Vj"LNMk7=q].uM5 !ӟڟZi"ׄs$TH@B\ pmm [̬Mˡֶ jbN`>6~P!w>bYOJEgt'H=1RqGD< ȰB+ [̌?ukBsr߶%Aq ?ȱі˥X)M{zNZء4 2dhdT`L` jܩҒ{Ő w`nzrr =)ֵgwtcٵmC#cˤ`iq%MGw.9\mmss0MLN{[gn'@PW{[9 ʠks^*{L7-Bi鉈 ;-rcF&csC Y,c)7K mNtOHPP=S,=ZiPq[R077W jϿox.K}LLN@-ّњoAph@Om[ǎ39*;.74䞈RpDlOC#1==d+gV="/rO:2%?ЄZ[n{~35Ɨ}aYŗs/iw'@dD<ij2Hi#sx9{>Q{wl]sKqѲd˫/EPUqkmYUZ~G.i,cǎƿ7ZYRt_E0!JD~$rMdԅW4ъׯ_m~θ 9[ؾwok/?ؒgΞ{+?8x/C?gpoYΗ\{!('\=wq_=:fο;}8>?jRYOp 7Ž"⹗4l?{Y+ w1J`3^?ӆr1۶ܥqKtRf{ƕJވ؞bm;jkC1;;Tu/}ۊ[Y\ 6>`rjz۲{d4J9Ƽ;s|ÆYkε֖֔7س׶-5}o33k_O/tBtIrKf/b8~Q`^.^jr#Z߼ !+ שLKj32VxMs!wQtraД]HDTd&aRqGD֯o5 ƒ5oWrj:ɠՁ6;3l;NhGsS< /OǁtܻcklrWlrײVNzɩyo۸A^yBݏѮqM"ħL6ޣt2 )ֶa2mnn.iT5Z[K-242 Kg|3gLׂgΞ¶Bʹog<^{-n(]{['y+om~+~ʵa9uvfqp|3J%JŇ.>k$]=O0]`Ulo+ K t2~}lkܜ?#,Յ+otBHn6}ɩxWnyo:x-.2<% 湜jmOaa/~~BnC.|멕v*"5lM 2KNמݑ/LX-+:>#c@&]x)Լ߻[ijzZVPBx{u?ŗTCz6g۫o&ّgs>/~37pFcd M/.;L73T*/"Xcǎ0dܕ4I*mMO@y峋66Z׳Monso-'WS}ǯ+-_|G!FrNLj5 ړ䂗^&!lJr{}.dPLOh/}%^yG5{(W/ܿ@v6ܲn]þɩ%mNŗ_YTx>"m6s7riN^Xqchz#7\R߂▻4 |pel6 gLT=I0dL jup!Dž _J_G~V}_s =Sޖ԰Œ6%݁J9 mB)kջؓQ#oO Yڢ MP򩕵T*ngOODXؑc. Yv@iu_PgoyX_.Ǚ{=bsd^y -w?{7mۖbrjzP}_]޸/jsXߺ]=95ڷ#ldD 6g-4oس:>QcߵMء׾ZYqtC=#J⦈x"H@FMLNF9_~۳;59!wrqu`8ݱ5 7Ŷ-h#_~yCSoMKw|7 oܐMK7}w119SM:3yzߑZy,޲ {"_G^*{. g{vXT[..dԕ.q .lobyO|ԠM@tm`v|n-?#>cdΎ(ݝGϽtfސ||6t]#c-/,7CKg\;;2?ߕAܗ_ 0OZY!Bq*Ţ Gc%ZkkK&ߟ ozh[~MヶFf4hH5~ko˺ۣ뾝ތSlLNMǫ/ƫ/}MOϼc˺ۣtw>mǽ;@SwsJRWpTw 7>! (Gk;2eb1=3ׇ4%g>oy_9Vj@M&wQkqk˺yMt+gcrjzE3^lܐ{wlLP W*kgFhr w`<󵯧VZoD6'䞝/Trxp ݅u?Ձۥy4k1;k)K>x;߽8lrXK DH:˽l+ҙҙm]5eNN-W7tnr B۴JMD>ljmiXD@,4ྭ5~G5lf4Z̕|E6W6w4e-jkƬr}5{kҿpZ|S Z1!wxǟ ڳ;Jm|B7_>o1sssq5 S ?fg2~gFf62 }^w%{%*^KkKO 9p87/Fou,p&иd/ҚxQ >4 p_5~GmzM-33B+ibrjۖo@oҙKzuǶ-wrzxꏿgѷsNhT@DD>m\je}T*0-h\R}7Ճ-S1p}X#Ȍ/|+ ?c[qs tuV7dsLm[ض%5ONMՁ7]P KՈ[X~ɺ'mǟ}OR+7"NnrolR,`#ې3]Șu-3>p_W{x=q.6wq3E#VhY+|[wr3kn-n(ݝ&rzb]+k٩r@ln+yݑTT=)f;(:6Qc^񥈿w4ѨV5wR+]j6>>Q_x)?x_}?EKaຓs4Zztj3Pf:_OeqG};{wl{w羾q8s-;Z8̞$-Y8.e:/ ;JŞb6-hX=ўށ.]{.:7j,\ \27TM/~e5  YMN+lt%݈}"@k: Zy,4}lY7S;z_v,Πm[?ft UCLsq6.!u*Ţ?yd c\r.\\M𦿾 mrj4h-4޲8q;r?{/?Br3ZBcp};;?䮼DT JȽJEjb߃0dHu|"U`e_9Ѹ{"p>*wP+$ ];lXc>95_~[c[޻ck-gΞ_>öC۶ܥA`k=Z Z9̘+Wiv`ƅh[~IWOy6q 419ɚԏaݫiϾPp_mo/<̷MkSvu*">m&ԛbQG5YȐC#1==$a[qoɾ)Ȝyowv4 "wejT>p=}kߺNAk: U'&5PܟZYKL7Rյs׮] 4Mwus}4 019ׇ5nx;ߍO~k_=QM_{~}nrWj#[W]p#SWF }n_OI||`Rm+0݇S,6!ӛbQ}dѾQ&kw.辍p4ob0h^Y .]au-W潽e pӽ;y Wr[rم+GVJM`^|!zJ{);"ž4`ȈѨV59:';{ig4` ,%-nn~f}uߎ?84mm]NY :eb97!қbQg@!`Z[/\Cuj #cy/}ߒϽt&{LzR]t¡N;_7Z6TڪXcDJZ]OLjңS,6hACM#ǎ,dĕbvvN#XUƻH#i % VuۖMo,-Juߑ[M-n=@<_>˵HUkKR\}Hυ+~Lgp xNRqG_&DT쉈յs׮] PrU#Xu.^0GV^PvAfѲe;IimY7r}{jܵԊ{j[[DD&!w5O Ad $x-)b7-w)Ų(+u'Je씳bRS[;;I&q*Nz4W4ʋ3}fQji.| >3 kB+F%(?pKenרh\$i)xGF3/?}\ͫ9Vp"f1pݹBr 81+`;E1)GovG?TIS$E*)l}ծ᧘Y KICtMG m՚D;:1KO_ \]Lz wv# @}ei[-:f2`[g+riI Ip3@ 0K6۸< z`W ) gMVi'կ3v+IȒ]Ymhf޷o'雷wnVK#zʔf&3#r~EnX]pIZxBM6+ݖMxL2p.GOgǂ?o_gS3/PY-z8}ρAE}_^ ~emC/._q?=$0P$J}=?F 3 !x JݮQP:Y39='ϱ^z J&S=~з^\G}D]GJ~_ff>`6ʝ]rvgZ q=5WQFswӅO?tW`yo`>}ŲМzPvcNnl^>z۹!_`Ы~y`jVOg{Ed܅z_1Ӑ nr/#pOHrm\c! :6("\z]ʹ?}^?`Y;0"9fe~H/|g`~?mG=N]z:53,;tq;tv7t@>BVO0SG 0ߓՇbf J4H!:!fhp+Q=f3Qy+8;u%Yٮ_|lUo>:xt]. x)TH4&2&EP1.Jŕ;㧇t>Z5}v+Y7܌zj6Klr/s3L/R@(@$EPvFOQNPv:?RbG?z @MVȉŮ1 Ipsx4P3 Ò6*=p\^U(T陹-Hz/O$()ǩ =kjCg4x8ع sϛmX$[zw›Έ:6WjC*)H!Wi!j3 8f}o^OmnR(雾ۜv:ӆqjCN.mU(Sr-4K"^ul'8]N3.3¢V %b4RD5Ҿ2nr.9yOiwfr>JyyOmHÆ~-=B%f IL.PBCP%+׮} ϱ^ Y M.AAL})9ajX["@hhȓI&_bfK;'zAHȼW IDATDTJ PKQ$EU>Au*˥#^Bn5tꤜ. fWV)j,W'(UmV ,dNP x^BQ@Y`pO0EȽLy;*7`dtETH4&2  rvHp TL0<]\ Ys6:>fl"^bKfPݮs_L&)(X1l* lnt!1 wakt|*PpyUPBP\1z\] BdZES6P{ r/OqPS,PaRKP:6"TجEB_~ms/LNfu6(A< 3[:KtWo8]N zY/,*$(nQP`Rhr/$TggU 8Z)!d Q m:; 0lir/ptlz.Lњ>Q8@E #Z[Q\!nW,x"AH@U8w5̖!ҸēT\D*"T+WS=B0E@q:U+2uZR@[mX`fK{i|HTq`3 9K! ,A'w@ZYc7Gk3Ecu}"5\zn'Y5T>f#^d$bDc/-SL.-E"qo0 d~ot+ce>57Y)Fl7]SKlr/>uqo5:>_L]ܻ]HtsPf6%{?WL!h,NU+_bV{]ғ<WV)r~/-*+fkf2P^ۢBtQ̼jթ٬iP..w0 3[\܋˔' l8ћ>5 TJ D\1:ڥINR(g|0["eZae-D>JE10рcar/2B =x<0@_XT2" ]0N hDm߳Zqv_DR͜iMP2g`y0lr/pKI@q rռ"%|]}gFt??~cOd gҸzHocv ~VkemCxU}_Nt(..܋)O1fTJ `%O A'bZ-@Yd 2G"gg{;mu/,QV{Ucf~1%}8 guƜ0@p5}]("{]#1+fք1A'4bf \Q<(¶+ ɽNŴT6gg{Uܑ\W5Ƌ<W~HQa*(Ydf1_' !"0 Ò!?O3Ge_ZP(.{]:U4*@#jeU_`9m>S0e򿲶u )*ι l7闘 {(v]80%6>?n0/nwŽbL\]/ ٬ٙܨkZ}+U9L+/ y]MtqȨ._bV{qL˫ *D'w..ݒĮ~$bֹa83*~Wx{emCHЉk;}"J„ !3 cfׇ> Y*e0;wɽ$bqB*]QKZ҇ݸu7^|5{~ |B_ۓ8)9]N k-Jz˩A3 ⒒TBՅ,?=Ljb',>}m٤j ,&FQ]]^eյsW1~WyY3⣚3Ba*EJ9]N9].9uri`pP--v {6`ճ_ I!3]جEC~~aJ*heuB*R"H!WWE-aPx"P*{8q־ g igw51z|ƾۢ>ů8㧇*~+,:ߪS^?taWr|P| >|o}㑽ŮSçdoi-jƇ0[a}-B|i'$96s 0nQMM~IxAP PN6BH<5CgT(2[ePXV)]v=c4,L%L&JmT-}GV صg0cjl/>qVx;;;SugPYSو L0| >|R.44|Jtr]QT# O0CȽ .IL.tv&JP@, >~)575/}5=w43{>w;>R1izvN:;pϝz!.nvUn׵)x<. V`a;:ԩڜ6nvv]z._ҵsZ/V:[Y! >_ݘ+Ͻ|uJ㧇Lq2M{q >QN|}_l3%מ@.F^3 m潬0ӳ_avGȽ0LwEݮ1f@Ͱ٬PQA%) i/5Go%s8<g3vBӟ_W^oz޼O#KWMk ,-ݵ}?o~p~:;Xܔi4F@}ϾpYK;Pj1UrvvXxoƚS+aסUdĬ+8D1~hO{@4F}Z G~Oecc+ #{]urNWx`? =oaMH"^ wB w|Bሂ˫P5+^Ԥ}jiL_@*[m~VZQqV2w#j^.`8;sM_.8. ݜT659)i.4t--r[WxԶ׌!w!<_ғf׹ \L=2egfկ}SpX/C?ԕ+ؾ O}ް};g Sb8!waoqM߳ ;Xl7_W}V{K{̃B//U e |uJr~Љ~Sb>Ԣ@F:*N՗_)˵zT˞015 m}0ӳts! !ph" *2ezq'}^k}vt?;ff̗_DzcY9YJlssSxBF>n.]h7;n#^2ucsnouLWvѽ}DcqAIR$z!f]Anx.zhaۧgyQ>uσa% jʛv@J&S "ј_S,G8Kg? I zK_Ͽ577}ߚlD2i2d F̫#8?ԩoꨘQnUĸ/&pvvfվoÆ 3ҏDUZMם=s2X\jO(Šjyocc+ #{}7~r9]έV71#䞟 =Qx<,Fnl`K$KnR~]gfy$iICctIQcbS3Qu.'w3u\b#}ifi$ml.+!^39==Osd~If Rp?>PEff7_HAW{k (fow&ŵ?\X>/1 ZȮ݇a4rI5=mkڜv~#e|6}e=N$\ɷ iɭçvtG.<&A7<{~' x<,fugn9QjO< կѪ啵^^O\",9ˉXFHT-& ef4:Yg̼_Vwvv>7}/s2Ԙh,qCbu}# t1Y'M6+ tw;{>1Ӑ灐{.j2Ӽ{jLQ6)T]=fn]06sP(L!@޺]T*eyG78!e`vؽ|N md7s`4xV{WyԘ*E@Snu_l3葽E.;]ri٭I=Gs?Le;@ R)  E*z;ۜM_3_}߁Vů) ZC&_Q @vC_b H1P/r-s+ >8({]jڝxl 爐{n.m@#c*PBaY)BH$J&y~~yɤ|e%I٬Gm-YԷ_'m(ɦqf~ $f> 9m"_ÚPXo]yB`| >|A; :u--u..aۧg9{C=- wakerԼvGW}9I(Qe@yފdfbemCG8)@ ?H[K~Sd0? n}_[!xvw;uvoooW5۷}{vʈwb:mYb"¾mo'jf.‘RMÉ P/.n޶NVK>|$@a G3tk|ץ.Ss #^ix<54|Jtr|r!\\2ۀ^8Ϭ%\^U4rsxFHm4-/6\]W%J_bAPX.Pa6Bj7%/D`T.;_~s ގ>ml-[S{zdkG=zg[ͽr3@,,.)LQ)yjjzBAG{kHd5i>tU({sv}.SsEw¿um9u=yրǣ_Y=t㍌ruܳslzUhTL3'ϱ^8P(:J*&B1%dO_7+@`ʶ^.nsu < assSoKxjQW'T' >==Yq804fNGE4H@q:Z)BZZYdv#kϿ$?x[~' G(mssS{e/遷5⥛{-#݉e*CY-Dc:v,ɹI& (*EPpή#rv~B7fnRT y1=jyebXoT*UDV;'+7w IDAT}N}N}VGx.oٿpӣ^662' >==Yp0B`~IfSN'w|%) !;ZS'{M3鹬K/j}~Rl#tW >}=N "/g>|mP.U?0>:>f] Ifp04&I'wt,Ԑ\VǺSUw? K_{^?:u6E<fnម g@f6a(x"*ԔB=KeYK]5-{N>~u84\Խ :G"Q w#:zġz (\:@.Ir]v;l_ )TJ&݈kɄ@`6s3P b@dBjJG{ߓvS5;s Gޏ-d?௉;Z9W]\ґ655PB @YR$މM UÅGl+aO0#䞁a% iLNS&K f' G{OhSK'٬ԉ?g~?Qu~Nz*g␝xjY-io;@ OMowCo]y"6Fˡo;:>fnpOLO=BJY4v W90G_}`#>}/*mVKAIK=HU!Dc1jnj'Z JV!r]ݝث*G!L!wi+L=B@ryf( xf] 3 3Bi]ғf H(B>eN`Vs}쒴җs8fUKݮc~[={UcI?x G)XJ!Nؽ^M6di|@a57Y)`2{C;@|n+oS$Tn?:>fnpOLO= >OtWHx*aFb@$]J٬Gw_ӷZ۾z lײާuߧO=G>_~`8}ng>ccy~|u;ZuԃzeY9֫G+SU8rP$IoV}}F5٬Z,(O"O$Y-$ ;,dq# EV$OKb HP볺k$D= >eHt!s3pngס JE(hm=D!GSW۶y؞N{Aѻ߿_?kg ;Z=GhGxL4W8~{piǫFf!MH3}%HI3 rj`ìiw@_; )G`;[={}أG;sw盬[׻7ln л|oթۡ;J)yGh,~>Pt\V!'DB"3TE;nݾ>뮖&>ސg>p7֕)^} a}}%a'2@A=V:X4tX{}<8mfG2j1@*.ID7}rߟBCçU≄+ 2uGàz$b Rs=lv;SW'K#B(XƬ@WV0'bϲ$^LMP677wdR!uiTc k(V[ʪ?*uerFD53(IWҸ 0 {]#^Sus?f0fw8<ϱެ@ #Z[Q*Hpy-}:[)\:& coPjNPjz5h,IR4cMRJ$X ӽ۹qoUʴ(\?"I:5+iky2!vvvܤ37+*.m5=δng6Y la1@0Y^,Iݮ(AلPY2P_zSG(p$O )*jvH}yuN'P$Y.ɦW:"gW$i蕽I[%Oֿw"׫OfK"~YmTOBv; .1wtz\]"(EL*L*LjJT_|YjP4;!p$€?bxzCM0z$؏Hb׈T܇ ?=={3x JpatLc"V*)H!@pQ8k#B`mohW9S}]TW_n3tIrnR02pf}aIR @ (ΎB[!N췶׊qSܥ&ts߃.A2&5}&9KF,,.)LQ*B{Q≪3jr]&0/R`wn?ɗ(QsmOH]w;~k;6tFoC6 WDΎB[!N췶t^<ڢ6C'O vbvή#LtzMa}Cថ0Ә̷TE<2+6@opf} gW]e]Q40qP ";{R r둽I& =?ӍyrGmrʷ3ː&$N+!<TGNYJ_ RD.ܛtr7s8jqCή#co}t.C.0HCçsϛe8ÆQsZ!wp?,阙ty<-,.)LQDpy5}]]dI^47ԏ!I0zC췶OQ5][9Jg5S]H\-iwr0ۀFxƴF!"wwR"J%y}="#i'~{'Rz><1+׮117v662 ri ;]N9]. OVMe;s*N0"Pe+wrpQ8==\Y!wpK6ӘF^: :@Z) Srtq/H4Vw/~Кl{BGdoi#VlVz=ӧ4xwƚup⌌).Ig$}V糖;1ۀ]<3E;ztb𘮾q}{;H tZ^vvh1׮O=ݜ7c =0ȃJz>i!M{M0`v zxr'(U&>tr/D2Y;S ,-+\aLhg]!N'[ۑH!Vl\-vxML-g-ܟ4`Fxv2K!JRJy?v:["Q-F}AGw*dR?"gW$iڎ0z֕: khB 85r7 41z, Q8b KJ&S*1:Ҩ@_^7(e#g =vBwbGQF?4!{ 9c%E1r*C'wKzףҊfnjm# &gX,@pǴ46jN"b q 7]Jz=_pbi,}S}]=1پDFŕJmJl6dS]5>^bROsM _X,g: =0Hq+Η }眭vNK&'2 ISsYVL}KȕϿDb9uro{-< tͅE=w ^] 97fn^^^p_YxV+}46fffT?/kjzBPnο[I&Sf zzFcͽk2 ÒiL#tqDP(Q(1:Ng8Z_uS[ݮ7KcZrvǥ{H. ]ty L-c-vr7Dz<#@悟@_XTs_vlV E+X,Nr:zBfW{+ uKH E!P=r炌 IywUz zQkG'~qˀѫ/{(T ;f\YzW+XFw)D{TqL3pOLO~V:OAEDGv0ttWֲ}.~;-?{Wy\5Kؒl#X.1-!+is;Y]4mO}~+_B@($8 1ƘPlŠoH#˒uɲCEyZ5=gt*f͖%˙15G'$uezdL8zjVV[fN';N|xtTVW))S$A᪪G!ohN N<TGv%m<{7͎gˡ!kOuvֺ7jL)S֍Ni+0O}:w<0S :c2JJr:.me##wrM@渡Ѥ`05fߌ@|T0?win%`Vsv|\}H1Ap:Į꘏H n7eºeߎZHߧ*^q (.I4vv"h,EHCnRT8YnlK Y Cys3iJMn Q!Zrv|\g(Z̧iy$d{VNT9v4lO8vy^?p(9z%jk30I㦮ɝܛL,o`"@ q @<.'EKEI5htPRԬuGx޽ǔ4{ZdM+ $YD]޿ E:<] SR44ft ͡HPi!ws`6vS/7@wl6]NWR@_eZ+QQar2 EttP?zņe[IM܃&n* s?^} R ?w"genϒtȞEa0ֶv ^o֚ٛ_s ˔)mz 64 @FG)7sS2?N7Χ9س&.Nljimg$P4sfhx991Tgf{X qCc^SSd: Q VR`1-9;>Nw0'ސ \NC9lkb(S/_I sv۱'fܖ#s ɸN``IsZN  =t El6TvAaW)CIO|%E)CͪjIWg^M6mRv&'LP2 bMcg)ge]dw:geQ8ID# ˜qМ?pbR9^CMRBF^MtS2PV,p v<).n" h )=~B7,>縦:n4ܰѴqL o2i2}$?]U N@2 vnSv}"rӝD)@I.4K(ufs&eT= 4H7iN+ Ha~E ;f`E]q)LkSWg)SjD d D@FG)=KH1&N=ɰ@wRXVm^;0e:M7i}L o2p^Nvv/9e `ϟ$ݞ5hʒf8)OPH$(834<5 $:?erhd@Jyܮ?viDDG?`E ?:d+!IJ}`R2Bǎq[" 56c Z[ûLݤ1~*x*X] l%mؗ,yHHD<^]SEعr\Ovq[ͪjciq!9^UVUٔ)5IedLɤ.`](geMt`?sVDf@#G~_HTmZjP jNtkmG2ÚjC&7IS&coOLinhl ]$Erd)˩\kbjEEe~-󕨤@fvp7';D"'9v\Ͽ@L84x:0uo4i:`0P`d~aAB&]eutrKp{v Bw0{AJ(XNDu!ے%rqW͑Hj~W'޻O= E;qj]HHP^ 2&I?5a"vUUxy (/%AwXLl6G`.{VBҴSommYǫ;P޽ǔ4l2f>bFwX]ؗLucwx# .\pYrUԚr$0:[P]W "tqs( e&';v3k gܶzJ =6s}Mrl .+Z[D> VHZnʕ;X\s::U/x'tqPS]m6NŁ%LZ-ܮH$:@9 E8թZYmVX VY]%ߧ.S$tݐ0]ZJKі='pGtq|S/tcw:-YB7vC=*).Jژs+*`f.IeI;0zܾÔ4e¨5оi[XTu£nEzr?pWZɢ`ю=x^*~ Qp{#n1+p]@<.@Lח|bЍ3ȱ;%5p?phkh kYبo_L`05~:O"C`ArS('/ux\ ǗnU-#< VtqZ&vٳdgM<:&>ޙ{ ]fjexsRKs)S$t@wro2 $E|}dt@ }DG(r^;B]̬_o̺P?FwD;zgܾ!D`IzBM"0@wr^xt]EqX8CݽZv-! ? 42 $sCv9),Btt.`N?0?%ٳ =dvE`@J]!ے%;geQ 1IƎ={ͺm77E`QurzU"Bz{S${ n 2=xW ZN4訚?h0?O]05o@#3ZL^~v_B!dxpnu: 3SmT ‰/nynycZԩ;Uuԩή[7bJY!MOǁrwh*CYW-0Sg *咤2n sUG. c"l2m LvIr]^ںm=w~BOԤo`O|ԟxs^<&&:dc;mSofRE3l6]N].9v¥bbʒݞ%Ir&^Oif5<9~=@xiCqWۻ2&Im4-4 BHoy9**"p `^.t8d.s{|;Ow}봺f%Px\^[:)8Jy!Ci <`]7E]dIWv^ħ;@=s:rlC;Oܮ7s~W׾ R7i:qЄ` ph$Hkw2>u].$O Yoݧ{͹C~ZOպ"P>g?^z?wkhhXk{CqV*e|@SkkxW:ٞfnϭ"d6MN?;>uH_oݧ<ܜ5[kCui9؃}@u'nu7ܭOt_74%ՆsS$iW: ؞ < ]\in0ngMftP,0|rmޘzi6~ ;Ҧ3|.8Yh8А=߾jVVSPX!BXx8.Inksyi6uۜyjo-ܮG% ԬZX0^pa=ٔaEE iՅMt0!w A/Ua~{Vm6e_2vLJ]E=g}*).Z3v?r9xX׆XL4oN$|:i!bo}2b>`5| ]kOJIΨ$齣q.ۇ <$ti.>EOB=wT[}^TX'JD"cߚup{C$tq" ԆsS${ d0`<>"yc'(,.Tw1e:MiP@c(Q L OŅy&.Uǭҥ0oᑩ <KyQ0Ctu|tfڗGotk{9^훏*7'g;34b"ij 7X}v 84|Q~Xcgϫ Rf2?x@Re':Ot櫸d#LF ?hO3?s@zf;΅~8_VVQHdP޽ǔ4IUgِ{0h2颞)\s3n; >EG' #&3 T\8d < & ·uH$|dTm]=H0i$S]=_cc}}W+D$::8މi H;_XnӁCo]Lz2ciH!V!$HҾI3'CC8s# )3)80z(]t#|On\B3" IDATĄ <2AxzkϾ9;~Z3ӻxq:M]Vݢ[!)ߔ٪]a2?Yu)::8u?tHBҥvBŅy*.SIa ( fFOotϝwX~E,&@ f|.SHdP1!wI vYq`Vd\Q9?׫\$iՊ+?nt:Bzrj:NJ _f M 'D7l;?`-?PsggHZrH$cr=#0_uz=LNǭ80BI/)䎞t?_ݥ|z뮞~HAJ-o]ZPY6\.v.y<.e]0VWUHc[GF"Y —Jdv;DVE_׬RA~.EY>ۓssw[_dL?h6pI6i:MVUC @.;:!C]=j=٥{ޡXHtT-m(@utu_+;ޔnWΝ7S(Ytg%׆ЎoLut/.*җJ)ZZO| QHd,oWUUjin6a:``Ekk} r!`0P ɘWRws t}>zœׯwsB;"PFQ֯[֪WHDr T7%.Mtsjb'.㰾-H$Sw?MWի(tn\]ݽ1tB"U2i:n[1dҪ ӄ߷T+Dv?vc%/祣;v/crG ՛4&+{xNNs[+%iraE";FVIWLgy[]"@q" %|~|~:LNȊbȽ 8X8CGB=SOoz) `Q;;wL1|"BHjeeCTY]mJ]`5Jc[@ Mx}Ņ$J'>C~2>7D~IoNr 7p"xH4cPH@Rm^oct$Ҁɽ7XƼp]';_` UR 2g!I] #SՅMNd@r:+.F\x<|}H_i! mos^լ֚z]wmHk)42BeuIӱ\r:'r93Ɏ*Xgӯѱ\DEFF(H"C8?CxڸQoj Fӻ0`0>`Y&  $'XMLzSAoo_;>z k̰<߈Q{)xt,!C kWu۫ZOܮ߫ܜy=C*]W2?ńՆM K PcTrGbģ{~n4*?;s&Ccgӧ, v(N9٥?C=mig [lשήK}FYb>iWl;$4ҊMii= Oݿ/L_z[/sn{Uǿ$ fhHgXTT]ޤ4Yi0trO_q\NwnDi1Ξ޾8\ O_w>'zSWOFr2܄@QdaںUmQ=y=oCX?|ߔY=–@xsRKs Yi0trO_qw-"?LvdOL/ M}=pfDC05~EP|bB zJ9vBiC zΩ.W$;La+ + 4wYa,vd|S.֙@';rcr\3Cg5pfXCS<m|;+Pvnat$@*1*J '0#{EҴ~w.cgݧѱSttq~nmx$B86i: Vė5=V3c4t9S]W(v֓]˾>͍r x$E⬲J^FMNUB=&H?hcŒ^{tqun wktlL]=],7 .7p&cdg{($*{ S+Z[z V o4"p"ahMC  :jCܥz)&.ҊR:J^WCί/.r7 {Ƚ OŅy`:N+ %c>FqqQB8}l*,IeuIiT LZUĩs؉Ov| !ba]oB,?}': %|Ą9xX/mݦp< kZ]2.;r$\Q7i:vr#_qb$L8!0H$98tx}"vݧ{i;vuڽwA"qny#wxet6Za6 ;(C2R`9c>[{靃6G{bր;GB/m6紅;-vK[qc+5{0HyۖH Ӿ薞(=}1#?˅8EPgb>>//(h>_>t>/mݦyncROoF"Q}Oꭽ=p=#Gk$`I&M'!w{ |Ņܡi.b_!CH$n;k}ju=-ܮv_?nDwT$]qp!<~y}zi;WʹXXNUuIit*`@+.EBī<6OGgwBnף?[?Qu=y=Sǣ{Ŷ;ߘW'~q=sc8K uM 6TotRܖҥܝ)_Kέ/c& "фooQ9z|}ڻOG9xi^u[L3 / [O,:D--.LqMcZ{m-Fƪ3e*T{! hAvDK:8^h۫GBO=F"iD '~d'XMt7WRcnWUS|Nާ(62Reu1s M<=/ܘ _=/*,~(+]1aN@|NڹvݧwC~Z׆. +D~H$<ڗ7)~20~Zwvvjm+Ue\7H~VreIi+U'x @zDKL?{tߏJ=}qFy#*cg)Y$շΓS] ~q='?x9u[Bϥ2X27c(_|s3nZBёQB&M'YTܛLYsܙ;~$o㶟;(:ϟtJ{a}V|CϿ%)K& =W{Uu\L2gh2X/?9#jHWטfS*ON'8*\NGLj(_E3ħ ܑ~9vݰ6c7>曮l}EE⮪ʔ,) rfE,™F/}\ R_I>E?I7tOXwQ. ]mޤ,{0X!i)WQ㎄$ikf N^3i>k]T}GVU.9+*ʴp (7]6i:M:=Em0i%ܑU[阎>١UՕz6Ϸq{;Ѳ\:R4V/ cy=7^﷝s~Sk'}7MHD-'/[K}q=n}U+LN2߄c+.xt,D"~ Foj Y.gl,E@';)Bs]d`Dz7gzO](O6oGW{2>BW>9\>_>O]]&L'BM\te>YCojԝx:ޱ-1)/;*ϟoG?I7}\oW]ݽl:A`قoN{߯|~nz=_G|B|ʛ@BUVWr_  Z[>1c+.NR_tXC偲Rdnj[yH$|\@5S7]$ZU? DzrBJXl$Meu޽ǔ4Hڕڒ}`0BR)F'wLcgݾ8YEwTU;z&;OGV7i:M8-\aҪ!Z.g_#=޾y1l. Κ?;`z&M!'MEȽɔs8܅}q>:{7cCM 0?w"@xH;%!w{L4vB F?߾sN(|C w<b$YOߠ:qZm]"i](]lK>TTQSE1 0>No'w˩XF_r.b UY].< yRB15 }4W|> uocܭlGјQQH;zHtTG[sbҥj\s (2 s&<|^>Y;_Sw::rlH'Uz{S iW2OԔv0(ܔrr$3H4.cYw!_}NyGG3q{O[jp\㴞~o|_/G#I8'W%L5 ~^$,@ ꟾ_P%tqHs`a]]S1]Wi3ݩɘnSwn״۫_>s'9wuM}խx\ىfcP7>=#䎌6wNp_G'w?W~E_O/5=?( nZ?E?Ů׿Yꛋ:_D*ϛ׹&݊DG'GGU/4 >t_ UVWf|J{0hjm J}9+4v8v%c؆vs7OH4].E_3d./o>6t0]a~_Zspvtݷ>}* ]Nݲa __Z6[7UEw@b߲am̝/W; ՛46;OZ'`0ĥLw:{xZU]O~NdgwO{?դ5װ vm.CBZ^?\~ޑh?pFT255Ur[S&hwP]Wkj~mHy*Ջ TVW43Cɞ`5[;~g^ǣ;{?IӉDGPOߠFc*,kou\}]]S9 ~mH׆Ү^nKDDNv^t/,ȽuZZ2vxet޽؉#Q Lu s$ح־j}CTʒSv;p~ݷ~&s@RUVWrO;  Oڳ=I"y "e9;ϥԿbH>rbAiimWeOAۻ1`0ޕsْ8)0?$_Q/gĀ=^" ݺaJ}%1㚚* B?gx$JB&MgEN{0;?ₘ?FL0տ>3#O?~e Q8[\˩ꯢڤ$-n3mB$>ّܾB.ygAڽ,8@qT/]nXsmnET^Sc\}(0H$c] 0oіp,<![XG5uWP<_>(GHOyB Y!ɲX)8J&Ig8{wynƩlM쭛ɮw-{ǞXQf([Im--@-eH W}>OXUfʽ u `y>?<1V:($L\C5-y?^E 2ڟޥv#%g=] \gx< q 4z' ;T\B3yn-w,/oş@dͪYQ9Iw6VWj6To IDATKZ- VUi:N i_IhZH惾ߋf/;ʯ OÖs}N}mw`:?u}/0-gToP->;U_sw vi:rxJw$Щs~l:pPoa="<QW ]v=|_,9ox,>.ˋG?ůwO6]:{Z_YBFoPw G*k{"\gԧ^Dś>vi VK6aj>X56cǕ$K~{5*s;iЏ( `>)4R5n٨Ɔf"$IJzz0t;0g)fR z8}!wWIcgrƺRIJ{=<Q8a7@Fj9SAߒڞ@H]^zu6=F(@Z6Kt +`9"S٬3؏V:elKr=|_ͬO^Juز6E 2Hx(jji#X>p0M4tS/)LeYgޑNgQ|kO˸enj'1vi}:WZfBjji #!)teL(4jE25UyoX,O['L[7Nz?_}NEyO,Hۛ6}oUSKXS<0-ar{]m͌9`]i e9++Ӿ#9kf˚ '8ndRUfJZ+2āF/˛>>K;oB eܹtqO^?R?"IYVh6v߳.q֗ijyTZw\ Y@ERbd=QENxtRɽeLgYvMMW:GR3s?O%)'tDcgloq`4鉟@݀|~=Ҧ(oitE\{i:)ݑre3뎆?r샔/St |LW]y9P5 $}vktM',PDO>W{_ۯjÊjjiORSUnSrxJ+X0r=b1F\xbul+U0mkp&wB#C#zW3{PfvsSɽ%٬۸amS(JWHn]YauiW.4zŗޞ\O5Q )7pz9}Г/'_|[5u(<nE~n ;# }m?]ݯL ZW%`xtUUf ܁t Y7}>P( Lenzh|LO<;58=!={ YiҦMܚ,SxJ10!w`nw; ǽ2cNQhs%.뾞n:{,&@D =jji&EWwffNR+~/fO6;>ǢEei;牀7 OjͽwHk]ߠ|fc ?dkpe:n3M'3BOiKfTD몼3n7=cbq "YH˸!=ۊ%.iE*u'V4`Q楳''٫P^aLxBOt;zުJ3M"feʉFpֆ8WP=t"Hx(1,9S>ЅcV7]X,XX;bijj3{FD2Mm&L%3:KbeܻhPaAMzA.R>Оsj;e些>XW*eEZΑ;`Z7(ԓU8,ynL%cB,;,xb4mcg|߶Ϋ;R#]EO˩O(6vui9~;-5s^WSKX<^oq7r&zPB@ z` 4 2j;efr]ۼi;Hs^WO!pC->=^E q|| ܀nKz@ ٴLIy7tel6>՛VX$y_k9wR}}ϖY%(ϦjOaZ;R4/LB׳&}.FZ6trxJ+XrX >uKAw,h,=poAٮ ߹XW7 '3{pʚ1'ƌ\`Mܦ Wz, `D{>%5n GwI~ӲB_}NytƺR,+RM@d=DWn$)O_1ݧƌqq3d,7ŭ:Ϧ/_~-cڬ bD˝{W:=eݍzuZjk uc:,զn{ fQv6U3ns;QLH9ѱsu9GQ9ݵ-=?Wynܑm>ix"Fr&r@B0S4`_b8`EcEYsig/ʳ_SEyoۙS|~ i3{3>>:6h:3M'We v=x\٢=܂B\KZǯnNOn{*?Ɔ, +*uUPOټf}Uw.~cԓ7dZ2r\H\fN,e!T2E]mUyu;pmh+ۥ[bQ]Pt1>p|x$sn+MSȽ[x"cgh_rwݮ͛jT-M5Z*U<ߵ :rԯiuNܒ^cAJm{E*Ke'z/?%?ۼ}ο7٬ ` *{^C3#T˩@$cwU_sVq=%1;jsmT=]Wk?%~K1>{pUI=۫(Lnu5TR%'DaA-*,gc_tCz(.@sj)}p._=emu%dgOaU4 ZU7qW`I Wzwn;;/y]źo罺o罒i9z̚tKb4F`nuRr`( ?uvOn~Zor_WՉ`};%V˻&_MNpKzŷZx$f%~n\u͢u_Y-ׅV䩨C=^ Z/ygR-W\_|~ ꍖ_fItxԠ;r2TF'wR<1Ǵ٬ʟO~۝h]72(h,{uI8Ube E(\< v~&?#e@J^c _6]vyx6dy]z=z=:r̯7[~7[SA3ڴN?M1tGooh*Ƣ;B몼qOh6kJ~0}CWwEGjo$K5v2}I=]\[͵5z=z7WYQӾeB}tt' 8rs4T ʐ{9 fbY۩c~[<.f'A3⧇'O ,M}jM1 ㏙"~_|z7_)_όt0+ުJ3M"U$`Hcm6׾ūu7h?w׮)щ=E0PDF'I'(I *OP$ ?d(N9u?Jo#\[ckޯ/>xlLvϔ̆R3LeGJU'|dw)TXtMɬ;S}!w}S`߀C#0B%ZUTYKEN;dh<_|%ۯt7I^vޫƻ?++Ѩi' / hnS)OUȽ\o]"L'<;pd+{x(BvdB} }׋**~2/ѯu۵;}:&?}Ml#z򙽲dQ@歪;mfT D.N`1M'=AE )ԟ'>EN)VYKe%S,惾~ZC&Xo&a}D^=WDZL1Pߠ, 9ת3r޳X6\ǁuU^֤G=*xB NCaTHX|3-/.ѲIc=h"DL_ccrŸc(`N\ݦS `9HF.,P;17 _6vkMKk2Sf( ,) 7n٨Ɔ**{Ҧp__;YY˵jI IDATxNXlʱpj4U]߯{UL3>>Nsv4zI3a*@" tk&ԾDU{ |mN_fptCc L<_Rh …X׌ሚZҦҒb56lT㖍[-*Op[S+\c)ئEE5>~ݷsF 0ު*3Mb>;7侙#!ҡR=!u RZ+UvԵ|B@*TgKjmNO1'B7, jkRcFFa( F?\X<[g/PŪ>xLݟ~t1]׈Nr:4<琻SZRь\Ѧ=;[ ^~R]P6ˊz)5ʷ(Ϧh|LajӃ3`Dgɿ#5jwfavmoPQAXᡈZZ MzVGsYr2^UYo|%tc欶nu5T|:W`4>"0KzR]=!#ই'enlSٲ[efSTL&;OvGtn8ϛs'SKO%ڵA5nP+-> pf`\Nÿj| 멿>AwkgYF0 ܯefCP{ v71ɮEyvʷM=;|oި|x$`d* [ }ofݯ*=HOoswɅF-_xY\"]6̆׳F;cv*TU63Le^;{>FBJoP3To,jOen'!v ,M Z,Pϯ6_R5n٨Ɔ)ܾ }~?7snbl9~6J] ߴ4t?%y.]̂na߅qvf.Oi~oohx.'侃e#SktP?9ѱ'p,Al)O 5[ˋ OOc]!~ޠƆtwǜu~mB|,0̹rqwmշ/KZ]L0wnLө.;pP'?Ξ݊%ͦwoNl;Ӟ'w'>M,PSKZtwC6j}eIij1GZVzG"݂f.<>]9)K1\y48fEƒ-WE, )HZo OveTQ;O{~IרWϯjolTcFn]ܿc\[ζhYrÜϲ.t Y\S1rxJIpcauk)9ڭÊ%.-tB ܦݻV}m[-,PKϰ?\[2)Ͷ4t?r̯7[_Q~G HںM:q S+@ )'j/EԫZ[5ySAݓ&?Qb׶{#1uyu-Z#z~Yk@Wa*z=\ L7wI֕f85TX}! dEÜ(\\Kc ȶͽ[|~hYzq+0 ߦ^~3}gtgC-Ò୪2t\C,-{,+)lV{7bMW}-oC(c?%' 0h@>!{<Ny9*!{%7FE!n>N,gK\"]vqТ+oCqv66ܐJ%YrT4vUe%);vI)vj?ݽBTN:a*si.!w:Ðn֯ޟӾvqx"KSϒ-Jx(`߀} *O(78KKeZLe%*+qd_AZ}'|=֕->aQqC+g`//"IujxjjiSAv[7p3~+2yy?ת<lڵͫ]ۼ<Vkw^ĥKW nу;3Or o6\.u*xVg%IyΕ6ouy!29ڝs.I?7G.F[<1ҟu/]&sݻGtP≹ VRL`UfNE;%~/FW[UmWgF.L-99qݲ:]Mx(WZZ:E,PKO->Tigc]>M*ORMmKk%{=`9++ /6@[XWƺR#j>tJmGC5X<6>,7ΞZ}9LQ9ީ#;:o]]E=Р Vi89?ٰk>pH ^*k{ #wq"ݵNUX"Ec͡lMc==9WO!=\Յr||'2d#816Χ!s5T*݁N n!| 5'ҫ3>߭]{\ ;惾ueW+%g~H]Kv015[ykW]j>PWot ?;~oC?o&SϤ0_KۼsfCuw bղ冬Ysv}v}48tU}t3#ݻGt \HɘVKj+TVU63L" ``I;'M9;OM{D+˸]{-}j=|Cgb^uPÞgqCy+,NXBݪv+<+=9wv?rn;#L"1#;ux*h\{eEWڐu˱ͽ[i \PCu6F":xh"OdRAcV Eɵm'܁K'w}d50m8<SB;{ݲKMc\^iiU[x´̔`$e/U+e6XEowƶ[U{Ͳb>WgvOoP˻|(XRT{>;|$)7NT[~]^(E|K#wSO!wP;dgt~1Vj=ۮ#v&.7tj(,>}mkKO3*+)/pUo9:++:O<tr.UV2)`rGb tn8HT% o]ܦݺBEyvʷ(o2Svk62lgv߳N!58HwYyvmoB} .9j5ҌD.ߒ孃kKܲyAYZpuʱdT#;VfOוj]YAƝV2P(`흧S]*t%u~2Hen=Sh2y:' @HOޠ;^2ikYXx3UyyK$׆mcA?)vaXƫ{t8mC' 14CGt)jmRw X .KfJE2'rc y`ߠ~e#Kn=^}mgTVRHVq55rV`$Kr;by@ᑘ:Oyzæ'c2>=|]gSHeSw"//ʈ{,PSK޿|fJR~#acѸUko_c_ +jӊl㽑x%>o~jmE |]@[O1nҸXp.L;{Cz# f [k@[o/<ᐬe*whr* _wӭ}|=$ILhj(P2%>>C7dz蕖V,̺OL۞_f IDATzD.F,4T R=a׷LGO:>ո?j)jQMuv}r =HfJy2\:pOBKOx\_q f ++кVZee-b,9t6fz}8WWyuTrj}yJUWgk2կoO"~_^T`K,R~6J۱.Fm)b7 /h0Xim@7wtCzϤlRAcVFTYUix<S6MKAbNR'O迼2$MzS )tXjjkkm^ke%A?mij;:y_GD,1NAUٵ= 1U٩qذ*BSbQfþC5{ϔWGr8qޅ)Փ?vt[;ߏ?RxuC划I<2JnZwK?AsKź5u|M.\妧&м\`OYm9ClD%[ރr~_V-QBl# psQVي΀!t(;}egv )Fp{X-yȿlvk:qldDBޏ~uJ;8gmDXШuyp7w-]VG5Qy+^uE^])X)z;g0`wj[9JV|( MDDDDDRnOm}=kJ`>ܽGF" ~(+uf+M7}mkPQJO55 ubx~!3o<۠#]"3+s!#dHFD"ulv58VUذ* )F- sB](6':tJ[:G幗Tj{s2 's ὺ ]Vn-xtCXl{eG/qIQJ7VJn^dȝ(읯+hir (YB37(xp~nw\t ˗fxvVo՘ɝ(;%"Q>NB6 SUm<]Olbp`hh fQX{Z!N ԷPz ,ۙ8s٩qض& 9&=r8vv;uXǮ'FA}as5%٠ņUi8Zт.$h4;­#8YQ+m~]zjS,LPB2A Zr4j5F#,ߨǃ6d ( 8_sk0hgXBs.2LI,4=C|,@RS ;ن XR 9=_X4"Agi[ C*c1guu?s.t(=v]!+%η5t lvEU ihkoW0~Vk9%sEև>W/-; ٠E9 _Y N ۃ}j$}%A?ݢUkv(< /_em划 B;$ru چfCmCWF9楈;z""""pRw0Uw(o.(ܰ;]!O`ӛ #%19&=Vg/\ƁCrA3Y$RcQbNN#  "bbԈVD>kwÓ8s a:%U 8Z %*-;c ~qǥPk0Xr݅1IuWr'""" 1__*@1&"""" Fz-!uM͓fT"9ۀf7q_ZҾ^Ğqh;;x$tƀV-`ebL`, ZDEFD>tl JO5 DSHƷfAS(7Lŧ ۈ}j$6yO=__ګ8pxtoھaUZ}t:rcT_E\CPF UWBQQQX$Ir[;z04DF_(DDDDAlո1h8V rCIHĢIT{%.nMmX NK>?[چfQ rӲDDDDD4+(?6.'ND47."AYbs25rx7` Hн SZ'!/A%qFx%$i.q CYe+yČE}P2]ݥjyf]~y~!E$W{?O~*p;"JAYYgOE"ɠCD"MJO5ŠV`A} Vcۚ,?>S&&:0Y-_2zȽ V}d19`Pjt^ nbc(z,}ljG|vm'"""'Ϊ=g6!48:?|(ebU(Oz"nt{}s<۠Cg}j8 AN%T#k:#f, B6!ǤjIlqb5 R~uXsiL1!NwaFR1DF x/+** zEZEM Ȁ݁|^YAחϮDDDDs|}8szMK{V}9Ga)=33sn؄cbc180NӚOwA.cT}sO[2TH{gA`ޮU xȄXig)!F ] 2voPgx( dAgE(6}jP` 5~(]"SfX'}p:Ubr=R v , e$rohjCJ3~/nql5zz|vm'"""""Pkԡ4{=!*\v,`@w3  ^t1 q]]𲂡{V-$,dWيXD}/! VN᤬5ص-F]ݟζcu!9ƅۧx'ow">v/%;,Cs,퇊/ql-D#*...^up5Ϡ'J5` FQrAnd˂ȇԡ ->Y~.˲3ص`4 CIfr_ Pk4@hTtrW &,WE䐯_ UM{0v=y(-;Ҳ3 CE&Q7C< GkٽŽKϣ ۈg1 V#Ǥt:BbL)F-JjNap؍h09IE:uR-zJ\i0R}Nv4,6Wa{BQ2d<tsOJJ\bU܉|Q{<"<"dB@)WrW5t풙/;lvt%ADDD@`Q KP,:­rOMMNc )؇FAΎ|Dȗ]W&U-sLz<mg."%р %_󏝾Ҳ3>a .ƃ σV-a!NDR6xjc.P)dص͌S\+Y$J2w!7tъ~^fL'GNUKܼ;wD|wV2L/ ?hkkv(O!hbj8dI qf$"""yxpU,:I|3.\ ޫ{Z ԰NO]ͻ,w]܃U9tP)}ٌqE;xg5,TVJ,b#!F- Drb'mx3rLz9`Q4w}煅6j;."3-9w|xW%SJݻʕEx ??׿5N:mXm8x%s~rBFDDDbbb+D-P\Đ;l#y@9E'"""""{=!5"¼nm͐;QqEtX} a[@<2ix%ٽ7LH5jEHQ#Z͋j0Z5=sk EP*䨩bkoW`ۚ,l[łH1jgjI_ b⡕&T~[u vǙt7YqP͛7ǟJ59s!-̈́m[+. -5 9uyQ*C^[dBCCdШǃ֎n,/"""+؞hG9P(2IWzff t'+>T*˙M3r ϭVÀ;Q8jhMذ]lNFŁVs#HI4 % JΠ#"P)/XEHJBO"o*āpc,tvBB (P([ Xq #.4v⚵ͭ]Q^Pz_[w )þ* cԱ$^*JdXJ!̴F9U-:c琗7el޼* o߶Oʰ/D6zNP(.^ zDEEalL:.Mm qa2` IDAT{.ntlO4ƳDDDDD4!_MMMioIrl8kt*( u{V /6>,\]o= BgĜ䑜$$"a0NeΡHP@QC@@V{=>Dumk Ȱ4c -FN큻.\뵡 ՗څ;v:{x?Na׶|dYL^bavNiUzϽzaZ29A*!ws}~_[ã-:Yv`(OO=:yD[.xdTTF#sVkGFG=e """ Wvj[p-=WSrgX|""""" :j&SL+ Puffk/ G>pzp/sE訤jbbkqFw_(A$X "/8pvt36܃NFN#@Lx_] 1LKBfZJVl3-ٯfāC9%1~otoڵ`2g?{/A֎n(ĺYfJQ2DF0>2,ITZ:iQ8in٭NG9y,>Qc& w&,BJeǰDaSZh\'kY~'zf=|IP@ahnk:Q^Ӆ^ rZzt.Z eYcB q7 ՗zVԷBS}=T l֢5 ;ľC<{~ q᰺='{{tL&oAs_z#2Aq>) t:v̱uWr'""v|#^ )ӑeP(PH/͜kZڻY8БvX w=s~ g'wpcpd*R7w-.%$M xPU 0iXo g.v3}h ݏ!'ƑS5 7 䄯8V U5kbΝ>>Ʉݻÿ˿|] '+hV@}lh4 cccyvtcE}@DDDAm٩/ۉ(5ᑋΤp"=5mQzC">H|g}63JE"g&M%8 #\.;ۂ΀tMgۧ5Z,XueY_w=.[s!<1 ??hh |M*|f8^]׊'!URbreQ@ֿrevލ7x:Q~˗"F}玏 J{ш.r'""vhnf4wa>u3NDDDDDLфPC13G9kRX"Z/)zVu]"#nN#jAxhey$ ^€;շP^Ӆ3;YiLۍF#q=-)V|@pfZ/78}"F}3;aqBSR)dس~- ȱJoHb?ÐU*qYvG<'w JxD~X$IR!wۀCNDkT """P{s?=}~]?DDDDDD33PQ~&yN2Ȍ \ᬦiY"/S-G\EA]o FGC*Z%^p'6JO53 FF .+Z;癐6Mux +p ^ :v:ž`k98;wt1wtGX;ykסNq՗ һ>ob,wz^+ t:v֎nvs'"""I;&얾|2Ԟ$ۉBOb}(܉sAâW|q\֒LxCPpb<^I ZrFyM'JO5fww^鐔 ^bxAk]VS-ߟ7;lZ֯ڏwǧ+²KOs<dN*d2-KAvC2_m}S7?V Q|l&S*v>L&s=>+|ßFNVbv_-rŒ 71NDDD5fXޅA߷!Fe0%!/;;h陙2niPa椦߂\ח7]9\'Qpmr]7:H1j%TE>%+%[3n Dp̌F#RSM\N|pܼƄ8<1<1|z~tͭ]aW}j`mM'l#l<cZ:b.:r UҸSÚ5ksNT*}})8_uEw}Q^L&( x}zQQQ p);֨@DDDkvz,}loigDC< ͹0%!ϝCDDDDDt:,!w35A![ mpoeC{ml#rLzI#"M0Q0ٽwsw{c}QQX$ IIIq?v^}}^ jDߠ 90yOAV:{_AknL[2ܢ*Gk5Qؽ9\Y$R?~2>ʼns_13>>/ z=,d܉nq2ޅݖtiȻѭ}Yv ;(L&wVMOa1ƧφM\OBRB=WcߡT5?ꏠ{t\HKZ2:G[S Lx">>xL&<ؿOst%͙01dr}67%rojcȝ쎀ڧ$aJn'"""""[RͱfcݒACbGWp6ӌ]f+|><:.U٩q(6'؜,ڕ'>"RS4?24vo܉͆S_sGX]h|*`J}ufss: @}ȉ#-)Vyc[*ޏWߪtd' g.v}HQ-8QQ+l޼;vv:hmmŕ+u!//orTHM5!-- 7oAmm-Ο?\KaJ$G\ENAP@ݒ;FG=y'"";008. :0`BKt袑nDDDDDDtϏ3=t5<:i5 @u^zdI2쾵8$tdZXq|wƀR){sX(gŹsp O\f^0J|Ѱ;%@XKG7r2M< nQDOa) A S2RaJB1;f%-e Z;gM,Z H( = !FÙL3 5 A{Pmo1mvAF<1FIukq&"jQg{H$&hbPr=p|@D"?ߎcg[X[lZ b*g-z` u=~WnuVdA!̭{mmv^}Oس~oذ** }ݾ {~smK)/CB>+|N {[kG7:>>s GtdFQR!V܉TGd}*c ^otjNDDDD4jE \c[}]( 0=33ʠaHJ1lv^?x٩qص-z4>`>YbNBI~2'H$tXbPq=rvbbm]j.8FDcB\PC!`JN-~kOTOUؼ6is~a_oj1PlN^ŸP螙4ZIl͛c΀nĻÇXK;P` XW~'~i-Dxꛕř䑜l> Z)OnGqkX;Øb0}:IH}jARZ7[oWto8ޫUx*TT]n޼;v v{x`/b!F||BZI샞k%Q0(=z*(1hd&a1f(@fz pG># C)K !3:,viVBSbêtlX6kpb笗79 ذ*耻 ӛ`SCSwASU v'ݘq|\ބƎj;N3S2!?w;ɰ{4wK\>*Ҍ%Ƣyuuר'M*3^.jj>gv* {ʠ]"!uqf*%qJݻʕEߖPO{L}h [8DDDvoc!xhoPyDDDDDDA.=33Tb遙C1܉s|DT!eoÅq:Փ1c[k99Vvm3{ed耻!V7AGMC S8G?4.󉈼x.@v't*rDD,^Įmf|kmVV˛ /4.}g/όb^8k Sxa8~cv ?]mCk5(]`(.2z Cj2~C5juݿv^wpJv˲nG+q[۷fZܹ*U/$p:x g]8st%/?GzF!{@E$bŊx '""fihgwv"""""" jUw " [yt ""H`CSU *N=GU{K,ow'X c SiX{L2Ғ>dMC~n#jĕn؇votuרx5ů N' fNw,Z(3>{Tz:GޮR)cN]N29|{r=P9^%ͽp"""p>OcuшNىPNt?˓nWpӌzmsN#c :Bz18,1Jrd ϪB/;2."uw .=!LL\c8>+X;|r o j<`{S7*%[]KV,+人;TBl#' Stņ8ENT\FEUIlɔݻ$:Y|5qh4J&Lvs_bDDDRmX7%&;OؕDc<! (Lcr@Q+qXj{ߏO67r{np7Ī<HN~?0ipgr:82cN|\ބ' u J~,e9K0Z\iD\iF9oo,)y~AP꾷{ߏwB7Dx s߇J%>䓐~|͐EDZ(I= IB!9N?_b oA`ȋF.UJ(t8~&ce(ܣA#QFa˗`qo b'rLq(6'z]0Y Y)Zɀ4V ,cDsusm,y5 n,âյSUd®w9{'nu֭Λr^ }[b8ovt׹f ΃sI;v`ft!~QT_K11 "U^bD-(Gɪ|h/܆G IDAT9˗fxy.ՄĝT\t;/L^ȎID,'# S`<(fy{ߡ j!7\8;`x|g}6~€; tڧ ܧK?`]b ޵n\ ]Jz} /m-b^/Z;4qt `߉.cZ?Y<1Cs׻/[$i^ e/}΅u}׿d%~ ; J*PAsw"Bؐ{aa!^y`2$;Ν;֎n :ؠ$=NDDDDDDDDDD!`F._cDzpDa,;3qt<]":,Xp>,~%dU i4rbH5jaSMy(u]HrȢ"11qg îpw{ALX;vV-a!(d Oعk> cB^ApbJNuhDE-ZE|^_˚r2Ӓ?{߻٠gA پ*]&xby20`ǎ~ڰ'j%a1֨(t:vIlO>,၁n<ߌK5Ca(1+!Py+͜4-` g*o:ZFj}+NW웪WȖ a3^>^:!wvr'"""""""""01 X uuj($w5">.o隮Yg"zqjU7O7A>qy;Z OE"1>?,w2>MW_ !”OoģWB-߯W{q:9ׁ5wص͌V7p~ ^t~_gnn.~ ;WXGEoLN2bct5i #8? i5 dչ\GYeCOB{ogW3fYe߃Xyd~$@AE,68CN;tw;?za; s׻5$tG,Վ7;΅R3Ӓ_ y~:sr!A˛~= T9G (Vk rlѝVCe(v {zf&g0M6?+$G-" XחNN=t\ x _!KMVo!V7A8$"bG3N!ib:z=_Sť&+}tqݏ^"ĭZXZ:Eу7;/Z^6_5wHtz'/r aUx={KKk['Q7232$Sk+BCepjv&/2cX0h2E0warFc7X~#.#9()A ABPGf UTJ㏞ŦY0dX:?xf Ғ$]GNUャ ^Ώ^؎߃z;T6't=ݧ] +$SAN>"""""""""" Yiw,epe&n]7~p]t_ˀ{`4 SHGeu|%.&I=CjԪ%,FѪuA6U׵[,h9֯ƫCRyytXwص͌l~x .+ .ǎxBR m_N J)ca'w""""""""""{ڝ?ِ{n%K/%1E ",1d =csz DQXPbNxd pqǾ€{`iV ,;~>مRHw g%aΔm#֭F.+|˲K?1!.(K8N;<;ĥ&i\/ L_[~~}?VE|^2ma"""""""""" ӵ,5j]}hE yQ)$'&wh滐ncZ@VJ,Vd&wNadEsmp Z@NBPș)M :6*N Au󐓱G?;RUZK%ٖT%lEƱn =n?Rqaǩ(_o| u_7I:3@}~֕n _lpcǎ9JsPlۯ[L{k)֥ϧE4EgkS&$JrwQ8C$6~C7'˦_gN6[^W{p??^Me{XҢlS/Ö*W.zerK KIII3H] };3d̜uDb~GZzeR-}z&Er5t}M?UUU_G͘;+=:goeY:V,fʯYdU6eB4wq3N#Z-$-[RjȸFvs}GՋdK0mKOUm"=tJ~h([X-u׎ms"=5E9JIG1`):z/pF(Ec?@|n/X\"eH6_o}cVgŏGOh,]}XwsRW־6&E rc*++wԬyj\xI钀)uʖA r}(%pDŽ9S%cۯ|WE gut?I} '8`8HiQݯ)_u6oMn]55i&C?r؜-7Q721ά,lJ{1״fk hswRŖ:1z5[ѼymKO%>KQXJ %>qrNNk7vj o[A^_HOP$Aw\ڝwީ'xKԧoI6Vp))0[))(,<ȟhuK)>lW|cgKm޸aֶiݟ~^p} Kt9s{x`ikǎSSڐe }NrtsbC+WY)RWT0s1A$:?2) ~GHkGk'hiirg)-5B2FGϩg}XB`L3ORR;S·d̜A^_HOP侌~JkW̹/xm6S˗n&Cw ߦh$4uZ<t˳l*ədboO_iˠp&0*.%7^?H,1AEZQQȄv9w+XwUG!03TVac/Xo}c-,mA'Lxպ,Nl+/om';lCyؿU x,{%sR82mʘu$yoHZ,kEKJnKW~&XKWЄ t_ٺ+#)IMPZs՝'V0+8iLع^2yM*qg[zmۦ'to1}wCU0 gAJ<-pͧ`X@d1mi|w\Dzbagj[3fe;r] cLKpdnKܶ[u6vá' zz=W]7:7l6tFύu:r L1zȲfɐZ\R$kJ)K2*.I;:_;<>ΑeA|̣@(Ǻ ;]nKSYqbãav&&HMH6_/=933z:g~!ƺ5ڲ.iq[_lb_ƇAOX&nt睛CҥKou}Bww^5~^MM!p1Cq85ž-7I7@7,ʛk>h9K9{.%@82mʘnM E5+1|9Tm^W![F*pgeLHtX޾qu//7$v!-M^N㻏AEL \R-}J}f%O..Amƺf?z?˄Ңl=UI׿k*--M6;ϋ~a}_a̅a.Kz~MMjc>}x,!wI:Kp@0DkcSXtB9e:[ߖ58ة,ksm&,*?:FGϩgPDG'p/qg?4}ݾVNX,<+]p׵haqBON_P#ۓ* cL˸"=xwuRoCee2?x$7ӵ~'2]mۦju)vBaWU.3;C,ʦ˱Xqg9B[3hүHtoIȲnhiinӂl Ki)62:}$:yA@bT z}6fmɃ+s=S_Y ?>#3|mZR()vu/_g_]Ybmf|W'|Rwy;\.m۶MO>ںu]~'>3]<&Np3˚9WKW,aZ;/3{$6HtD5'dY+*\,f͒\RS(,ohB՟ؠеe5 EL]%1ypU^ag[ةO!vOϽ>qv;9iOxu}Z_[ې4vf\z}Oh۶m]馛m6_|_O>gn?ʐ?v̘-Ѩin7źk/T{@BQ{א6vrl%$sr&,q34i>_pBڟXD}Z E{p#ە30)Ѡ_ٽH~ང-ӯ^9|rrǿ/( ~?눾92әV[?)?;;JUUUں5y<\.uܦ YurrO;z/▜7 Qk2Yx:tSZS炔y*Ϣ@D}c:ܓ0^wAVU$IWiC8h $3 30_?aKBa=B= zޛd%g7,ȨnM'X$lU-_fs[BXUmM)+,wq3L'.ȣp&eM6NE#HtDϿuk+ERy{``ׯN%t=nZ^<pg^i4u6ݬuk@pOFq-ڼqCB~SQH;ښ ?係I'O6)##Ciii@ 4dxύ(fN.i嬷 ,K܋#>2mn䬻:f2v$6f[wkV$f|pzrlq3gPX9u jtc]}]sފ 嚱շoں+ncaZӬOmoI2Ϟ8{7%>z1&eАqUSڐq:ٺKRaai% {YYI.倕vtM5 }&nw74ZorJUI5[')TE!`]>FFǾDGvy+*\ڼb`8]o6n}rڙ@`FY5oHh=)yp}nJ^_5S|f.ڕs9U9y]kM(--faUq3 /nEAS2G7@ UVυߤXqgw"0#Ӧ* W,xˆkeHeB=CN;w25`cgBHqP$`8=|`ںUW]mba"!As׬A>}[{ad9zr:wv3'a=7 35sr4dxus1ef ˲fȽx=QP IDAT;& GS~M+?}{JhڟPhm"e3f0e  =0>$l.]BaS ֯'Vߐ|vT/cy[#3];Ivy;:teqUU2nkٸ7]|)֣DXV %\Ʀ[F:0%yZ{cau-lrJUI47ۡTNGF;8Xk' "z᭓ݎ60I@ӭ$4Ѐaڛ®7 xL5COYmog֑AS 1҅SzohESuLLTןٽYXmZw-gS3?B:=7^?a켥y K6֭mXxHD#yq_\q&UW]c} WD.5eeM.V)5ͺVt)0+*9ןr:N'q.ȥn{)EƇ5Zj|`smlLY 74!̾HZtq;qـo(c=i; 2_`q[혹nRQa>ƾG{[MtCA'dYo>3m3'iw9'o=7 |.s,)7dp,2}ݦ[4B'wUP; \DtsojN߽yB7xs9t˪&l S~B E\؈v=S}I"o aƠݞs7}q‘،YuR=p߻m]~y&Ez}!W۴&zI?!e32!<!E4ݡh(0F0~VjWVj`Ii|]N9`UcOfo_6<#wCeEqWS*.Ebd;S!鍎SWߐFGύ{| ݍ`KO6V)'v瘹2P.Ӭݞ/s_?~Jpϧ}avlM{^NvzIK䘃wyLz}PI[[,R™ֳhS6 vc *L9Bo?wH"]Vؔ:IK;aU]Sj22()֧o7>k'x|\[H|:&[zrgR$;O4'bI}33wqXwV]I?+.Xp%dYۻ{Mq{4AK E&V_Ԯz}җb~ fN%]]3{o|X= ENFBc 5T|)փNIrYnҬA+* "koԞ*6p$6yA޽]'#mw>v9T 2\NE'|CۜVъ+>Ǭ]ܝ6&fM8ЧhHnRqҊz->o^A**7{f n}Ӻ*ȱ[fBzNhgz F2"_:  (z )RA,ZL>{wˉF'xԡ㝆-=U[er9=Ct 6<2*oЄw;5VTTSY|stDM-ߎ6)ig"aVb!w4)f֬AX}o~P\XFV4~敆Ox+ ֏_ӷ~Ө'@5\{VUiNBkJ ‘_Sʣpbݍw-ꯟ{O]}}w>]U<. Ditܸ6vk|X֝5W}ƎjI"mIS@iܨ9/ߢE _.8z:.c=v9p ?ӛTs3i_}UG~CziBs8HUUU;s^/. _O]`Uhlʯe@| 9F//7eσ7\iQUxvr#o0Pd9o(G _;R2Rr:2`m!zۏWw~^L× fr#b}ͦOxԮz}ǯh_1;-]3OYi嬷I s lXtSV;0po &dY؈)+#ÃTm^0RR)wB ?N%k NM}nJn) t{Fgݞ> #*=}濟ko֖uݿ'ZLͽ34ul 544p`# >o5s:Li8ۦ4mUT̘ "koԾCP@b!5k%W clxvUɤB0VnVRRQ$5oFGύ{_^㏯ՋTV=uݔ6&L/Roq9svi^JljOЕ>c}7unbMzLo~^dig_}շDKorg/ JEcQXo0@#Ӧ|F/ezzj*Ȗ11 (-VMe1`(?nHsBظ"lKUdRmj?1]6ݬ|&FUx_"ٳ j;]nO[{B)u˿5J3 g9z?w~ܧշi]uɬC0ӫNk_}z}!hW~]BX]}r1;vorM'.ȣp QP}v?[߮ZQQqw=emڼn ;#ٍSb#mߍ–uN;MW?îPHL=3mݒE.;Kftھ; ש<χm 6 =АqÑ2m[ej8~bc0@'wVֿVؔU8ɽ jklN}/P82+?]U7#م1B ×][HeEٓ~aֻH0 Gcv(oOy}+xfA,];ۤz9Sng"n&2&ꑧt!6P",'jbU5{3.ȥ UX?vn^W6-.Hz]}C;i;SX'QSKGw$N c!vwa~5mԆݷUԫnpLϼH=Nߧ}bp8 `4J 9-[Rӳ/niy "Š{,#ƆmRw^s[؈GwL[$t{‘>:ko'Vߠ\e=h-;ڦxwscziy"L8ax1;-ɽS ay wR8 qGjw,]NnYU6-]t 5:zNW634Gxkhhp$BCCB{To_'>h6m]"[F*;d70quu OiQj*_\tqtvd7xOkV_ܢ uX;ۤ_[3 ]GtIc ߯l aq'ܭesX\Qam)++kii{|Ƚ LoYut',-SY3;9 '<3.זLuǚw ;$;40ۧ~@ 1/Gw.$edj~A{[iV8Sgπ Gb:MaXSi}=Y}$ɞ>XF/Nn;3zzBLih G"LBV 33Հ;&+ݧ 1SS⎤6<2*`b(jS.([5S~]SkjHwk Gbv{@hLgںnq/X]E)qg}鶱gzSp>J^=p`~"eee!TC!F `eޞ)&g>K=tw9 1sIm?;Ki`cj kHI{@y}P$…sM_^{c6MjczwLlbȽSEz6߿O_)?:7p ;EK!\;ٖAV{y&N:#y?81֑vC[[hZw Eo.nVQa>) n5p/OAv{$i^JrFGG4֎62~DEm IBXHD PIɑiS`]QRYQ6;$d70q=iSi֌]wܷdyM3 Sr x4VQaw~onW>. :|$e1=[RdEJ?jM)>ױkaEyi0; aڱnZt]uzL/UA]^~Cf?kڵsռ ,}qE{3fHLUP?ٯ GL~JdHeGDnV&E@R D&tq?ahyӾEoMֻH @vndv)(Mz,][3e7=|Ңl=B=;dZ%r2I.=?KEFcV$S,SlxX0dk̯^k>hiךWP<,rwfrkʯɴeP8lI/~ ͦY/wC5 HIv 608jHtD; [-=Uxc 5j&R#1y=>u (Q$ܥKRD}gCNzwߖTh:|> aaǐq@Bֿ?1OHuٟ(=xHLuC;uh0Wt*- E.-)[L: 4J.ȥLɑiᆓz/m=ɲg(%e@ cF=7x,VNo}#9>/%U]Nb,];ۤR__QP LLu?uEN\9ASkGSKoP&YR>h L-.[;nYK<(`"Q)kKk~Y[y*+fH~" '^֑vÖr_oh:6֭a"M™nHZ枑3HwJnj~Mtd^,X@1L-?k޻;`JҺz,'E6}:Q{~>!˷ӞTj"y?0>~{ct˪EeNM nYYN;gں50Ѐ?3m RaS>Uo.]EBn@ fvr<pϞחo!Z\QcG)u!rv- ̧.RS|:}:ЬP8brk*?DInV&E@R 3;ϡ3T5] #<29Ώ벲w r]200FC޻d]w4ittdcNrXcd1C17a`8W# [VӦDSSdLHj3گHl4+*תZz#1ycZ. WUUI\.XP\G|/z޺u̐Ӛ7LYjZ9E?;jn>[nE*//WJ wCuthϛOJ1WfYR=1 (ȴYCq˪EeRlN$Hn#G{ [^iQʊg4FS:o2|@ۧE"1,x)41t:5UUU4/vɐ$ٳ] &51Y?5::6t0%{QͫM1WF e z_ZDRRiϠHj][~z;ծZ41ZMUúu7&~0~[|NwK>nDu#eyZZy;#UN).:reFbN+VUG17H)sï_gȖJM&A/hsaˊGwIjMS?6Gh,"?`Ar vLny< [nӟ2oŐ{jZ] W0_n˯N#M4w9y򤮹K{:}4E0+)F `Ux-vs]ܳ6V0tA71,@ťdN%zq >HwePYGr8gUUUͽlvh}ǑRx_##ѫn !(- 'Pw4񍯍SJJJtf}x::I҆ } 0X\6e]=}8BGr|o tv5#[zl!E=7NÖuK$KTN&*Tyyp8UUUEaL;4$.I{m)ricn/ҩ촋pfoR9Xvw^|IC`\TMMsL$k)#Qe2Tu}*3&;́t,w"Om_Zyڄr)` 2cƄlq#ESy4GTVV*]+t:p!Z2Y-˥}h}fӞGXmN?i.,VM傄um]GG:::th}=cZ`nuvءUL20\·=z|HT=o} Aw@DwANe׫ 6NN{E^_H9\ E,h )B@rYf[J'K,.x(Ie;EL1toz}!=Bշi=7ɑEpFGǾDGoز|%kDJ3g(匂.kl\r8z7c7+>ϙSIܷ]7BKKt[G9YP[#+?vg9{Fz-p'k{~f#Ďootܮ<\_LL.oL2VTdobLٮ)&FpŽ.&Ii^=p{Bq7!> Ift TN (?avsXF?y9!OwCUȝ0?ݧ>HtdN~h͚կvA&s7Zv}r-P8N6-,m[.>3w-7k &e;lHS0?/M9~-9@ݼn{]K<(,SGt`~Fwq\@M*=5E NݦcwI c0BkJ}j[23%^\.<avLoN??+a#ͽzw,?ܽ=ѿҨotttS^z8sƘv2Sm=Ӧ%epXB7\;߬l 4HJ"Qi']mڤv823 K҉>g .x}/".ӫKd_|YxoR!vsz˄mڲZeʲmiJŔy󔞞Ԕh/+6<" `ȸy97: 0G>n0r%uLYN>w(4D$Q )p+!#$[]vo@W?fL{E"۝ekkݵ 3%er3d+%e/[GZy]Awc>N6ۜ wtr&yp;9; )g"05mup7c_}ykQ%)Ur-Cawp?ȱ8ws_=\˛Չ9Nmʝ9;|^Ww7$?wS81Es~.& DFZ (1{ӦU%Ħ p7` 2cөR.WBHe%ޛT]\7ڛ6y(4|9v[gOuܧz}#1C==ez$UPpQ/‘" rx{N ~˪E;ma~oT肐{ ąSkr8xxt:|yB\t̚Lmh?۩P(,=t*=ݮX,tkI":ݞ45s7m))T5 ˜LsR;vPu*1)n]0&\ʊ_<|r%N@+';s3{"ZbSSdm2~&kt$L5'CO\Br*TUU;7ז؎cZI=73ۥXo:?OmOTiPQ~RRM /Phhh4d܅ DNb(N$‚=鐻=+OFF.u%?shKݵ2n8vL/D-uyPGGxPi:t( f+/7gNophIC:3vܮ)܃0E,;,78 0%b'ōJ|3y9 #B2xG|tqOqCX:^+ܪm1rY)!a ܸ%VM.]*"B)cǎ> Io_̟7{~5rW.^#=|)(=F;wPeުyڦuج64TȮg}vz!"Éز:.!.gMA9%LD$9,""#$;6eX)/"q8?kÆWuwN{:."b?o^];SXGzw1ֻs~yB,$ edP@ĔI""6:V!<"I' u rM[F^L2oޑ""R\\,fYrss%/p ϗ\ ASS.ϫ#ǧ%Ӓ#!is.>{͜ǮX(|pg)."EŻ@G= 6ʼU㡖6mwZ Hh55R);tgl<@$@(Lwd!BB'OB$ԑn?c*++ӟ>X,t:%#~tvvܚ[ۥr֏:r 'ϚyA"|Ub̂Z! )nجfz?> JMzͻT.#.MwMiD)r=\rTVVFp/,,,:32h:םERUNy,dLs.?cv ԥDf`0Haav6:n;m]De{&ίk@{ݢ]u^yg6J4l*s.ܜgs6:W泹=+(E6ݔN͒Iv䩗iOy\we7N `xJDtUC]2Umlܧ-XPs7tpd]_sk{c b>z5A &cX[./\qNNcǎP \='Xjasr"r΄''S6A$nTen'1] 4 !"Д<^ c,_|1/skg8bkŧ3w4n2lΪw qwG?F3Q#?KuyI[ggn q /js.IXG gAYtwhA xcz]몋D,&#E8K' ,9)CQlz&rJOTUUʺ4SLq\-]T7<2*`(qV ~-,gQfqw ɷ[Ĕ]\cADg>OǥW"9jӦ7ehhH/8N,{M2A'wH nu $$+ɩ_6H76RmK)IbN=R(kJS~m׶軸[l9y/D)>eT[ǣ{7mG&\veKaanox$N\Pם@tLF^%tW_j_pnX | IDAT̩D+y|sYTG=[h!wE>UvY uINޱyg!#Ղ<]ܯbM%+]|f=Ɋ;tcli˖]ͽbI1N2&c i){?N c-=^`wF=oc1Z!*U2++KX,<O]vt{~ñws7NZ wgX5CïQR$$;wTm >ڽA렓;@C7b ; I}S*sm&.IƔ[? YE?ŔƜXp2o{{fjx·-DωUw!wI΢|tȌ]ܑXg}ϱ{8yGU=UWNܢ׋tr!w4mc]ͽ'!KLv巚c;nYtrc^[[5d# R^^.L9{ck4Nsjhڅfdl?{Ž07SZ꬏^]_xyRm TURv5|t;t7Ɩ]k2ˊ%(p4y?ޘ.XD7f'It:]u[d)H.\暄{+V*>\:h:ת+JgLh_$]нI6lؠ1RȡVmtrwM ڻz)rnGrwQ8qeWC(j\ybLIȔz!j/Yzɂ s) +ADéں~m|p2'; Zpퟒ5k.q˥P; i|ܵ]D{̯/ɎCNu2S==U]EDv:*]tr=_D@h!w4S"w6K)pRQ'/+~ߵm[:+%<5uuuݞ4{o=.DzZ-""E' <6:{Fgz.t nU}Y=X}bb"G*Cy]DE/kܡB@˺P˜vɢ#e2Rs7UW{CC&jX[[F4k~ktV?%_׏ED***T9VO_cS}"΢|M\3w͎Z*͓@=*wYuuD"200 Iy6*;wT⚔&󏣐;T;tzLN XRL)3mC]KJG՘ޞa"Kʷn:EZ-n:O)//׬hc b4:$^]Qf!-.XPJU :;;><<,D䗿ǹڵ)jbVY|t;R!wILRSF&YR=jyY/Yv{Tcvmq r,l99 (5K.e#dZ妛CkjEaa[N~n:}p~ɒ%w!wӅK5sN3(;|hI]݃ttt =Տz IڦuTJ5_KP ȠЋEiM- U.I,=u>w%i'K_*qMQ!>7S3G_M+>]iv;!2@ ?%)ٱcرS:]dRYdXrVR{ xcYB9 䗿5őr{{S<B;:;;S] \sDdY{U=d+X] XGj.p@F׉ΞEwq.^V]DdLs=镭 =1-.)@{zdb|Q{UU%)+V<))~ pH c{VQQ!;w*N㓣w:VCl69E(J˂|;ߖm۶7/z|wwdggKAAdd$שHD&&&dxxX***d5Jڵb1R~LL@rGɶRqIO*sU)3"')1uo5>.㒝-v],'|>D"bG~ 8oFDvZ*] 3PԧfQ$fH{!w]M?q]rU1m\ Sjsr"|/Q|Ξށ9O3Ku6 ML6K iWgpOBn[nVٰY^Q ê- АtttHwwJ$^zkS\jtauH#]܋ Qج[gzF'wBW'1fS&7[v52#*|L2Ss74D>s1w׶mQ)s.VJۧ!6. <ќ%S}uEmjI9zO].__dp$Jb|[K_Ǩ HFFX,X,b2dnE"  @ҋ{N6ɱ^*b@ K b!w@#e9 r)oj`H~+S$g1u[w,/> ɚCG?`EWĹ ((B2zm OUݘnE{ǂ6ѽ]G^y*KAAaTce||\Ǐ]FFG^[,'w C_'量>._+X8jb/4hb-u JW4l @=Jn2KMadfLOb/Ӹ.Z%]uumnjFE'wm[s\jqV:winmL)B;QD~OB]/g\ % Iǿ6[ |cױ!N."trBw"Ф@(,M]Sf:ENb~sG7cڶ51XS~< RK@skʵ[k{S)1*\lo:jpx S#R'ȳ#J\A/b➕-y;N٘s M6wmmk߷o&Y6埯M`8i*J4S;ͤ<ϼ ?'Rg?{T~r~Y{vfImb-ͭmX ] 6Q P8#]S?(=]W]Du ӘnGLɲϭzsSLG=N OPа>YV6^%[~y{O7&E=oF\uVyџJ8q?ub1ﳫ~fRxb`SD;t!0PՖͽ.ur?/q%%r]s+.S!wyb S[u^ۛvsQSܦMo?9Տ ䷿ljkJU}yfB'w@*!䎔e4RojQe޺B1eS`HK-{{cw(r]lz̢6%4"8ҥK5ӿβiSf{ f BD߯jн]~ȁ~n['k.^E>Mib@<A`ܡ )@Suwԧ5eXL:Mֆu7\5sB'S㪪*)hDzFiV]Q [O'Q# W(O?;kƦz(]$%_7BF,E-Un3IMYË0~_r4N.ZL}6[ED;[ί?I"" %w'۶%Sx^]ob6qaOZ /@b $VJ=!wl+EO&u^,p=wr߲7.YrUW+rM1tq/ȱHA`;@2Wmsjk4sC|6MFIKKtooo'K/J8NP MrmF:[-f:Rh5@YM- TXPpnnɲYC,]dSRJ0+ 28&/?A{X?Ǵ_#54Lr]ż>6k㖮tq 䎤zٔIfwS*:򬒓E=0f賓NoLj9?&Q[T^ ӓgWUhb|n{Slո[Y-΂\qʋ?' [ƬSOO?-,Y ]`n$ܑjZUEX>?kX5W^%JK9)N*)X$2sƯgY-IwNOa1ҎG]lȗnZ{}[䑧^ɩ鸯iӦ7g?{L9GFFuVL ?vB6,Vͬ 0| v.#$K'ˮJokQ:&&),[rܿm25=cd3i`F1C/kUHg8k{ߊ} ٿ8_8~Ɋ󖱙f2hb-e gR &fnjQeޚ<1eS`;nOg^~Պӟ^UWjb~9`5ϗg""?2ATDxgA<_K[5_=7./"wxsv-@x)@rG>(ȣpTQԪʼ5e8cAiV8ƌt?]'sLk䉇>!DJ7 _WY}~azzZ:]pns߈l=mZ3!wPP! @ÉxgwS*ָC9ӸVrT`Hjsp*4qƯS[;U~,gϒ`x*yӯ+^Z/m<_P4~̃wנ땱Ѹ[>v=9xeYE/RADF)xzT,Ŕs3t_yw2 [!#=yoUWGLÑ~cwH$"HdNuZy[_,] +8 rU;ƃw 4c>1uq/ȱrOR8OpgPS뙙L]êοjB9oq> bV7]%7]%]rpr^ +w}Tr#׮SN*spZYs $?Mif= %"䎤mwPnU)^ߑ/_R q/_Y'ޱ y X7w%]'e<_kj=tqĪM7BI=4lOz b $e,{{߾%zŔA8q[)heŧBz\uEmjy<Я|~-V΂\?-n-2hri!~֮^lx{Q$n6+н]a~Vͬ ;hD{WEI'T #r$)3#,tˡ<rD7'd;bZ +c:3{x<  e. oA&{>nr)](fsCq uLnmCٛ|ǯ~6ٲvH R,i̐fӟ^db| ]{Cxyϩ~STeizRPp̄_ZS˸(7zG(@r FzT")Xd+_uEe~k(2H G/W/+.5 ŏ3uqҕ/@ bzʀdV96 `μ#>T|^$|+FҺdyZW$n1e-W.$HNI9Ga!_s/i\(K:&՚ O4[n5;==-~Ѯq: .^ *sG=$ADF)R !wJP{MYEһaMfrlęɘk:HDDdhhH9scGfd285*k0+jc;5쎿B0/G+VK^nNuq/*ȓ\P߽$% z I奲Еu|de,*/$M!s3[T]͖|cl$""(ɽ ?pO(Hd&)k84PeުgcG}lnȪ{&s/.~j. h? ixn]!w$EMK'wŝ7#SFŽЕ/\ fUwwE ""CCʇrM_Uw RQmC3D@Td= H8sѩ,,QdQ_"(gAdfoō]{em[] `[ h*řRs?(PXy]VCw*> kjvw1yG͐ժ555եy9g}Ȍy:%"y+'] քFknMnq54R1H=e`vs[yNq{VQa|o.wZʗ^-7Z|a8yڜ,s744*M԰8gP9LtJpbDf'OdHnƥ):wtnV{nO2hn]tqĈ} A2zF]R*P:2BH! dQy;;.tGVVȢaSSȳJss=+˦rR]WWs:r$KCA^Qٻ^æנ|{B$6yܺ @|PKn[W%EKȜl0'}*tӴTt<[r3b;ДrK'nxǂ;r+h)Cʜv)ȱʢ|9wSf#K*vrMvU;$l$ uvv)>gnA.,yGǥ 7P%ľ4[?z5ghXq#c>?cB:W[> ^U^" d <܁e" vxG}*N'g==_+vI>\j*DSXFd9wқLc_|Mꖩ2Zh٩ʼEW(^{4<\ HGa4ljgh;@! g|ȘOF:.tޥͻwo+YB*/asг7E0kۻU7]Ó3?5g$pʯay/+eŒb.=ѐZq+++5Sǭ[_̆RPgg*: kmbu\5~3M.XBzg@k܎ǟ~ER{W/G\(k\HAj56⪻oPyr{Oi'Nq[o4 l+:{{jkw8cOOrRM&MFa#R6BhC! =\] 9yEB@Q@Pڻ}Z>gǃMՀֻܼ +P {[kԝ"b ;`n$'ω<00o+d`xJVCmmph===l$ ErW.{1 bI?~L[46@UJs$dЙGBgk6ۻz% Qxn=RU^"KVQ t,>&"9~2 (ȔI:W8;yotnO“3bLg1 #*vh/6MWTTJGG{kuyL@ ڿs:r(ls{BhD%]\_lz{<`Z(ڻz8sHmƃ)w/o|1MIvoPȾ={uu>B"r9S;֭ʼ<[\#<9#ZiGr])H" %d<\&uuT[|&U-.MZZF 3TuS328<&E|(![drjZy4:Cokv}tq5u̦Cy,*tdž4&{ȥC1FlRW_ohWԪH$"]R]6oys>SiWV(zinmɭ#Ͼ~b:- I(D1E!wfOߢzLMY@L 41$9,b{95;k)DH5+r(I~[T tr dpxLstym~qnQ|]y":z+ _ۨ]x^]L]ssbw#=5 Hds' @CRU^B!ŨB P\ Oy]츞G;sty)@a1(td̐`xJyVC""5H]2UcX566):C*4!֎MsQyH$rXlʔl%);*w:d'%(d'J7ll%-֮Rt<=ԡZN'Ot UW;_s@A]N ]`+Eںz } w">u,D=iGMXF ݳˊ"{{߾}ҋ28Ix D.""Ņq= P355%VtN_ϯ핊񠷖~6ٲdl<sLf"C""3,"r oowvwwpm"k}9r)E(<|Ctt9q=ψ?15eylsbP9An6Uv8rob#)Dxwrh'^ˡa}][\#tz4tw{G$6߄>cAc_ojf]':%c&r_ _kZrGb;*?z2pA@wi it+pLbLyM8 yVQ.n˖-SuhlݺU.b6䞓m)wiD=ez&J}㶽q $6~b=ubK/ZI!(""wbZ`?]g)R(<)#c>uG%̆F|̷<“Qq$`brjF,f# ibL7LDʜvC""SM.hVVVj۶rRAggT^.ZlC^Ҫno\#H[I~nklg@Sۓ٪+( 7izë@̖?>wEDDڻ( DW.XN.trGx)3IOxt?<mn3qU4P (SנJphl$ ܹCyrجZ "CD"'}mq=0?Gl7GzI{($K]DO5 ΠhUڻzC^t,q)"<9GA.mݪ[VN9Y(dfw.G]׾zJyGbL).9L2Lb0I$rXʜvC""SMnF筪D]Dd֭rJ.>je'A =ܥoHXDSQ}]~&jZyx IEDfp^wx};BQ C2YH!±(@2x߲fS&matqz,&RʓorL ?ftjǎ̻$ѣXbʐ`xZ񹧦gߐ?stok E)D ["~R+Hj.]'uio'E"J*{}܋ ֏^ͅ;awh^(q}A0/1@S/Ð/,:U>䞓eJs *DS齷5eyܭyg|vu8bZ%$MMMnٱc*:rl2|rV/P-."_o}g㢺6}`Dh46j.fjnm7mnM4h4&ܚM&Dx"0 0Ef UmssμGAfs}>s^}Nkt_ e _d!|oc'}~xh"yHƻ= DmLg@g'mwtlCVEyh.4Q=CEc} Fy V6!w6,:ݻ>7\PD sIQ]` 9-Mv5xcHFpi+xC#PEr1Ɔ{\8Sᤏ|=2-ˈǁ͂1\.h4^iѢE WVV2N0nNeϧ-FM9kr^h۴;O$~*U4ڋ³$ F=zK;+# _HD`aۅLDʓ?x$m4L{]SSd/ l3Fc:A8|)ZuG8⟫}swG1_awE"6Z]|݂oظqcI\HD s QƍBJrR'ӿxk68P+mw[|lvoWΫo,m k3f7ZإHrMw])r|E r^1c$`&'fgȝ!% ""XKS1c.OBC#9K:ڋe>HU+^sդz8 +d赢>䞝mL V == H!N<)]Y IDATʸ rd>VI51vƊElۗBt/X@?M҈>C,Ye}=gr>d""ipv\~[{SKB4|6KM#5E?}b#n_Fŋ>T6[*cDE Y]Bq!h'"")+F}̜'/#fxGftE9IަwhmũڎoCQaLe]&2O.>㽌߼q ?X4@ $AMMV8Nt:h4FSUuܻw/nE]]8u(cgts2Iv߳Gε>ZU[e>:}xͷQc%޺2"S͵ #Ia3*KJ.)SQZR,kw˒ӆ͵~&Q8~,蘍vdCaͺ;YV\uN S93BVWs*E ߅R1woPܽ2o}<}Eg=^W3i>o}\WPGiq(>GZ8A*ըc-hQdB )X]Up̟NMCtWe D7wÿ>:­}iۻ7_mt?VLw4vɉxxf.j" 3fP}¢Ф OUh6f:\<ЦG9+-)FF3I.z6 r>DDDD$}:[Xrw}XfA5X8"9~^F<^aG&⣰e]I{H#*֙v'89rIFށ$1/|Ƚhv-VVB"R>@q&~^2;p{U+F\}_FGpy|U0Ei?ĒgsHw":Zyw8ᣲ?@ͽV[̵ ȢXrA:Oԭ|&jf]I9J৕ js]\т\>?;r'"""" 2NCqs>~dd8\ [Gx r~iSpY;Wdo8Ϗsx"QE!$dFG`QN(!N';½v-L QYYr^HΚ% LspptH38r\s0p>:''u Ad&ceB?WS5 _Ձl{?{?B^ l"V,Gj^RZrܶf3f7ZƢ@h_6C쒮LuYic`<2DVF m.i Ņܕnn7bHtuVGMCwv\tna}Ƀ݇Y\ @^F(8[ F#ؘI(O<.&"r8u(c/0ټ,Mo* Qi2_]_>;'9|y -hhD"`](?w^D>qi%`{hh(a2堧uu&7skw 8z(.]>`hhr[oi_;,Y"JKex?i%v6N=cm@fGgEE_o_f5ssL9smd ܭ6; KDDDDDr4B +ݥ~!KghΩ"x){Ar'a <~?>kQT,I%\ m޼EaݒފjrAɓ'v{Dda֜ͫF _NjsˈJDbxr=qr s=_;`Ŋɯ@2[7nzm>k_[|'|8}xP|{b$ xoJt8;ɉ7/"!^}¢HYilckKqIow{aPZamwt!Ul]kp;KBJg'[3:F|~̥oP5e!gfwLD_K.> ΋n~CRrh%CD2o,& s2ҹ/!wUD sq!33 = g555[wņܯ75,BiIޕl R~H>ىs6;6k-06K2Z R}K)C|(Xǯɐ;Q1WSܜnHA3W!G_P+|r?W2rd8,6:;8v(ʖ  P]mD _I;tԠKټ,Mҹ WdIFkw?y桬l9yf ۧIo߷o! rL%ppQ<|{^ %1!5E/J3U43U9 \AQcD4n,>֭dQ$jkchR.)uyehA(66qKBdKqmC].US1u `Q8Q>q+/yXDF $dFG /#^;`ѢE Ԡ\PD2g]V7gk'wT#5)VC\\wv8>f)o߻wyQuhpYrL ?ׄhuHMяߞ w8pÁF[uha#">gWx\kAS CRfYT}C#JKe9h<\sP}". [yx%?cc4,3|LUurF5ޥy[."/#>4|yO84Y=6ZxԷij3Fdg Ѵ v"ݻ܉dNe,C2s;@rD4u÷B ['ߓZ-xnZ0;?l݌5-c!v͎,4@b]RBP̳tI1~Z9n 6;@#s4CN܉HzǾa-(0NDppX*hL1 ^N O4BȈ&2b뢜dѶ{mBTTdjq!o)؋ 2l^8:{$Qt֯Dž Q &dcXojqQc֯_?핕,6͹/\ƀ;¹̌]ooC?_yOpY.Iq6vFrd1Z dNy """"``UUYLDD9E76:BxO0y]a|tBȌ&2!!yЊt2Ёt ھ|rp-ƩS'D[ |u;[-+}zlYW50k`0~_a  `r޶ R͎ȏx}w̥Ơ ?~q޺?k-ʶ̵ ,8MCs(]R<_hA(6r'"""" E+H|РяQ g(.C.Sёs]Ƣ$.w[)Xeeqp޽غun(c/0A I)>?sv hŷ/>~oЮy+_ٌ_◂Y^^O3|9;rk-06jkn  $2 0eOB|?ZAf'wL{CsAFk>!wDEjwtDDDDD$7c_(2n>[< p|./t .! P;tbmBf;`lD !SBE9ɢߏ͛ fEE$U_!w"WE9j)fBB!%)ξbgq} >vy ۷wQ]]™wg/--ѣ ܉3f7Z sU0gʔi@MWc78eӂfKq?=60d _elgƾf'wаO%ƱhDϠEH1fo@o˂'>:z ep7MdCC0<2h2QrQn.6o2}hPVVcǎI555hmmAzzD=ː8ܝP쁣G2mTa'Dߺo}\'{TEDD`pBQ///4GVrONN Dbٯujj" $vjO'#UXdCn ]=%%`MTp)b,2\CV G{~\75H9"u}ȽHA9,C}./l> # a|tBȜ&2W/{т6n$X7wO<.&")W}qܞx^27 hDF@ G#OYaM&^xa'DS^YY+P0N$m.g:S{pH8zy P7=vs_vk I]Up,MvD?9k5p|>>eSɊUUU};哆z!w"_1N47]=av ,,JUH'Ôih)S's]D t!w Dknc]Ί/O:&)Pn7&%QY"s eСyk&Phc8xE@DUD(.L*q`͚tlBo:x'j\PD v9yqEuZDūGFwct .L҅)xe_ ZY55NAA4Q7Od(6;̵`{tYؘ0{>$I)Ӏ >ւ9\AD4'8ܲd1*^ô'o4;$@DDDDD{rw bouVA`E98Uc+مnt_ 2Z }./`TBnv?G!++MMVq=x"1es>'r)~Hu8 Z;0:zus aׇ5~d;]yyQ`2 ͵v@{LFjyN-M,ʸV! K\KKBbhst2NDDD2 r)qRV JDD$%KrըX8M,D5䮊EQN̖.QulYws_vY;tuu7m 3\46Ir3UD)qhRVo_Vg?>:Eln__v; j` &* Z˵Nv4(s-̞T}L=yGHW8P8r{G g;X\"""B.7)# 9iiwUD GDs.۱*ªE9I NavrE%9XT#<4#颅`ǎxɧf5FYrIkjjP]]B.(9o:Pw7&l[a!0b34t] ~"Dmp{K};V{\_ nn  A@{|Xmv+X`RKi)CceE\2&IdvH-!&pX"s؞t.w*<kfUmFGI⃏[E߆{'̕Ht_;^]m|EE!++MMVp <3\LDsm,CwqǥrOi6CB!5)]]1D;M=8j׃+{$^XX7x}jE۶0EsC(jUR0e`2dݥ}L‡:X[欓{v>xG{6܉{Zx7ޚ>~9۝NDDDDdnK(.{N;{IMl [#8/'V#РQpVѷcHF5r^QQwjkJ޽{v%#<8rdj>?3aζ*" O\\Y >_lч!Ɇml`꫎,{|deDj\k}E ] ꓂i"͙]&J=}_c]Ǐ.>oqaȜXW(hlITDDDDD$k#L3t:W\3ѻgdOy{_N:t:{@ܷ_BMٯp{Y6OԮVʏb6;CAܚN@Mn{{>Ľw|Lt4R:tLp^C :Mq] )k@Q]\ IDAT0^A0@DE9AhT;yJ?]ܣcbWPǎ2א; ~7W^#֬Y Fu:p1԰!wsxD݆U}I~Ax؝c,] Sn}KZ=䞞1핕G#N;ѣƛ7syIN۶hAAtgWx\kAS ;Zq-̞kvX-bc{I3Z| ⯉ۯr[,{{>yFm4 *R-hVu1 LDDDD0Vrrs 7IӏKY8"SP鿾18|;vFhv 4eh"#X)t_򃨯ae$RUxxHPnn;wG(+[.ފ{` \PDo6T$Sw)DŽCFJ=7%QB6[s@哆gɽVRG+wkx!U|zh"Y z͵ @A@{|E4}!w9;ǟp_,-)AȽ!w6baHVn*ebU(Z\#LPED4t 8ys! kfBHq_C[s38cBs7g&s$.&Xf-5k֢np ܉{uVKھ%bW ~F*1,]'_r=:$ECmGGE`Eq:J 2.AN٭6Cp49*k H'Af騩 :3͎l#;Nv8WPr76^C{^o5]0փ(82i`ч;WPbXjܙ:;-)[t2Qׅ+ؾ}ߏ_|98 =z(,,"/$f"%9Ns=|JR_2?Eca!h/K\ wDLv  ߥ8>F Rc<]Ű|u|zXv tqS66Z=y[; GzZmm ]Rœ;vle97awuI~>X R.Wv=,Jd_>֩ne'i,c.)~5X+`>9t~)z3ezgή~n1XbȝHa\ !wѨ.E\s"͒wh3V '˗}*/=:&|ArWEb^|k+Xf-t:Ϗ6!9YNdjGEzz:o\i5^QEyItT5t2/(jȽ`v'p8_Z;NVF~~т>Ds3f7ZƢZq;{2LFhkZ. NafAd&A۝dp'fpҒ)Ccσ51.WH$' ~f;%"""""ySĜ]P,M[z|?/#,u֏bDG,sa%4Z }..Lvݱc;|)i&Y!:VTT'~E${nGUp^V(1I_.!!g iBj" 3,M8q8-Uh~?nIJyrӧ:v߸*GZP_W%'c6v%e>nRuIHҞi@|ESA;O .3 [PZR,v5݅ ebT)+_ vG' KDDDD0.N#0^""ri`qկ_yhשb-[P]4j3v~7nk֬\_ã~Z-_ljg8X^*\utA2Ta~f֌.!D Do/<ٜJOxێE٦6ZWcEq:.4wc&c !0NJr{nW_`w@ʾ֝d4 MZŢHP>Iq͵^$Hhާ_Ko~iB$+_т?mtA]QY-oY>1@DDDA38Hu8 qB) X<PE!Rirq|ݢmWt>=N`͚58pdjߏ;+#rA oۈey/^YMܝN'v֭+k7;-ίLDt_HU+Tn'%`\.s-̞ S=IӋsU^smCA"h>u O _//4$D!^%LLg& _!뻸f$ H;o<keb>:(n<ԓؾ}Ϗ]fBPQnnDyv^ݰDRsBKe~ Ũeņ w`6`Νe fHl\q+^=JKq]D )-Y=hutJN$={>V ɘ&9>^GgtTa(zt_]bĻEߑ_'Igey 6^a˩DEQV_]R BCgDfOh)(L>V]1-h@ɛՋ ޻޻|i+_VF]r'""""Rs9Lo(;)?CR5d7wknn/,v6ݹTRZE' \3e__V }:u>qNFLt|KPVZ5-c1hR$^ҞOF>EQ8SAPzgE8zx2U%%Lrp7뼢e yE;)"""Aent^tp0:zE{pد=_zS 7҅z)|ChYrDEEIc܉%?[ѷs{Yك#';%YWhDOA&|V#7nm{KđolGxp'6vխڗ{xxf<񋸥x!Ad;?C?}>;S9 Z90܉Չk/% ""8{,BٍZl=~=nl=xAb&rq:Y;N'}v;G3~Fڵk{nIՐ܉K/&6bcPV'yGPWJMyIςM0[0zE'݃~_V۶}##|f; >n1ϵrFт\^ڮ A> &c:L &:(+-bL:(ny9SyE62n L LDDDD$sVK`ȝ(trwҀ*߻.\Iok8~c:x$&FB%7GFo+MصH>vv~7nc6nOr!n<(};V@-`Wo!XZ!ŭy%D'ȕ} h8E]^{m(Aт-$S. Lx=>'*Ơc̵7H$]`V(jޥ%vrltdq50MrS䬖Fd瘸cT,tQp^;{}E,];;Sc҃eQ .&gkQKmY"dgg N2;&(/Y`J4I}V%\g05P=+sܟNϻvUVtv~Km|QƝ(x'4m]=Agŀ96!h?=?̵ 0ZƢZq-̞ р :f܃L]w87[,Fŋ>fgaH]g(tq,D O`]dBtT x}^S }=_.B"#n;hft7I.ߏx'\PDpx*\&^"Ua(+vi"#Fj";|{{.\rxX(gDEb՟ήp=^ 8.uc~pL;gӠ.)Jda\kf,UTNidX[>YkOR>MTQb=/wf ->{^ռ/5Z437#H\->Qq E9<"<2АÙ:p!Rӹ.$d1p+sunӉgݎь_TYYhjJ;m6gpQMᥗ^BsMqkԪpIlu=j$O+>;<듶ʕ+ݻE@YxWQ7 ,2DNhWOkvvikI0 Ƒ:I\ka=HL^y1Hp+6GBDDDD$sJjnBg2FK#s$/#g}z֎"BYD 0BsϏ}.Zэ\ށusˈG^F<[x1 6o2oڴ >Cru|pAMbϞpAѷeHFْ<$Or]B4}ʏVDAj :v}}2"I.M-m,J~fON$&֘׍`1]7Kebie91f;IB6[kѨ?* """!"B l+.dE2*rJ9A+ s{~A}L&ws:=ٵdggl]f-^ytv:%U7x>7(//"IMM ^~e?±Υ>>.}JD^ODm:{gy|<<2*>_rͯaX ETuː)@{xvgE T X=>VˢPe 삿oR4?m>Bi8M>|v WRA~nkRS;?7a{??ʘ.)ɉDf;%""""3Q)S9;7xI.ݽ>?F`'MA3W;;m]$ޡDׅnb0 ($FM=UD(^>}v؎'| ٦ieIvs_ .(477g~mqkޗ>]T06F`w,]Z9,[v.QpQu%epv٭6T_(VE U S&]\I2IқZr{M7w[{(!o3UO+ Z!ʼr2.oCNH |€d!} :C z|~.1#"DQN2h۱ F=y89|~LrvF Qp|xOSO=w@:fZTT-=z{=p=ok) eK$WGr]`[h:z1:~d%t] ZoӉ/} 33 =6n$}Lbl$/ "0ZƃBhrq1a4}2RI, I)Ӏ'Ίӆ|T0e]H/ 9˅ٿ%/!&:Z$oqLTA.^[H& *ar :CdҀ*҅)8\J{9kO'w B1z.?ڹ>>W}tG?g(/_"z_&vTplSǒۧ|=cfXhQuj- Փt~w \}il`pp}}}sVHU]Ljr'63f7Zإ=I0 PU, ɂX'`kr39Sπ˅>|@P0y8+a}w >ncDDDDDrըfM}3H|\R WП܃dU{ '&+v|?SoMxw$noΝxG(=s8|@uA \ \IWQc3wxVק>1^^{ &VC|k 5;StLs-;q _ 7dQ$Uw5>heURS5uV_X KJ2p*r9xNyΐee ~"aCDDDDD$aSeOAg(gw/@D:kkwtԷ\: g赒J /)Aǔ._>-)+Lt Ѱw 7@Q"YvH{?x TT䂢s'x-}r,n/+d]BCBg~ϵ +Mɨj z;_/~D>r=av xEUH'_n@> j5/CʖO< ]R pE r}LJKqiw]Dw+_ xjDDDDD2eUV#𦉾Lr,IFKGzvպ{E^WȔSbLP]EXhHPݟN\E"Tw?5N>& K}{QYYr.* 'O?mTˠVKR0>&6FФu3AtH 6‡D!uh`m#. +.6Z=y[;Q1 حOf IDAT/¸Z ƐDAC÷* Lр+_~)]*?w )4;H\JNDߜ,~F)6Bbf"")p2iTW@łlxx$(C->x}zLtL hIqQhq\h^> Ⱦ<h4M|vsG}{V"knn?mX)qT/JxYhj}tC ݮ\DjJXV=|R`\nxj5@׺ujgv" MՀ2Xfrop=~%<p8o+-)/?W}%Lդ hA(66r'"""""I,QHաtˈ];Pr}./@Q!/#K 6h +Wr->d9;NU0h5׮^nYSٟ;'BvsIފ;+#rQ577?Թ|L,^%znbNXhϠ4Kw|˜l;)N]n4Q<|k- Zq-̞kv"๢V!UvgZm| 3 OWLt4~?rs"ZPėmC%""""sg480J&""DE 9RsVaL]Ʌ0Cy_h1tʦFG'>QdL8ҹvG?IR3Ocݺ(,,"E t]K$[GgzcWN\׹^}xtvO~ze\ >CR zbahNlM}Lj`Jv;0@DDAcɽnBCuxO NgF-_ΝEE耻JܳjUdkkKrxk$t hq\do_whD  ſ\84\n v:+h֩݀4}j^_L>;W+bafk5ӹH2]}~.1#"d& >w2 K3_/#A9V!.A\L$]^ Nx*"[d _.:;cMM v֭۸H1p qZdkbic%_XQKMFm'u{QY\SbuRE1uAdN[V[x}$1ډH8idQgp6iohDiI束3[т\C)Ɉբ?fIr>'$db>(ܽ„4d oٲ>C|_aHO"ٛU1?'Muߔ~1>({YŅ>俾]Cΐ;͕nA(a܉7Qj;tsnqŽt9C4 ӜXuZ [7׬YlIֱ>\/Dْ=|Wxo;P}€{܉d&Ae_kXؠX;Ӈ,{+gQdqd&0(#UKGϏ[XѤݽ"S& o۶Mu9WH6}OܯDyePE!Q+\pZ/}=9> ~l:' ?Z  c`ٳǷ?xs!v]CjU֮op;QQ"fnWh hAc66"""""q:JʙnSAٻ;oxf[lKe˱q,! t %,RvJ=3LgJ;s>ϔf~mP)NK˒L)aI d%,x%˖mɶl^Hu]Y:ս}YvZ;9(CP(5 k}_O7'(2XT p !5tb͚z?ߔŵ^5kpbQJYBܧT$k^zOR9y(Oۘ_m"Pc7>' +l'Z8ʋd]^.]=s 58܈C!j,2)1[Sge\C!TG}'IJ8%xQ-~)~M~wFb(f5hu~Lrh!maAF#s==,jaLO=c:>mFxb*1Q=|[oדwm^N*J!~S]s0)I};ttƼ[=ݍM1-mꊓ3I1݃>Rы+Z:004̢$H6f%"ˍ(^ 4{պ,Q*)ns8r Sɒ:ӈ+}:/d1{ꫯ‹\ Lg$c d<RV0,NC^Ҳ[/LIiii+`eo0r'ZN=z|?O7| z=nf߿?)k܌G>}X}׿N޵eV%_>2 .ޭ,Aq7_Q1/hEx|*iϿƤà \}&ށ@0Ģ$HpKlA-ԕE6#03d\rv%wO~$g{hp=wk~)mFdgkpQҐs2GTd0KDUlRlLJspD ۥr6+?0ewrwFq=KKQyZjGkrl*E'cӨRd"^g6^6['zkx衯IYizm8(i۽sհT$}}Ξoѓ(2`e/4K9{mhN@JwJS>RVrzM-Vػ5Q0{̦`;IK0!w@4!ඎC~x?뒟x¿w#5:6.{?7o_ }KmmVclە p=w#';{~ʈ!/B'JҨUXUVA(Eɤ,BDDDBUda)21%svSN>>'L Y"Hx3~??~*ik_űc!70)W¡C&v76TaUI_1?zI{|~r4 qO 12^T)2jl"V9Qu)}S6]X_bLC , "4:f k D}6a?բycW"vtD^ܹ ^sl7ݸ z|཭Ê?bQԙFs(J3!=ط^%0rE@DDDDDCbͿ@);DD$HYqQtXXl5~Hqi}ڛ9d*#= j ,}%s}e.Z~tvW^;)k9::G6ziN,J@O>$N ᷽~u9nܐuڵ \<6vq.Sع,|GQkEjU)n?bDqp>bVHBY(1l2BT(D2c6 KeԳ!';s'~ž7s7JVw8uq}~yc+ zmxanTWFpb$)TG?nkQB9=~)~F*qPxE Rw, m6ɩ{kא}rlbuܤ(zl}f6|{/| x_$m-}O?zaN,Zvs놔w.ee~TG{ <.miX[goąZAN$gs8askX"3DV Sɒ~`'<_Ê^}}Ύn_Hˍ}.6c~?ů]-9fS /K-ck!w""""`IECGψTʙ@IÒ|bVVe\!w42XYiVfej ?ozj\p!iktv9qպ,0QPﳑ~!;l#ׯ㬖ECiD;HݞL MQEȽ}qiYL36:*h{"Pr3U.\Mp{pz@.\@VVǓ?|s/rsFw~LMi+>>_l*CU)`gxA=avwή?*RXj`j=7!%ˍqsy02nˍWf`h@5/:Nek,qOdaR/Så;Ӂ䨦m )dI<}u]honO/H$V p<$uvqWWJEf:: Yxpe3p:laHMN7hԈVr7DrWl(eܦ+WD8}j+,^Wa*͐;QJ|ʩ\V]:NDD!IJ]S,rb-xH^n7mYtOvǏ#,?ɏ۷,jw%񱋻Vleܞ16/[ V:˕/mvM-VviOeFXjVEwJDC"ZBHqm'2P_[X4t1*LFQr\nd(DR!w;$=s`ڸ5'y*jOv{vr(2P?t:zm,Cxg -O.{utڝI{|of벡/E4uٲX(Aٞ{Ѓlv' 'JN7f7+Si)Z;XT"P" p|W>Ι¼ QǿCPxb )(Y`Z4;/n}N?.xMXpDT3#|/T5kְWo^cHŀwǧRd 8O΂kh,?!VwoE>c"2h`R#,U(+@s  "@6G|/xk&qUJ<]9xT= )N_Z{c#""""Jn1)=3r JTX`*O5쇉BxbEŸr?MRk*fe><`\i(BZ 9"j8=8jJGN.5Wcxތ9_a* 1{],,QMrH?\ꛕ)ADDr$3>)jI(2X܌QY XClټQ?lj&m,4k+Q_[o=|Zٜo؀Obᓂ۷m䐀ʸGwYDDDDDfOc$=b+-.BO_|e,,EMH؈7?\hTY(<t};jtǏGqbx͛Foo/yhiiYcIՀރaI}ndO"*e&TL1sqe(<ɩWR)2"aƨ0O"a`S2aT`BYq>خV% V}An%a6s+Y`r[/Iyﻂߨ/# pzީ&?|rU@` ~7Rvbb˚pq=K 'Rf᝽Cr~#< Jg6|Ƞv܁5kࡇf1(jcccxwseW )pڝ3kL:48ᓔ"uh =IPrzM-V0JzK*5?,R}խ5kX ix<;v wZ nnHz>;oٰ e|K"d·m^9TJJKaU*Ikkr#t"B(!w@ *+Y2/ tP#Vqn$""""vr*6&8-h_u/g(. rü+V}==x坂+BdZ IDATe(G@0<_x+JkG;YY>^ɠ;]n_nOcsXzUJsמ{DRJ7Vs(3Ins#"iq:,5U(+5vO|.sP(rMxQS)¾+naM>נhϽDDDDD;-SYj ީ$EJiDP)uiR&&s%L~ckwb:MuO"<1%x"f+@[LK(~!^.|x<طo;Lܶy}ϞoǓJwk/ #QSKǒGc{KL݉@0Ă'z&nJ]-5U(jbq ~F$&.u 0NDDDDdcʜYj(a'w"""z:`a)jS ŰA_ҏ4Nw2|,lX GEV l}'3==|>LNN8v(pRMp,'ѓR]ŋLj]ߜ9zbESK'O eFIgch\զeB_kb*LBو)y.hϽDDDDD${6`(uѰpD7P)rFq=KQz'wK{p!.DZjN6| &<իWBSc6?s`]*Q0FFF0:::|487S(2qז Tt|{HcDXMD ukC,J>T:%F,BB(<q@&!b +*LΣ5Ȑ;QY;%s.G}m2TʙA)%7!w""z:ga)jT ==^v1i l8 k`הA6== χ`IPŝ[6`eQ^J}'zˆU\(x;j&J2#,UT(qPVjDk{ ADQ3fM-| u(*ZNS+h*LFUʸ_׬glLVNDDDQrOL @S)Ɇ *hUZIFJK[^LLM<6[hʾ iBdus~ ڝ3RuT维[إ]$jjm>ksY,"rCpz/s=Edr9 2ޫ{L""""dvr*DQ!xy.VM8.CĤoӺRPQf`X"KK[9p0=a(M0rɮ/ 'kO8`0ߏ` =޸Hw38ޯܾj^GD7ם}.خVX$1<2ʐ;3x[qm^)j8qI>M-Vl߶#QeC#QBa( ( ]nYo!N ""(v|zJ419-[{In5EVEt"5xာst㩧~\$|}zמP(cǎرI{5}V}j[6&"J :|v6N˃'"J ҁWֳ 19Fl2'ĵs "GgBj%Bag:X _RYMDDDD_Js&r'""Z@iqz:RT I_V֖عf>U\$H/6G/KQO {(e4~57>CWΠ;lVN'\z!3D,eq'שY`ZR042SwjiG0<)ms/nZ$(2P\/c 0kGO7܌˻˻t$BB#n?~ v=Lܵe,%A| Wn_Uk]ysTJXa*(N5({(I[!!VYcHm]> y,J>g:T4B_/"PSZ>nSUN$=7x$ !wB,B0<21'04adHblmb sY*DիWĤqӺRvyp\(_n]̀;EFq +qxB?mWwxbڵAvv68" 1==OFK9+5uxEdT sj>Iv0\|;\]R(),/ PDt s8N)j&cLsHL8q1 Ac 2Q\?%c(J0շa}f>@(Eqm񈈈T\ ķîKSt㓲878(r4 dohe̫WDuY>^;)ۮ~ ph4h4Pղ>===ߡ}[{4]?f̙Ӹp s,ʓw"߼*, yhBkLq ,͇kg$?A.Ql(e\ťrA@5/#qr%7mN}^޳mf$X[WU%,4m̹8=g.#L!DD${5R;_ 'שY`ZrLOs׎TufñU llX$2Ƣ\8|q k#n ~~Z R Z-.`C[\=ؽv'~s)py^-$Ms:_{RR.eFt- Sa2ƽ+vSK KQӨUXUV{#l^@ܒǏ8ˀL=ŻY rau(,]z 64N%""Ia'w""",沸Ð;E%F%sݴn 54i/ԤPde=|}]hemځo~om|| geeAP@P9NNNbbbb#{8Å `R6>gwlyIq݉|g)u׭- )$C|Câ$P(#N`7ԅ PE"O0?>04.$H(8 2*/X_Rљӹޜs>(#'|['23QTc+1)N{z>HITމvC!!sY*D,/E!<>);hUxp:ܱ[iy? (3Pc`vZsAwg,׵ w#VYvu73L( ddd 33HgBYs] _lxxv--`o?e[Lܶy=֯^%R}.ݺO> 1t{KW6fr#J E8| Nk[aȝw$"y(12.l8p䤠}Z,*/,n 2-ڏ=ot܎uu,IoGX.Z!aSOP ?yun)(Yd(cO–k* NJj Z8޸ѫן~7@GG;{߱r% [B@ZZgK҃SSS݋m[f%~u9nBzhďCU <}/(Mwgobl2~;ܖ,rxp9\~- *|:u "aE 6 {S"x b"]΄uNiJ\ I2҅}IjbȝH6JtFGvlC  E#"Q՘KqTsu|.g)`xE Jrii+P2n|~J-ʱo߅nOVZc;.P Bl6va%w_Ir.=~Rܾe\>S5֮z>%A9aR ksQWS6[CWX=PJks7ke0V)gs8QabXĚ%d=>3ĜY(^teaG>23XChȝH,2QB)*TJl(2300al5߶M>{>~|__)N}}}}z:llR!׸1O>2<_cޭu|beṀJE E0a646Q/\3ݜwF,`/؍/} q_?e=^@D1*6-yl B۷mfH4k,8߮͝("J&X*hDDDՍ!w"""JJߎ>nOzE؝(XUQq_חG{dMmϞ=&ZmrJ(?C~w. BC(B?B 1<<"KY7mC^F_tS U|Bvfhs adQ$OɈ`؝f=vvm!^:ТۼcXjjَPǐ;l2mƵ9zrV?8&eC#QBa'X0|]I~ ŦRv:|?AD$36vr_3  KEYCpr%%"qQ 7O6[lJNt|Gcc#J;ݾV+.\(^vEo`X6֡Hi; @jsU |WAUdHd|wN3q*LF ;':ƌW /9(pâ ;vcϘT%9u:q]EA煙R_[)xa=B/=z]|OB0@ FeNE|Y ;HNG3@C]%>z*6Yp,0-)a3ӪRdԴ(VmppSaIbhh55dd,Q9C.vص |vWJÃף̐ˉKq7 ·[ש]X?d '뗠7\ӰdL9AU*ޱ 8}^رC}i!CDtƸݽ,, Ra*roj+Y<P| u\vN]^87(~TN.dc!3ntD%/`b.řwv.b)"p: JQii+PJ g v[r !466d*Gyy9'[Sv'~s;S<[[-TpSL0\CBhS%”PU'gkabCn_ILQv˃6A%A9anu[ao! 0/FԈoCIq.*2 "y+1p2NQ0އ+P"Mq3ǰח+D]04R"'?g""" {GO<'ϥs_ʼnLv ]ҩ=dQ$_rԘM(6J.Xrպ%C=N yPX㰭1䉭J֛?;>{[Ҝ4nD$oņB(Yǡ/ IDAT:nS۷mf)*B w$*qˉ1B0@ DDD|}R9B6f'w""碴=}_n$p!w" Q)3Q^QWE=NlJ~4Ydm]|YZU-ׯE^FV~D#~R{;7B䤦yC|˃7Mtksgr\zɟR@]Ml;}|,E  ;v1aƒ_~ .9|b E< ;8'ř[}A7IoJ]ֆl2@DDD" 8NDDD4늺*QB!wZMphE Vl%E=ml( KN3h4d*GFF'[dXWkƆd+euc ~AILZi>Ð7Ȣ$HņBˍ0%ץ=Zu5%CGe}wʞcB@}܍+֯M"OD3s1a=X`Jۧ‘V1{rrUje9(J@DDD-vr'""HC]64Pd1I$5i(.A04B:+Q_Y"8\>4Yd^W&Ӊ!TVV-F%ZkMjdwgϷGO$g.^frṀ[( Ta MF 8ƌx;6=NAeq[&qmI]3Sg.s^"/ Sb(;rv:ȉ3?8=u:fW[-:R}]m~^ DDD$ LNL T**+.BA^.F|q7<1aT?8ΐ;([QoS ]!&C.nzs>|t|Z55(JN(d^UV"/G]^6 yu'ѓ =}=2=hs K{isfE0ڐ"R%>{_{kwʞ7bR]eX~5-lypb,0EdZD@+`6&# Hā#'}ׇٰW{(ۇN?|=Z|ubW% 4^@s['WA{?RψDDL}%/gd:w !Dӎ-x}DX uUx詸aȝCUDQ GXӉI+L(l䔤zq L0ECrcW(QAƊŮ=^? PWn_'Dug KHTvg 'ƩƼtCϞ ;vc *w|zM)sΪ(G ) is0M-V<*l sDq;,}?xp Hs^wkj̒^A+{eZ1vyGZ-O3≈(TVWarr{KaC,p%+EV&@D e1rw X_,<1ɩidD2Ӫh0awNnkGp$WW N͕0E(/)DV̯222Ȯ{KCra:'C|˃EI"k6^s9JkM;#gI[6']V<Ue%wIeu-Wrcbb":ڥTb p} *"Shf7wZ?0m vԸ[,ɠ$ZZmB9jk1O>2M-,j2h|иwm1 w[Թlz/&?Qrzce1cv6q_QѨU,IRiU}R*]vrӍ# u8v9w{r%!܉d? &EMEVVrɇ#@Ȅ./2Z1dĮ=kA 3z0\b;{fQ`6.romDȽ/܍gLTJlS㳷tQ|y Euː; xX"xaAyHy{P8G4F|٘Bͭ?C>y[nFWtu:Rf-뱅^w§!"eJjɝ(%d-W"+EE'095 #ii+QB'DmvI+ɰ{Zb}L%(._0j\/9m^k@bSC7h Euisf0٥}Y*["ns9w){`/؍c_5R] t)2@JDGZ ,0EEVaUY ݽ+Y@E}m^w(ƸNk}ȝm'>ku ?|Lğ9qF!w?+g[ZDhYo_H?r0""JbnKJcC܉" uUP)Qۃ""͝Q G@04@>8.gQ++P^R72nS("'GN[o^q0`kpպղJ;TY(+b%G%~oNDD NDDD h{{0C$?Đ;S)3RfBU7¨?g6UBZ%_T ,CqQR0.Q '!op>aR*fE0ЕԘqو۴w u:1v8Žhmy-q6U*͉`h "PP@Tϴ9zY8PJ@X.& C0: r5P* hG%B]v E?Hz];-H!Gycx7rAkNd""JfRp؅Í1(]QW%Z=<>EV:L OLarji,}/= ::8|0nPN׎vʢsawFaY'[DA9*eHkm.EcC yڜ0{\=ˍK:prxk;xe1QVjWJ{. "E}m% LQeop$‰Mq3R0{1o:u 5Ψ^Nk9݉a/eBц#ՕyӢkGj.{]9.s FDD.TNl,;exc]9}Hl^PCa> GDˢ *A|;gիW?0nD(* U?Ĩ? ?T\Ʈ,"+m̤֊. Fdddzj%5JA7lQPd"7[ "S٘?]{bמ2f= t|hsx56EI@{!&cAJ^(% 19AR~[oIs)hB|M- S:c`hXnk0ꐻ :xGAㅈAw!]:ׂ-In~RdIrNx;4rm.^PW)~-OI ɁlLJs&.'ζ1DDDsE](!wpޱ0DH OL!<> EVADQQde@|M\z+fFaY+gj%r*df{=y=46wn.2..Z O( R ڥD#$q^:PLtJV Dty EKv&Rp+o(*L%\cB Y?۸ uHr9 _ps\ ƨu)޷""8wQJNDDD1 uUP),i~ܲ Pd0CDqセ+q:MAYӊN+-_]:Ke\GkŊШV!==M~9AYοjD#0"cc'$tc[i.:pWLHβ(i"aQmns9a!^del<;84| cɇ+==0kG Z# l*e)!5vaTXΪ )3TN]7GOoZ=K9_ksɄ?sOS!w%>?eQ_b6wVnƂ S\(LBRx/5*2nKX]ӭ0 9]KA\rBz|7zo}z=wއ:Cȕb|(, c;ȢIh#^a)bbQhCE!@REo~]}{v^ Le PJ 3DDY w!wJXc}m'Uc)rO$`ۗ⣮Opp'Ow6FOJ,6 yAy~~zN*v_#""V'$r!""\} Q\ bwEVWoa~!BAD|h u+]Me>K {C;k(Fۇ>Pk'6}^=߯z'p x^Y>8:.iVh7aR `509;1xmkD1z_RIOD)Pis`ld)aAy“1Nj}{=ʏ;\DI.Go[Ww/R 4_49ਸ਼! lw">Ӎo'>/w 2Q'@DDvkTB0;>gWrpaΞNW ƻRj2n"m,N/lѥGn"/78];:g@͂];Q:f(q߶4Y`{?>¢ ;ڄ&~GENb&&VZ}=n4(2G /H^;ے{GIܫ*mK_AU%r1|@D '(rV&x2kN&b?_r &.￀*6T]ݽhoٲ&"щ=sdڵeFDDDm$X=/;J<;=Qvj=O;ͽ[  bw` ^8ҀIkc>?|~`m=a=}{8XSi1t35(o^/3 <ɯ7SUŐ)oT2.:!$3WF&(:U|ΤEEH'OuV ƒ":] x #|ԂKy=99^8- Nc/J$vwDDD k*> N UV>(3TYQi-c_z!weȝ2Ɲޟyl7v[fWxG18<zv ;+Ѽo0R^u52a_-C:0 9yc@<3 n7C"sml<hڏWPgh-Djk]*(9j=^C=vVU`dlB<<#+9a|>X}s{'k1PS5][-&D"K8ս{w }f&[_萈H$ ln_w^mMKe`(ŕ!7"%U#]•! ypV fE],eciv&ܑ\ADDa\Jy[qDDD>UB\Ecm9Lf"l Q+3T5Ƃx^h|1f–4nw-b p.R?F6=u==J46Cǽh{Es!ծDC6S|\wBNȤ=^j]ԛJ/ZL~,HCO%R)NwutW7G- k?m o?sz璽m^*wjWr&I8а zAQ^gȝ˸D:w@ܦ# hm^ہY ygإ=J Eډ]"?/.jy&p>tY!J&"E@΁aI])sr'd!<"Twٸӑ{ԇ0ݳ/^h{-9Ah""qt:r@3Ql칋;\"̥,2I -\ Pe)~1vuVg/:Qfgqwg? 1zfξh珔Eq_֟g2uAA׿H$NDkGHsI;8Gh߅7~KǝhP9ߡх#R][݋ݽw\=iUx8ȈZ:TnwNDD Zr x]HZx!RCQVaWwپ;s&$nGgwF.v?RNMfn_wy̅ D IcaIdŜg{j)DvqҚItwfH$peȓܵI0]JK| ǏơY?26B@DD.t:Rq!<)Ej.-D UrTZ1>9׼AD\.~$oDPj`"ʲPvuRi.:PekaNc0fB"4MK;x ɷR ^/mdx|/e)O)LE1,̦RX/QLTSXGy3AEuIso0Ȓk)\$ŏ~{>P}{ԇ`(IQ\鳈DҜu.RWy=e Z:TnNeF2RGAP| ͢E&7m7"()c۶X ":TWOa;˂&xvo??SjOv*,Fն]M30eGll܇? )+-G^9D@ _;6Ua\ O>1%nߞZ|>uw!wRMc.s^13a;֘ڛ$J-WH;׏u$CnG}2NnB&:o&ӿotTp>DDDj\Z:Tnje,e އ*| S\07/;e2:3W Fo(2{?WOc|*JE%"TXLp+ᨶi;Vɢ'J) 8o'4pOԄ?:'<ťVq- L W;FT(??DfAG&hKm~O ]>iWKhQƛזi5kH=˭I)gΐ;Q:hG(>vx! ? {(/Dr'Tu꾆GXJz]:w&#o\LٴͶbJi v\H7E1{v6JKh{E2v%"߃)ݝ9baI]8}2F]E@!wPV :)Xu;D"Q; jюhs=]q;̿y,- @*_o;`i[$ǗH4s.^\*KJ(""tR%^ΐ;ŵ( ٩[i@kS%8sCYƁ: ?Ҁ2Cf# +Daq[t4K383߿ѧHD:|"jQ>>26’,5 3(mYkh0pw45H?[qjuoOچ?pL7.^?^9;_E&Tp7'/Qvskt>Hu< N-"""iUrTZ1>9Ƃ݈°e6Zdȝj)ƷN@K?ҚJ Hא ! ""G-nx-j!QeFL9(cS1`2i[];koKf.˃゠s ^!]S]xiji6s'KD~Ng.2 rEGAPelkma;iQkS%Ypz= RFRc0. %vw ?A"g1_֜ϑ'ons9^VZYCDʨ2cdi߅z˺s`T\[|=3]Zۺ{J.˄ ONڛWN<YRK宩R)tũEDD߁] CTa[ W3N 3NDT lGgn~h'8s]gQh=ߍ2>+wZ %aJ8mND1{vv9Sǽw;;ugȝb .):s/?SjxG<#RoNT=ꃣ:SY@3{4vP8݋0vJ?p_HeKm}rdD}ӊ(1j+]^5r$ee,iv;لczawuRtƞ견:! ۬fն@;X#5v[ܮ/}G|]ٽ {vCKsRsHd:s+TwH: vKoãgOf=فI@rGݽWȊHn. ""v> ٱí>CٰCDaeFS}(gѦ 9 |X-kvmK~'",\VUiCUen>UUP_LDqT+Hjz&EzRc@/`QxoS6qNʝp{ҜYV5*[PW< {ij:B1sL7^9l?&R ?9?e [;ܽS#O+9Tf,F]M%3saǾ6DF0N2n"m,LHz ]gQH6-Ti,q/57PD(AСPм:\,.X o20 GQkׇ:GZECP[eAHt gcܥD1=YU{n[a1\nkiCnxϫ+Cs$^SP.NIN| "Lq_KQ!0NDD$K}8u#Uӭ,25Zt AD9̠:p\8M$UѲS z̄Ĭ:fy-ȾhN_DDTX~^Wa1)rW1i_BmgXXQXgIq4=.EHQmO\hO>YDs5,boZ5 ZSe:7",6T'9%Q2NDDD2n;Z7+BBvs'Uf# lߍs8{~$Bu~hfK=dtZᨶaK;Q᳾ۅJ򵀈p+qeȣONȤ=z쬪؄9\x`# H2#gʾW_/8LH-Je݆YT7%$֤v-W0TNVvj.@DD꛺J |S(qlG(>vtyN͝(-54GWCY&uy8P=e薷,}h#^a)ԏMDaB`Q184q7҆M닢?|lwYY) LD[BC$Kc}m!aI55v!It$\Ę6ؕN)JUdl /lz^ E8ԴWػ |>QpZ:>EDD$_G!UBpu)!NDtu`&$׃s7YQfC;Ta{ΝVPa1mtjg!" wŹ7`/+-űO,"bl@XAsD% /9\xX`G.w#4ע3cFK`=ǼtioI)3dn!wxYD"KhkiN~&ispBQFXŅ͜;~Iq:!:"""娫Đg\+pX[BS\NDt2iGp]_&T{SKqkC^ `;m3oVןū ]6 ;q/>Ǘ,DDakIZٷ|‘ύjO5.|l,)7_~_EWw/B>_*Ɲ'u H$|'qeKS(OjT#"">UBa!wJynDkS%fBF}&$0Y\8PgɹQ3n5(EDDk?ٽ=pD1}l:^dVa1)Jcml*Ey3AYs ţּgN7o~^P^CaxDcd1A}#7E:w{9.N ї|2(5PŐ;LTG +>vx!kcA2WfУ}7:wcƹq\3e: :ZjPfг _`)-V٭s,.~]|ԋYyǎ>׷3@9Q&S0$W&;8H5;*_Nh(Pt9 1|sϙjt8z=5Pxy@zv8Դ7漚a兩ck!{""L1uݯӹ@y oqzhNH/\ΐ;%܉䩲# xH. ٠C3zRnN,0_{P[Sm}6p1>a|Y[,( :u:>&YkS9uo'H$bSk_*ʉghFC9pWsZ.偍 iDPWv'" qt:#J EDDkDWE*|7@%܉s΂u^vxzb.e]Ƃ-Lil܇.*mR{aAy7kk9H6.?Sy'X\勡D8Y8ʨ9ﮠTXc "A^B9ZʉgqTWB~%"xE{|.܉Rwgc;KC~Ge,K{@AςpsebtUʇ҃0%~s~҆TUJWD{k?z$Th{'%j)W|!&$W20JY@R\Bq'(!uvR]ݪޏKǟa7~""( 7zWj<%nl#$E\VQ:vU?Ѝ( ;ac7w""hAGK Ґ3TJzu.cAR|C:'܉('λ}k?wӷewW;?ڋiíUl;um8LrajڋCM{2{G3,EDIsT3|Lطێ9“q>NGT)үjNVewHAWNMDDritF,O#""XG6ͽOֲ@,2?!, G{Pe)FvEpC\ (r@C&sWǼl=X7JE1EChoR'#rs[B]K EWZL2S]I5(?sWQmG} FthSÅSD݆*N0N4'r#U$" !X;ĢVaʉgiUtub.4ȸ u5xh;QFrZ:%Sr'""JR}ܝښ*͝nDD+zxcnbTYQe)BU .auWY1WvMsi_Eu[2D1"ysbl܇cK6o1QmCC] y6qi/ΎׁPׂ A'"ںAٔtP*w%YW?26EzV I1%ݣ>5 Zt/Jxܹ+Q\Z:%#""EmU ;]~p'te͂z}21d/ov>[*+w;( ""RӢ(o4Ǒ']cffqQlz˸_?VV!Vus<Ҏ ZHDM*,w-QS2iS&;fȝTa6̈陠%".>FQ>DDpc Z:%܉QPe WVvsa3QY@2 OtC7n1r_P?Dkq;ofQ%w?g}ewq$._]ͱ iZ]C$Kc}-9/{nS<>fa(en/eFCQNb}y:z<.M} ysJMn\ӎ(5D`qtyNȔ1 HVWoA:˿ŅoVD}[ ' ɷ084|u^?VBKbEZ'il|YX&E;z];X-&Ux'X\^!62N5'Dn/|n^?%XϰDD.NGF۲ rQ}}uDVXdJlXd4ha. ;G},:,Pb`f~[_>at?{m}ܛ1u~onPWWN< G |noIi-8Դrם,,ɞzA<^~"u4Re[-|(L]ktr'""&ݡ.vs'9͝H-oɉ(]fw]}~]~-|w7?N>gg;-^b(‹ǟƋǟpw-xIvpSH1$ODM*T>="F<ɄNjZUƝX\""""Mx\|7۲ rQCGAg7w#0"i"65:GKD,<,^;>9ff?y%1 hG;=EV ǏƟ|wP:FC1^9,7^BC͒#qp= ND9QmSe\w%m*d߆!wRΪ ǜ`ȝ"H].4-8fnbwF#DDYKxl8H""\u z.BT! ͽBE:Hnbye5fc*;&"ܡ%/3xzj645Ť?n8suGj)P K9h(Nb=ҎG1  o" |N&fU;8ULX onaT~:2YR w\ Ǽaϭ϶Rc' QvJ S/ʺ.;FDS p]^ǃ{bS\E܉4B;K TI܉HVK9 y$tx_8F]ODDh(Fsd6ɕ̢ 0JY@ReNs^qݣ i꺦B!w|NA)= qQ7d]\V¢&;ܪ܉| ""1sQ%"$ҡMɀNjǟlJiWNe [1%cߞ$ GW2?r_NG۲`rQlPm WȔ"VWoDDDY.t3u ;bIDI@P+'op(>\1,.ɒL90‘JQظ].?eP""""`S~Murgȝ(W[Y"",]^{5:%)Atoz4osx(1%t e(C9Tz=qX\~edvc|.EjVp2gحQcmtDDDJn1lDa7w"",&F^Ū?9T_hG;粆:GjxE Q8]h-g)[-\ ""BKˉl(T'9["JYÞNV Swt8Դm-q5š~]Q/ص(H.$I.eFLeϵZX t+>K)VMcLn,)b(x\nCDDDlZAGYl+Eyoc1LtfB3P'>AD}FC1jpe#v%"rٍ`( ӥPW0jQ>۔]x缬8r'Us,.Dq,D-Yׄ"](۸]Z zXT4$""RV}]^,2%?sE ""Bѥ _ʢDR]h{ۼtچCM{P瀣DD9JJNr%*<#M( ]Zbqx{s ֛]֛#DDDB]Mj_zѥ"F!FY"",]NXG4"R&noaQa)We\,td<#u.ǜ 7PS}- 1/ œDDDDׯy_eAÏ66\(oH)"Du$t-QnZL1`mn9{Q0N* njFo]ϻ.ǏѐnrVi.?|TH,uJ, h(SM5}D񠉈rz7!ϸ*_zB?MqEW0EQ ""7WVe]\ZqG}FDᨶfyA:XDDRxPcJF݆]2ڄmX oW]{ qL7 .nCS|Pt= pi/CD"QTϺX)NiDr'""BͽL-Pmc12Nc*DZ]6CDG}1wx#+-DDu6 baQDa5;\xX|r KgK[zWkmxDDDnZ.\ M Y]y ""r;G ;pl"RzjG^AG"$P* L5(]R٪BB?*ptx?X &49bh( 1@D9 vizG?O탷+9+)-vrz7!ϸ*:p}:2^DQ۶beͤok6`*ke`:\xX`JeFLeϵdD+O1Nks@ r!#"3su;>Y3N}۴pDDD𣪎?"SVWo!0Bi լ|7XW$s2i>&=9{'AxSm`h30興¢O.:3^~?~9p2murQriIDDnjqfBbd "" b4NJc2G&XX- G3wZc^&F6[u<"Ύn4PD}Od=ɹW"x}x_7?8}[OY.MurW=$""R_GjVnuJ -H(q$ h(f(#X-&UuT 6%990‘*̦R;NYElDEFC1:nٷ=ўr'tG}2ƄĎz!_r!fck;$i4a_#+6$<7J*MfpᓋN8sC{csS<~?tJ;QqTу Uwx siM . 4H`12M~C:?M QP;>fȝHf,Lfa6 *[T5UXL1w$CFC<1.s{}mfLq@·9юfM$.[|nKW<c+'TН¢ ΁a|rљik͙suvJ÷}^|:"""Jc}w(L̄z ""r( tN$۾= GPc\hPŽM*x/̜ю%"Wͺ{.3SW$87e +er*|jb?gp ?Ɖo|WqLw֑;KSF9$/M'DDD2caxa-IY]̥;X ""-]Ub?QZcvMQnh99“= q/;PT紿i&Ә09@8$;g2v2ْuvgB,IT`VSpᓋN8(Fos|}Z:K鸓tG;QZ;ܪZz|_8R QDDD[DUC[1h3j 0JY`JTXԛaZWeA'?k,)T@>sqm8`(7{]uiOtD7-Oag?Gm| %G2 eaQs0>9~-B,nogoBm[ ;ȶDDDDD$L;;X/?326EzUXGyQKD E0K_#jXR$YdE"QN,'ˌZqehbt憣&W˾:)z Ӭujwލ)WWqw~;ySZ:%M]iu~wt? M [^Ylhh Dnjws .Fcm9M Ayoc1XʸGDDDD4AСPмz,.Vc;r'caD6 O1 s*ՙ QmH# .8Դp{}#јIb4H$qP8{5ٴ7ᨶAQmU* 3OE`{IO(\鄼tQZB^^`+Qz<Wma!weu37`3 ""tQ\CxAACDDDDDrmxy@1e=%Vvl`V] K-|KsLng N=Asa9ǭ$:491꿙 r'JzO.:e/<%l1 Mx5gwZ:K麣4%""JA8u#U/D͝d˘_PbUE1P>|(sTXcHdWȾ TZCֺzm)EBnº vP3Haxy~@T7x#%Eԛ2w$o*0{SZ}Q(2=( 5䋯.M}Vd}0NDDV碪wWB?M [@>۶beccNYX""""(ju ur'Yj6. S˅֭Ua ̅%\J=~_VbyYuU&vɗC/` )v'wI¢v}3AEcS{Z$ۍLtJNDDDinNŦނ"(M7ǰCX"%D"Qwz!"""̠V$_c.~u. +T '3_'ӈDrq7پ};'F̅b^߀ˏy*3Q3Rd6|Ssax'33ւ(QȢ$}Ks E5rT%""J?_z;ɲ .A,C/KW""tX]8f:_XNu$""""JF3fre.V$r,ܨUD^y=r5CpHu+L2憺 Ř l}"%JtOb4&c.Nf*0{SZ]Io77$r_^d+Qt :t~U?nz۶be si*N2NDDDDbR<,826EzX onà+^ .^]}Ca nOC,! #Y x+aC9 Q+7Y :ֿM⹇(-,pnۇ1=dQs8pۣvRy|rxS(:lĘ-YO0бؔŬa2r +"""5eE3 0\Tt 4(""""(jz"_ IDAT+;Z| b*0 $Em( wAu{Ҭɚ 07}Qڷ݋]#X^^Aю(Tadc!r;alcg~5($Ri#EimCIdy$wNnҠ۠-Eo] -Ev7zz؞plCRJ4)8HJ#M_Hc{9G<<~cas!yH [ ̄4Ũ?WdzJ3 'ΕXk; Kw?e_o jU]m&2=%FcqB٧tB4!wXb4y>~tvš?o6~W*GɛCS&gyO1Zx#M?$^kCr?7wA@XUR.s!9>x칳߶{4tsGr-<ާ(Mҍes,6؍GvU;%(.j69T5s.B`Ę![T7Hk~WLvMJ_a'TK_U_ ߙ|vmm)f.q]"u H\6B>}$Ą#AtFu3z_,UM*26HQ-=1UKcv `rp0P vtd?X50hȚ*!wTiw.GBfr"a]8 Tt?OUgqo vI˭'X*|YB悡j?EQ;44=,M%y`+3A]3}h,QWh'h(Ύ:`n+ZLqrYr<$K%̊ULOifvVSrwlYr٬icfs Gr_hF[xN8ktNs {{,~郌OSlԬTQ#wg;>fk͢$5U. Bh(XJ4!wX≑alɛ>-N (Q}ԥ  yVm$I'+hk!**W+'TT-CtsG]-S͸ORduda ,7K赗FQX!h,o>,Ń%{&G'w줴];V Ff.<n2G.vSsB3[ߐW@p饹so[2~uwOo.gPll[ {(~jnCɛUe4bf!21g5=&S8XhMC3>@Dc s7_)jrzJn7E> fXÎ#O:Ԝc MŹs˖usucqv(6jV*-_o՝ۖ x-:f&ˊyCrwuR`<0s M=5BŔqة=w 5r?7wA@<gTi6r1pyIVFl(t1'/~3ȓå^xuEߚبKX]VXqcJn} ,7Kh\㡹:p5kUJes9zlku@QjTdz(M6 WjἭMC]SШ 6p>Z\ѿ߿/?^ f9~7MĐ>q>}jiybP;w,f4`3a)1j#ggP4y pp;)K|- kfv(vSc0 60~z?Fz*<'GOKM*26HQ;1 Y:ۥv%h(0`ɸ4!wl49侘2$oW/;ԞлRuݚMNOPX|'t8 x[`RיҟUՍ%C7 I%I=n,W[6 2⓫F}I{Z(4=UC͢=aUGh,o>,FM"c5^{k禋/ɮRXW.`{q<5X,&rȍ ?VIŭ}w?^S(#ԅs[~VM muq(_mk;Z^ɮr ɭ:&+taӻV;8޹|MXBKi R#YE49=%w WvH'>G[Pn}CҽOC~(&e!wI:HV7Jjo;%W{+s[:~o5!tvM24(W{]<8{Nuْ{zsaE/>{bnwo)UKc h9[4uL% ,7KZv1]0Q\a.^25 pZ(ŵ^(^{LM*2=f5:Fb"IVNn'Tje):)m̪3@|7~{9uʕ%:?e?q2TwQM1reXvr/lvg fzCR<aWHr8;TYE49=%w7Gb"ewE"Lw7G$W{}w/w8:\zi~ۖm}koh\mtP 39~x{{jWc긋).h(X\3(,ff2%h7%Br59= ?(hlVlIt;`Bug3{ ߧ!^(/Ν[%Gk *x$%Rg)ܵw,,7yӰS&PKG=*m꤀0}>q=HaRԤ"SznnVca 'vHP|VIŭn,Kl=4PP].j6.. L.~KO y@l'ffQ?d^gW ʭQ`<4wW{b*]W@"aKdlQEcqEc W39 ffgnG.\u!7zZ)j໿}AfϝՏeܗEX.+#^GGFnS#Q $;z.KUS-l$v¡^`T;j6 a\B:Jq2;GuQۭ)]E3_+z}LV R+雒0śWn}C I{h~4W_&!w\~K~_7xm[ܓ7 髜Gp`qfE(0j߫qʂ5>5fz/]ȭ%״]PZU&ss Sѫלt8W6*!wߣ-mdhP~}<ѓ%KU]cq S擫U8n;m-g]'C6PGK}mb*MqQp͏(skTpQ`޹U4W4yH"SLOirzJn7E]CNڨ4w̪3H=24x_^op`G~e_\Xؠ\(6FImF1'vr7[p(bI QsgŔPTqeg-NQv빹 Gv @Qp%IҼvNqB}:joS͌ ¹g-Kd47}b[ J1'N{{a`GÁACc'21w1XճH "W48 _FAHIjrzJca |s:"mO*2 hÁή;l_,.I>XAK:߿\~KAZZ >xαnd !wؐUרQp]!^Ń ZY˿Xs9h,h,4Z3VdzJ)=7w_`1!nR+v;\4T=z o[2~uwO[cͩ-=pwn6. ۦlP`qSnPĸ8 c7]|M+뜃NQ]0AAjv빹 LOirzJ@!*9#6+ !w㕿Oa?8wN?xYJՒ5(NruWn8Arvr/ldFCAӃQDMcV ʭQ@8lzȽRQa(o/l[+Kۯȉܬ&4: @-\u!]ˎR8e}C IKGidȯ;~].4wβn0MTU8~c`ꘄ|`WÁӯW*m٧jTJrYYadkG޹U4W42!j4VdzJ)=7w&X'vH`IgN(mJYKڋ֯k}h٢R٢ByV7JjiyLb޾vGJ[(|&->b*]WgnlCX\3"E+$ozI:I2;Gkv빹 LOirzJ@&:{*2o}iQQBӛzp776_տ>a(V2W013ZάM>G^Bx ԲbR'EaՍNJ1U6dHF6P`q8!w,21jk`>wW6n:Fqɭ%״]PZ&537)q`Ť:N;ctI_wY. *x5 ̳GM2Wz%}'P՝/ F칳z%KUE Rlfբ={!&ήѭ Q]ꎩ %N7VdzJ)=7wi]u %{吐tнnA d<čaP!_UA_$t蓿;Hz ~`o.ʈOS߿\~KAZZ )Ww@ESdW9h1 rN {^oX`а޸hehb;!7z֪ssEBv;)g:y#5=ra|VIŭn,d=4<(;OGiK_ mt8Uw}{a'44=](GQĸ޸^Ma\fN%oR{Ԥff59=1V?Nj8I|:~'¹g-/-[t][)J坆ndMC3AN0leآ‹)Cҳ5{\w1]B&MЌ޾t"<.[]PdzJSDRۥv[mZid<~_v|?p{0rfU˙.d}dȯ^BhJ~~BJ) IDAT5M3(P,['(W=sma(;쥣å!-5 ١V.W2,뼍<"SFh2w#ϼvզEsčıd8p0OvzdaXmwW{} | :\zi~ۖmJ^~bRU-=/u{o_{ W)]G7nm!w89FCb*ME+\|wAC*5'#aEss( !;'qIfJ Twv|?t{ xjoXlŹsz׵QdlQlQ@ņ%6*rf@s*mb?z g|-fXB1 D&jGc }g)LVEqM'( gݤJmZmXP^'d8<>~_ra(q=c* "5HugW7 X2$]$t#V:\z Բm⽛W')6,oIAw@Sڮb?Bɮr`KÁAK]LQĸh,N`:O].W(ępj Sr٬rٜvܩVk^9̧ 3Kx\>6LqV໿} )c7{~~V2քrmE RlX;YnJuGJU?^%_I=7FT.IaPhpX)=7wnp2\[CN5~E 'o$*  y C镴҆ArʭoHZ:'a} /;e㿹`+#>OQlX;%.I~ےq59PP)1'#ZZNh,sSE&+2=ulMQ(꼐;;S|"/8ӂIIH:'n$1Î|hmG*0p;=W,XMذAw@3)Wvm/~_%&S!wR!wk^:BqB`.?8A))-ƓN;y;-C|(Z2?1O\ϧ3>InwYrf Cۯ~CݿlK|O#hv.I~ormS,l9%] ~sb*M`\} :J[%-&rJlqZm\_J~\Q04<Ɔc|OJ't7G$W{}w/w5ԅs[2~uwO_Zҷf(6,G`w՝۷>vod, / BYdͯH2թ~V `{_驃`|k WvHv1;ܯ!!wIJOlA Oߓ y>6Jug3{ ߧ!^(/ +UKƏ&47uZa=;Ton.X6sbd=h31Ǩ؀`q4+ |ĸ޸A))Dشڼhu~Y_ra(q#q @ŭ[%X2$]{hO襹so[z+?{icA`kiLvͲ. rFOk49侘2Â87.RMޗNsvCWcv;F2]/ 'q Crb5ȃ|N/[}9[T*[T(Cq,f{ۯ^+ EBph1- X-LDkzL4k/T~+2=ulMQ/dz|尶y C4wȭo(!iEa=4? 8:\/~S˶n/^86vR*rzyLg̓, fT(jVOGhm\Qti%sz"Cε6A)3!q#3tvrRwwCP0'(T G?Z:Р^7{~󷵾Q5hbUAcoi|]P[6 KHGYs3UN:l)|ƚ bʐ,FM1b\Qn-/g\N`uO8|Щ} Vpi4o#~%q5 _}2Ǖ13ZN{e?}E,;]X}}0m2=ήq`[Cer^Fc4rB}>5&jo|;L~`wx&LOgg&[xErbkc$,H 'qWx `; rQ( =ѓ%KU]\XicU,U%;!ʕ]߱vLsc'>4=侴oWOdސ;M`g%x$3]'4: *z'ZڼxKMIN |A|^^wEx|\v7~P!_P RLۭ@}+0%4o w޲/}?=$W)cU,U{{_C>wnp`_}[)3"mmn&I*7 7RqVI7 I% :A]8޾%WwŠ^| Ʊ+Wwe6t,[,J" Z2n4'䎚3g*m꤀0h(V޾M1:(lBvAB,y#<ۛHggg:y CAwP\X r/wFY]y?rj}O?nƱi =>,u{o_=[z.K^ekLP`@vU殺JS\թ'FyqS]0A!.[)) %~Z)J<ްߓq>7Rn}C IKGt{ 8^4wN?~m˶K7/uuvh\yyfrwuj߫vtvj88L---ji9SNԩcޞ6 Ju)8^zQp8Z{C4S238x'<>}KJH  5;lXs[A/Aw)$}֬hL`K.zyq1k>qh;6 r Hmmr喧ǣ zi4Ͱ|(t13#cU.3raߓ*5v]vUMy}ù{Qw:{8ܹן ŀmd[*Ww5VKcPf Ko,9 P`q!w,21VcV ʭQ@4t.>aHzhtkNͲrk̐׮?WP-wg;/+Wr^iPz%MŤO~B(VyG_ZZ(#U{ur巕+o+WrxؼŤmy{{jWc긋)k>qqM٧tÄc`/v!LVi*JlB$M;e$n$t~;I}2P06 % እUE)lT҆;;Txj9@I4>drgzESnjr>aq{0_d{!_P\Vgg'`yzOQ ޾բ;;@{ol友,U۶Ia(;i(0hz}\Qn-/MPz:/ Ӎ1~}G7^)3ep {2Wz%}7 e `.}iUQCWw8ʕ]ܪ*WV._Rl~[Rɮ19`[PP[0n47'ڌvЏ.W2, %aKMHrPvOG--- I*mL:m[)rc 0 <|{2W!_PLu郏u!iHOe*nU=̞˗T}1 M66d܃ڬڍa&S|ju߀ B</sy]oR+KͶMrOV6B 2s7܁Ot\.+cJHv{7x$=~iIߚh*tukoͭ6KU-\T}ԭݩ2U&lå!29so\L*.9~r7U\!aPX_rOproƝnmb;&䞈 _U Ǖ6 UjX^5MVobNr}^SPR./Ⱦ-T;T40?^kH+21g5=&S8n44w5;rE|^^8rSǣ6H;oCoƝn_9e,:;9\!W0xhtS“Mp2lWv-Z<Ͳrm%Uw(ΡtvM3{ Fc E&XgάT.Ia\BI&ǣ޾^uttP@r٬rٜk))vU CA~/~71 C8MscTPb)c}ne-gZ?L`[ÁAK]LQ'F1XB3"+c "OG}rwQ#pit3ZYjoʐ{* ^4tj;``uˌO2FB'C LJ7U> oWvQ*OaAaH`[CK]L#'sŗINnk;f:/>߬;E9(䞌u4k=(U.^1B>[[}{M>j/֭[-rA_Rh45=lWvtg/k}s*lޢPP)sX¢X+nUs;z'RO}}jii r&/_;ea h$$lh+c[[jo `?.ItdoBgT.IQX͏!eÚL7 9ZxUYL$vXM{ Ь;J̇B5즰bhbUA Gi9)_O|]j'w~25 (liآkh,s |juP|' |а%W.U#C1LVu盽/%})3(ɿoc}rp|Rytcwf;l˪kŔAu k/ B0}Z!m\.|xBA*꼐|3|{"1 Y,Kd47}bQZ,kmcCptvM<%ooz=ؼeX.1hF`O澖rSKKz׫ hvrfy')3)cU.+_Jb>X;nWFY'K&J`kÁC)O=٣1|aC.񨷯Wb.pUۥkwC|(nׯF IDATu~Y^-xϧuԒ{zsaE/>{bÑ{J}.zECG]h1eh4I=sf\Qn-/4qePx|6֦~=Qm8B* 8 ųdu(޹i !Buvvw,ū+ņtu`lQە]-g*Wo%o !{Zu1eHj7|y>uuvhFiàM\.yק/쫴Ub2Úoh$K!_P04GY>n|5E Pl8]uI$Ts=ĨFFF_],Jא@ܚcFc ԳM"z7QSǤ X---xA%@spՉ5!TjJ(tzSRSfUF;_=wqPeB8>u}mmoY@x(gFhttTŴ3u{EM/-),krwuR@f44lzȽRQ`\.еty-B*ꐓ1/鏜2kj<_qk:-gJetsljAWw`XfŽtuuit4pxTaӄ`sCKƍuq:p7J,7*21g6 B1k;)N8B6EkxI \R _O|]h2\aɣ0yI]n*'6dh,Nu k3`<d䍄N`$*9pN I++<>Ϋ_ <>esmE Rl8bYn[)`eml\}Zۑ}r[+"EG#FGrݦ]O0T;Tpq`KCuU:b*MqQĘ޸^MwU/6 o;Ry'GCNR(t3N`ׯF ?e7U޽7vib w@ %QhmdIMʲ䲥8c̸SR2$[)Oj69S~du&qٵCe#Kmy[VEuM .$|^7" 6^sj:ʡ)m!CQ+, N봾Yzp6"6x>x^v:z\Y JDDDD ޅHTQ먧#{KI|\U"R5H"jEJ%,3&,LmJ8DFe2y9.l^z>d{>M"^ cUl:Uu(`s|qN=Z Bt J,];A1<2\.zxz}&r'"""qJ_]O#SMlV3tZ RMDz܋D|c⏛L$prh2h4A{DD$o3 e" 7DbZ{"" 7% _$F6_(~jelf=*jzUmOMgwok9*tuNԚb+YJ(n?v`gujTCCCppp1SO=knbq1",7<54lj$7M2Nu a[`ȝD^~;QڕJFXvm'"|0B>/iDFeBApEE.i6~ m!El o^.L\$n5~K]3E\.7~kݍkv!L ndH4;X`+o⑈P z2`q.C`4!ADD-ebl\nSD2لܣz9)A˪ޤ'Ӈ/:u0vaԱ;5F\~6s%B 鴐z;|ٹx>LNN:f$7i4j6E>A38R]}ɻ?s/qgzR}CDS(0L0[P*^iMiDNiBp/BDDt ZZCvsG*]@*]X5nlWu  {LIDDDD #M=MTz:hX8jNAXu$;i1C cr҈&$ǐdr_N$Q,jG!""zEߧWBlf=Ԫ6vKZZfZEiP"6z S+ |0 ~lR] J>W{re D$*nRu{kb'U4Z*p6HVP(`4`T}""sC/Q6QMH!wm<ܫ] "~OQ@+5wXeRtb/#ʲHDNn캱_uhoEs3&"""[E/ƒ/$D(uUHWP,m`%5n{!BlV3 L5z}Y[8M2N"C>d"Ƃ4 &3J% BDD$qMiD۪]p2 /'(j$.T??/ _:uШwpzN(kU0ǺgX,Ʊ+_D  j?NgkkZf>fi{6457(> >Lz_|},5lj$7M2Nu r-[h:i"O2N ]DWWBIy!B>/iHkq4t/ DDDD7dcנWqK[HTv$q L5 'F$:d<԰:f:=.LDD${r֨\lCh|qe2'>""""j^aGw 4ODtUg`xxjabZI2n8`ȝH&JmgHʟᕗ % IAQfrjMq#$Ku'\FP^+x~U$|͝BdbRdAظܦ /u{|=]L&43ec T=rk۷X\:fz3 JDD$+k#63rm?.v0ZmN-$*!l91+X0LP(,5o 6QY;|MBF!Rd"]ȈZ  p\pAv"ѕlnn6C7(Qz>B9]lfNqs uu& rgȝDHϳaNN DDD7d=9NkDL!& ]3P(ȂA0Ǻ~ $q#099)ꘑ(/CNDDԬJm1NM#~h!wYHI\R-0Nh2RbݰɱqM)GdrFk @\y{""k; Tǫ S\`HT6:bIq Oף]hjB`ÃiMiTU-.GP.YN$@=):͝Ho%v+!H|aHF. .aN<Ƕ쒌dr'""j"ޝGwj_͊?giy=NѯDgagV3,X]O׸x}(  t:&&#ADD`Q6QoVBF!w| 0NDDtNZB+~*`0XQ(nѮ.nw9>4T &assF\YcGW""&dﱜZo"RSr_]O#_(BӲT3Ys=M0N rOoQ,rH20Mu,QFdrF#KVs ;/rCtM G$>=Jau5ō@DtCCCx$ήD{{{XZZ  :*70QzNS}׾,HM!Շ"$CT@/~]WY<d<,0]B@ S J!""jpmJKh|QۭE~W. DaooD.u\N_aw"z^G 0xj`p|w""\\0 ,%,--agg+z= LDDԠҙ,~wսdw-Q0Is S]Y79M7/ZA<ɐ;]IR.MFIVVZ]f]G!{XBhfO$EhBAqfshkkcDp:_ݼv}?~/w  ce%5j0}xe`@9v؉Hlf>f&ǍLDDԀҽ}i/סѨYHN& kpnťAP,!(:-,X]O:n,0լC`6X ""&316.i¶k?ӄr'$=VabLՊ>̱`y#:v{ -v':QZ__r<^WqK zDDD *໯_9darw"em'JWr'_+8E'7) ֮.(JIMݓݜ8;hc.z<%=rShfo}!v$cdY܉H26 6XH$|>,.tv`pYcii~&'ɸLCDDD7ûS6+[YHn{f\XB$+7Qސ,~uRd"F:[R B5VMݖ9.k:rLz#'^DDD4%&˪Fi|>_ G"7"0O$s /0a{D1z]]6я7WָщnPx)>T}sx/AQ$k>I0n$dȝRϺe$If-T:F F ""{8V~rB~'^DR=y$ BIl}Vp;w |Hٯ 5c ,Q iԀ{&~=ɐ;э(wg3su_Vo},&_4CM |XBz[ྑ34hX """ >FZeL=x<.YWSSx囯r/D$N I2VBQӪtww|< R)['BAu]w]p,E?>X^Y'""fcSIw^|{;n%8R]:-nX%k_$,LuxyP(i6b@P DDD2516.)=F㋭[l w2DbZ-τ'S`iq⾠,mmm,2%I$>;?K9|>HtgZ]>9wxe嫿 ~W!,--a}}N&J ]R}p.S8E 8k^CyIT^e bdd1d.`|^nmmj!Q( ^hI ^ܾ-;Z ")IuAuh IDATW^~ fUCmw x+|$F>gGxj:G\n0/PD$f d|=N."""3Y]>=v$:{ا57"Q_+H|>4 CDkkkDMEՠT,:f*baoe:> ck_]vt :::pV7ܹ+э677eh!w""" J>}PNtadH4;եu!wCq$C-@Ph2l1CT DDD-f=M)G[iT=/z<˜fgص$Ӊ/3NJWaTj++f 5ܾ^tt菅+l: & F 0ND aoo>DXl}bD1ӛY. """J069J;u`?zNtnFis x^ef6:D ɺoSzuË,or(WJ% ( VVZ]cZpBF!w{$IpZadh0< |u$A>~=33s,ēɎywT>zC0L@GGt:^ڔO8nʀ;6CHONa _MF )]D)xZ}umyr'Qy=NѯQt::-fbq9Nkնc+GPN Mr'"":'z'vnUz9oo6Z&v"jj;;;M?.ɸL!w""n:|`?T*v$O g$,0,[}xd܅G 7!NNљ&ݓFZq[j}2 OCDDD$d*fcdj7LhkkcQ---bRo%W0 bUJ% = ̀;%i4j•O -T73}YH ftY:u<7Y&P( XT򸒈796.i1BFHNZ瞉@DW7IVr'jb`hdbAHV rl Esye 6Oᗟ~.JvnWMi5,2Q |'>uZDGy=PpnW סS{2`a\R. !""K'R4eKFMiNˉ$;ANH%j}BOOzzzp'"YZ]W>fre t&N7}xnWxůBRCC^BadHaNO$6!b9e4AS}0 ѥMȳhn^#^ӄBAW"""Ex^< KD, f3A`1Hl6cѕH.W˩Em=`5$cz&8Y`Y,ƒ,w. 3 ڕJX,fM&ډnqZ#-{kyTnC'!#͢X(H8 lND 4tso58łnT*ZΙߏDO*5^z/""j]9Ѻ9 z=uZTl2Du58o" L5tbu=]' Otr"ƛd4a4Hrro5hsǵG.sZN$Q, ׌EhVp{E.C.C6S<5ӉٙcR)iZ\.vn'"YfBկ'&_ Ø~ Y33Y Q?=_veAמ{>J-7qvBJQk OkOpn!wmC$7vm'""")D(h$qc?ӄBApg܏Lk9\\]eȝQ\.l6x9C!d$5ZFx)_೙9z9Nk)Cr 0~`s#}#J1ND:fI g D Bբ:_'rzz%őHYdȝdNvpeJ A]"$;kS]Y7zIkec%VaX  IDDDwOmm!h4>2rLbZ-;0qMDN$F"܉dBOOX "vx Xځ=!!bvvjP+,/00هQ[gp}&D"Hfpn!wNAX} "' H"C$&IEP(`4`4hX"""\d!JJnz[ysic4t*l\㶵׊Qt;XN{H$5ł$SĞf0;;[ {s+mTچFf1-Sca%_ [saM [Db4QDD,.q"Bk!ws J!U!0 ""k51&.#]-U=ӽ=xB|`CcH"WhͳT@o! ߻&}^$<}Uj:M0LP(,݈ɱq9N!w.m&NoXۅm]c:N}|*ꘫ)R)l60ND8!bvviQh!wI0n$dȝ>i Eu 8iN\_N$c/`4! ""1.N59M(4d k "jARɐ;ST|,Qc☝ !|#8tiiDrM^ijB5jD'}4O^)epIa<<`.,ƒ59#MG Ah2A0|FDDD  ir2^14 weu;XN$E;z|>D-" !avvX x]I4hE :.~}|{[ۏi'A84jnDj*6Bp{B ^WڮR)4V{[n, 8]Fn˩5,.-[Gȝ'VxlV3tZͩ%"ǎJX,ftJ% BDDD +H8,ie8;!w@4_x\<'9%y1޾>CC|Ɲ;w4X"G<C<=dYβ0$5ty7jm6>;_TBz&TJ8nYV`1g{{{ÿ ^ WncxIf Z=]ۏR(Y"FvC/XX><ԯϷ|]ەJFÅFDDDMaŀ{%B2NDD-T/~}o7 NׇAl6l6,>`X&f 0;B,;G"gqƤ3Yܩgĕ r[ X^)yo@q HYUC++AxBQN$啵`{᥄+,F >!ZV(e5sػ̜efXAbzK4[ A@ @.."""j:cr(lC4 qQK B B/Vjw ^^Drvy[<C,8bBrC 'y,FO/R)::@|v?#t\ F>ntt&[tl\ϱہg tHs%,܉n)ɸh!wjF+HL>ݟzA"2! Q3o1yO!wvr?h4Z#97H&p8DDԲZ-|}_J&'']]jꣁJWx O-  j0Px 0 CMeyeE^J:.WN ^9aZUī*XƆ~Yݷ+ p|%io[Fx)hb;;*=|O'Ā; Dhťy=ΚC<]i+=ZPT '!"RmA031Mܻ'i7ur?n2~S8ǐ;6/ku5T~v 6@6'܉n88!bvv!YH%j^e~?-/uU[FTʆ_QaQY@QsA6}|lnlfZCj-Xr;T {ݸv\cZ&tu\D7q|YX[Sָo(:-nX{N2]j5L&M&ۉ 43dcJ xᥗt,rb!{hfo}e<  2ǃ^Ƨfnݤx­{!#0eN4Nvs'"i6rB= zN^Tڠ1HA$]C &&&Xji|=|Z׾ڏ<(t^Е:xrgw;zoPޱ*aï/<62Hb}#S Amb,p'jUq#d]ae"Rb جllAbC>fW+00ul'""YjeEiT$qZ"\ #~ ݟM[""jm~uK͹P(ߟllfG ^B;Q,&&ؕL_/i4O{Mt?E!xR J K U 6rѨU!x~BB+(?f_Oo"UFmvaﺱ`{D[{pn!w^\q-[0Nj~4!v h2BpQQKe=qqy N mծ B.mtba~w2]8 ܦ?=!zi^ ^DDΛ שP(^gdYvlZ8.ݮ'nwpݗg+++5?L?j TJz,$E FC66nyJgVBa Kah(JdaJ;u0~F~vk9~PW8 D?Èc%D ɺ!{kb,|N(!DbZͮJC 76 jWㅗ^¯tmx~TqZ#ܲg.Y55Ő;Ng1Dt^`p=|dx:@M}8 g2Ζw ؆\rr`gXZZzMyw~_#oΡRiz 66_]R\Y-72 m:|L\In=Z:t:%m;Kѐa-6&5Lp'j|>I0n$dȝiqb,Ys |$QwEw9`;Q kH&حهbFBdbl\Kn'1~?ӄI76$"7_)7,5 >T |^llnԚYGubc3N׏vUP;< lj׿ұ/00ه'o2 ?_z€اxݩ ®mlb_jt?zg&ut`=(td{}A}Vm?^kn5'%C$.)Z(`;MqZ#ܲcEgrr":fn]""jy j דxv^T 6 mmm,F Bfǎ_vSF544C!µ6CW&ا^JO> #@re +(mT8iq!y1:n66ExJyn(wo&wvU@]I*٭!Jvkokjf zlfNqs u&8Y@EW{z#-ZBViB @ULmZh4ΐr?C4_x\<'yNDDttOտĿ v,jeu:ݱ0^l \=R)vsolPz&lvT&$~P;5wэn9ş~M}~,~R$@g3s>x՗iP(`Q*mcmcg )  |kt'JUV yJܲY9IIu"N$`ȝԯ5'8;E7HrgHqZ !%dWSS i6Oտ}O՝.P( :|958zs<E'Jm rr1<<4WWio5gDlfx %..[y7,t ttm*+a]3\ ґ]Ri `6p'jbv+4jU]ǐ -TQWȝk\RHƓ^MR A`l'"""ظŐy,GV!DRjy/yqS$skey^drh5 xꩧ1rx Xc88Etv0<2 .GA$ݝaN7d`bK&Ы v;;;XKo8 m:t89r‚Zld.j`2a"9wr,))zhs͑:-,X]O:nx~Jh2BpcIhbl+uH&3~17Kph4xNN M͝f3~o|MjSܟBz#Px2 _o{6xJ7Ӻz'{ѣ  zy-KB-ehh.np,MβZßۿm t# fLFlQWod{}7c߯t* 'zZ:PZZ;Mկ+0.d@' Ʌ)z@xu=lV6ɢ{a>Qx~+ h4Ac,((n} jh, wOb _n*)܉i6)7&B33MAXbq-.Fn9-8_1x\O ӟ%gbeY.qV0IO>fWu ߏA]Ǐ1nQi{WAwqmmMi͡âp2] W={qNZ`{gu~G!t0sTJ%fӱ 9$:ދD S՞E˅[^#qx=|<&D`4!^=} Ylr(n ݃ggnظ5-{>/6ӄI76iDDD?8$ -`a~yމ`.tvaxe\.\n f~x >tJ_>{Socnu|>/?645 B7JQFRi٭< |$'VBbɌdH4;X`9^",7nok/ 𸪉9$ 7tE0NDDt&Q85vrCF{<%=rWh:nDDD5r8p8տ $ $I$ 3/_IDDD\.Aw*__011q_бZvN^#6H>?a1!h4jh4jkj^~E\ΊS#w μ$J:?vVgy aS}R.쎂a|:vsFo؏;Faw|Oikz츾R Ԥ5{j/>~]N!mJ_&䎲 O-:a>oEwv՘5Ng#senyk,k Lȑ#>u6U6;D"lv;"GU4aWF444DaJ? .PT3o5rrƆ/h5(@ 1)95|,a`r+ ߽GNBjNc,rr߹Y,侸ss GݚH$ B!B'~ߝ]}>А|>1s=GPk:?1'>{b.4lj j.x;Tz1{K9cj r*_(8uv=zxp"FO!J3ouwG/IҼΏUYB3{s 3; rJ&SJVDCjiiѣʾ N> @8?6!wԝ[xk5Wqmy=topGe펔0J0nNcRӜq%z(ϧOF\.b:%(qYd_ˇ!uuEvQ599IP{$!w=Im~WnonlP 6-r]b=|He+'`JsǬ&:1 \ؑꝩ捛zj Dy)ub)N{)(Υә$Xi^*,!wM7멧k_wIJvO)JpQI Ӎ-//QԜ9 WVsy*SXv=po->9v8F%/\uS) ܃&^G5t萆Q IKvq1\guKxmG Jv\~=XY 7eT*)K51ޘ$m+~gVxB,+*$=z0[BPsR9Kjqk}Wsܤ0+ף:; G('`|ڢr:o@-_V4RgGbjmQXJCC|^|^5 Z) vuG җ l}e/r{?0()5To_b:ꖆ{yb'qI`e0P8y5|T*`~:ߖfK]xIw/'ԋ?zhhjeebk^,s0jNM»az(ѦΎ6 !!WytwGihh٣f7ve w2.cTTwgJ/S8TuDrz;.+t^BBBQ80P@)&=r/E(R(P׿~#+ԣѻRGߧu[-;ںR9s[s:D:z"lԵFM-^ EUu;z@ATt3ԦW 1*1 a|ȝ1*j =ت+K^bjڴp2]a{Nb|b:ꖎ{bϟ9g\. A‘Ptuy<:ﴫ]㥻ܪ]r%K(OowEB0@!T2IaLNZu]DȽ|#X]#$ox]ը _RIr;N}VW?6BCCí@ǭZ^^UP͍ ]N5{rh3e\ǨD9S) 6et;N^L3YrqYxBBA.~Sƍ;x ?(VH~߿O=z K*.</sн^`0@ X4ڥ&''?ӧOkn.CaSO}IPH`Ro|1^x7 ҫoluyAWm6Z[hmQPoss{mk;(3tLǨtO*_(*{uA!{r*_(8>zk餲O^WֿlJLwOr]ԃhKh]{+LjcccGcdYew~Il;Jju5}x< i'{{cfʊF3jӣ Gtr0?jߝZ [N`;fցQH1`!5=ÏP`<p{tq!}O Kҹn@B>B>a~'6Mi`X9/GoK ԑ`0[^WХKT(|(R(^K[AT*x<.Vpʕl; IDATݷc٩`0(n[;|o޽^}C/>sh@>2XOB&#CBMMr:je7Qu'WחV 715MqQr\ EQ)'l)N{W(twG%ҼΟ9CȽNk}mlll(5=-`XPʕ]1*svC)Ljeer~g(^SΝ;އ\BvɽWҭ]l6Cz_Ƨ-^={||Hqj\CCVF^S6CtF%Ύ6Рf[͞[I kZqCŵuFMv{MMr:ۛ@o{WgMeLڨĶ.bɯ{M:;rfwaxM@ Vb}}:kVǾ}T`~s:Q\`\.EQ>|XX;܃fS( rL{ …IIyp'@ F1@*=?_o~),ayknu o*o#þgk ._gC{wd[] 8pf2EE0=NG^ⴖ !wǍ6gΪP(Ufw8ԽGy1?t@v8]`GMwttf۷š Btr݊FÇuuvv\x ˷~f^fxxa_ƧgT,QX+ wh_{P~W%ݷ>~kjWXݑ}jSE>@;GǜQ0{Uރ?7&&BRɤ6긤bIMN$ؑYîoryV?\;NiratawtvmBpV-.,:LJ\ΔpW~lzz[[__W>ꪮ_ir<;;{oh]v}G/2---lx[|:Pm65lr: mnnƆnoܐ$ݼ~dojM>6SRcSʄ;M7@FY/\ۃ}g 71>ÏP`2f.!wCr7qIj: !eu$߯gLx35ב#G)0Pݮ`0`0(NA`wv~Ѩu5]v{(adfp8vr߾ѣǶ̤щ=ҊǏ~~/K[v|{`~kԧ>{haWqmqSz/P`$\[TBm s6HN' T`)+NR:y54P:.E+yqZ ,0zd؜c(W,:;; @vuvvjxxX===%=B!S[ss.o>iTzN_qX8Ov9o?yqiB7wjRCtOLMS8;bߞQr<|֊S;;tG&',2n>)Vx:y6!wsX¢.a F:tȔq sgaIA8pݽ1SnQ7\}[:ժ/=ޣo<=n{qm]gx@ˋuGLڨD95q1J5z9K,89[qRo,zdؔq8kppp;1ۭXAvc}By6v޷<ju>z3?*xPr:x ڨR{}2n||bթguGt渤%k2Np##9]Nv8X,&NAy^T}o;FKKK]v_=iM;x»)_ťeTm9acTfx$.R8"ۄeRI P̡әVx3b  E;`X)% jppP^bŞ~nSԶ?zXݯnp_~s}7WW]^>Wzo**`I)se+6arJu5!wXqRtsC2(Şf#FAF500`0xr^Yn=BxCWi=XO]ދkx;N:KR*}l}e9q9b;\Ny ClِqVMNgޒtjOP(T@) =ripp~lFUn[===:|ӣw}g YzmZzlpVG"y5{ DLڨDowDn E0%)y1Iqv 5Tv>kũNg n+NYV 5df&.A nS #v U,xH$֨١'G~ZCkβBXUoAwƨƾ ¦;_n"BΝ9`~sR\)===tvvpݳk >kju#(f3),*2n2B'u~,+ @2exB ΌHZڼ.Z\M,*Dt9 7W`1`P .m]];//?mRa7>קo!uu~ںWYPbfu,&p }d8aIVscg8t:+l>Bǒ'',>f>W*EXC0TOOW 폎>,:qPo<=둣iwvnJ55_sΌHqQkڃe;0@)㦦٣]Q!B{Vԛ'NTh!SM$8 ;`'\.wM߿hEcͯ~W5%ӡΐAw:Ree+` 2n||!V+;OMpjZ\X9 3eD"NqQv…ɪE-}A=HdnҊ<;N@4;t+FeJO+`P[@nqSӜ NN)Yqj/ә 侻F87 V j >n2[X^^ێF,8ןɶ+w[tsu+nʸ4MPrBtr9ϋpUv=w׈'5P(T oWdf).w@=IhNF_=P*ԭX9gILD  Ee.P<-*;?Oq$e畘[qjKtf=wQ:dOĊ&',00#.ID⢮pԊc>|>e5jivOܕ;@h3eT2EE.;W|&~mvN]F}}ϊ: + @2.!wze~?w#,GRwmt/k] >5{;)6!w6e4{@NFXE}YHi-.pz85jd.pTbvvj}d]ԨSzW'a߭3<@] ʵEsE*=G`ۥ$'(.FOVv>kũ]J3?gw!]NgK3+͟~O93R.idfkfg3vm jk( #,vL'fiB'wIJL](pnaSMM ػ;uڪaw_#%}txww$Ky5k!22n"0Q{B(ԤGr+++͍M]_.h9E.2I}+Y\Z)%/:_Qqm.t^tv9 f;t:lcR̖vFTzNG>3L`3CrzZ}1 ѓ H33#^=%}j:7v;e G"r*K'wԢA c>WWvw@[ºvc>jvQˆ}}iEKjm@'֏^zmO͹Tzz_ྵūV'{ @Dtݔcl6P(DQuV2;QYaoT(Ь6GW Z5=ڔjt;EK+rn_}cL_# @͊uGd!Xi=$!w'Tijs+\ow{;Pm }7n|źe566@xW:t:+\ܫ{&(S߁>wƏrGUl68p@nbА!ϠqZ,Yǡp:j[[V_\_ZQƃh{Pqm]IQ53dT2EEz%_'15M`>SƍOP\++z ۋ,1ԄS:KtprOagV۹,0ep\j >n*1QfUTavSƥ;C1G%up ;Qks @Bm]NMM `7nܙ3y&=nթEȽ,>  @>?uayz݊.\ `{RCçj~j5e%db=}؋wS5; tF%}ڢW( mscjEh ?QPuRI7 W%t:s;zIRv~쬞XdJDt!0t̙NEP".gF>Z5;5mUU?-<- wqi wb=<3u.@sMmll| O_[~e=aif>I * =WYSzI}@gg[AVi8qr=_NәV׆㒾cIy!wwORI(0vE4%[]]Ѫv&5 Rԕ빪ߟ;>2GL IDAT,:gkwy}~CW\^+|ٍpg !fʸi=4 |CƩ) 漆O(0`EnC u(˭4zU7 W!=Y0侸ŋeYB=== +.\5Ѩ+j#֯fYԅf4+\ma)ICu[zA}e ݑnj`x{+ot4AϜ3Q  :NӔn޸Ys5.9.\2o-N)YqjKtf>B5 twGOHGV۹(Qk ˩bh踩TJG0U0$U5~jvR8 z5wZN^>ƻr_){f[m?E` CW-*/CUe Cx.[u嚱G''(.`ƦF=<8ɉacz^56}|jl{ ~ǭ:n5cD ?sV<@` G"J^4M*0UOOԽh&*W˸M7;u}v0LMнv4`!6SMLMg)0Rn815mZn-Ci> r)=sI jjl<ǻ{}>5b *N*kµܵMY=/j4v]XB,kgu}ߟ{^!e{'¢Tm/kssTQ&A!XuL9cR9B@ْH>cs9}sHF:Kt-V64PڐNgˢ8x 9M8 aX,&F!nrrj=44G,Їm jU"ݰQ=nS*pkq:<%).*fߡϜQ`M՜FO^C0¢/gy=0Gggn7TRUo=[}[.yjX/@A>nl6 )P#:{S=zmJQXT;Tsh^S:Vv4RڑNg^c;X? ]Q`rB,;#MNNjyV+hۮvhjZafÀqr՜677).}%źn1R9Ӻ!z#r;Tff/:fb|K^L3YA'cnϜUP`uءp7Qzzz(r|344cǎرcer>~ߔqTūhgH~W ofNӤR)'p0SI:IM':g-trw8cg ŋ:7vV q\:tHyq*еf', tvvvS@UMNNRmtuF'<_֯fM;A[y=Z^&[eZ&15|l}|:W(f 1>ÏP``?~NR:9 B5&\(Xmno8A@ sMɋtO'7D ߳aݮP(D!UBZKjcAQ Z^Y͍ c@]C:P^5tTz¢"_.:2nr:IXFn5ѓ:V.-]Ed w.qXRggl6XRWWj=;dMs]^Rv1oB- y=;j S j=F}fڨ@_׹rmQ|b]NMOP\`N)Yuz#p!^><%+Y{{s( ?xEAż^ XV4U۞f}uC+:?i=Av9/ԦhCfaM`ց{)͠2;TMoٟ:~ǭ:tf=k׈'uY I`wyE@U%/NN5!uur~z*imL=FkhmqS `/2$%83*SN7w*%'J&:V6rA/X]&y񢊅"@MN.O!5av6Cvꞁea)+4uzt:T+nSm#rR;8vE;C9->9vM9**SN'mvG,ൗ_Ԗ+\רO}vɽ@CKz@776[3vWSI0v}dEEjhhPǭP[>G%֗JQXTNړ 1zæVszW:Vvmm;nI-.,j2gu{媉19`1Pnhhj}iʢd%HxuX]ajh;vEp`-c|+@qQP[@֒"m'!wP,] .B5S ,YqnβvEg$BPbteAHT.WXWnKky)S|+sj  w(ѮEnrΝ/Զg ns?O/S\THPt_ +\׾+NB<80ң}Bb} s,"ji`Ku(VMk䥸]aדfCaOۛzj ;Cﷻև;ڵ/&"mK(i W(arS\Pg:=8B<͟+ykrUt9̳_K3 wuE>KZkyⳟ&=^_f{!ۛXL!6F sp.Vڒpm#^>< +ܙ3,0]rSV]t9;,\j(m_0i.,UXak:9fwu>>d7VEBmV]>.M(ohhaվwj bƿw94EEzؗBQ٫I+ H]LR\Pw;eٳO3YH ˆdI E;ǎ< 0]8wcg5+y7aHXC/~A.n7EԜ%lii|~MVrkZX.:νvn|<؀mMIIossS7Z_uKqmm7onwvw:[kljT#@e|qS鹲mC|DbjZO=xff=+Ej&@ygXyzck!:NgFߓb?s;]r'%PsLnuS^[+s7紜[Zxb=r544H(0PCz&䎊 rgT;bx=1Vx:y}~XqRɋӺ<78J@}ܕemn~P8:99TwW_gD:;L7LqQrH3eu㵗_Q>^'󠪺7 Vl6=FJ޿RQ}iuM?=5?ĜnlT}^?ͭVfFuƨT9! r/#VTP.=D`RKkz%_ ?W55'?Gd1)̙LqQrƜEFz1ԅ?=V~r#tfDN`9o81  3"p^qرdԩԀνF^_xKޯw̡}+`HqQၾ2Q|V5-Vx:yUH&x\Cl~\PSN`5jvQ+.k~^94y<aWqR儌'aI`'R>5뵗_Q>g^g΃f;Ԩ c.pÜEEBm]N;lʸ jOS[t/L:tŠsOб565i%=YSPB GZnN.q'r\["_kg/>V]o# uv>fPT*2%_dt5z?{yyW$ `^ ,hNSs:vggN$i35;ty̮q(myZx[N؎ԻmIm%HNAVD@I&eDE%!*nIyσ ьSJ2bK !Ҵǩ{󍟳f rEebb"FOO7EXuKƹxJ7 o_x[/|W|_3ً%W"[%l|M}rRYCNNV'L ZwIu>~\GTUUBʆ咯Ƨuuz$v 9d2!جJ?[ay+=n@R͞{"Q E7mЏ~v0}/jwb9*3:@0H@QɌc I&SgXCȽt&01ɗ]2 vN~\.ׇ~xeҥKP}}=8[(y7nlp(npy!D2-jȏiTif9k])@z\6aK!'7~N[nr-؉˖-Qd2R}}=8RquwwTZ[ _xktjRvjߖݺ_פϷ&`-&iBKtá_ !bX#j<;Ga@Qy;yzXEȽ%WBaImN@_LkmZjk2L#Cq);JTUU%0(1Z[^|7~ݟ'?yQ3+9ȩ]OۭO?t6pX`-OP`,$%|Cz& G(0(؉ʌf:#d \\q|.qUР;79{b(nm \|Y577G1ӳj}C~?fA}ܭ/ifUU`¡L$y1*5֯]qtsE wž^q^$,Zo?yVP PSs6ܹAF9z̖F,,tG[*NȽx_פ??--oG^o%XH!IeݴaOS8͎$)1E2= 'WXҶd25 >'NOtGYh@q\UW_wz^zE/ǖsWLF=^Lw[]m~MT8vi˗Ԥ& (iֵS? `n5?5j[ƍ #4@¡f~t–)q:Na@3{XG9O/;qb*!w@Q1 C~jfy_^Րx6 /߿z{{5k!xaddD.\P[[<u{~  KҚ U^:'ӄܑ`p{<셬j~ #{!9y{XGP I:mn'?}Z Xh@>0|wmnbhH{ z\6=LΰʥswN/9!w@AT|7o;%ޖr5C/ogl,̵Na\;vV=uurs[]_q֯4Ue,WTkե6y]|YLFXL&&&te  ( 6Om՟ x:[[Irle\Wt_[7ԯy2nl0'K'Ie=3 .`4(*3:>NoZ+sΑL΄BG$}is[_/{> jO>Oߪtk}/lvU|l,D"p8LMMijjJ8k533TR50pϜfLC565Ƨ50 633~IROO$+U=ռ͜;w`5<,ik<`2p3M9OrG¡f[M iCP`*:UvBL^ Z%9mn'v[,4`I.sK ŕͬcm߾}Uv1 92***>彂Pr533ta87t__4`-Npe$\`Fjlڟc'NR\jw$La3' n׋ ;]=;EU@[}˗/kbbBSmm~<"ݭTR533bWB1 C333M5kfKQ["F[ƍ &䎼phmG߲ud!'O.DݹOVG㧇t.VsK T:e]y?i>έz {[Dx8fggJTUU%ϧ:Aqf333@Ξ=~kvvQ3;>P kRsQ].'Nߛo\_,4R ΂tq_c+j޽?'2<~333>uwٳ)) jAF5U_WPb1,lT"tLCy ZrsX"l΀ݡ;IȐ/|cT||2L`2…+cͭ/h p.]2R WEEeHΪf JE1گWSmʨlik<>61y=rԮשּׁ wU{'P``؉JNVٙ;T2PO:q~o^ r0M|>j|#hc޽[O?i ouL,֧L&D"x UUU&nLӸֵݩAC1uuֶmW?D"l6+Q>._ MLLѯ+׿FS'`}F֭廓aMsqc(F¡37]`k>'Un'Oq\,L ZwJjs2;?B@aŜ޳*w^Go&d-MMMijjJ>OmmmtvP^|7N!n!:ux\pPVu~5j/uZy`ccs+4;;X,@ &UTTPeW /TABgɽy4T3ٰ jѯ-(OM2{v#lUQGwq*;!w%'O޷@)|p}>Ϭd4556^}_E*>hav_æX%FCHm놌I$mTy57`P{eeNp2*;8[2SYd(Ra(xGP#ams ^gC( 8Gd(:pK.׿FFF(sSK/[7uW{.K u~\| Z ;K73g);7O7;.I u𐓧v>~#Tv9ubC> @Xv_uڸ.ַim]^/Ź߰1._gݭo(:p cW)2kUǴ_iqQVQ͞n9F֯k^q\`+rR2e/d).ჇutC]r/d$q}E#;7|[;'z='[{hbbBN"}^lXwkeTq-@!ұ8(d MlI ,wK&SS@+{:_Kϳ *++N6m|Z׵jm]n)DV񺺺71??T*E!8EXT?fOOcznGu<6 L6(@4,sS\%ntr¡f[M ?5b'N@ȽL$=:CxEqUUSs6nKweűYmժݿo*嶗&&&422B!;::fMnN"{H2'V<ee8>NUUU2r0M*Ð(`1o;%y+_yBvU###ap1n=xv:#quGM P`M6trB@C*Vt\"V8BpEcSXfgf{|5>(1b'?xc.^П/~^٫mJ{~<74-sn~Aynڰc4{ݖqp_f>Vݾ:=ry!^fIG:^}EPָݪ4r_ Sv$MMM#֭[KzmUgg{q=ēim۶ǚՁ~?K#[_Jh}1F7-;k633|Givr6 PNN+>HfC*?|'*RMO>sy Wr Xlʼn/k|>:j>[,La!S9qbC>Ȇ 2gYjGUoo_ Gtxcr/v~[333O^e@~Vjl hl,c>[_ׯO>oR$;W$ćӊ'گM AGj Zr_i0 CX1A5>9'8@ :w5Cʌf<]ry"^^wo};UYY)4z }WmQEF;@{謁B? 9~}X`@pDpX@UWWz'USS_zzz~}K{iϓW|8Seoo_m@"m-UߠN\ϙE ZdTy57`≓zO?G垨{wPoKvkktݛ (f/y'Oo8L*'Be*LMB$=[gں:@[ !4r(JK V3g:s&K|DŠF; zCڻwcGE7έgggMw?gy$vڋpP{ UUjJGcv%C̙DNW;vO|ikkBUUUw̜:;0 |Y)_뚋< N_ S4>L( RG9 ZdTy57cHmč`Uj_Ik_O2=)>LXFҕn //7~N7wq\2LSy%zwWne,t:|P) 4FbȞۣaIWvvno6h ڱQ60ikk9*.I۷or=7FBE(~#*^P~[gf\3Z[[â@M!D2My Zʾc r%{{|(NamNNVܡd2'j)ɑ*y8!w9sjz7-h˯CַϜn#gSgpp6MS=vx{^۶mil2WQQVS WWWL&9eru PCdJ.^*yk}ZiO['n{L|8!^kkkijzqcCynj_q=ׇݻk߾}˔zͩG۶mg1ϧ6y<,!ǣK.9fN@@۶mSWWWYety<=?+ɴ!VzC|3xeɐn@ B=G?;cb) Im3|Ⱦ)d!r"iZ'NW_%onLӐa2LCn.&s٬vW+:.vsߛ;ՎG]][VNX>ϧ;C>b(;MMMvԜ{*qwwEœi/h]¡miF7.4">L "V JX:ɴ¡ E7IeeU#q:.=L}e/du!'Oq8LJC"䎫T(ԺKSN\{+PCqeF )voEL m9px;;s٬:s&bQ***(0(U__サhp`-d v.PnWpFFǗ v=dK/k.uwXD#%#GFGN CvI4/dۣXT*|>ҵڪx<9K7`:;wVO|8}-~PM WBW^oe^EZO|8MȽ@rpa99C~s&䎼C-/(m Y{'Oq8La;I&SgB$}ىISiE6l`'j_ l wu| xfۣƜq7N6x<*UWW0 UTTP /ϧY) /u{ۭO?xўw32:S>m,~-#:7dJli 4X~ \Hp[tS^?NT{(0$>x]ʸ!whrCx@Fp%4P E(2Ǻ-s㙦έ*Id2Hә3-Q6` x}ULˍ_֞R|8 rZ"kxMy+=?GXr2StS ,pٖqCqB/MK*zWI'/~zn@[ *Ð(9 Un_vuq@@۶ms)H(UhCfHĕddHuBVLFcc!l˖տT `*UVVJ2 Cl֦a)'Գv̜6NrFbaOůvkOkjz`ycXP"m-W"j]:$^(F[ƍ &h rg![jv5I>)dq#Bd2F(:,͉Z[WbER>LӔaFO/b'N:JςG"z_eޣݶG!B7cme1dF5j  FESrVUU%0TUU*@… p̜vxTD\]]]%?￧'˰pQdZx%jڭ(9pZ8 Vz,@"y"oM:N=Cьn ?LΰҸ!wNIgby3rdLӤ*2M/Yyۊ ӡo~eᘽU"<֯4KKC[HT]]Mv(bmmWwwR//5:Q$vݧ뚋<]ދ4hjok捑rBԉd V5j| XSX!y h,14P`)aq3qSdjO(ԺSo3}n@\.y-v($+NTn%(J+1[Χ#ʢ<~)'ݿo[ΜIyׯէ_uEswnndt\ ecZvjik}9X&&?@Cr /`޳' Pb'N8I&SoҸB]X]a0R" +ޣuсRQQ!߯FAAD9-n~;%tشA{wц {#WN߶>EB-׺)FBKܓ >-:lø9ۖʚc=.Pt؉2;};Ye !wΞ/ N`njOirQlr;VSEE***(8v}_?.uuuyLCz>5emrzJ}8Sڽ][#B7ZNx=>>ξ,`-&iu~T"?M?Jp{|(Na(S';)CLB]rXJJ&,GneeKTiR`@ &@mmmx<q̜/RpD>r[jo+k|6[ ,,\TniMM\6o +jUEM6ISAJm/$c[)Dlp"oH),{:N1YeFG)0e.(wܱ=rpȽOSUU+ &v0 |> [LnݺvD"555hxx1sڱQEQ};X(w뚋nFWZηpQdZx%jڭeY]͝(֢S[K/QOEt̕vn&}ǜ9{Nٹy;F>{o~?'@).{Xi!wV2: >'N|gae2 C C^y=v̖qQn {UTT;aA}}$9*Gk 9ON9XZSQ:?Oc-vix/^P{SJE7FXIPmCGȽ0ܥ+s ,2*_׬3gϭ:?=Nև}/)aBXrh]V".yk}ڲ1r[[`9ɔ{)VuqAlp;8H #rbɽ9].('Qv%bBXn?N܁9||2L]8d˸|{Pttu飼ݫLAcbr(qSpRaWk}Zuk_[[,) okNSYEH$Q\-]}kE ÂrbɽyPFyOqW2bBXrHReekv^VCcٹ6 ʘSmvm۶]=:U} sEWoGZPr&gNkjBڽEZjvBi 6޶KX~GBaԾc#+^QM nN8]ftT]_s4XBXd2F(zD'8?\U_׭`;CqeFJvPt_<ٹUlVX.\ȪT8Q*қoǝ.Z4ԯeJbJg rHU5X DږQLJӺBl<~9ee4B u2_XqdZP Drb9N$@(.%34;Vbrrir\(2ngg'Ņ<EHtp&&&;G4oYrscj65>6@ZXx2}->/عC-WW EB-:Ŀrbb}ZtH-(ݴA߉!w!4ӕI4;-L Kjs޷O}ņTVV0Mkz)P$ze\npM[[4??_vs6q~(Bk**E%>xCMEZycP*YNGF)T6ݱ 6x;-ԜS}rW߳688]܁"䎕):n@ҩP'MA"+3elBۥK(e5o4e,w\Q̯\|8}[{".y,{,NC-#q-,\d} `mm-\{DEޢ6G?;½p}{<셬j@e}+ I&S{B֝rh7z-Qbv0 |tݾ^eN&_l^7x7@rW;jc=.jeܾ' @e}'+"\SEMvzvk.eέ+"`ZZZ488XVsö;q~Zuڥ4 ~sUvn jZikQS)P˒&>>N >m1,-Լ;Gb.P'ʫKM ).t!O]ܑ BXd25 SH7w%48Cc~}X@cULLLB>0 kbbl%t|r`!w-U@;zOU3ַZӅo>1PP`x45} RQ6],BVnڠ8pd;8Iap셬ӧF.#K*Ð'KA`b}Q UsyBjjj*]^+|)>Vw'Oi]_po 4(֢# /,\ԹqkE5yclk$Ԣ_A#t/RMd-79d,֧HZ}mmMɭbW+!pZ WEמtget'Sz_Y"\46opf!/P-&(0@w#gdL(/;utsG\. Ӕie,3:DܺǼhœ|ƪͣ&)CW55=42:sw K:oGm)P&fOue邃[_/z;rq^ 9h˸d1-Ԭ׏ w@~r{I I]4A)\T|2MCU!KAHԾLPR|>* Acccö;19j!5z+ٸP.*L_ rŇ9++=ocCP"m-9?jڕFF495kzYLJ%)jQ"OMjrz$:9r^kuE`)}(.Ӓ!wndWi0 zem۶4麉¸tFFFJ19ivvs$uͫ2_5JL|8Sq[C7?CpoN޻N}﫡EZecdBWס3e#m-K{dt{>Z,>OSXX7*}ɴ¡ <" @*.djF> ;E7wBVh2[Ʀ; -ɨV>b@ffftJRlz?*y566E]̙֯cNLfOD(rn S'i-,\ KH['gt kj>MqD|8 r.BXޞTvn^V'jQ{C+:&68Dy;[> rI]4EyO:uts/o2MӔ(V![5 ;nUTTP XgݭgM7ow=mٲ$xt%ǯc$bC{is.i-\,x2r}}dt\Kxx? ;>YFX8/$l]bCH#/M+'(w.8P,!wXeם:9BUn[޾};FQtNݭo) _~㟔lн^###_p8"1gst7xܶQ E`rzFNŋ*~r P/}~.]MQckTJJk}_;`y"LrGޢ6G?;cb)宕_`8DAw.!wX"LA7w*Bt!޶;RZ[[)̌v|J?ɋ~}}'S-{ؖq'l].!w(Pnۆu(֢HU-Mm}<ښ%M|8-}xb<ྮ9FmYR W}Kb;Y"\(.KGIeeUoj>'@)*.V!+Q /|nLӐa\ n6] _1(LFUUUp3ڽo5;G:ҋ/X_f.r͛7TM͇kG~_SS.Ӯem pճpQdZ}$3^P`{ˇM۞&gZRc/,w'wbk}Z[[H[*+lPsA^o$_XrFFm],KGF l},ӝVYYgΞ[1!$?!v⤢C(!e}'+ re探}#@zv+3e4<<,I:;w*N=W}C9>n䴭MNkT@6iF%uང{>R ) e"!Ֆd[iGtkg$nݻ;{LggӉvim(k'ʎzzh $ |^qss%8{jHvY#9FmVhYȇ>.'>≨ZW+FƂsa1`8ZP]B2CTS0CDDD5@]ܯpI) nTeuuuX- QթeȝAw"e@=,Ν;W"g#yd2x8xgQ__%]Ϸ xOϨ9!w""eZjvns:;tk _Grܒu)K|%Z7bc6bo[m[$轡KZ"'/w{8qIܩl`x8-hl0ca1yq\dqj!wRJ7.ܵMMhjjDCc#f#=U_"wϪr{E&McН,nE3Y9~-<:v$ ]ϻ+sZN /O#w,.fY#jbpIqf3 nKަͅA!hs9`6#X"\._Z_'fCAZQ;pi#E^^KqM""Z.Daȝ0:8vs׆FXډHN^;wTt'"K/L&wᄋj xVu.]?BUM {+ȥ pb(Z0d&}=ZvC}=ނ\~ xRV'kɹ},T-[.9NGsE:xx{1;msRp}=O`Ut H*zL(ÜT>15*z'ZAo!Dyn!C1jv`9|'t#jN1r:OƓ^#^O r]DZ,07B8ӤINŪjAcr׳(DT~j޻!wMctd`YU>Ǵ+ +zdjVǩvkڕ8\6}w VrlG.tKXt;>O>fI2p/A EԮf)!%XtvW* SJYC,bq4,'>_Ñ_rI nT@cc#,V a62D(aUsN8Nj4à;B$2ǗT9݁ٳxg122RqvX}}=,KIk֭[Th[ύDd`b(֭6Br]5Ircd,(YbRf|9etÕ kxdLuXJ_m)t Lez?7.,Hhat]YX""" {a# s3MjaȝTcno sYMX,,Jŝ`qqccc .[[z<X xeb`[_&E!w׫qgbSxfS=Ddxr% mnui4U !r/!-rW,>U9Q{1.Vɐ2^L؝W7Ƌt{gȝJƅ"8.-DDD.Dcȝ6ws-_w8ӷPWWƦ`zv#"8w*mmub],0Do׮]8pytttVt<qȫ ;nG(P;lVѐ{}=?~s@ E ,Ta[{ZSuSqL&Ys@r*ٙzRJR},D*=Ws:HDPtݴIRC7!3NDDANT>IUF_ }d.NDd$B6ʱx]I_V[la1f)rx/V| *p߿!8l6nCC Ǘ*1ۉryP{`LZX ]n5jˍ`ۈ*9"rœ ]nɐ:\xa6@~Ա8b},0IdgTM211C,,ư;2rJx lzѺ߱~Zbpgq]uB{dIa`Y "9??P}}1 {q=J__~#ZEn#rMAqd!:~'"MX P`ZMn6+'B`:_B,2^ld<.G{.Tz"kJ^iͪtb'r?v}^I`bN~&""2vq'RCTI~owލ斖yuuuX-`bpJ]s. #H cZqxg022>}oIJٽ{-rFz*#[тAT5MˁvO.jK=<]PZ˸m*=@6Wئ{fmNbmo3xh<҆87 Leq:ZJ JT.ǭ87`Upa]ܩ/[T1F'- w%""jaw"1Nn]}&oX`l'"RZ!{`qP^YvB| ?(2 ٷ$y;ulbRBǨ_Tj_.U^V{ȩXdTNX E=] wlۂ3 潡q=uVؐAiw9_DvaM ,0]R_`j®vDDDU`.NƐ;UWdΎmDD*gEŏϷ&Ùgȝw122r- zxgѩnllD}}=tWWϧq'Shwr&ZtۜPJl6qr&Ձy6A*='C*R*=97tTyrlG.UD\^56dkT $|,0:WJ8CDDDUb./prj]EuuuX-hnil#"RQp|\ڵ%CIߏ_8zwڍ~:ߊbj wz&]Vl'I(cbU]vǍ+DrKy,,*l VW-œ{o#т رmnת zk<eܩl8-, 15Rҕsg{(MƐ;UQquSߪzzbk;Q Cvq'Z\\d䡇bEfeȽ NLM%=n2B%Y P`h5W&e7NIF E#UBU2T>X]rK>1uȽ^W*)f@)IW7khry=nCUKFg!wwsC|ͪ  ZZZȕEDTajuعsKd`XX""^ܧgf˺?7Q!r=VTht@rW, L.cPqmr&. 8"adL7ˍ3 f2dȽ32T,,)i/:侼nZw>+z̅lxN&""SO O}NUÐ;UQ:!:X8Z[~z.*"*Q+Ν;YX2WDDn:444J^+z2;D\.1EXP;ŲG`]fڜަnENG~tœ\~ xR3#='b( \sH$gt6׻N.>q^w?qŏ;<8c*C0orZrj}7w҂FDTex ٬dh,AX,ܽwz&-6.":sac wuoRس >b2LPH{[[VPOrK1=SW:f ~%Ț'f6KM;T>x(M0<ɐ;]}LLpTu'xYDDD`. #lS0NUnE>YׯGkk+,V DD(q Diц H^:gY܉t$OB Eqqpg6O} vïU5t,Wf_c䄢pM RalFuiw9$[ń# }lZ l6U7NIF G!tuVސA΍(CŜ,, GY@*yݩr^UԒʏbpI r'M#/x<OS3),0NDT^dx֭c AzչJtj!w*Cѵ`{%w^zb@ _Jvð$t(۶;u%EFxbϣft\.뵪 Rrnԩy0<2nƱ\,iDžs!E"g="""_}dw$In= |۷qԴE `XX""ZnnǶiW=tjx1v͂a[lu?p'\~ xRV(cC*""ل.7FƂj*='kyQ ńEnp>'&_fIrmͦ3դ6WkH)szi}%^I݌/ HFӜm"IC.'X""""r*r/dhxr[{b(Z6 {[P]nɀr29EE (vlrw"R3ug1m\.t%b8ZtȸA)IܩlNG Z76cj:UvTR6WZCun :la(MZĐ;i7͝ ,+s:faPRP{(1jv~K{*p􅂷ww-斸H69T9AUvQ,tX^(^Ї2k1jg.>rܨay,0.!~!w*YSc6uĤq^e/:l.m*I/=_={?N'@r? IDAT|>U;2LH'#0&tk ˭j8 KuϾ[ v odamɵDN8U _SrBr;ܫc!֪GٵJ ?gN2I }ƅE'd,^[h%""*Qv>7n(\ጓV1ABZ7wsO8uؿMDdp ,׫N(oz&͐;F.ukW:Vs^V]nY!bW͂90M\+N3~n=`Ƕ-,éܣʺ֯ƙU>+O+QIwu#piGDZ~ܩ4lu^gqFg!w~9 hz&-6. ҄Tzn9bdLZl_ށߊXmP%t7%ܛmVpnW3|,id6c֮зr 'O_V)=V&9%" =C)ܴ@ nO~*iW>.glH{# 3 6ܩ&Ñx<?Gz盯/t8DDDDDDd(5X5sXXXcIfr+ڣE-2!r/!+\ی& Ndm,0CF pd3N!w%y~Es&""""""èfH\`Pǹs52 \@T1\b8֭]*0&ǽҭݭЦuf-r|jI*9_  ?5#+Yvk+*ms: 99sqmFDض' kWicZ0<ɐ;:qebGDZ>JӮqr'""{F&SMaȝjF8bn= ??dZ0("up*(Uy[nMMMzkrR -vq[SS Mn2>,RjKbUCmNr˭`q!-%rHOnm۱m ,A3p!w)ĊKuMga64_~?8&6MxknU*5QI^;hAc 9eϋSO OaN5!w50@7_~ﻜm""/?ɴ^r`5VBaXX""J0<Ǖ+L '!$\kCmp'VD\9l!w}wy%C#c \LpXNgx&`6'RTo?բz^_RURbY ^i,.)ۍw\ ͸Wba OHı֯_ sC NDA,^9tC Ñ8ܩtszhq҉H7 Ʒ:t:uV8fx"""cN~ò7i#3ˆF}…F'WG n@ׂFZ ɐƔs[1ښmV9ɹFƌl6I֩wj 8sq?c8.8NLY""YZZReBztjV2駟r bd[{BfS=.7zoANW Gp=e.}Ť\.رmd7Arۆ6u[rdBˡ m.d] S5UلA_c'NW{_=ᮂQHS/M`L,Jhw*r`8 l0uϻ;Ix#G@%݁YnfUr>{CKeY %W(r<7Tan O2dLn.tJ>8>]f1~rU~or'"ҐXf06"ܩVG_Ǘ4mh]caaڍ߽^MM| 5W^,v;ADd2f+abPסMfhM.+5VJe \bdQ@]%[ix }X !#cAqߪM VuRlϦ35Bޱm vlۂTzg. *ּ7vlŎm[x,@rcd,X6b8Ū?:S|%J؀֍͘N){^bqoXdX|""HxI# u]ܩV1N5i<΅l/:s҉4iAcn}&/ ﳎ}t!w""d2XZZ*`0jr%h:NϤ N E12&V=t@rG`]B[d|@t u8֫\.3G(zxxYM[ɚ?4۬xx|Ι?4௿= i6*ܩfÑ<tyo:_i[wϲwr^Z[.}AhkkC}}=ADs}.wi#1<<pE&Q_00rjhVCkV 7NX tnnsJw1E I!qo4_{p5ܒsՁTzNV]Ʀ 15r}lyxe"\nl1^yUƺLvC4W&&]XDSc Lev}8-, i;g?np\V5 5u,> Wp䗜qU SOz￈?/8DDD >lk[ kwP(;3 "ұL&s3' +v˕L͢Z6~)Xtm_1Z n@ׂ VK0q*=@!/h2~S/ཡj:- s+(GI2>ɲ6+ڜWmMg'JOzÓ%nW7Ƌt{gȝJSrFצM'n)5ܱ7DDe.me SM #?x:n= |۷q҉65X~}wA߽^ҷ2 Nv4!"ҫ.lߏ`;oz&-r_ZkD*=1ȘXPTˍ*z grym$cet[Xȃ/m"" ;{5D"[7nd1t:;-׋ +$J5l5Ծܭ=Z0ܩPfO](z}>^]OS/?uF.m8i}:K-%Xp`c"g;UA6+̦z7Ó,.)׻N.>qR$ϋEw[+KDd,~E i85j]8+qEj""hڰE0[7mBp:]|p:]{POƋ[O6ku$XܒuCQYu.!>Qɜ46Sq1Fj q I7GH\f?'gKYQ/Nscv|> t:]?W^E( >bp),X whWI]ݿçsz& h駟tWM3Ԯ_Vɐ{,,".FR:k]*=WRNjsl6}{cɂ^#AffS}S't%0YĺeRb@9K+K)IxrםKnsrI/r'e6='}Q}_G_B6bP͸/ƦM^455uAiu_zBww7Z[[a9DD%1dXټ_ r 9ELZ2R'b6/=hS)igr+㶖ry.*nYj",rO8]TWՠ<Ց'X<)%t%k CrJٱm <]6K kqKp(.bp^z?% $q^9  ap82'=aȝte X_>tr҉iCϾs࿲D%rRwy'[PWщN@GG::lZ!!ܹF#,ʮ ׭}(rœ,Ny=]{ x͓xx}=^'aȝOCC8uؿ3NDTEۍ'?K"ATeov{ڵݻ]s__巓䉈jō'&" Wi:Y|6Icc`Z\>_}ۜ%@X /FƂCQ᣿Z,MgJϡfuf`Ƚ̅Aɀ}ضEOБ.8 z{%:lJn$,'΍nœfvyp!wRD)]IJs^ǮvDDdo} xC #?䌓0NGf=}:]ދ Mx"*W M:b՘sϷcX:[3ODL2 SAƵnΖFQ|&m}9pmUHo&@iڜ]ˁv\Wi8s77%O^ß<5].d7O9&X<)ّyT_3 fWpi8(>NƟ<<^9ϵb: xܒkiWAЇUBѨ͐1),15R! !㍣eOsIr'] #/x<O qo} _t"*{`>lݾ /:dAt*\?~-\Yj^w;"[9{,FFH@Rjvˊ;;[`_W1ዕIcSg;'I:.ɐ<~w$n>o?՚ 7NI!E_ x6 /fS}MAˁ#NI6HV5@U:mNbٍ^i;m D5v)CƤR05BvaM , |^T:.,,ˇc!5PG~'=bȝl?}o}<N3NDTeN g׿Ν98o8.A IDAT Bаح5>klς%9. "H] k]]J])@  SE.+\+PtY4rwq CKx͓_Z+![Lk 'O_(cZ[Uvl:X|6Cru,-pMg'uqUZzS:ΐ1)iSg;Lwu8v~QI|ݸ *ar-dv ,0pH ŝt!wҭp8C~G\f?'H#./A?In{\VٷM_LHc.!.k<ڵk7㗃󶵿޽&Hd;wD&؝]+qgg3:?g-O?CLrBɹ1Iե wIz$߯&E;9 Š(ũN ?Gv{-O E!œ#c);Iojs9`6J k.dWX<ɐ{ {n }n^RsR`x.D7vr̐;Q]gȝtC2ÑpIr'x`>o6`۰1曾an>|xw2w;ٱ~loZ 4ٵ܈NP~]E')m㏱1{p+HNb:oתW<̼xp=wTyd,3q=kJwr BW<%v[s/QSCтBr%sm,)D"7d ]]2s\ضE2Prr'Ez7؉E'dᨌ5ι+xYDDOh(1NG~t :,>}NDsYŏln<.+Z}+_/]ESN|y=ݵS9]<| P~+< ]aX;97-Cr"mdȽy'Q!NG Z76cj:U㼚ۭx=(,,G_C"0P^1NGx<?Gz+c׽iC'd3Wkin v|h!UN*Q<?VQǐ @__Vu_cXn%D"ZGvki:x>gE gKfBlnT5өY."œ@o;X"7Oc1"&%ayDggu_U` C ܉C:ln\ wmB3~O?E]]M4,)6]+ZvTz(q+YN:5;:<}A6fS=s%O'IMt ~dߞ|AF`.v -x8%c=R\mgr%6gPe{){?CT>_o7.|/>$ Ge|hWȐ;h!0NGf=ޭB{7}!~X(ٳJx=Ncdd9~֯ S ].M3ۇ旖>lB9Acv.(#{i]:Nҥۏ7ER$ Qyȶ,Kx8mtw&餝b3mw:@wf.:,ցw 4M:L8p͵wmr}4:eJ5֡yDR!E$J,:$~ E=)n亽ǓsOf0B uhkNU՟s*06666pxL:u;m76 H&.rUX{w^_ok tXSވk*KhauR3>Ոm}uPr2CբIAeBH>#+MkUKUE057j;܇FobGYX҅_,|#|$&@ůǂ/yx~U'`ȝ,cb~b*pvl_U<'b.ݎ{6cs'ӈM!c ohh6?؈-[:Nj ]ڵΒ\d!w+E5vJ7O/E}DLv U%ZZ7Ͷm>Ggr/}ӧicSãӚ8΅g-KTpW=Z%[SYY}>T:iy]u^Wn'D ޖzeA75g U5:-6B;?qj1Ы=L%CG&.?׵t% 3vYC]^`<6aZ׃.흾9]?kpUbOfLMkkOrB[fVoj}<0 fUSJ!wE僚o]#*~͕eȝ˿x*|i7g&E +z!<./FUuLYtkx _y/20 j`(%|v*b4gHfO!p߉Ȓ떻o m sШ9#RMh̬.ͥCG]AsY {ЪrCML-.Ze3T+.ǔN9&]֪nWi2,7tW}>3Sh-a>(ዜuɪ4 iÿg8;P\t5އ^{U|x?^A`Q fos\br'x !^DDDAh(4]WCUfClqv5>&5bBAAsb%->zjݶh1ȾtZAwi/db[f Rmn᫺Nsw/m}r76U!v&8 8-ãx^~_w]e4""^/U3NVĐ;Y/bǯ|c'ljo"Pe/X WV`}v'"r : -<F 0b-ˆk9I`nh4Ax= M+AK. &xT㱄aa46[-z7v]h][$t][%y;}Ns`Ƚ8=ݒjLvg>ӴA־O\J6/ C5׎s4UQ9;VjGQSu"vx {!l^θ1Ke|<.HQXK; Vj6T.ӳYfջƓs,V􉈨yDp5a]fK)k] q妥x]C#A֓kjՄvd?7A&ԑ]hU FcG',,\Ɠv4rq8'Lf4w_~hD6}XJ)VoZ;30̐{赇I/_sw_x[;;QUIϦ /Ye!E ;YCdYŎ~j1XJD"%p5 XAK|rWn[unZώDD@{}X"ysc+Wv>`0Mxl[~|pܛ]DڅV MQ#VVur^_Kw~=lSm^OK z6J' b~u/2 Niv5b*5sl oc2Ax!ʳ6,R Wg0dBK= W4']JN1nZɩsܕ|Iȡc?hpc6=wۏg dUٶfQ B:o u&B}hpLDint崡o.Y/1—6/&bW$T0:"F&ۺ l#2N(&$wrnZUM&tC Y.ڼ!v}=%M#2CkU=*+BmGux+W򕫘^kxD 4al Y s77>f)X͆F== Ruv;~fuL݆m}c{rUK-Ͱ@K0]E4З_x >0 Nκy?۷X  y,_7kc1+a5g}x "R* msGgx"[p:t-4NWխt.\g/bڪ?#p50hnQ 5x~m!w ,Ko& 8춼 d2[c+KKuڲQR gM^zc /CluhXОP Ӗn72>;_6z?؅s-r95yv%""ÊbxW2u܉)J(vSu.Ⴧω0 X?Geg(XӳieBk͋x!QO!s}~=,Y*D(6^; /׮}k_|WqU\zVn'}[39,,\VWXד771ldkojCofҕ\EUepnZi龮^C#Al2H!"Hf=] 'SӋP-]&Gpq,’nb{ܚiTM8ҳi6#""C:w]܉cȝhiu.i̯pQ؅o%CGB RWUfH'疻F@<9O#{*Npw갱NcЄ B m<䬳em IDAT,\+_k_ptOK"9v0wscq`hD^`ǨiS+ζSA6!Hݝ+MTmˡCt_Z/În?FDSFd !+ou_)F4(Xjz&x`й =I]9аQnbiz7ݍ*x:8:ʦUDDd8?2%+:u ()Q_0ޗ_x?۷OT%ؔ2\ v 7w1$Jg.\YY:Mw_w-wbCs.w.>3\}>{ AGbNĪ;;WFЪȬ]ܻ%#~W u5HY(ӧVkWKh{\F+-un`&ں\C:x^{&ʼnSg'-ɵˡaEڅ\j=@w;题uXy% ^f_h!Ɛ; %+Qx>9|<.N<Z/:=Ej6{cVRYLRԍ})z骳l]k_ vgw}49ߣfҫ7]vv Hsū3LwpnÎb[&xү kYWrH[]ˉƎ|B#BĀLvD:W[Nd4?/{6qĩKF5KT4ܾo3۹]ZTCRB+v5a * >uhӍKɂ> yGhI7HDDd(o9x,nZQr։Vcȝ /Y'"dE vS0^1;4\g25qpr*(;"e.c,vsQu_ԉ!܁FN;3_@z~2H] ^)v`Jux)%ըU廬%ZcGc Mz-( -ݒ擡YSjҴɠZ6Ω{閰oS ]ڗKavvh>mBk+0|%n;qk!wQ9C7GyG<kj.DĐ;-(J]Q5}s4oGmIV!'wޣRHL+2cie.cFB-骇n׭ eCݶޖx0"=¨pW0-@WZ9Yl۬ Ոc2lAo VUsêcR-X!EmGy=O趮PB6RhdPHhRS ys!oI3,d%91\v݆6uy|킇7DNA%ʐ;/",)~. Q pCY'5܉nCQEc?Za/"~o/'CE""`v=lJj/+ۭDpQZu68lrg3ͰmngI{i2Ő]MNSY=%tkM7:5m!v9AO7e,_&YF+-g>f|;^Kkh~<@]{cn>]p77N!rXB[~ǵԡnDĐZgB j_i܈65hw5{R]VCd9yոo]u9vy=o*Qt}8":Oډ_:r˺ysniMavdPPg݆6RgS$4V26A{d|z7uѢU{2'*&W^ҐŝHCD*%|L;eu.Ⴧω'"2޾ @}߹nNd~KaLp(4rgeCpOH %]ӳs|%I> oLv㱄9 4r8]3֬ Z߷ 4UOmк+y.Nh>(u[Z;ީ==1{=ٗ:Qa'mE僚o]/pUf)Th.$QػRUur'f7?Xao=w<>:E'Ӹg ׮CMMrvw܁\Gv""p5:c25ٌkm) k&SVAZr(4o Ժ&tZ6LBjh8":}BYa`{-ݒjG5[-!!us?3ỹ;5F4/VtiDߚ;K-0<ʐ;wSW3q)uZRO _ۡ1=ݒrrպ'SӋǍqDq1]=>q)b[/٣ J$ogrjz u8$"2Rtr%6 Q`'.j@;YՂM \w&b0-h,akպB[ SUXemͮFHv@jRR0;iw sEG NþQYc1>xJCޯ(ዜy0 ATo(xQ|;Os։ T?`.\eq j)n]}=Dd{ڀ<{$. +gۈܮFU3Kt8A8l*p8hz0xR3H5uԗ:}m,$CShА{25 vS{KU "Poj}hD|dڍr_ozr]ZDF.xtW.|@k0©Hͯ _cpwgDDT^/Ӕ%`?gpLGAQEc?Za*.xODd~IȮdlpDPgE}}[m=jj`QVChixbcOzK)."DFB+>97:~¼nWS Tj,r:}yC@n0BF?81#2صSi歓ͮF|jk~gc{ꦖLvtj).r=/nSrV{G3'&ftd _`nOL.GT" W bw""*|VnE DE`ȝH#x݇ˉ'"2RQig]g-nwԲ DDZTySRd pn4@O>Njwh,Qpwm#:}PDSmCVšVv5vd塣7]k*5_:y/Lq4?Ӽ^ՍC:ܓXvݶhXNdVS98Q|ib+"wPĥ$S m;ƃ;b;""lg!(cy0N6@pw8DD߇9]YIMhX ;lNDTW=W0l1zNfsHͣETAyMˡ_O#!P%"שnC&pE tK UCgodpo=)JTu<|nC#OXjHލ jԩgڍQD|+kvnS,0 G m/ D N mEo!"{Qcq+ :Qr'ZE Ŏ| }2" s64~ͱ4 KTBKv?DD(Oڵ/L9>oK}I_ 6î:{- cmדt!aӧdC M5t~8v>Ҵ< eaI7 sEzn~C{`xPkv""2਌^yJC>(ዜy1NvDˢt/EoY'" 4SY R"=59 u5hnp`rzޔܥd>9 V J tT;Gc VP4JZN` L&km۬GdM!wر|骐C~z]0Nt6Aű( Kt7 iOL.vj*zs9.uI ‹Vn :0NF(۷Owd" wu;4CDz]W:4:!"*W= ^jmc:o11l!o#jZUCXBtК74dzk$`[fMR3t^c;I#r9;izIQR35m"-uOfpyKI&*jwm:}hZ!-ۉH5sú_70q)EP+C[/QS$""Rx1YiȻ%<ř'Z܉VNDT!Άt|^FUىȄ9^ - @vj3m4G1zvR%ѧZ S So(FOr?30|ېI/ډ,ҳi>xJC~OQ¿CD:P(vp 8|9DD۷U]Ωt%*B-MusԲDD;jQg|u 6-]Î6'o' i]%QSD4BK'!MZ殚<^uɹav] '0|+ ?!w"}= hW}{9DDPMFciH:Y""YMN;Mv:i/ui WRCFLJ jz&upy34"c[fMR#3xnI5ɹaöUl۬'p_ö83R3ղ IDAT]Mǿ0v5,i)n{2QU*Q8Dr'n!PGu b\}RR*ߡGeuř'CD:S(vp K玕s?Q}}> Q`=594DDU0]]u}<6-DY%L CM-e%̐ vJ䩏4]aaIh25XXr(؄j{8;4?owܯ-ՎᨾO2l.̮D wNoOd궏Y KbbKTE! ~T"?˿ =7pz}p-?.\Gqq,ʂXo@;7NDDt{o9,[i%)gH 3,_t"2%zgXXv܉PsT!w4k WXCF&6>A&%ԫ۫N9h<+D4׷ۯdM _/܎Yn#[@xlXBhHs/E(Ј{Ӈm}KzC25}=ՋF' a\DDtRm wS LE(07aQʠor!""*'4ycȝ %|Q;U|`>l^N>Qt',,YZlYgCMv틪(4亲ac vnZo ޴VClkҭBKύR˩[R ȚBm 7nJ0m}os9"K]ls@V"M@Ea4.x&B}%K/0NIGT" 2w:RP;Qg8> {8Dǐ;Q(Jx(v< ÛGkxODTB޻?5#{*RYd:{-jj`!LΆt't;W IP yGc K'Uת~]Nj;K&.uTA%{}OO }pu hVCvډHOnWk]1 t3viÂ}wuak]BDDdB<ҐS1ډZUOj)ף.rwK7TpT[G-N!#2a%(vw0޹t/~O8DD%R#8>(hy:{-@Dd2vzԮת~,. h y|CBד۴ݮ&4z%Ր֍^F;SaF}ˁ6?_ {R$"إrzlp(DDDU}V~E _CDS\Vߟx3ODT"~IBPuBE!w""3r05[ w5oPDSȚJ^'LnhLM纴"%TO3('݆6Ro1\9v4u?"w5 *0{S;_лء][*0g!ZQrʏ!w V7GDT[JKZM n,v=;fnCI@T6 GPi;6d __Gdj:}yCәc ·z&xTTjF%C5>d{&E4: urE DDՠ]h=/^iQ/`RE)#k9X""" b8|ՆGQS}`ȝ/i7:q>xy""9 ^cq]f%"""g\EURf V3-GPĴ6U54MrҖCS=7tK8ټ93n=8~T dpMMwjE0O,svx%"s*{(COL.كJ+/In [݇tJC~OQ9DÐ;Q)JxJ;v8j1u#"ҙK{|240V\W0OKQY1o]}89ѭ35/+aoo۬r5ݮ&y=aAvs_ GcH.Ddez?T,nG ϰ(e۷uE.MDDD&o3C""?W&"""SV}`vzX QcDBSոM՘7=|ö#."cCd ƘSgC;~чףuͅGT"8wuK, R<Ⴧ6%)gr'2o|8|9DD:Jx2͐;fqx[Mz(C&xgZ0m*5djZ d4ŖnI4usr"WM2,d%91Tѿ؝]}hxE!"""M݇Nϙ'<܉ @QEcʘ:z x}\DD:(TM&"""SuZg/W8zCf^mNFC7_-&"T֯gzK>Ր)v5xǘ-tj"孷_(z%|rn8c |n l*n%aDc Cv;KOZ$""unWfbGY\rw(ϳ.۷N'BDDD;>̥Vr CD(OEZe̯*0 頷}Oiܳ)_Wu5|ZՎ[N%+M^p`<~n2,._/Tn_LvAsWj{UC#aGO_mΐC\] CEt:I}1n@.*{J/vhlz[KBoBDDD%?ڰ(JxOd S:2{aK?Uri܉Tu6Lfz &Ŧu;> ^%.@ELY Dt۔!uTk󙬩j&xj|*5YS{%0ᙁJrui@E BlzR'euU|$-0<Y_r1U_wK (DDDTV4HnN "bKp +#2T&o3W^Ń;Ǣ>ݏ ӻC(Q9jQSs]ju;$tTjLL^7s}I8~u5wmh_c0ۈmV Ț =>97qg> [Kv9G98@{rv""RmOL.ڗgP*/Iߝ K]](O{ <(O9DÐ;q="U|`>y"5wI%SMCx:ە+WY"" ia:ڿ$׍ k@n(ݫKᰣf'tݔ䮝xǞصӔ?.`pDƶͪ۲Q{25 /vj7BոءRo艈 s*%=,c]#ű8T@m)\ iv& L)kdӝ6t[ܙ7t&d`gvlʏ>!wѱL8|׼YČrj?z?ъeTKW, ;\IX}6gӆ*iShӻ l~\к&Jy]x /hGnyL8D{ʋt'$neZPVrٖi7lgB<ݓW[ OBj~Npׅ2iܫS[`"SD[; ݹ濥gjQlf-DK;p L$6썦e{#dӌn1 ZIay3je}-2&1PkKMD>FUڵ>lʏ{!䎜7v<.*PWo~pR)mȑ!PcM^ׅru/.^,M7i#z?z,\Bizȴr,ϥj>ӹZL]Cj5ϨCN{v`o<vڰ7~V?B@$wNp8+5m#-%.%M|0^՛뱆m&Jql&伡L8<+9:-O/;݄m_L3<'M7SwN>wOڣ.TҡХ˦k4f(`TW X{=J ]4^hljX=8^b r IDAT Nvsx!w Kf 5Jz)cnD뉝{>~u;xG7tL$&T;tu *92&WA>? YQB4¬msw%Ǘ"`L>~2swުj?Jt]hyJIE̘L۳!.}S܏lUO_!B/N:sT[I0t5Z忪h/`ݿd<ԞId iWӌf@Ȳ'YIk%-vʀ_ܷ_+WDԸA(:) [3ީۧwoՄC)KE@ g?A_P^&Еy*)Ιx7.%q:ݪJS -OI[}-6nFu&ޭ޾si?e%xߌ#5}/Nv,,^(0UXL j.V3v1~ nG^Ŗv~^;:tiiFw@ dӌo}Nw[%NH< ^?mC>lʏ{,!wȇ_8pռ<7%);ڎ\?t}6&g]wӚ/o"Ҁi/}Q7udS;v(,tiAYIʿoп= Pj!hix\ġobB2o%SԞwey+?'JWC99o(9J9k8Iڐ(!xFa'[upR/)CvP*PwaFB헶vĻm7w@2Wv_ N۹b35^xnZosm@"d1ӌ6 IpҸ76[>2he*~U&Yqtݩ .d# g &GUVRD͑{~C#Ywފs89~9l%Q=e[XXmۺDZWO۫iylj]PVw/Z?=7Ԅj_Pm88AkKDN'}iF{@"d9ӌ0 ZI_qʘ 5no#[2dOx=?ݗ5W r!䎜6eJݮ rܞsmSg{܏&viKJjg)o5:e '[? : ϓv .f}Ը6>a#ʜ2֛gMv5ᐾO:򛽗^N fݿ;+K<59 J =q/м<Ϫ6 F̘6 ~.{'#Ùu5Qxj´ƛhBKiv36jpr"Enj!?\q KyzZ# OV~܁`ӆ!iݸA!!_knzb_MvpHb]?HNhr~83]:?u)/Rg`JbCHyY3p@B8M3B@n(]' ^xnvZVw[Ddp(-=eHukl;)u{]P|6 J b2AR"U)wKJm(*,. -?mt2bېu:GgZ*PwǂW{+Ӿ7/m1۵Wy>f,vg7QC{p<ܴ){x~@ ӌ1 VIle*. 3ޙ&Gt6m8S=jўǵ~ }ʊ /䞦֜w*o\6lwNn6xw:=/j ]'MB[*P`q hk (L>?vLiiϢ^vwpMzq#7f9.\`c#N?Ўv=3-obk.h`S,٣DL8L_CѬ9Ș[oRa6ls!l6In d~+~uĻǃ{m1۵'{28nG|"b3?T`Ir(J $S^7Zv[hrrFI:i<[XY*-!SfTgLn-ݪTVL!0!wpueOUR+ g]lY,0eO'#g:>;RČ] ?L/j hi^5%-0q{}1܁d#*iƽgN`MP`"&GtGK[6γ3sUViJ*14Bf~|—r7{~L 3~Nl yTEYmm*RX\͆/~aNFr6>D;;gs`sdC;- &"+ָ!Wv}Q܁f#*iZYV֯R۝71j?BKUyh=φ Ps puLOVl^MGO_$BvbY@6SG;'/̨h(`7WȘH[lьLV_§ ՆC\)st̉Cb^v94[ ÷VRI~tOko>aeXr/v5/_ѱEl L`@՞R&dn~J.'?پ.JG&P;Zl6wNdedCx6v1оv@\~&ޭV3ƤvdRkKD{ġ4;@n#8FI:i7葭?f_K[Ƚo bkB OM=92xxþ%@mgCQVYI!R?:ES9CݖC:}}x8y1n^`"SDLz5ZAnmձ#G/{"[`@5a<^/i֐g>8BfaJqu^;VMV֯R۝7{t,E3s5tk ߲8ޣG+UY\^WoBrv "/olѡϒs~P[>=ҭSf}u6yv@՞2a2!W%~B6t]h44>j1cia *, nɖphZ!uw2%R&o{ӌ`@puҀ =hY}zmi '2=E*uԟH~} OJiNj4PrtL,a2!SNq;݄mh:!'3tix/l|  Ŷvmx89inkKZj!&9!1P'O7Apӌ1 VI4HD{ޭwo`pHGΔ˲{>1i^y&Gthtw)%FtoPeEL8DEY%;osTyL[+6SԂ˶'Gtd$m7M}AYM|A_:Kd-@jސgM=;0bNg:B$uuitYsKV_7K˯q}k 3?~Vѱ!w:?ysUmH>ERSzH[L/. LNӉ'Cvjպz=`Tfz^;:t؉C4Og!8FI:mЏmުO>!wwkrc-]~USYkցFwf$7}xe Zi~<&پA{<bm!'[5dKğ-6xiiuN'Oy7Cp ӌ1 VIBS~xA6xjDR~OoI]osM?ˇZe>d栎Ωza\'{{Yq[# I#JUTGgeoN{ G313U0h)ZUJV[Vm8$0ډ`;q[ '}iF{4[ ÷VRI~r]V֯bp;n~)?n"iYE*uԟy[|Ez#c3'a6wOEQZ{&MkM]Z^eoNӉ'B|v/(+X\2hHxxCsfݿdq咎x#LL\kKD{y։Cx C4G ÷Uf'{0P=ڰMnݲV~ՔT{*+ve|\5:ҭx)BKrtQ96 t}{y:{Sz̎x oS.X񓭗Shi[QB HZڭGK;pe =yS4H]g-[+)q77ӞwkmrO7,f\/S-S^4kl-=KtT+os++v<~&N(ή -2nP{`O҅vޮ_=xiFg#q@ʜ4d\oXxZaxKguSfT~&_P{Oފb]L䨊u/R)Fbqu:ǣ{e%[I"xC{-FK{ mA~Qg< NFӌ r I2g Ԯ_=zMV--!wI:mY]n jρJf=E*uԟH~1YaI"9ʮm:݄m,!e% m틫U^kS@zLwĻ=hiոA#n!wQIeN^՗괲~;#ݺeͭiY".Z26OEV߰X/~Kj:fUW쀒#3E[ V_ʙx ncUJ4HՌVy> jr%@n=ףpv6i3:uM3.0;1'{0c?v|Mj!F")?mT/TsԿ4]}b z>|]ҜI%G>TLyys!eElsNDj4vo?Ny[BLz5AՆC6Hq{Sh7.EY+鴤2' 5ўwkο[_nyZmu$^Tr׼|aqγ>өu NKr6iH)'OE\%\17?O u6HOx#ޭ*o%nS J{]{5xwajY1l z/6w9+^NOiiGu;8|Ҝ .0 D>'џOՄCl Jۛ%o OpE}| IDAT .L{'uԞǕJ.??W^U}D 1Cht-Υo _c -g@S:70yL "mPՙxz1)FK;^;JJL3z]L/o6nףO>iӻgrRKu- g'՟H~RyݼLe.&+Gy+Uf} W$FmpW޷BLb0[v 7Dȃk0pft !3o#;m_[GMq ݳ[i{l6wIXKN\‚|-]T|9ĂBU;Ź9pBoTֱ8ZڭGK; Z#'iFi2>iF{ ÷Q6 ZF(bV֯^MhpWW1;0ѱV+/oYna[CQ?o}(!x @zG`P5j!&p]OtjO,Eef 5JzicvrO i 'jn"|Јb}t,77?O+-RWV K}hRČnPG%y^&p7֋;u[L3z]r֋ I7K ;mh6. Q<^nYs+mc:ѣꅥrv YYIF4]yzvĻ % 푶-V&'tj4;BjL3ku[#ՓzkwKkQՇ}L4)ΟXW.pbB y?W,^?s]ĻbW>hi-ҸA'i-;tr0-=b6;mxU5V1jBjn:}}]J|&_P$t,67?O /nOy:{Sz̎x n=ZԞwwY`iF{;i3vw=Sm+e״;9:OtL!~v@CQy* R%nO$-;OECg,.zxݿ$ X&}Y.0]ZIG$9iЃOcQ`SL5*+P$Aw^ J|%)wKJm(*,2<oh7c[Vm8$pNWRKU%ZBK_cVČr`>pr Zd wr}+wA;Y1 I%9mEnw>N Hw{ۥ5/;dsgd38}˺yinұn%}ԸZAtnswuf8S=)GR߿,(@KnvZX)1ЦWgӉtiF!wW0|;$=ıwo`px\ٰ1mw;j&7Ծ7N^yj zꥦY߿&X^Ѩ6R>>,*z/6Gb[ȿd<C:ftle \-nv>, 051|(k~.#cS%C jr6s#Ym\Q][yvP׬Q}URBY\Db 푶-ɖv0(w`;/<pphrp ww8"[v8B%il I jۥ̓Ov)TMɑ15)ޤ,. gn=Zd֖6=OM3Np%hrpL3z0|? }0cцml9M}ٴ=[t]_Q+i}i߶?ԩܑV4@v8r2{׺.-|+9:qBKhi y"H@*raⴱ77ӞwkrZۯD"-OC-Zw2[agܑvs<-=pBT\8=nSJ?hiQM8DK;ҸAN4R;T(鈤2 |3Ϫvxeb߽Aδ=Ʃi5flAwi;ˇ"4e[&T+0pv۟ߝX@@Zfa~ NƝ,׫o7g1|(kgE35tkhsG'ʛ3Gjˌhﳂy-3x H"fv y@0@ \FkKDN'OFӌÜ .0 0|oHcl9;ˮՇUb{3_ۥV|6 2[Q 9Nǂ-]VyY) xDK3FK.mi, PӔHh}6hMB;t[+鴤2 5Ѯ'vei<~/8EhB_\yJ~8u7/SY1acdV$t ]+T>'K:!w&[Lii=N=?_ڦ dR^W-<&,bu:f}UϲDo [TQ8{4k 2;1 ߵ9qU< @NуXkZ:+msK+=5/_՞2a2"n@O;J~뮹J]wB 9hx89ni#ޥA-`b[; 2;qyӌd!weM~jrVg<^ڿwԪkl;?.jlX5/_ZD͋MvgqpʏoS`q5 9#=SG[LJ뉝zq~'OWM3;@rq/o8"[5l?`#Y/<_δ?H׬ ߲&G?} J.y*~[oRa -֣̓-?ql5vL" ÷@I8~ G]f3YDEZw2KyvP{WrtlF V [P\r^~bf`s[v.5F% w9u_[G g%g÷2&kԩ{5exK,oEJ.&,A*O7XHH[v  CmA P $у5qI4 2;oN^}l9+k.BKҥMER_M[,{~Og,=@@%@0(0@kޠ)XgV R{CW:G?U?ЌyvP{Wrt3o)/5+*gVza\s ءz)+,"ddK{GK-FK;_n4 B ÷@iIeNۭ]/>@B_δ?k^֯Y!OEcN鵷O/WUa[yysd\@s Xݿ~j]5[vp֖ya &Nn6h/UaJׄjh66~e\u]_E<92xGxX2S9LX,7um7x[vpLTG D-o:;׭=F^xn~y,Oy֯YA[:p\Lo^lcѬ9_QnX n=ף0xvp6Do:)Gӌ>N`5Bl0|G$:ZYR;pJ.y*l f` fTg;ǤdXMcvZ̳NM3 }^IeNۭ genKk˘x ,(.Te9Al ?U^Vʢ gj5cLJMѿMҵe7Bl0|k%smFk#>D"#WuA&ފb]L@k2ƒvx\.ۦd#vAo:/׭#[F^;~{<,{~vhgsM7֛nd8-֣p 8y~`vBo7$:{ֲ z{<˛ꅥre2btu,DKjB XeRW$ӿM3JP r`KVA2? r֦{ot AwQ_> PpRs=@{0mMҵe7Bl0|%Ʃ/rոq@Bl=&AwʸS9LX=ޯ~SCmy~X(Yc"~&ޥ2%M}%ӌa7#Bl0|OIScl9%G|;E}?~<|sY$EKhiXɊR6iFw!wfސvܲV=Ѓl9ˊ˿t| kM3n`ws.\, {Jҷ:"[vVb7@βp"_;0KUQVD &[?(Rnx89ni#ޥAUkKD< 'OL3 r5 ÷@N ;g3Y~jD2݁+(VDGo)o7)pE.miwI0Z 1ЦWgiFײd Baxн̩sp˚[C,>\(ut䩠 `v qM1̢6ZڭGK; WYqUqitiF{ !wY0|%s~knc3YV]&5/_׬ Awx~M %?< >-/ojv=S/iiFdBa-''?`3YV}u o)Aw;FaH[Ls==Ênn&^;~Nft@! k$^֮ݿQrUAwI.B`z&K᧏3 8TO_ņH[v \)8oM3 r yIG$9uv| Y[__"@ Uy+Yhi-|\b MݯxMҵeGFd5𭕴sp˚[C4+5J^dY N?䱿~j]Z"9vtS'fӌa7Vs4 (^UM8kncCYYtonV﹤_ f ~v@i{tX4' ZڭWiN%iwَ&w90|G$<;ٻQnoK_5&6y^\TwMUāF` oߓ{1V͛C@93)zT?XfO˕-m ,`5vUHRRyft暷 eCQFiq X}:~2|5^%W> IDATvQ/٩扴Q()x\'OJ Mi*WP[]TP(ch44'Y%w90|$}Zּ/Lgx@#D@P_w]הhjOo{ Gbzyͧ tmK|Hn,`?yPҌ)F7G{ݬ;b$=1s= e2swL)p rI@rnPw>^3n% (qcJ;x:ޞ11:V\A@1 :Io{g-72v6~}h͚ZǁFrSUJ@#1:``TuMy AzHW}7k7:bLi<ףں:7604ZY[Z6} XjK(9᫐[Ҹ|a˿T}c @;֮g,XSܙ7QTFrhtK6(do>+Lu=*0VClΔ̩ot/K(Ynjk(I,9˥31 @^trirr0p 4SNHM?ڴ?)ۚ<w5Yl'{Ey~|B$U~S3`vX=z?%]k;e j~-k^.W ehMT_WF^`Әer"HL?}cEO'm%B=|w&O`bmTݟQ;LCSEcVfE @.I}Zϙ#f\M?=nd"/1=.&56ίIv־tXV\G@3[ |Uo_W:?@N:֮g,U8 km~8UsבnyJ(GV >O_XOwl5Ō1I/U'k?݆^(3ܱe|[l dEuR 9˥7׼-W X~7@#`RuKe.aW鱗6}oVw>Yj'I/;END R1EFLi X;4z4Y%wy0|[%e>gPkYrrF|tj(*#*)T6(P&JTYVn2=j~Ӥo?n,#k1=@~ ȼܥX̊/(+᫐[R^ӽc -zf @˶ 2n07ߐeݒ9˥7׼ʹ,Y!W kjF!m+\*s9`^^S}Ӗ|s TQVBvjo>Ovw4#ҞYLiW+Wof`+@ Bҗ9Z_˚#K ȼ9AF׭{M ˳}O@enyf$ l*wRv`?.}YaE(iƔv)kY} M31%w80|Jj.^j^d.ܒڷgoZtꚊ?%2cʸ ~.P]ZOooT[ϙ.InCUNi}O@eOҷɇTY&<ǔcJ;-[ &HZI%sNK+xME c2q):OSsg GQӆ֘ mE?#v9T^Z,GQ!aɦTQZr'WjH?Z}>Ǎ%<ÔcJ;CmzvRC|U4 dU@%w8aI8sy9_xȈL܇tkm2^7S}]5 J%.\8 mS݇PQVB={iCҷ95 71=<^jT _ ,3ԢORp(fUY" ÷X{LMϾ3Z{i CZ:–g|MfMm026(UKTX`#`Ц?mo]'{ l*wrJ)ٓm0VC!g naJ{7L:[jzCznRjo' ii;| 4?sc -zf @Zln٨_x%pi_qKhVSTh$>*J*)b"4 #أIzjy\5կJf/SUb;0ZG;͊2"ĄGҞLiO E @ p!J- W!i|gw(m;~}^n}Ⱦcڰ:H%EI?9]Ԍ/]UI? ҞyLiffmiDoM30(w0 ߵvK*,K&HCmzvRCs!'`Ȏ@j K*,RGGo|m<ޣ^Jvy){xk5iҷs7-)ǔv2quoj44'.;\aI8sp\zyj, I y>$? t292H=@ BAV㧴5m{Wx-/uh'}kPU GbZƤoF0g^?QdίI Li9-Wn% %w [,=ףW__%WE )B!=d* YhMT_WRf]N]ŎBJi'z\DXYnUj]U9#>}IO^37"hbBy)t4AuB;S@>ս-li|7Jp ÷Z|ϡײ$K\nߑ%> Ï(L5^fM"dx^@9/ӑc=^@k ?muuN^`SUS"l8ȗao>n{z 7 OLh?|D_ㄒfLiH'$ 鿙fUbK#`ݒzw̜E,aA*ozC?L(胭L{}2q Ȑ]»P6BAVǿёo= hö3Sޭ/}|ͷFH\rP?9ٿ#$9JWcD &pqm;a*$})<߳{l=B+e~╴/ᶵmKetj:y,<Cw&êNձK^ĪS.f5/9}^ Xe./bVoݯyG`J{1`ex\Ȉ.Q|龺JfD;a&KwziMy'ACmZi۟^3oH[ Ï\n;@ l*,,PP(*h>=aQOuURҒ"JxO?}oƆ| Li<%]Δv@*C3Ft_G8끁EmT\\|g" e3x Ҳ nIM3%QW0| $EҲɗ.[7GW8J]pІm:e.4Nk*Y@(qe^MEį IP_Nt_]_j_&J];mˆlΔ]%EyF5/z:lQwy;tugP߯v]j"XLXz_8QfOWQ= (.NKU`+}uoiv %wB{UҢ|r| ,^e_*kQmurǡ֬~:X@+qv31Sk*u [cq=Y v*q:UTT$G);/^9A$xEа+R\O)Gq)CmzvҴ]6b+Ca*$4.߳y9EwK͚W}]e@k ?ܱq~8d86JyI*Td/QϸHLohl@,ڮG5`I]T{iIJvJr _$}K|H͍)Ŕvo+qE#IR,ӱAYQ.\..'dPoH̛O=4%wJ,i|▩Ƣptop;a[%K5^fMçTX`;.V .{h,1=6h,{`{Öz$c\%EgZ#أKvonnǵף@Ne*q:`Qސ[T C:,iiN\9J-C9CYB$7Ymަ]}7^?F蓣 /;甊,?T`hsz NHT}mۼKkBo/ !ۜ~͚qYǙB`J{7LRI Li,OF#:}z:fSLNKe2l `-Y}{-iiv\J$[,IB.=&ZY[Z6e_u5kj]dkQmk Xr^FL"lQr /g%”7`P=lk h|=T^fu*)^^SIf1V͛csfBu<h Mi*3-+җ(%/(A!)**+TZV&N  #z ÷Z|ziMy'AylsFj+iٗҩwMʺ{ڰ]K>ˡYM~^7 p]ar rf]F mˤnQuvhU=҆os7k7F"QGҞ :u8NWT]&F vvnnٟ$$ݡv=diZ%]K;aHz$Z_˚St@:֟5կ1ݛ},|ע|.7Nk*ӶOm*JUQV"mS3QnPaRU`#LiπSz .S<W/":6T^^!I +uv}%o[eUr3 I y)'t+1}7Q@iVZI{۵rE}g, zCZ9-19[pRΜ]j[kSݣmsD{ێ/|Byn=55.-W2ǿщ>X>$%WVDb;Sӏ)0׭qb1KKHDx4>٭*u5U*`;w܇[LRIb[-i>IHw̜E,! G IDAT p]Suk̉yk6Lu$AѾc/!S%kMv_A`ҷg)ǔvhDO>00h4JH@)(g;`>޴Yc-wz}Xf'u ^4 CR0|Jj$ ܇cs?Iv9]2Ar[rhM^\3أmG,2դspCe̕mxk5iҷsw WgҤk )hTb: vUWW]tw%u;RAҬ\Ѭ--"m , H-JE/%3Ok; !Λ`g Jmަ]5^y_OvZ'dɢ g',u25]6tUR}#1-~ecҷtS*LiϠZ^{_ /C \fSLe NRN8ѩeeeokqP4麪wh44'R;a&+1ѝ3tA9`;k|?U_WMJLݰ=+:{vLA=Ζri9n$n~ї+͔8]ᔣ0?ϽAņLk\D+_x\HD2;\(St9 -DBk)@zPr42 IoD O@ )O}h͚ZGDkWڶHV^9;XV\ dH߯EK\B7בּ ˡYMU)mTZ:`E  MaBG"qRvU.f#([ ҃;a^4;S/d5nˊSO@Li"}IgK}D=<_ͦʪ*UTVn)쒥 \=lC20|%'4e*uevnۡ_a/ܙ7S/e_1m찢 5qjIz/$X_&OUJSW} U~fJ;l4|{<W4(J]]M x4/%wUH*4((ǟH;Ӕc2Eր>ѬnCS&Ѥj<b{MmS>4O;=S/a EI}k_('4ˊD"Ft{6St1dPoH̛OM3 (@ wKG-Soӳ/ ,5zR53ma_amuX{L)G.Cwoή-26=«< if}}ҩYS2zUˡr lIc/m~jKuu}HxIÒ&Sp̡fْ>$#O,$Vh֖M)ǜi4 ?]Ҷ=Gԍ9y*0UD" BF"t:#HB]f5l,'gn%&& J`[ -Hxꙧ5}XPg0G-H>n~4l:扬JLj$k!LM<`/SdEvͦʪ*R(_L3 (Eo$@,վ={S}ˡ$GQa'цmv<^p^^)ݽQҾc } Uؐ}3JTZRb .dcoZcGeD)R/)S4 500h4J8`AU|:ï 6jḅbu$^}5kݣ~cδ _SII+׍V}] k4ɹb(ܡv\ެCz _SYS,U~ϧܨQfdj9] t# %K-Yh1:bkgՒD3gh3KHTOq_S9&tPpٺ_SjpIr\ٺ99yghVSTZ6 ۴xIZּ'9) 鳥v2ew0B/a &.J ÷NߐDEw }R]Z8g2Sq 4Hݹ!' Qj莙wl}8-X;].]# +?h$H$xܾ=ZΚ] .TRx2)W 5Lu m;]Lv& ç_J@@~@^~Q?ه;d)*iI$PtyS6t+Іm:ѕ}֦F.%ʅJu1=8ڣή̣=LiLM4dթ5^fM_viP[Z6_S[k*shZwoTOaJUx=96'O8&'o7+ dewrӡv=d¡ai^ N oFHp\zsrBoz#es&Sl/ ^-5ˡ52$J.)O<}杚wrhkݣerknC2yxeҷKHp(h4H$H_DhPȰҲ2yxe ,G6bEa*$mE3j~-k^NBΛ`gҷ[uk̉<'ZEFʞ. Nvߘfe5^ oTSŤ,h`R{GPr֦tԩ6IPoH+W4;,3k?O2ܵ:RrR') +((,XYyEFWWSv KQpeiٍ;]+irH\CmZ)id=fG~| ܲQy1v dqݔޑ:O,ROBZvnۡ+-ER}h55_&6 y9 HxAn~4/Æmv<#{l=Œ`Pm>`]O*{*(VP+=2!x=gJ <]ʞ{@k[HwI4y,V@l5Qpn%&&  oH;fТgp  %^8grVM ̈́h>z cQ+>Wnn٨-Qe &JCwWHkʼn:B2=&u_ߩI H /Zu֤ѪK^%'%P);D[;J I,mn٨_x%T:I:Oa{[ʢV<֮>P;;ڻ%GQ iM]!LiO-ufRSU"5~ s 4ި*j>v㿲8IHD}Bӱ*U]]r Ruu,iVJ ÷Z|8;Vh֖MM)8ѥ  x ސvn߮吷y^r0d{Оf~niM6MeZ{ rysV\dnx_S֓{vLM{[ަg_ y) + /(qB#Rh;ƫ2 Rn9;07$q֏vw6A v&} L`-6vXhhC2;^ OKJUNK2nCݽQuvy"ή_#=<^tԩ< S/XNyTr& hvt /B"}i0 yNFWWriB6bDra*$mHg=Ӛ>N _ܗz*Zp$>O@l=Iɹ\84}˿m̊VnxT^ꐻ!o+S{fGt4A4ݦI x~׏"'3zh}ORO(?֬4Tj BFR\e ~Q QrG(ڹm~ϓݦjj0fG~|@ρI jmԖ)*A>>T^*.R(Z4MjlPmP>`oD26=9R;kF5f# Ef`21@ny0|(Y݁־F^ҷ{̉2nGyK}{evnۡp(Kǵ-KzLה'?`WbM?6$I'B=QgQj:֮˛u0/L6FJl6U{UYUE$ 2.U4 $ m OPt8@sKjߞIݦ^EO!\I'ڰM]a,tc]:AByao{Uwo Lb6JHTpsy5ov v}ߗ$ 斍ՊW\ݒ;M1I_ jou Jҙr[.;O5wļ_?ն@F.;].-zfIO- eF&Z»ҩa=UNdI~xI}H@'>F9~X RIPXPH}0t:ߗn' FEu+1}7Q@~y0| $Eg9].Լ;. _--.3ף9Q_ܗ65US/oOwoT#suڹmS庲A!=7LRm]ݙRE(H;y9Ar"a9Eʪ*U{e@(@y0|%=IE  ܒ,o֦.:5ҡ6IR0Um] sZ$۽D^w^m4EY.w MjlPm?'҂mZY%$Y/yb¡N:p(x42eT}PL ֍і+k~-k^Z_ .Qj j|:}g¡a\GXHȈx9i_ 4vX,p(p8S= 2l6ynjQyE9aoi/J W!i(W13O p]Z_!%Koޤna}9NvtigZ6<i0Tvtvu; H##mn٨7W^_ :u¡(\N`QGRgw΀`P;о=ۺ!'cJ;pPoH}>`;7B Mk*3 =Z׌F60yj44'%w$0|(sMa(秏>XiW}$-k^7wI3'sj]XtRrJ24}_jo' ^'Ojl}:A}gl"a=D6FjHD'Fvr QpVgPrA(`P[}j}'S_BҮG-Wn);zCۺGn߮}{~ 9].MjlҞ޿Rv?\xB˝mzR‰z(MƩ4:dI}B\%.%to??'?:QP|-Fqܶ_okz>l囧onnӆ.N{6m׬]kh`Ow/BSߗ[|/~!>)r?1Z37OǛ4Ow^7DiÃSP z[KAQZxMskӟ#nva\QVb1NEZ5@r;D~UwJw˶v 8~<^;]Be덱i憊r#rO%;?ͭUwFqt)Db)5_䲺ou|1opDɽӓ{ggGRd3~Tw*恸a덱fZA;ї㕣/7Li` >;XU*(\* ڌSht|~fjDH.8"#rkWEnmwFO6k>?gƫQFx1NZhkߌOv{Xb?F* !|zE::No#ÃC148'9}y9N}'ޏ7m<4 s:5kĚkㆭ76Ci,bj5D"7:#p'f`:"wf$"b5.%t-E~9kVg"kVg"1l}9os·O.GDK^olٲ?#l6Oz'"kK8ͮ\)fexp(J14ŏA[7LX,xRYk\p̘_НFUף^%""J;71jΞ >ןܼNo_(dJFggR&NL/bi` +-SAۋgQ URnz_`Y ܯJ iJ%+T*GR n- 3d2Vd2T:+NIjqR ?#?whp(ʥ 7N>67m+/>CWu4"nGLL\cRDXRBwCRX!⌢?p;KNo˝JF2t#"^ /؉5kĚk'nooz>NB[7w0KF~UwDr7BzcԩV|U.}_s1pmq3K\Gş="՗_ipK>6b]N"#E%p*;s&r`΄W&tg88=:`'s)~]"1b2~OՕT*i+1kR .ʏhZcǢP(X2|#qk _U!">&p`DT_,aBwR^‚اGG?y || n}}Ƹd2XDWWWҩHӆh2 .T0WL&s_U!&Op̕ywDw,aBwk1Nn H7LtzzTzeV| 1֙LFW2+2HHG2t;X,xhR*H&`FӺ+9d;-aBwRț#~-;B_НXd$fTՆmB+KHol{6ͤRHvuE*t$'z3(E\6m'[\B>}bW&toob1~XO_ObMno+VKVP.PbC?WŒJ⣛>Dܧd>? ,;.)"ZÄ;hS֡^myVز%'өI&dW2:;f#"/Rbh8WיLF~X9,:;.B~YBQc$f妻n]bK$NcE&]]]JMg1zTTU$n6@OK$W'to}J%Fi󿍿뿎:R c YVT*+ґN#J;Xpb1 c/3pc6"p%#r`ݯm_RdWfbbֱ-sN߽j+kMwW믏믏tsJCL&TdY;0kR9 ()sX*==qhiu>?rX*"w6 ăX!>v{CCcoՐc q݆ v^"t:+2 ''IT*(X,6I@#d2џ &pш93KE _xBq8my߇^{-ӣq쭷[oEʢmX+V믏}}}߰'#-Oj/cXTUK$ѿqcdc, ;")&Ot_н}X ^c#ޛ[oEe31pn6l+V> D*=ҩHF"lwG>׮-B>-;F_нy ܁F&|&ld?11P|,+;J~uB#p{2`xD\a}tww \*,;;N~uB!pZI*Si;,1a;4}}vZC4 1;M@C_н ܁vJ"T*lW%3,JEMzE::=g1^, RnHhpibLr0W'to\w%Hӱ"t$I`^ٳ7j5߯3dߗJ_>\hJF ?,bR9b M*Hĵk}}hPi h("wJ.׿="~l406A./Dk2xONk]W8wn2JQT.u5 ;;;";lxKV;oXka F>-; G@wDw,qyl6:н7 ]|{WWW$I(˦^G8/>U]Ό|qlEHމiR)ժAu&ѿ;44$; I~uBx?V38P.#"b>q!b8\/Fq\QJFg|6XT*rА&&&.wK8wܕfߗJ+2.\dգ/ǃ{.p2; K@_}Kȿ!=NGWW2RгM]ѳZ E<(OӑH$"".P(""ёpb?G4R9gqRsT:::>'XFGG @Y7 ̑44; M~uBWT"Q׍RT$"JEggIjӫJ;7z=ʅw aaљ?vU*pRlg\*ETbزu ac@L&c#,!4<; O~uBSףZRqW#i'f-;uZF}b""B M x$DGGR ߗf/z>i*^7@8=:38}z4V϶}_n]>Q4EOo1}Zw tL6w{Oܺvc,7GbOChdt%DCDG‰ZPT>1tN'.>11E`E\F}=XW*ܹwϜ'O阘z``@3֯7"a3D4 䁯8qC1|DD+ w)}qtiyq~{u`\|Z|DĊ_|t1|$?XT*ED\jqVs1611/^x}ף{*CдRT|tǼ ]!3 D4 RCÆ`V.0h]w/p;ܦcwX g#wL=WG'?:lpc`YLLL֮[]"wZD^oDa` 9ψO~_Y'_-ni9*SeRVuGOo!gL@HVϏ숈'-qeCCg(qXVo;!b򐲻p}zwZ"tWTɓǎER1ֆb]Q.ih9"wZ}_to zN{*jB7^hKВD$N?w_Qc$!/gF@в+JB)PS.g< ܧ'phiB_|ɓ>tIm#Oţ1<;-o*tg++Jg_zK%h}xhжD-  ŞZ6tw p}zC@;ք3s>tl/48`i  qs>?r3;mO>3C_ph}>,A>3L@@g\*T^y,g< ܧ'p`}fʥRy\3GG?b :MGr߱՝Bĭnop\ͅJ+i) =!'pp;|ԉwL=*H<ǛΊH$"O>cw##O?>0"^mKg.*DpSO$o=ts? g.> IDAT;"H$c! _71qyd:  ŞMq{S鴋4}}FP޹+N?a_7\f@>sCCq=&? /H5@yb]Q.y8f<03B+J{x };\,]=@ySg_}f0K,LzUKo]ٕ۟نMB}옋4 ;hJسsW  cf0E&zKc-ƘBٹ+J㥆Mݫ#G"1܁F3<8^ `!IkLoxh D"ݫ]` ܁F3<8wOcf@ɯ~++Eĝ^&<6,meuXT*s#Lhy*!f`>?r`a` g.n}o8qT]O ˨'֮[vaKqp^0 ``r;";OvFv$W[bXtAw=y}E&Q./>ѽj RT].2ٌ1Q/Şbxh3SxDȄi` <'OSvg2sz\ 8uu+Vg2^{mh(ÃC}q cL!"nG^2,;,Y&v6,T*q-oWL3"Ht$"N/~zDDT8wn"zT+jh|7[>hd}9(JƘ;,;,\x."|s2lոa~[ʥrxذ{%z+ {i^{ODJTըOL8h8v{W+~.,"#Oţ1 ` ` gOJܺ-z=gQ,%xORt:DdE=}jT*Jj5(eQl?FGGG=2٬ 2Lہķ!fhDlG^7, ;,1}q4T*QTٳs93d2"I٩ؠOc_JO~/Jw`IH{뭦S1uѕJ (HDXײ4^'v<{icј<}tD BC3s˶/)+딹JO^,FTsQ9;[qܹ_XL撏]|zDD&ƔH${Uw^g9fї_rd{2aX>"wXfSkL&=7lZV·+ @SzSG 1;wh"wh\3'|%nv!bb^u&=;hvO|bv#_3,?;4}qQT0Vbj5T*{cE&t @+ǾysW>?r D`r#OvFve,;@kJ$f'Ol_D(@(b]1<4d@@wDw,1s YwJ.l @K;wET2"b{>?)A g/CM4Okd3L&!? pBDܜϏd h<"wh`\M\DXcf2l}=qۍ+Q(EL1AQg2NkO~t8 1;whp"whpB?||_0KŢ1f3i@[:@<{iCј LKM`*t?[1sl-{`!XRz= cc1vz,ժAʩڻWuG"0ЖJسsW  cv$D$rޘ<]> Gve,JGGxz s$lxP7k֮Ʀ` Qrl L&'zWF24@D qp(JƘ'f!r&;-1sl6{`g|,ZF06twd2==O~t8 1{EMJ>7{3n&%퍾kpg"whb\ K-nȮtw]R^D P/Şbxh'p&&r&Xbv6 ăPzcԩVZR"Uݱ/A`xp(ڻ/N?a)DK%roCcdЁccp*JX@KL&kשxQ.1;wh"wh\M\g%n4z=B!jNOoOF&1 G{w4"#ZT~("Zcv> AC+qhec ͩW/};=1fhL>f h "wh1\oL.tOvFve4Z<3ŨS4^=;wА1fɈ_E-h*t?`40Xv1hxz= ccqh , P޹+ʥ1f|~dr"NKN&=7l4X! ccQ., 3GG?b|~f$r-"Zbg>4JGG0V0p6ܕϏ2.;\GD|w˶vSԻhuvS/C{ū/b+D|~9S@k@Gġl<ٕYcД c8ydՌ̘SPB ʥ1fhLc r6,"GVkޟ? ~DrCq%f}{#2k ZBa(d7zz{bxhss0 ОDroF}5k}{cc2ʥr cQ+ZH"軦/ɤAًϿrd+9dh_"w rK^&'nv1h)Z-NѨ&;zz{K^/o)D|~9S@{oCIwlz38yd  hx#V϶}Juѽj 3ԙLFOOOuj;*`)DKD\M\}{#2k ZRT/ ݓ`_ a==۩`xp(>| 17Gc2p3!r> }5fo5{شyZF06z L"&&&vb'>t&q5}D _DT2eD2߳_[nZZ^bg{3nNTBa, ccS'mvݺ}.8-3]vķ!hDlG^70;0c\"pDlܲ_ʬ1h;z= ccqh  \*-y:;;cuJ\hZZOoOF&1@*b]1<4d L̄\7&C߳lvMAr;.JED"a5<8wrd{2a`6Dr"NKM&;2mD"ݫcu__i4pcb~4sXb>}{ twZW&1@(ǾysWaSs!r%"W}{#2k ݋g1zTTUД:k"LI А17#/+;0o\Mq8">jdЁccE*J Qznnc4!?Rsw4&1S!rD.EVkg.X,x1h(dD^4'xLJ 1?OFw`!33"ݲ_ʬ12z06r ,ޞL6c &U/Şbxhs0 B .ZDmvMWQbXcQV L&k7AثG_~=ʥ1|~$rE.׿#&Oudٸ{mf@bI$ѽ;VE:6@ w?b~ qs>?)&rM.SD<By{1̂Jk{USZDicш؞Ϗn `1E,"GVkݦƚk$x`6к⡽ƘȘ)"r]."1wl6{`g|0Gz=gQ,\*E^7 d7zz9)@+ɏǟ?!`>?r&rL.͈;cX{9b fDF5}L& ЂJxodzG6ݕϏ2DwD7#Q8pÍ[b]5,Zv!xw;@ksj;@{!cO!"nG^2TDoB>/l6jܰFc"T*^RY^9T<ǣ\*c~F|~uSKI,\7&C֘?C"8zT*qV3 @pj;@{)Ǿy#3D ݿwZc~nqK޷7+ƀ%RբRDTjr( ©ixp(>| 1,;rE^KO&=7lL*JT+8{lW<^`8}=sx[GT2"|~)$rB.׿="Ey?C@Qyj%ΞER, x)x쑧19yr #)"GG1?7ܸ%vٕYc@:J8w6W 0CNm`xp(>| 1Gc2p3D@C{c2tٻ { vWشz 7XqnʂS,Gs}CQǑqGT`㪭Z G%vvx1bx^#ۣ^ܥթjOl޺E "N' vnELTu~T*AְW^z9?\ڭWIHEQ?a%C?Qv) 1w`nu)Ja<՗~+WAc Nzܚz6ĀUX 266j*y39Wo>Fc5)Ad ߖ$cj\jԿ[ĀUBN΅NDκr97ܰ1c㮶p+/}.VKw2Fc)Ae ߔxj\؞GF[Z,,_vE҆ьettT .ko3o8~}N `C(I$yXwM7֘n{v;v[`ŔJg S. L'̬FczJ`C({WZerwk\_/,,,lᆌ:qxg 8m4I #w`E$ǓߏEp۳c6$^/ Z,,,b+ prƍT*bZ[9ƛb,lo4ߑ&FP*Mݷqn޴){ؗo$Kz=aXr###ksE/^n֕ 膔J%AJOʿ}nX?p6F*xIVUk$Bz~(TՌgl܋r=|$/WB,^ae M7J,?;}m\1Ҁ}r IDATRIT<^R4i::I =֌W,ٙ|zNzW1do1}H `BQNr<@`br"ԓMbWO>Ʌvw񈽲kJפB/t  urr?|co|fڭ$w;jE[XGٱktjeaa!O>‚0+T_\/_[κu˗؍ؗ~aa!O?!@Vظ#|s=|$ysR;E}<Ɂ$86o5{ؗI1%tvӹ1~_"V$Z-kJ^B~H>>zŋ+jl|,oI3gX<2;*E}oQbqTky|_n1qijn7]qȥH}kJ׸ƾ>N./^_,R7n)˂pN;sB,${CR;jE$ǓxEr۳c6Zn\εrJ\$KIz^::IV$InE|;O|;|f~M1$wV##w`U+Mݷ8n޴){ؗo$0ݿ^&Ʌ zWr[V/$/'IVd|~ i㏛ކlܸ\'O>igjN>'ZkBQ%yX?I=]`Uj|v'~˶}Jc+-$ɧ_y,R)׍};_-|S?\~q!S jgEQߝ)x6o5ԓm|k_u=ſͻKk]nؘ˯23gX<_oU`)EQ-$78Z.5lώ];]uVܥ!|'|r"'n.vJ\qcƯO\E:g7cq"FczN `-1r֬HGsMľ|&1tN.^4|YXXUZfl|@XI%͛6er-N't:t.t U*2zh߸1JE铧ok|CR|9#w?(w}LЏv  [Z,,,jehFGG`ٵηrb,lo4ߑ|EQ)V5-f219)vi۟nF׍T* x39Iv7sR|=#w+PI(Zvڙmn[z\jBv- 0l`=|$/WB,hL1rBEQߞP15ן6XV; Z[z=Qa;%5Fc)9#wo(귥?tߪj~b,N ; 0l`P8v@X|,=wS*2zh6V0pfgfr9}]1S ߎ;U*cj,ɉy|_6o"20z:jW`Py\o__oM o`E$lUcصUwenjrNKG׍R@ko3o4^O>'1rX$EQOj,>Wfgf\qcFs%l6‚ uR{VM\g޾tj4dXF(`{y'Bf]^~?l~וeƍo(KV7DVuQ/0`޾ӿ` E$lUcݼiSoؘק~,N v7nކjluz{=`E}<4cN!X3fgfsYryO݋i~o6vsƍ^{F$Iz^ZV7iڹ Tk5XZ[9zH~q1S K`E}wc15%3}|?uA|+ *Jn4jZ;铧rci̧5);2(mI%٪p c\W^q]YW^Ɨz=Qeat4Z5T*AXU\o_?p`i,a5v qn$a|u͜o6 V_keT1=%0rXfEQߝ}L;->Ǹߒ[vii6w+eZzOzkR,#wPےJU;{ᇹؽ8϶lw=(ڥ{fz ?`Zzx=`E@=J,WX͚73;3?;?@@XZ]ERﯳv\. lvf&ޟӧc=hLO0HQԷ}LSղ};X XjF*1He$JEXb'G\o_z&hL#p0r2EQ)]j,?;}qf34?n 022J՚A;ۗկn4FC(SITbiUkFC(%9F5-f219)v9ls XW.Vz39KdR '#w!W$<Ҫjٱkg=] .t:ùsi~Le\l>ZJJ00`Z[9zH~q1S `($n޴){ؗo$_0?7m1XT0N<̬K$פ~FHQoJ~K(| 51nsgϥlb+WT*Zko<[1ǯI:BEQJKobr"{ߗ[j6fS RJj*+T*){wo3nXzI6ӇX]VߖxXz߿y䧏Wt}~n.^O5Z*5;3OSssibb###jT*RGrqۗS ;PI%ScmrkL5sR~FkLQ&Mc?[i9w\7b T?^R*D5߽3;3+Oјk;TےJUq 51FnΝ=z=AYZj^Y_1j2;3}.o]oXcְO%yRQղ};zi~G}ݮ Kĥv8v~Ϝcy'hLo+Vے(| 51݋s1|gr"vGq3^XVˣQA%:?y^}b,ӿ\ #w5WWD; \^~?9˿[n[Wz9nדX2j5׍fk8qx>v%O2hLoټyb_&&'˻nmټ"?o~n>Ξ‚' pJRFMZu)JSy3b,?jF,HGЏm>چ_? cOⱴ[n=y+222jTkUAe:?y^}b,?X4F,ߝUX^˟>C 0 #7^|S?(sDW0:Z )˂+ı9zHڭv;(Iؼyb_&&'#._^??;^ k\Tuk)J+Sy3b,?XF, WWC?Q=@jjb|濼nn1ٖ7-s,,,xb222jT*A:?y^}b_oG ;KU519v=+@݋o4́||߭7vCմjܹs9?M׿^͆єeAq=|$VKT1=%K%ڼ<أMbk_T.ɉUn~Gi~LD!\v%qa@q}mrky|&1X^/͏9wl122 j铧rc1r`>OMmCM MΝKd]Zzy^*DVٙv%rgPp}0lrky|&1XvZ\jTkUAUSy3b&QP~G~hjjb"nΝ=9xFZ5;3}.o+`)F oO jصS VT|7b0/k\|+'~+1V %#wgWݧQceMLN/hn1XQ^/͏9 IDATwlaYJTkjՌT5ı9zHڭ+FczJ;C(wF5V-fǮټun?e~~>]AX4###jTr, @'O33;3+{=Fc)VF ϮM+ ;v N4MwȺr9J%###j|;yNzW7dј> U(귥}+(| 51|ur-ZMVKe}%RI0;3՗~+`u?U({L%SceUkd*5AvڙI1xF k.6###k]fXbw&?>FczJV;#w֌ߝ@j ~l{6`t:,t>{II*]^/ זS.X&339zH^}b ӿF9EQJ7ɘ+ZeǮv1jn7OiZzYtIݮ85\[Wκudd5q;+u^̉cn I6Ӈ`-1r`M*MI%K019v=+NI^:x,,,٥I._`Or {TkUOw=|ĸ}"5FiEQߞUy˭ٱkg6o"kʥKIit.t/sP֓|m ?`xẙ18>Lј~M *#wּ'JGy˭yGs-XdOGrԻb )X3EQ;Ɂ$[߿ٱkg&&'Jw&?sz?(/18`{vڙچWhvf&Gɫ/V2KEPQղ@|+Go^@L5sR(I%QQc?=+hoıs[-A#|9#w>do',yhNcw9qx>b>xӿ~@ zF Eߥ`yӦg>ɁFczJ rFp~[WRc|dǮb>~oAQw?vScLƛb n4_;,'JGЏm>چИGKc0'9hLOIYQoK]j jmn7vqPuR1r%R<joı/%0Fc5)`*x${L;vXQ'Od0'9hLOIKAQoJr(]j ɉ4~do1`E}{InTc0Ÿ}hL<`E}<$O1b>4L5e+(7j .cw`1y/ҿ>',?#wXaEQ;ɡ$71K/G2;3+`{=q;R1rQ${1+a>4V; '9a5;uۇSI4sR`0rTL%Kf|qPu?; N~6aݍkR`2rW${<3vŸ}'j4HDQoJr |gC(w?vߪ3vգuxø}dw10<`HE}wc15; VN{1'Od8|do1}\ >F0Ċ>do'0<ۇ|0`(M_uq:dј;"EQ;V5CV˶gۃ& zݍR`PQw'JrVLNy套ۇˇ_V#wX>dg|fgfro.IRd\QoJj j{7LLN ȸ}=@1='^FFE$ܥp}?Ȏ];*>y*qpE?V?#wXc=j cwvN?nM X;`*$SI.ܚvf-bxwo7^4nN&hL#wXÊ>do'>^ypHfgf>_n? ]F@~SWVcLLN];s}:[oa>ܞJrј6#wಢߖ@>_&kB|+'ǎj 2~#wKE$ܨjl{cwVٙK/&yFW*$S1vJZ-wo환Uavf&Gɫ/VaW1rVQǓۘ" ;v4v`h>y*GS1>Lr!)c|#ݧQcxmrkvڙ[Px套xٸ}'9@1='W(7?vXuM_n=+ux#/>ٙYAߘ;E/ܥ𚘜>{7 5AXQ8bN;v%pE;pU~wݍ݇XV˶LLN GKcdo1e,N~ ;v4v`ɝ>y*'o){=I\-#w`Q}6v?dLy˭ٱkg6o"ꕗ^Ϋ>/X,F+x}3vryhs߽bFykkT3)FxƦLTIy!p93pf%NR/،\dC>1%晱e);|S^n_0pD3Jv>_}M*c^:v~b[ʫn e8vEQOC1<_jf jcm=-c8Lr7eq'F>|/??353m _3c q;pRD IYc8Tk\Mebן~΃{K;?۷M$;pj>}HTշTk5 N'W5J:p~ܸu3S32O䷟~3c GIZ;NEQOr7yk ܸu͓O:Aˣ"wEvb!RUs|7U 0 :v~b[ʫn E%;зշdba >_Zc $w@}O>/7sMcn7O?;>S^n_0D(Yk 3Jv>7jfi?sR^u>v`RsI^b!tqffp̞<^o?gNv` $v~Fn>ggStwo)s:Ah"w`݇ߙJ%7nWͧZ#mm6O?cx r}4LM_ȗ~W=ݿfK ;0TZoRN_5CI %~ܸu3S3Fޓ+M 5;0Zoɍ[7]wFJߗR:A "w`$GǙJ%^W~ɆA޿1H#E>Z&||.κ n7-巟~v}4$rF} :WGi"w`Gp}$"rH"vE$n8@p@/vOC %nx ;;Ev#uwह>A7i/nƭGnKypo(e&rxObuqff|'WR.c>E}>ɝ$׬1Zj\z%Z o)]q;G|ϥ.vAf|17twy/ecAFӏIZ;p"wO$vmg*ܸu3_}7;f~^cI&j0^~;ɝ$g-2j.S lk/v 2Lp̊~.e.vqFn>ggS@wl5mϓj,xNPQo'!yk>ϥ\zЇ[+yb R^m_0^~'Ɍ5F[Vͥ||Amm6O?㕼v £dNQQR^vf &\fnܺX p:viw BdApzD}(S^v$ɥ+tJnܺi 8bn,/KXfr)NE}`lm6sl ?&jDSQSB0;C=O2naF*$I~Hr"|F#S3ӹLL6 0`GIZSwD|ϥ5Z5fg}<]^Γ+y2bʫ}(EQOIr"|j\W p<[[s'r sD|N_LWl.L2V1 1vdy9OAT Mpd~1e4{%^Y;yx%O/gcAT/,$jl rE\wj/n+j@[})kj6 QXKr7b%;Ǫ()Q֪4;_d J./gcm=v S^m_5E(xGLWl.L2V1 0^ɳvqxj)8m"wJQ/;djB.]WR f<.f )u~"r/I֪4;\z vlm=OkGIZSЏD=9If]yf /gcA8n00D 9iGtp\m`Hs\y>kWh"wW/L2V1 n7Ozڟ<^ɫn(_R^m_4L(xv\wMM_ȥ03ɆA`ld4'yʫ 0,D NykkpT*|+Z(0D:v<^y)1ɢ #;Cwvu"F#S3әW -///gcm=v(I +;#()o N^>ɆA]ix%[ͦA8M/,&jQ r`E\XtRɅWޫQlm6lm=kyb$ I]m`ԈiEQE8mZ5S̸fIDATI~}z^uFE7F.] F}cm=[ͦQGϓ,&jlN(S_[~55}w;L΀1ES*xvD Q;Qq s'(Ŕ$g-Bh42 /L2V1 }I΀z2l_hvGG()/o ~i߈;Q/,&j>XQϥo'fIV}#zjFXlm6lm=[v/)//QQSwZfbru>10 ecmqn( $w,Z;/C'(S^w65}u>53m}J30Ȟ'YHy}pDp >2vOr" F#S3әG#fSՌ0b6i7lA2a9dEvkk0 j&&'353dõw!޻̳v0xd1bh8="wEQ?2vE&S4\{ v ,/%eؾ` "wCEQ~>ckfgcm=ͦ+ _9$9oD'Hcr2 fy}s3[nΰ[K2l6/; _Ly}>wܙJ4HV3 Gi^Ծ(a; ; (;ZfwB/~U pHwBzͼv èxd1]a; &; ^~'e~"}jfwQfks7NcF^ؾjLQSwFD4219)| l!%r!&x}{{V˅LLN2V1 зVv"wwjLL6i 7iO#F#HvRIc^]8*[47747y$l&r'x35}!~V{n7[in;0nv 8ϥ [DgLL6raf:jlG;[X[ON1 =a;'"w୊~1>19X00\g#a;%xOWUS2ջ^=kcm=v;[n_ud!bmை RF3O3hY-3prbln>("wE}c8={.OLNflip6_{7֟Nߣ$)/o8)"wE}<޿<GE̫n@?^־0 pD@_(IZ^_D/BX@# ؛EvSF[Es@_Lr;e>cF*cwW5NNc ,kIR{EQOy}.65}|E"x'ɳ$z}i l/U`4U_jf$``$n F޵΢9a!rV|5c఩ I/WEbxm?36F"w`$|eɌU^?Wzh>om6-l  _v"w`$ϥ ޯY8*o ^?=06zW֓뇿wu8b[msFޕ_z?oEɛ᫟RՒ( ^Z?x='n-:;!EQ~>U~2hdjf{ f?~8V;F$۷MO7>K3ٙJ>y|P>)/W{cӓ7ϑz:04[UsE\$ɻ{[uth{a:@ֲ}O >}.Ywos2Ǹ03}bl/]>9z^Ԟ2l6 _k2oF&8"wcTG3(eԾ(j8>"wRs)ZŔdNɡ}>yZKyaʰINOE}E`/S 5;E }yތWM0D#(/& d-e0jm$rൢ~>U8/ӻОJCG_*\I[< )U."w>HQf;=ʛQ D|2FZz1{UWT"w\Qe?x{?k2.]iH8EQ2v g͠}$7;(s/FpfоjNQsٿ WSM@ׄL@0p$h` e!&h`(jEQ$׬ Gy3h_5 J)}|2@xd;f` IQf>d21z2h?xYu"w EQKwξjN(R{$,#eouv("w8"EQϛǓXң!v ۭζYӉE}/x?x]A'LP>{] 1; ; 璜OIY(oI[mV0_c_Myi%r\QS_X`5bOj0pD{%$_z2ZO]bNKEQߋdz~/G{Vkg<@-!|bVzu.`jEQ?x~/?'o_ j<40D=EQ=g2^$׬|E)u:@W3ւ^z >dKI[ N`};_dhTQ|<ʏ^{.&9k5FɛzΪ`EQ|EqIr>VkgtE;E}<?ɟt͚Cem{w[mD\?lBoyerShadowsdep-0.3.2/docs/img/DigbyShadowsScene2.png000066400000000000000000022713441317166637100201550ustar00rootroot00000000000000PNG  IHDR q pHYs.#.#x?v IDATx]l/ ĉI{b?@(PgB wT`b$F0WH8D2V+ywŜLh>ZCqd[Ѓ=c/|Ͻ'-i,\uk`u_|.bwMe}Zv<JR*6Ee+|8:,nCxhzˮeԯFdT<дR*#P̅;V<(Qy4Z2fc~+}mXC@SI8s&L0m~""F2)Y` K#QmC` YK/6ф<E{6L?saiNxRJš8-8K7O{T\<N,!Lp@VR*"$az@6R*6EtDteZ<إBh)@R*#%X1#b"3Z4yR*6EшЍUV,L/LdMxCqP'֔0=5yOGDnT0=yR*D :Qy@ R1:0}Y'Xk@eTl7u)aIV<PY)#bN4%az`U R1:%<TRJ`DӉ%L,+yR*vGċ:Obɹˉ13UX r%<ȡ{2:;6.'#1az2#<Mq:Z7ul{raz2"L@65R1/Pm`^az2"L@e k*PD̡'kd'#T<R*&#b4Z>6}1LSq?{`QUaOk ExXS)3ёC?/~S [駎ʎZJLJx3Z{ʲdD#<b޽c$=Mwaz2"LLJőx*Z~76Ɉ0=WLxX3)G#b$Zs'#|eHsm qG{[vVg?N|K O\~FK8KxX)cJvP< m^Vzaz*X^]˥-=5j0<};n Sa#)-y`MTLFh}l|.,W"LOFZ<&R*f"#Zn]az2"LĄUR1ruKw--#az2"LDUR;"^ֻ̡w߽Vș3?'㣏Oi UVDL\~R;rk`{.n驙 jk[::T`JEDī~R{y`եTj=#kHT<R*EۺXӓaz VUJXDCCZ ӓaz5$<Cq0Zݹ#ye1LS13PegeY?+KxXU)+Z>6}ӳs'驲٘Js<R*f"#ZpO3&"LOF<jR*#Xnų{1&'LOF<jR*#jkh-F\&y`դT97Z0=y`դTLFh>#fh,q6LS1udϚBU O\~ZKV'<l~0s K Sqcfi-Z<*R*"jgиldDh9H8/P;w};240=<*R*&"bW>[ e'LOF#<ȡփ?mm 'LOF +.b0"P릎}Ok1HćBX h PuKr;_?xQ dX^Xs)fZT@_ E윻-LO_GDTc<R*&#b4Z}"@O&Ɉ0=R$n-az2"L:y`ETl7su7y!Ci ӿcǧ4*V<R*D 9zxM̙SO Sub~R; <#T>[ LOf&<ȡ{2:;6-IMxX1)"tn?p=q]#_0;?S'N'B1?КR19Ժ34Bg?'.Tloazh)Ij}}H@VDJx3Z{24XAdD<"R*vGċ9zx"az2"LMBxX)G"j}{jhɈ0=dJxX)G#b$ZhhP!g?w?S'g>PU1ai-j]JŦ8Cmn?khPqVzaz*x,L?%P KWr[≇`haz2"L!<,Cq0Zݹ#yAɈ0=y`٥TLFh}l< 0=U"<,ȡg`LC2azX!J,[kG ZPVc'>X2J/P;Fch0=9+tl{.n驙}1<s0=62R!L_J8s{G聯D*">!hWDXFc:>!T[1sAIX{ G|y+_Ej}{@9sdXJ?OxeR1s/ ߡkdd6"˲>kdDPcx0=Xe,RѸR[GuVYַk,1230$LOfV<@Jk9 ?ccYh,՛9:< LOn<@T\l5Xqe}B=/P;Fch|IcbfMʄ<*λҭ:v<"e}F+hmG"j}{jh\ObɹˉTlc.LTK.Mx2T5ܼVʲ~HhGs^}OFgFC ӓaz@xh9) G|y+)9ڶ8'#!<d+b0g5\?_@C׀ejYǴ<PmXd1L?Qi-Z<R*7_j+˲~Dh݇"`޻sGܷ.C`UӓW#3@ڳ[Gt h1XžOF&ж340Oq?k U|Ms8"{]y`m~?},mŞ/N-lbf#PYk̄IT4#n~[Gu eY֏j-c0"PZ<C驠"b7@N R*n^j+ñeX3-*mKO-^ S#fJB4#`T\,Zy؟C?po|[ l ӳwD(VBx.CJ`̅k~|و,L٧-=5Ciӳފ1sf!<@KJh~:W˲[hQY`m qG{ N;OqćJ<YKk9 ?cTIm{CC-q+0=Lh ik-bw_Pad,BL 3<7=pmazHDLzyMJEc=bij0n1ߕe6Є&"bW}l\!L2Dz W|IJXKm1و,Vdg"w:=ֶ"Be}B 4#~@`Y,@=c9Ժy2 ӿcǧ4 @j) 6X;t *aWJXY'&=BL @_ };3g>JaL?)LO8ȍ<*Ih~:MH,%8X.\uqۭqۭ메#~Yȍ<eJk9 ?cR*eV{{6pA[zjf3=@T쎈C1@6o`pB="b[w:lov߹gG{|єeY?NEmϥ^2azt_| 4MCh7uF` [k]KBC买c'N1f#b,3&J_[MΎ,0Ӑ,Pu6TR*#HDSooܰ>7f [aC};_~Z船wK:`Tզ$8c<L߸؉5 S41mC7K!SZm[oY]\yt{koħS*eR!cS3-`E @_ιy)TtZ:{b}wa{1߷pP}4 c޿bG9i s)t=<Ȓ<YK1;w׺l~p;[ow cT(a"r)t;_~/}XSY |@1P 7{j]]\=װmVxXc<_GǘϘ(x59s ZtmzDD{7~,cTdIpVΆm14l]GDlzZ璭𰖺k]_|8M5~͵=2 PI~Bx~֛c֛~ob;m@Ց|Sgto^ Ѱֵ$>tN@rߎ_{#O|R*e}DYCs)gil>"O~>0Qr <@vR*E.U ho ߸a C}lYhiǞQGFeX.n驙oݹ-u綈 O?;1&Mȁ<YI:@noԺֹp{[w:l.Ϸo9y1Rq,M5/o PI^{}ǧ[pxYm <@6R*6EĄN6ݛ 7P}ڿ8Nu(HYgL5x5CmnΎTҺu7\7r;i '"CX7w4lu-> ݵ};~6񋜏G"bDYe,+ 7ovTKol_'8 ZWt:n5lo[h~/^~?1vTe}DYEcfZ@e]ɻ;q20eY!<@.k@ڰ-6.󶭷,\u. p1M?S8*˥aTԺu7ĵ^{@V:P}o͋;w׺އ m[ooݹ-~۷s>@Jš2QV\ iSׯ~^Y `u ho ߸a} .7wV5 vW_o|ٙT)R*##Zt 7n9vdۿ阳eY"<@TltluEws,\u. Lk]Wvl9#"Gĸr)y7믻8/_# ꄃ޼l]޾a} /dž`ѣߋ_.?R*ʲ>iy:7}>wAnG#<@ Mc0F{bݵ%߷5x?S8R,3& ˥^yxceǧ/Ζe]xȎ<UK !SZmKm9sώo|8L2Cmny7u^ovIr$<@eTR6o`pB="b[w:l _Oo~~v&cL8RiU_ UtE7^ǾZvk<%ylL K|Sgto^ Ѱֵ$>tN@Ӿa}Cߋ~QxL+>@\O1s;<%yl@L>lq]o7kW/FF)eYX%_ r5[۷s;˲>c@A-luEwmqֶ,\u. icOpJŤ h,B{{jT+ؗ_{#%^ [Tو|Sgto^ .l~o߰>6}5ض=;◯1"@D2QVJ`DtPZ3427 W>>KxȖ<@L޾;w׺l~pvW7O?;1TLerR[i\Bq~۷s;Ͻ3y luEwsP_V%[ k߰><6?~1f\lCm]q^~-wòuȚ<*ٰ-> m[oY]\X߹gG{|єeY?b\l6<T׾vml?S܎-<dMx2ms[1Ѱֵ$>tN@=+܏q8b,3&ͥ-@elk?׿};#k w@L>lq]o7k4x/x-ctDġ8`\|P ۯs;`:dOx ZWt*y[w:l8˯~v&cO8R&eڞK}}sr<{Y0tϯ=u.k ߶d+<@y4/#cJ8b+$q Z7ulu}r Ox@xɤT쎈ݱxjZag>̆m14l]GDlzZ璭?E興 Rlj7u]}"[kNxIT\@f6F~dl37/h ]Zz:' yo˯s>S=R L X3Gצ/0<#hKq=ƥ,{,GS*fcnsfSL>lq]o7{ ccO_(#`4kf,Bl׾vmlg9'< f!<BE[0ϑߺ󎈈u. @u綸}{|eY?l\h.nyX!'^apezYJV R)b"?a#XJtJő/$6b֛c֛2ϣpC)L ߵ `5m=6ؾl/df>02?S*=eY9l08 ZW<:~繐\ lZ/yȟ>,GL2i Dx)"NT=?sV~M:s?S)cydy~xy`lk]X}[ *GL2h#b܊5yg~c.v[V[k~1-B;*ɞm`ph,ٞ[@ `` dI,7{*'ccnz(á]ɜ-?kM{̺uךBL?ޖp<gy9̈i#8<|Ur71yGT/c+jl/63mXknNr7P b~75y{<323¶^Čz[ZZaZ`ޤ?ԙMLFmjE1YvH|mji}Νᑫ4E|~k{91M̨eUe7|C֊.vH`5HzNh#^lxNy{Ln$+3ColkG;$(rŇךB3 t|97KMMWZ?ԙMLFmjG1YvH\mrh._q5KUQ^L^rެ,+e``^*%%> ?#bGpy^N'<ȝ}/i&yڰp(]y9 MVfr/ƶt3<@L sʨz_^VrIL3p<Ԓ~c .#<@|߫tx:q\留U0ͤQoBK#L M~^¡P\ w3<@bL ui]M .4F- *y /?/{lkM7$zZ6npSW%{fReU@|(%%qށA]2jS[ƍ y$r% ? .qh\wϝrlXkIQP}Yq9^Bp@R <8h._U pLebveHjcNe:!55E%Cx@R <8iAr8vsSfF2^}/˚ٖs<-JK+6fܘ<@xg_|OLdefhJ94UoBK [(MyNV%Q^+Ӵ{rlXkIQDp(*̟ןwLm-fH6G-H>#<׶Bm2Mٲn1)S84_ʳi: H} ;A#Wi"zYȑtiZޖV/fZ-Z}U!ZEx@!<8hAr:v3SaAe^=Ӵ57ϗr<oԙtԘ` HgiArךBLZOزeߗӶ[$% ˜ତq:|._V"܁%zlEe4b*J')*.*;3d[I<@1&tN$ށA^k et0^r֚p8]Q80%N鱭]G 5yÍ/jիl/6u8oѢ}O $5 ƘCR?ܵ留37#qY/-0-pW 0ч6<ͮ$6Z|:kׁ:v3 eefϹPJLh,˾/Ke-Ϸ081A;@2Kǘ6It#;Afֲ,UMT/Qeagl.  hbǖp<C)*.*X5X`HvfIІ51թ3=C=[75höqnc1&8|߫ee ܱHA-\Ĥy HPݾ<݀DE5KU:qeKjDJ- --.dZBϽA`apkc>vdGx m')¡tIRt{&}aK/d2A'Xs|U97;S|;$4c1%}b}ѩaZGtPu0]"L` mԠ;m/CvE 7;p(k>1icxҿ ͒Z_U vwi0}Hlֹl/Ucg\I657'[ol{۲hQ=,:Nv{%9,()s  Qb0=>141G 2;;vKz†6ojPUb~QjjV)%%erL}_Ա`y˸,+UKS=0=8qﴽO 悝$ذonc`WE{Bd:$ IDATN8yڦmL.i,^9.ַbY^X6fa L?ֹl/Uc ůlXk,< ܗ2$aw( suOr}A vGwl/c\R1׳fIGlXj UeZk9uGۏԾ~c vܔF dLpVYS?N*iUUUXZ3cQ8yzń^Q$_/6<ή6#鐤Lt^۲В(R0yi:1=uʨVgq1f3a'lXkU/fhGʽe&ghoLPn#<4}}0}ɦy>]2j{Ot3͸l9 s?sJ(Luߩ'O ZQc^O\oúZʵu=/hö ;VHa%Emߺ[hieRRRnm/q&&6c*1}o#gs~.Ch:c{o1=>VY-beߗpԎ޵|a~A-p1A̓{]?UZQIq:zJ=X%0},!!;[􏭨AJ[^z^eۭ?^1A:[j9^}Y 'Onv]2jSK Y$%=bm%E45(%,Gǯb?c0=1A7ӌٹϊát sb^;0okS;Ǎ rU$r5Z+)h֍I9[C$a7&`19KĆVIRVfʼ]vmj_ 6HUH:+)V, & azhԉm/mc6y6I{mX5GPjj*=-JKK5ZħFc.v<I:M@dUZj=a!LI5ܧɨeK3&ct kmԠ (v}ֻV6&eg/KØ{%}b}UR {F^NV. a9wΝ $`eef\FILXӿH$čpy 菸Z7>C̗=gl/јݝ*$ڰ֒oHr),(-k޹OCx I!k Ԩn4c#3#eT/Qe_sv8l{ ƘdV, 24\qQ$oԎ޵.ui 9l}Or0@^m/+1;˫ry$K#AN}OdTԙI@lT/SW6Q.URc,'̌K57my$^nI.WRQKS"L>141Jc>&zGnIOذ[60Xjj*=-JK;ZT6Hr+JȠ0}|wGm/SczyGg:k>6@+.XqUU5&v{uXߊezaZ=azpv8s/^fY^'6/6ܲ23TXV zԘ]<$ruO2yF>>;0ok{* Ƙ诞Z%ņ]JOyRSSTYiQZmsP}fȦjLNۓF Ig}{UqRpH+W3yTRQIqd ccb2SgztL$ʲZ;eHjDU- --0-T ߚUۂSp<naͅwc*!0Ǎ0c+jTSDE|@>141G 2_I9.#LpGg:n{2׺%=aZo٨C T/V8d%{X#Oi@x:M@O 0}|^'&պ._' -g5k>6@QqaUk߱y< y*%}j}֭ A0=v9uGۏ^uLsV'+ZYVF@HMM2Xc?iG qph~1A{J:b}M;|Kk0}l\2'OӒn ?FY4 ؊=\D_ZZ 1QIR- --.dZ$HAuyIr 7&iCjijTIqA'Qjoz:PO71=uʨnKD, Teelܝtʨe~n[Qʲ4;uixۘU'lXkU> E TX^$C |kW۾eJ#  on^Tt{a-5Kv}bR;ib2j{)}$ذonRSSL)))VwkMh`7;:$bmPZ :]b a!Lݱ^Ƨ*$ڰ֒oȋ p3=~an5&h `^%ykk[6*1hX0}|hׁ:we4t9t,Ɋjռp+ηߩ'O3Ppy r%uKuZ0=ֻ1.˜`̑!Iٰ jj^H8ƅ[%?d`$XߊezaZ 'D]:vsxϘՑYYE[68‹,Zr[O# 5$Gx:M@Oa LH'&ռs r>bLpցsCڻ)}P9g[_G:q4ET>0|߫mXV+W3h$AN<;m/SczO󣲬T-MxpȢEiZZYD-/q _E1f؇<{%9\Hv㣰 0}Q$jׁ:wejLa٩M^ֺv*=Q^88+Qffu j[2P"<cSNCjijTIqAӟ.w`az@92TaL0f鹩K6ySyRPWD-|إc?g h`XPuHz¡tmr4so'L;:^{$ذֽުp8ċG,*Ӣ4'ji޹O2TZ1AmBx j]($ Lp}bR{6zҘ۲R^[>۷n#"y*,sG1Y# KꖃGEUUUXZ3cQ8yZ'NDpw23uSC,[5-)b /Ǚzn|.I$Ey aFųr\oŲj~-a Lֹl/c1!I$fZ7[˫yrDӼs OQBԘ6 <^ow2@Z{f5b0}|ᑫjyTaL0f[6u>˒WZL=ֻ qeL/ty$$}j}alEj(ˡ[wcuvl|d ˥hieRRRt 1Y؁<{%qM *_̠8?۫nxH_eYꥄ I]T랃|eR4&NsQOlhfeYZy`9Xe9US}.wEk4&  !!k ԨA4:5s+a#Lɩ>p26&K3Q̵kV5by9*.,pށAx]1AmF 6'9N}ƶ6gpH=X~ >3>34sj5:u2j}kKK-,X-JWaAsu8y~|˕-J"jij @,0C5]2j{Ot'AGg@<E{\T-#W7C|!<X<0=Z?Zˠ `a7&HOe@ܟ z#W5<2EށA]$}s971f؁<fIG\oúZA!L?W/Ѳaz@b~D^m t ۾eJ#BCQIR5o_TbH< n*J<7:~M5# 1]T}\Ƹ:c9X7""̹F Ĥ.L/_+4.#<X<^W\-JWKS#z!0=$c?O S'+VYVF^XBܟ}[F Ĥz%I#4rU?h'Xj4& JuIzrsږ C pa!L uA!XЋMOz|U=@[(Mg<|!!ssnpG1&8K;|˕-J"jij @$CW }eK3&[N,y6zѱH4ɩ)I̘_`ᛱ IDATLORXV֯e@!L? ԉm/mc[Q%^ʲ4ұ^Ƃ^lhCV~dž$htN~N ~tF!i4 p#gi`p{%q>~΍0߿|df7K ]uΝ`{]|i׆{zp@!$w`Fߘ6v!<g4SPZURa~wFfo'L; j[^Ƹ cy}k5_Q@(,SQa$TYꥳz:pX_ 5&nCx}/WRoߺA A8yZw^Ƨp, y|U= Y@wF8 /UVt~L=+3c3pL>8uGۏ2n,ExN}BYI9.ַbY^XA9A@2sVW :| ذnV.fs@ѱ7 OF$IC4 H τPeY[E<Em===cVv`'p{u==cn50zwm/c\R1X/geӳmfs⿻4ɩAIR4Q@}PY>|/~PYV̌\v9XP4$}j}` ^#yLOk:>Vgqˈ풾J PlfS@nqf~eIӁk4 Hső|E$IegC537۬>p؅T<fIG\ySfr[{hHjsP^#gpf xJag/INMiMc4:>}kcgGԳ@R}C+.Q% `\pL[֯ p^i׆]JOy (҈S, ATʚ/ >+3c6ȓ$Ҙv#<zm/+1h 0}|`] ØP*ݒx|?otFn'n::kE@bP8.qV!Hg{4p26&䐤l(xúZ `^DsB㷆oO H,~Cfn̘ EBwiS'NqIcLpy$-nx[^!]w#4.=\Donuf?XۏԙaLp%g%Y[68pFǯitlN~fF /w~23TYV*I*φ 8eYIj4&b[ */Gˢѩ[ ߍO4=51qIu}p&Cp(]{w6qo?8{ޫ $3##*I5_YVʗqOw+1A=CxIIX[8Fa;UھE`tv}ή㶗qԘ.">ʲR45i$q#.In.]4}5$‚<N+φkfnx[Ky@{]wZ4BlZFX0J1A]C$kV5a?5KGǮitoN}O17_5&ꥒ̰*($ᑫjyJyۘn"<H}/WRZ#@_?`z_m/ߘ.!|yS Άo OF$IC4 H ~Cfn̘=ETɧQ֮uژi"<̘ Iq˪ f)3#ٛ `o?Sgzl/o}o̖?o˸<ѱ9![%@yx&_f*J%IE|[8yZwP]=U =sW @I0}_w۟uX'&ռs&&61.Θ6zm(([7Q4&7C7< H PJ#JMMUQ$OŅJ_roD p$gLD&c5H|s^U勵ry5Cz*=`[羽kNgG}l.+3Co|N|x2r$pΖJ#lR#~K%M G&9ɖ$*NuDUf22+` qImLp7?͒Z6l8p{Fǯb?Ά?[`A9>3d{]q8$5 ڰn-_ER ~jJCoHA>:=  -Œp ++3CY{sv8B)>?6I{]-JWKS#7H=p9L߶V0dΑM:c_9otKz†oVFo PTw͏>44MK`c.C3pPg`25)[RfLTn!;q6S3P[FW3qRZ_qrKG&oZa5 7w .Ѝ&~0>s ~OyhC +;{<~O<]rU*js'7]iidg+gȟ-CÁiԳŏ^ۦ[4@xHI?rcm7S֭ƿpMaz_{Zщ`-zq ӌ=?k8ܘ\!ɭ1(F'Ie)Z$f04[- +ۗQǮ(O(H(1 .N92^Lji=24Y& WDJOHZڊ CZ^/`9=L?7 =l_`Q=42wz)/ D"%#( kܘHϜ81x>|Yf0;d/u^o$D7i63Q uB$R'\߰ ̉a,Z6<X;^iƖ E,֊e)MnO$7|wܦ ?‚MS oLl:≄\xbL䟧[/K99 o^]^Iӌ4Bx H\I'$Xߢ{PWàBN =LO>ZXq&5{^Jӌ~qBWVpCB@IӸ= +;{<ϔ@|PdZՕW5v1]2? y9x< KvofR y6E"i|+le0ujR/號eti.YIN(u2 /7KM '&_Q=%=˚ * N##Ѹ\W*HO?y63gxdTO=+Ɲ^Ji(zxEM;Ǎ>` W[Ű`~o޾ sft߷*Zp;e%{hvr咞4ʙxW+G~48tY!3.H1(Fs|Y%Iٓ!hYXپ_g}x<1A~HW ׯ<`[[?7}:ykowk}O^#nf:L2Y\ۦ;1D@{PWÍho?sFeNRPPa׿^0eU?3cϔH꧟*1~4~rsdxy ήo^rC)+M3DDx"~ o֯Y3>cəs#am4:r\[[^ۦ[> ]b,^M$ /]˺4tF6QTa&)T5D xIx,1rEW\uD9 ȟMȨ7nŏ^^ӌ3Q u!el'xunKz`i6[MX~>:20؎Hpoxwn?9ssw:i&DJx>S pVKegg|k'1<2ƍtAa% UR\Mg]44t6exU^ZYf0TqQH-+ [7!IP#׫42I(3#bZ\2?;+kC[a!Is:V$DJ$Ѝx.nYAmexIwS/6oIUQ~ax<-;[4ܡ[Bމww5dM,>5 4a<:_3?Jy4c([d"@VR-J u5 `'-9yzo,bvLs}xcMSBS)gffh֬p73CYQ ׯ@n[ҸqΚ=N/mӌ-g>O:-4c"@}ǩ.I"@PR]Tjڢ VxI䣏xJ̚- 烇Gʉ$I7Sْ@nrٓ9_y]l_}@i;4|@fD$RZ/_X_ǩ.U{6VӶ7tirzq-VxIU瘟@Js &?>se\$TV` W<{?$`6RWFF~HW@*DR~aL L3v()}Bv7ַ{_Lͯ``c֖{O%--+ju~.~nYs#a$݋u3eдO>3.߷rSaZn'6gyoy X -ͣ@_ܜwgIUMnx'gJ:-cH}xbLzS0%,يe7?NYg O IDATm{m6[M$Փ>SFF)QN(/Q<Ю}PRѲ77Bd+#N6ZZ!8?$i-p;<X,)͓tH. K[7ڲU䣏xIvm{m/jU+ӻOҌcx3oE Jf*/y< ug~[7i63Q<0"ҹNH ETA ]Vc܆'E h:}Nr%IF7f*??'[6#jܸI?tz)fl-Ml")͓tHB7W\5zeK,C/oETA{%g͍tI1<2+=\O Bkz3U^n< `ƍtqzofl9p'647Wb,^Ƞ^>ےXZ VtI֑j:[-ߎޚe!xxxHEiidgkv0w"XuZZi2QwU f설'Z߾G] lFŅ!Kzqu8M,U_GFzcfYV,[(/!8 eeSysS@p>ѿ <@x)ӌ[۽]} l0jʹ-:M$źGq| V,[M eed+]e*+-V OS̘-;s{i3fI-;+. Ʋ~vѲ=.k}p)74\e**#=QG;:;R_4L͙flX[<1]m ll~ejWXM5<2JLSA~Б^\\RP%lRFFF C]sS N6M` #jzu7i1QӅ< NmJlnZtO%g5{Լvپ,a#3lyV,Fziirhf׮쥥uFFN/cHR#0xpӌ]\,p{p CuS-i:iE tw<]e_cCm MLhs dx:Na788LC=@qK4ؘax~M o%絴юN`djG]oDcnk\RP%\\gRrl`{[26 ` ;!ޭu{w1hJkzuu@Ll1[Q^~XV͍U2ZZR2M@xpӌ[۽]~tAƒFFuv xӪ ?kjkdJ8[8]'︡_f, 86]m``c[ETYrŏ4eiNã}hIBUpCp4p-;{iHCfQ+n-Ӗ{48tA5(ZNyk M0hh1ZV"ϖזkŲjn$ĖynsStvC)L@2 `[+k'7'4V^oYo9Փ>"_a[P5϶!ۙ8KFF Cl*#jzu7dCL@2o\ЖLl0z|2׼E/xӦ04[{ߵdT/TEy 7U^Ze˖y;!I3MƫBÙf쒤zruzAPWcyK ?hke_+Us4BAU1eˢ)\[ޥmkT0YoweT>ƠWVƢ h=iv-+х~]WCm M}Y )P弹**#=p_wCof ` Kf설F~{AXX+uѶtfA<}g]ө?V״z*KaR ׯhyJҺ_?tzC2MV!<ivHz­׮3.0h,9#v`<#e[~]Fved+Է^@jD-PwVK\f"@[{u``Sc fZr޶40- CW+g5^iaJ`پ,h x'Ҵ e4Lx p!ӌKĘܣx<[e}w&0=F3~ѲEe~eT% f\ ׯb+!R[Gw|Yƌ϶EWF5}Y )]2˕ï4@:N#Pډ׮riNh|+uһN2hkex3-9a ̰l_jfhYmx ojkXƟb+!p_wCof'@ ?QK7i2Q3<BL3Y+no=JKZrŏw/DܱhYZf9s ojk> GT$4ik894(@1ZIoxbL'4TK52jYg5#``|Y%gfh u52 /022S0x5%܎胮n(e-`*zI'XXol%@6P[%gu:r#پ,a%g-ή?X+_YL@<| #z}~7dLL3vIrICn@m8  ;؛iy[[-}fKuwռ_*":5C_ ojk6iqkh~;sg<8ե]m l(:ng|Bܑu>3NO>waFkax4;BhGgitC)E-R[ֻS]z. 65B+Zrh\nڮQeI=;l_ #4gxdTM/Rf@3!IOGg4Ԓ *K:khk{i:;{*&Û !4ӯ;4 y2IMnoW[z4T݃KU\䬷WK~eiM u52 />A-P;D y$ӌ5Jzōcڲs.3h!jzLKki=47E tw:R2MvEx˥mʄBZU[cY#qiGFi3>kʕ/Z?8OZGy<d{yvt:s3%& i[fl$R\!0@qKKa# o6[` @* 50_f D7id4R~a('!<kDJOj4e5omQ<1fyjmc `_}ڲs%z_{ZѲG-EZf%\,-ͣ`^@< k; |4c'('#<`ZLJ ETA ~vk䬂6Yefn<F.VQa2i8@'jܸ &4c3QNGxDJzK{%g͍N>A#7lpcMs#4pt C|bvtz$gKL0"խV1h-;5XZ VKO=-lg ǓC p.7Ss e pK8gL[y%L3v")mݍ>` W[ŰF֯Ymo `ٙ: IDAT9i z;Q0o|<]vt!8/Ik&7#<2J. ׮`T+. iUmvk?-VՖ55˪SaM}Y*St~=n3<2_wC)ff:R~^֯YI l{tup%?3 CZl1$-ͣ|r4\uFFN/cHR#vX4ck'6л.@Oi=g++LC]C{hlk[Cl޾>sj\Jd+<@fKuvVہn(4c(u5rHiC֯'6'Դ ]L34nL⥛nùK"##]|Y4\q&5ۦ[4fDr772V=̠fzec4_l(/a)cI:'O3 ?ȶyH-z DM3vHL1إH^nÏ] u5 l(ivdHzp^jk6ǶyH-_R~Ap@*!<`FfD$R\ҿS] dB 6rUKl]jK8Kr_6 ?H# 4mmhe4L@*!<`M蟐ݍ;xDV1lo@~M3,x?3~XVMz3S ;C@*9ѩNF ` IG7ַ{_EP[-;[~uhYx[B7ٖ +jkdr;b<Q5Ji2!& ̺v]`HI?rcm7S׬$@638tY[[OTyMݧng <皷oT/TKi6`3lT>Eo92$5%& `;H!Iڊ CZ`3g]˿ou䵳ǒu>/O76öyHm]߼RVfHEN$R'鐤n=ӻNj#3r6[P7~S?F6.~<26r UvcKHrIg%V_opD u5 ldPǩ.KΛ_cjkOףa<@ZZ!8?$i-<f쒤tҾ?a`3 u5*. Yrևuc4pwTo@R bY5lT<@JlL@*#<L3vBR[{I~Y^7Ӓ!.[KCm KÁTR7q4c3M<[3!IOGg4؈ax~JpX}4]mO%% UQ^BĶy:r\tvC)Lpӌv). eOwTsjkdvb MW#q1$y p ӌtҍczu[nj\hYؒz6≱12 ̀},IgiuJYkKL4}o~M& 6U\䬎S]z.ĻN|OR0jـ<*  _._wCof9)x5LlI NW u52{_zh<0.cI?Fစ9ٺ+Z&N6|ipӌzW;NuYܾ⢐ e ] vPXRϘ_ X$-ͣ6BJy~uT2L3vBR[k?|\w> _YK-9+ӫT< xIuI7S 54H/KRr4𥚶4ͺv]XHZI^% {L֮S]*K7.ykKҷ?l, ?H#_;^7#[NfHrI?rs~ԭ?$TQ^RqQ,VR  guR0ϯx"&=8Hf*<@K3_ixdTRc<WDJ[%=juLͯߊDA(`fP Xc'?m@Tbvtz$gKL>yI:$ia*!Zݕ ~n H޾5o{Ò o֯Y;IdC1< $WZGEd m:%74cLy1?!nHyx2I]ڽݒ CZm@lٹG{zʨ[0$ۗp_Ȩ7nŏ^^ӌ3QrJ$Rz7 7S%_Y+/`jkWǩ.KΊ~JL3+10 I CK#_[K~pzC3Y& _<יbŅ!VTwWV(DCY% URLx<)K9WVp`y )}oP3Dٻ{,cYgk@9 sѓ-ŶdKFINrSQ9Q\Q)pb;q[G 9TI`-p#bh<:YِIaʶ=CP8ƳfޯO؟]JRCC~N_PKSBܧ\.ϿzA;ۭfׇV4uH8O'l!;Pѡ5 }Ls~37M;%7pHfc@&S57]J/gt›O̙o=C[z}7a<#`*6TVV;$p߆R8L.Cy@IkhB_ &܅+Wc+Zr˯ӧѾ{T_c<ܸyKޏtVb2xGy@kh$R$l Q0:~YcSY_ՙ$t>>k4{FK?ל~󒾙L.p((y Ւ~+4PcZL+D)3jV߉nBA4nغҙRMڽ{|2\< xpbgp(K(V#Ix="}"a@\.s.))z=G3b^/r K܏SC q'U[Ivyeڜ@OFJf0Tz(WuE ? <5 fPcO6*++;tPx]#+; <PRқ$Q8Z"M!M}^PV^奂e4{-pѸׇ~cx湧xx.WrI,%?eGPPvꟕs(j[fc@-M!eoFF' ֫_/˯6ޞh#p>UTT:w&?RCCO%}$HxDi2 iz6V{ӧ:hTVV;$ {[p(9\; <P I$+3,Jd Vwtu:%ol]pUsO@ p\*5k]xV2D7o~(?L&gGPP $R$l 0\r^x5Yto[ \{z{:PA_>ØdrqCy@Ykh[Q/jZ[ete4&Co+OغFN>k~^ oQxp$ g6e q\ihd`~I[z}7at湧Tq8p\*5k]͍t?ǟ:PJ&Op c'mVv]S3$E!E¦`GhomVz9}y%yIG~ouz:܃5$.^zYIϲP0\U\~0v$WZ¦>/(Zǎjic%l_+Nt<ֲ붮jSgGawB~!G%R~wdrQ?%k>hJ`vHd^hl|JJƀ E@3܅KOdjom&xk>e WN6p\*5k.X P/rwOMx]Jp3 HV^d-cS.٘gc6'öMELx3 Nt܅7 V1 Ștu j<:H~(T r۷oPs4N4nizBBJku6+T{ܛEphAxTqK k*y) (i#M>un宲B~!GYQgݼs0\|PB"aS)IJ/g4Pz%C8;e595ɩ*"aS- E@ ~:)7?%ɚO^ǺJ ڽ?_U yI?e7%(+ϫry-Y)%P4P4А$W2}^P=]Z][l+ 7kpdu5$@}0}ML_+Cy6\\cG KjomֲCz% IR-1DˉcG^m!ӳ1TA(SznPYY!܏# @ݸyKR)ʿ$eG> E¦"aSǎj5uKsqK%a-9IБpHfc@&S57x åW/ !cSyy8%Oirjuxc\*>$" #q;UFVYv۷I@YkhB9Cu?e\^BJsƭ7_ Y~@<4^:FA2\U?} 7l:uwpAUTTP?+C/Q õ=^Vz9+WcSJdhJF镌&fd 2C2 &n~W{542fZ4{kt|⼿Kq g?od>:;ڔ5O(dͧoЖ\~CxBxBC,EBj L ågN׹ o~:42{:P̬&fl_D7a*++Ti=( L_\R8gM(n߾M ZCC/j@)kͧ'4 29٩=n4d6Js\ihd k*};pBQ{l^u$JhSEEaK2,; y`@f0cG]W%kaPYˮkz6٘$),GLxff)7t%yIGQl{q_8H:PA)|VYv <`j Ltu()G镌wQT˙e:ǎ6ʖ֫ PV2zp(?L&?bGyۤ54?!b: *J/gdͧ4KrpH^3yyF#Y_@IHO/%MKMl_+Ș>}Qpm/W{:B(;.WP Bq^βQ8aڬfI[%2%;Id^hl|JJ;ѭr h< x.ۯn~w Aڍ+.Cy1\-; y@0$i5uKBj{:6mO7K&S573R/ZA޾16> پF瑶@9AyP-ݼsad%=n@q<(I5:;Ѧ\./k! Y )e hh^oؾη$SQ\*>$" ӏ؇N?dr&&j+WcJdg&f495#U%3P$l%b*08vTLAAӳ1wc KQqa$yu***X/R8%M(nH5O(dͧl$$k46y x}ҫ rPM7J஬f5:~uzy0 %WՁpǟ:0e7Q@ åf6KֲCzesJ=n4(@)t78<<8WFm# %B~CG[Q/[ |2; ۷oPs4 +QuE[[J,,D!ELx܃+Wc+ZZO2_iFF'l]pUy%RCvb>?\CL2MvYxhSgGr'[OuhV r6\\cGY}6)(k OHz?gN0|rF|JWƔ^W0\U2Ex܄ujLC#cg(4s޴}|$ӧ6{FܸyKg}ɪdr$; yJksgGr Y)EVA&K;E.h\gw_(f0 3PﱣZͮ+zݒ*HYIֲ뚞iz6&I7K&S57dv܅KJdl_kz6d| H8H$l8g[udJ0fş\(35:;Ѧ\./k! Y )A4P4脪=nB}0@8()R߉ngIZ*WƔXXvU7*++;tP<(]^sKPe7}6)(k OHz?gN0*\Rz pU)6ej d.BAISz嗗 vy)Pr^x5x?0u{.d.(]7nҷ#ݼsL.eG(({/]5R4nɚOdSkjom mFF' v ۊ q:UTTK?ל~󒾙L.l|[jomֲCz%]66e똂 GhrFӳ\;#cKT4n^7\U&l8g[u]}X yI:KqJypW"aScG^ȚOi.n)D8;e595ɩBMjd金, <x R{kVusZ1YLv$ɩ*E¦ZB2LNFQ^7 {z0[ v~wjpP )]n); ۷oPs4 fnZH^tPcZ¦"MjV l2Ǝ@izۤ54?!b: bPvV^4XX";C24LfmqK k*y)g 8ݻd)ǟ/o%'Q(]=sryY )]O( 2ک^[܍ntƧ v.aH/ޞLGѫPc_$Rq37o)$>$|G}jjV7:m0 "aS)[匮\ɚO)!+W2R$l QBںgc9ߛP߉n/B#cCu~yl7Y̪3$mQy{$i5.k>hR4 r M4=Ӑ6-aS&S57ᾜ8vTLA\@]d q5\U;C(zZCQF%?%(}@IڬfIι Y )e h’ KPǭ)3X5;}ҫm<.I#vs\.&l_|Pݣ PLY"@yH.٦3Sr5V)N]Ԍ&fddMU|[O>W~y i>/?bS?jm(z>Di?n߾M ZCC/j@)6 x@\^sq _U)IYwtjLC#c;/O0\X)0\U:S<ă2u_%}3\\# (=@y,'4ldƀZB2l%.o~9yݻwBeio." d=vTuE[6 캦gcHxDi2 IR߉n3Jdl_+&{(Pcy8jBsZ$ŗ8|\./k! Er B Z``P H_7Jӽjom&Sz嗗l_̷%p***i+?je ٴ|J7oe%}#\\# (/LR$l*6%mNԞ[^OdW6ONpU)6ej d.*u›ydq kpdup(@Ӵ7n!3g)@yb<yj5.k>hR4 wl)Ė+Wc*@Z WgxPf#Mhrj5^yI†#xbZ<%O'&ܣ[jom$E㖬%-e hj{H_5YekI7t%J6S˾݄ ط xHGY"EyE¦"aSǎ*5\.`Zv]S3%H8TJLﱣZ ogHd48u_ՙ$l8Vee~\.篟~zoA7駟>xo***rU}?߷?aTQQ SmMlZdm(+Q(({rFsqK W2 W`@p iz6V"ᐞ>}Cp[O8BC_o_?oƟ׿ο/wuyrp~=;J2vGb *o KܽL.y<ry-Y󩻞Z^6 (|¥=uD=]^x5߀ޠ޽Kj~|vU{j>O 7&J@vUVY7\U*]k‰'yNY_\ܲdƀZBM)"\^/Zy?p܃u Wg{Qv%U޽{駟*o_?s[[ڿ+NourUmO{O&K PP(p캢--%(I$Y7x򈥗3zYpUio#(}9'=qrwڥݻ?_ڽK 2\YvN_7n*,=Dy9=JA.\h*To'zejom]XA֪o=)pJdl]z:PtVZ]$ZHjn-Wt+W>Yܡ5=t@#k>?Y-ϜL.>vEg.6YR]5 4镌+MNpU)6\]@J/oֲzmmB˶+^GšOI,iߵgc=VQdt+'$ I2oۻGƀ$?n( ϫcG%m>H'g\~Cӳ1M$m%l*d& ;叕XX}’w TA%V>Q~ZLiƺ h=֨{~]'LP(q5R4nizBBJku!’FF'Tq%l )6 &Ϝ>ϿQsqz6&3ؾipx5: pvN_I܆?W.AH({:-P(;]O/gdͧtjL 찖]Ԍ&fddMC2 =$3܅7 RS+KF/~W{:BI絴Nz+W.wR@MʚDѦ\.xBѸ%k>4r E E Izi %lR~Ha߉n>w›w) OپN_o7@lZ|z9['x(@f6K,?E -e hJFq-1DܻHTwבs pI'˺=8W~y iYeruecI !<[jom$E㖬%-^_XXڞ [qojNvkh)VdI vfLi(6HTﱣJ/gdͧtjN]Ԍ&fddlM6fY)Ml_+Ș>}dA#m2JoP.|=bAyyyѦ\.xB|JѸ\~zi %l]}'^䁋h<&{h8yy =nt"P:?s_(Z][jOHLCyg.6YRV~LTKlƧd ji l 0\e@IxL:7Kjv]m_lI%uk2i|jɴxi4Q#g2&VfnZHmO_Ǧ\~Cӳ1M$If>d.6 9}\.Y77%Qs<Ҷ} #Yɴxk1-e#"|y[mhS.S` O(OhdtBZfK~WǺ442fZ]xS3>yyhǭ#\lǴx1-EP åHT$lJ,-E'^kuMNhrjFJ)3PK8g[^hrj6 t'jv]m_d1sZښ ϴx<*bEyyyա캬qK|Jm74=lLC^6 y}lǎj5'E Jd48<ݎjpxTt!K|ϦT뭑i:ۻp[jomE/Hd42:!I6e';M_o]TLdSL^}RR_o7P|;M߷P <JB$l*6{Y)-{_]Ԍ&fr )6eq R߉nfA80421Wl:}'e..*1-zLp&(9~W~Wm'dͧ[)[;I4P4ֻ̭=e?}^奂:Sx`px.8 ǴxFy%0\jomV{kn3r5&k>JvHd^hrjFJ@QN7kz}m ,i듗gl/*vsvߚ[i bZ<(}^;*IZͮ+zݒڞMgcI,}x Lf&d& oB9HO=nClQkwi`w*ٲwow%^6kb 4 V-^ Ъ-!Ih`ip+IL̼_<|~|{I̯'og43/nW[oEvC@$ikP~|-~d8oZ"222]7|<:x}IXAu=*Y5.>$>Ry@:/^sp:2U^:CsgtƄW_~-m{"oj[WZLkž|9No0H$-3Z+9A$`$styI+T[_G#k ŗ^5Lsj D9_?t_ãXt$ @Ogjy !<%_)DH (Inr͝]kѡU[o nOa"FFF ۢ~~ɹ&"?Y9٧8 `}09 %m7-)i&@ )ȗ422΀zq_zUcO3/n1)+)ւUI5kRt'<(!\*IkZo&-@r:rzX>T?O@62z\?m٨o]N9?ӯ@t#Sݰ82d-8"o~ p825=CaoBR*7+FX (Z_8zLwFĝJBMq /۲mUe-87#2|h->s ϵp82뙪l2r$aYVIj0j%z:F<[;\sgK@ӡC}ٹⳜȘ"WV.\,U^7w-Q%f"S |*k*3Nz52zH>XOjireeʒ+! Gy>JZC>'Nf ve%źfczP[_G#,XOMp_ScHLD(H]X%5*d{8Ծ/wP 1.#c\YYrr82)=?@=6D+h*-_Q{ն/NFFk8#SnW\YN9eL%@yQO|c5=ĕT)<thr͝].Zӯ}' k +KYYNiii.%z)<GiVW/_??_GW~wZ<"%#c\,r:xCJR yI<|[FKjw_ۢ={ 0q*To<A$b+bkB 22`zr,**Ua=El}PWXH@,p@Tc-2!i()*.,e%L͡8@ pJnir %q-TDk&q&D؋@ )g|i350HqB[no_֯kQ>IL %*DE$"<2ʕ$J1tfRy'kvzIhۖmKjݳIZfIM`")DXia쏇DD yoph8anx~=zMz7op*I XMD B(`XZ4 bӔ?}N% JUTUԺeBI<Jˍf"p!҈dccuIZ#"(z..+8@b}Yr ?JZce8Lya3ZdCF^L%*4^ bTvki}xrۻy9TvcLWL1LcMKZH""TUeLB jnxkV?V+ JiB%fc` ༌r%5IZFKJ IDAT")==MӧiZT1WFKjmT랽XIZf`8j40C""35GJKrUrUڻ{֯mDxVHZn 4j432Z.iU8 22*Rqayގ)q?+*f]{b|bHZe5v}>+>k1.Ik$@  R^<]\V"+0my }jg%%T*i1cEtHfc퐴]RD ! e]YD$Mjir݄8Jnk&q()+YR@ b*RƔ)N*5+an;ۭuzɵMXMX6@ 3j%ii4+KeN% ٟ yK+ y}^dX!k8EyHAXˍ$!<Hvlh5%D㑴8CyH!XvHZ#DDÑ<H)RX;:{R1LI@rr8?=O$488LQFKjmT랽b %m7Z+1" Q1V?H>E|B@edLU쓓7s a\p\pޣk[('ej$5=GHNiD$'c咺$yQ♚R<TTU=?xUVHh]c$!@1ZdKQ%i}*.,PZ/7 %S*i1cE$)D$c$DNHǦBeLe0yfTCh=zMz7opBIۍJj {H|\1V?,ؔ33`zA vTEUpXOk+[_dej$5=GH\U c-K*QEi*(DЧ{VjuKn1؛GƮHPdk5JI@4]YD.WaD%R*i1cˈH<bk,i$b_ IaZG%VxIT584L1@>,1V1V.q+@0j%ii׵-f_" $4Y> ).}b}BY&k=0{3Z$Y_ r}>IÇ  ȔQ)@?T_$){rc$'>'=-Ms2}%+!Tuzj]^2ؓG*c咖=;/z6e5SBҰO%p`{9*NWZq+ +8u?}_7|Go`z$J Tvc_)T"~(6c+A*Ұ/J`2GV\X h'Gk߾_OGI N0QO %#)9B$}Pld׺6*P4dHN0 mphXP.p#=gD>a1i&(6`u&i`C*+pJJH:GfbN/ć?$,Ƿ۟T~Z;kޜY- %zHZ36  v(1bPi~iO٬rq]L4JKK# P|@Ps>8?颋$WV+w^ @j8D'{Y(i1ZI `"<X Zx}^-S@RLQw:y ޓ֎P|phX]a}'BԯةT0=/b'K6 HEU~Qm֯kQ>Bej&<EXIjTEBi״ܩ E?Y?H_z?Ӿ484aefd#G5<2MBg*cKjT=y$kB+;@c*44vwEi)!==MEd @ҲS!>\?Hy9?v'7GqSH?mJvc  YRh)6ruӭ81EVON0$D.ćskoCs8yj QUFW.Zr6?ICb$c5=Dy B.S44<Rە%ا4`Tǟ>X0ygǟ8 ɛ?MTVR,+K4oŒ1B~nvki}nfJ㑴fl!E$<\ c\IV\{b}Ai)35GŅ &OcJ -f l!>\}gn}] (Ww*+M'KOk D(PһXKj { 0y `U+Yĵ-֗-RJqaUVផrd[paN/ķv'鳅?j۷_?{j`z^x{kxO L Θ13pJ}Nz7o=x$1Z.iy0E$@x(a0ʕ iiǼ -]VJeP$#SfF2p8H5p?o߯"ZdG!>|;HTӽ߽O{w-jݳPa1w$5=GdHRҰϫ4BW! r*.,PZZa % {?B|~=oL`@ {K?VcB|?g?r|#DHB9~'#KEU*z@{wW`PaX˃y<%DyNKj)+z^D8S!^Z;Bau&} t}5 tr2~QQUT۶ZwPTvc͒."Ύ<pX %yH#\nnVK)+==MEd  # o+_o߯}IbVȈPB|{TFKjsԺ J$i1Vc0DQ2H#K7r22*pB{vBq>Lϓ7$d| X>V nWJ%?{?Y\7o s .n6TFm~n%H1rI˃]D|y4X -ͯ {r}>@JsdF p~ⱁ͹xةնoߖ@woXPwI+ğ<284pPcc?!?fNu-ze˄U5zXRc0sHcZIMJI#UVផ!דC)35GŅIo/g[#;'"Qcӥᑰe%%1݃Cza#/]k{ \Y v]w <~lU } P@1j [j:݄Ñ\`'B+R7D7smH7Z%5z~ݓ? % 4 y$ cZ"WY{V[# ,E9)s_m<v/}#2y5Dln-Su5כyPgi+ɀ<1VBKH#~f뎻REU%a~ H  "ySɬA @H^2+? iR;>w~q %>$k` Q@B3Z|)ićWKKj8yD㺴+Tݛ?2r/ sbG6Z; Z;&ɧR?myI׵p IX˃DEy ilmQ[n;MyPǸXV/+qZ<| 9h++)t84oάw6ljx/ݽ<_W_n6ihpPbTvcX@"<cU+IW_}>#==M%VaQX]?߅[we9 > {f뎻REU%a@q}nJ6" PNu {1}2k֎AaGBY%5ZE{Jy$m4,i9+HswzI a1EV<78JU sBLclhxĶr9IwL/.F_n-f]qU %{}%`;X3Z_Hy➕$ L`aҫyKz$g6߶1y*x }i=Z JlB[=leld(ǜ{V?<0 `?zyIzN8wu|2aph**ꎿK.7]5X-q`5k+JZ=Zxk-a@qR6mmO sZ;K < B8onw0ƺ8`\@ܱ6?*+wɝ0灐a=znވ/IzzV׶)ϧ@wzuaVBKqY<AB@sgջRj^eBIc5+j7-a}0'!Frs>/*c] `m>~߮LKj1Y)zl}?ԋ/{zVv쿠koxj3'R =GrE|ޜYa %= wIhx+\LKo'ث+# XyZҬurg q!&SO}zaO! =vki}V4늫"cqU} kyz@B^.yzƿ t|6mwEZJɬvFJ }HΛ? ~:%lv>%b1Ǖ}Dkrv~r**  (p%g{7ْ ?i}Ǜ d~{< pTTUjkvc13Mck4SW\}z],8!&3<)-_{͟u'4aӖ.'ݫ֎W_|URYIJfxRXre954<VF85oά$/z -Su5כy@bg|K IDAT;`O#q Z( *fJj4bj=+Y",==M%V2pYK[7b>b{~ D~&mKz9rjޜ5o,]y+ӗ8y'B3Jfe%ş8a >w=;G(k`Oq Ҹcm>\nnVKHN OVWy?.ܒ+=۰a]yZry* P [W^{;L&chxDo۪moLSo8'Y]ksu'J~r֯k6ihpPbc]X`Oq ݲcX;$Xc披#?JqYSrMZ^gaxֆM[t?|OOot'OlН=mشŶ_Y B7Kꊫ"H1֎v DyD1V] >[# ||ypևGaӖ~ܛ;[54<xzV7w{POo񋆡=y՚B}{Â+{:[ӽ߽O~y}^@$P15$iX ۭkkUQUI )ؗOQ䙚iS 87w,WYm +'OCIBo.*t)=-Q&WV:+Qf(ta״lӕcv]3YE[I514't$As]Gs1@s:s^,FSOACgIr'j-_mFmyIT(t>/:}Vee AꪬQm}Y$31qByL?!ii$ǂiw֭" (g$BH˗\+W7zuN~#2:@Wwnh;G97 7#VD:[-{E_ۛԖm |$ؤI.t㝮=z7z7ƭ$ݗoGiWr"ҧǾ-2m֠MO_'ȗ1v1vq)p6Ib|ݧ]-{UY]E@MsjNbO?pjR5t{dNS卷ϝ= *gT[wa$ I'BxQ6,鐤$xJ=֭geʙ4 8wt+{5.θ=. ? H5㵪gjV(\UI1:S-&c64gYztkvljIR>T  OD?o=W_S`Y:G%@fEt.DzoKs8)iF=A>8IZRUM$\1'X~we<tS&+dX_*<;[o걔3&ISq~hm/)JTLK"PQ`p?p6!Ofgq.^}>Uq`Cػ"zPeL? 4/ jM $٤Iש|j)AQ.I/o1O~:3:g{%^-qMXq~)˽lypiiBCg黻;@!7yjR2Һ u;I]Jm@&i'\<.a]/ IX>ҽut=5쉚a o{IyBVK erZ0/Otkzp޸=^iq kJSNO]ݽq]Dz$udep==(d`(]-{ߪ}NCXՒcoDz \<3.*VH7-RM,Ɖ]^,?pJŅ? kWb.0Y5YǾWCg8ŅZYLKn1%E?\Nizpݛf;pCZ[}Ͽ< TxBGmPt5\wSۗݩ&_H=~<FcH: '̯70qT>T9&˕D׳DbbYKo]`bO+xW98eIzάt]]-{) )rs&B&MNeSz9~#]vʽ[/!UrK"=pogCkWyJ\M\;p"j٫wF=ef=(y4g}VFBA5Ѻ e1Ir}Y !Da„,iS @0厾4dgiRm}ղGA޸H|I/c0. Dy cϕ&i#i$NR[naUTɬBQ*o Y_r|Ubڕi.M⫶n~UX5<~.Qi^Iդ>o>;ZF GMtJ HAsf}OO>{eE7#&X&9]ݽ]bڶIbiRߟXy77RrS[yA1L;v6j峸Q8K:bQiUS8 nZ}$ &LRRTnJңEgHfJz: Ϟ73Yܢ-/-._Yʱ=Ϻ;ܴ0qc6cD(c$4_ף[e[<&^WR\I@R)>,y>9Ia_R֮<_ŅK7³C2gi˶=)uvcH}R1vCI#1]]-{p1[T09RQ,_ ߏk);P16z. ;~Ҥ c);mbNo&8z3=^g<^l8[xx%K ɗ1cH]R1\cvII#1e~mozR6g<"&LRRY<#}=po|Z\K oݬXZ}ne77V~ B $g~&mozR2?$jIms 5QHAk$I&ĨOO|FUJ[RGWwl{5/Wֆ)ϙ_نc/)"^\YTVWiW^-0ZczH= u,y@ H@(7)bj 5ULUxv<.<{^z5Gیac6QwA?~玟W2^R0T%Ec_RRqMDZN. /)ΎuWw=ymX-P)cI5HH R򏭒FbݧںU'`UZ\HH ia0ƃʚeZ~CP)ׯXWߘ|9:{.w+ƏH){³gHb*1vM$FGy c?!qHpUי69{sBHReee$Ւk/q;SoF TLI׿:jVi⛴)/1H8O<MgYZzHqHaEE1@Y.SiGm\)UxLd ]3A*Dd ej#hn=(<GcH:gJn٣! egOTiq!A$PQxT.|_;EXwYʨ- ۜY&ZX8ƤTL@b֭Rs*(ՒG>Q cfI/kxGхSHqenL+KKoꓺ [AZ)ӥ"^+x_oLO|I/c0. o1ƞa.i#iRT/_M%WKHd3:p77 dޤ޴<³grGY"-^jxFm*=* #1VKj3ƞKAy#Folr# ؛N')TuM'"oHiN:W7GoqsA; @|m:L;v6j,j 7Pg$eGLSyYxrsĜY Cge\V8?Sg =$]hw'Fح0d`,ئeGLSxnz_kDZ\T _VLOG>8<0NFglr#k„,O-%dt*JJc$ݙy*3ezmB4>7:k.1v=QIf]`}@~ /ӈ8a<J[H}sf}s܏왎IT+%X nMRqc&'/ݝ{Ӎ< FG1v1vQ$0$2mVF|1mH/WS& ?{׹L4 G۞qun+ ںUjn٣@(HBRHIbFj҈=M=&Pw̘‚t&hkF4}_/[ 5CAjĘ.1v=Q$y3.0> i|P'҆u'XJΙ6:<;QFǧkF:,q<{˲HaLO[  ($2mVF0m,UZ\HH+nʒ"KM&'rcEh08{ <=\Gs3Z!}E$y1^|5iO d<aJ ([\NYͶ>]iz칌b9>~qHlׁčHSf#DI$~jӮ=L@9 v$oN%qLJ4lܔN2=><{&/\()fQ@Pc5.WFN'q =q"AH93L?l%Zig nVi&Wc|PzxҮL钎c@|@FKl_ף4d*-.$]}|^ =`?SlRT|1mQ8[_>s.~ZWs\'"}J' 'H]Vu֫J͍M$y6Ik"3ycϐ*kto*Yyaitbm~άv%PLۦ"7 uh/\zH9ҡoe~mܼI|d2˗+_߀DJ&PQwt$mT>7,_mFwu^8{Q/W 7.,˧:58tv̪ovy+]1[֎qvoxx!k[-?SZHq8GycfII"~ܴH71mRaݷ2uiQDXDZ\{S0, \/5VOd4Ô;Gǻw\ox]Ǔc1t?ې+18]cu3eW9.^-{ؤ? ȗ6IH"^D]gYztklk88PX09-P4EnawL^8zrT$?;/^/%EMCgpCŤ/R}kO-ӎZz,> B?(Gy J#Nhx9DAR>M|‹EI7D=й>WB)7q_%䧧us#QN/٨@(HS-(Cy OH:e#eicg#WVZ,޶Fȴr8ZvxBruǛi쯾fhA:*^lɻq5 IDATGDv77rM4>Ip9@f ղGuFKz(O!UPP;v6{K&]) M6Kң5-#EO76W n%j}u_vs^%xwyag$8)n7=)0g1v1vQ\y+0ƞ+] ҈ںe, "SK M׋Ӕݔ)'qeqV:sfey7 7_1n΍dn4/1*-.DҮZˆ[%0ƾ(.o"\{f /sڸy*%,_|.) V_+_Q,<;„<ʚWh tX%E,^PB{  ղG'^6n& X d,cI4\!bq&\W E&LRq!0ntu)<;`^n__s#3+\M.~"җʚex*'R 9^XgTGWw}G (#:?:MIRϺ p"moئAFc칒j"32yF:e w޺UL "%EL4\"wZ5K.ϗjfڗ֮\.Ņ Cgip,_t)ŝXr|ֻjYɗ㨘9ON_`plZxHoUw576?@bwطE"=2 LcFR(gYztkmXOq@Բ'` Ar7aI^/)7vyݗo?t^r|}˗s?3+/u7X\g\=^YYwdΑGvH١&%ECC^׏w!FDZ+xՂyaO䦔yP &wS*jlRW#@F0.Ԫe]Dz'*dFX>Nyv<_ u13P1M c~qydq3!|4t©6軻7b\MiqWop){58tNhA?o@_K2J0ԎF=sZ $vJDzNHw@yUt҈M ͛RB.YEAztWYS3h_Rv!=m=JT't~{KrqZ")׉HYW @F,۰^Ujnl ĦZR1vM$F Qi{$w޺U,< p;,_|\pBGӡ)L?z|x+RL=:A]{ѯ܏hWZoKGw/} TL<&Nea7<{^z5Gzu@y.;[_7O{^xѯ.7ݽ_'4Rg]?ۢABq/_!c#f<H 4| bE߼I@:\]6L]WwN_8e>}ټ9v[O~8œóg_VFew*03]M@b H<Hi4l \Y[! qy $7Q䧧36KÓ޿,UWwߘmNTfCgϩWi |E=H o}[$ҳ(@*<R1vVI{PP[6?0$9ٯ3nLVDނyEAO{?pzLў)ۑs0 +rs YYzޚ^(P1m9;Zr._RAeu|FĽ3$DzsFLiTM,K[50$UIQ!.gKF+_ߧ1'q)S<+Ҏz³ ĽڌD"=<c칒4\WUj˶e.J<:&PQN+_JKm/)Ώ֏_^C_oo쉲|*.Wqa(P1|_R(IAYBjV)\] 448H Tk@_ 3HOݧںUdI{NLbcr=QF xz³CWBtə;oY]-_z @B}G2^eu|Fĝ|IDzxy ͒6;>Җm " ォ@||:D̙uiÿwi!jeX$qu,٨}N/<{@{{n$ҳ(x<ƕ1vV;PP[6?0qCB \i8,oޤq?%8 (P1M]ݽ{nc_w#+Ҏz³ ĝڌD"=<H:c5;PP[6?0ʟ2 8ڹ:&V] [pu7l 8/ec#fDy$1IIwh݆3J Hm~\~s_7gkIrY\⤲J[h11Hg Qd<@R[I9ei݆}ٝ3:$ַq$wuИR<!@S˴e~E?Q+{"3<H8c.WsPP7oR0$ y 9n\B$OO8nzUVWIC\vcH8@"eH)8ʒwhGS#y3aBSp"٨5]R1v QD<{#Iù|D7ʳHa{oZWa? zV^!H{PP;dNG>gH !%' e~5$ 4aB ) z SXy7o{H FH-ivCVX,^JF-{/;ی nyMjp>m +" V?`(]-{$ wnf=(@Pqa=W IդϲI֭" ?e'N$`YڱQu;ՒG>y3c O' gvQeuaZΤ{rXWw/!@֭ң[Xڅ|IGy7(^yǖ,CZ?08r}Yɸ|_s p"n٣@(H7~@,(׌HO,K7o" )`J!2hjԒw;|N #cZ%Jzt 2M@|r g~&C!=qn1\IE"=g8y1 Im8XRZR \\]Ԩe|EUKj)D<~#ݧ;eԓ=Qy wzyc58OYڠںU e bYղGKAK:2y65Q4F~Qw$ jF-\0ʟ2 H͛g p-Ucpq,iv45*Ryq#Bqt;cge~pϷ<,ccVIIÙזm  MB! vU0[mf]@r(K&iiDgY0{tVIm3\O=s%K&BAn٣*0~Ͻf\Za6~,VvZRQ獼q&i:iDo;Qe?ϔ|S&+{D bGbq;cge~p&_Σ<$Ik$׫~&Y L#<" jW^* Ù|I/|@yHOHOY7=aHW ܹ FLt|\C i5ID/ j)տLc1vD7 h A]_VBX2Rq!dnI0h]! 2y21vVF,C6|]VE_}25U~ʙtn!isC@99@Ξ)  C}|q;ңl Do1\IE"=gCy 4RoTMѫOu/ӫyɤ9zczc;Ir)3x NǦ8@jw=i:?&UKj3ƮDzN<f.VII#:>RMZxa>WtuZ_?Yi3+`4HŅ@,j٣&O $zՒڍoDzډAy 2RoD"JPP7oR0$ R~?K_NqVPLmLVVVA !@oޤ*˝|}98 k$5|ܴH7ʳӟs3:՟ɚsCPn:JK q/SeްMC|IDz<`8$۰ HqG'ۙ~WJn!`44˗쉼e @*=6uu~L o]4OBHs$&,K6$ ǽЇ҇3Xց IDAT NAS4ZMjnlD)c칑H }Q QwgYڱQP0H1= LNt AOc*=q=Q,O"HV-³gHVcKR}$s8H?HCZ%J (iW W~>TzI_if"ɟ;vӄinee HtVKk}zyHqMR5iDg;TyAf8uZ~?\J?:~ LH|B MݾNf#)GZRzy҈1\ ONYzuO A~>B}pL}pL7 h A)E`(}ѣ6cN#v =P M$1.0 >RMZxa>^iOSϙPbS;w O?)$$Teu!Xyv45{ZoSN@O4@y4`]#(G_ףW0$ Կ,©(ל NTz>96iuʙ 8d +oxX0?h!K:b}$s8HmHqk$'BAhjgi_fֲ]}$OVbSD{DwS#2576ihp@[HmHa",Yz7o"܇X>"cg3K7 02'&LR^T /ҎѰUHtcψDz RyR1II":n_v'Acp٥٥W 'k Ad8XWw/!@ ղgc<1  {0f>>c.ciCzb;j^v沛bב}J\{ڪU]KVmdc/1 `cXx $|`~<J 3Fx dy^<)^9jv  0>1s.܅KX2ݗYSAB dj:ެu<M-I}q uP P)I J\:z5YVUK*}keB2\{#waf:xD%K_@砤KoGHYIuJ2 \АDCpI9HޒUz =祳 "r ~N{?\%%OT @ Kt=<)4 /S_'گÍG 361AH`h:J/IV*K% Hq7NO;z7tKRe&TY6J$ gA!`A 0^x^қ 9%mnQ P P_#ڻ[f֟YY$itfL߭֎nyPfWWAjx5rM{\KWi* Q Q %FK>^x z]0<@kb[7a昻J_]U)L,9)+<xXu;tYMXa?,mtɁ<I4'%$KWm9@fe][z^݌}/W]z*t櫦ʒy􀍜yXBf,7iTo@v0@(X}H'0ʱWU[0@LG=_du~)E7<*)J^g^:w]$)J_]e\*= Gr+<i3tY?_̻ diHXE.tRҷIcq{M%RpWGWд-g79!@By7,i+$= <$R?+4WtYFA`WVAEmnG5 c~C Gt%8#EzK5UaE'܏|O<<|a,Κ{/zVyV{z?8 bV8Yޭ֎nnp#ϽCӱU_+J_R5UJKgA֬YC6> c dqu@< 8|g WMyiWkMCEz.vv0č>Gt/(Ǒ*K2V9r rj!Xm5hї)/-Z#VyViw*\w^|%{A\ԖswV{wר~w~*vuy}#'W+Wcw|Y2VѲ*W+X=Ҩ/,NRkd8XX!'0toC`Ac][d}ѱEnuzXǐD@T̗U^mXGF8Vgxh>?@Tx=+<+N4XibѺvlI J/)Ra~UzI,ߤ*Uz4ksٲޗx Ud #+^u8 4{%EUz,5o*"XWm9wWG)J22%WË>vp̣0H~x'ҋÑ@f;xDǣ[h7p89F>$mXzk,Ĥ# K).*GQIޭ\@sOL܅K:w$RVyY*rR[~| Rо5((L](餤o(DilS\T[ҷwkt&1>1[WoT'418< @JzaN4Kw4ƉCy)ΟTG {嗴k˹;=e6U>Wc7#>v<@|TY6oRuE8Xq5 ?oXuRӉf|\=^Y7$5M^ Cq$Ĥ:lZUWHqQ7< JRH?*'&u%pIT]U)Uz,*? <0!tYG4R_\(p(L痖kj:,2&HN{~9.ǡ5Wˮ-Ue*nu|]ꝵJ_]U)ks KENBi3tY?yj|@FDye84.-rjrsW駂!uz}jm/ӳJUGedm.c>9Zˏ{\r ^ h>3&Q>@q~iKU6HI Gl9䔛㈭Ko:>V MV%Ե^2e'4U-t ;D8xD(/=DyEP_ZRfy;w-箋K7,[/tG!c?!Hl>H_SU^i!md%7Qm Xz< 8#mڻC)(7ǡ5]*J[ 9i}r>rUVxz[j,VӌÑ}O$ {a 睤1'{y<; h|bҖ?~{d[V/vt;*|SU޿[V)UW, =}@%ɫ4$F[(0}s/ !2%Q-Bq~ad2oO.]lXφco  *;{oXAE\\H=dnG5 [Uzy.#Лoh>3&{Q%Aq~aK/68 ,5\g%&S>rՖwpa!8Yޭ֎nno[) n<"IGv(Uz,5ogJ<2Y&ϷwvvL dc*T0[s6N3_% ,)( y@ʣ80EJ|oW@]?'(dL\"vV{T\TE*gu P_z@ڠ<HiFqJn)ǯķ]BH}ʤIuش<<\k3yÍGT[Co~0E(RmQWFqa%X]>5Ijm7 IDATܚJ@ZI@?? Gy(/ɧ^N].$LYo|ՖsVn,K ?Ե>#^#Q' I?o@ @Hi)(ٰJ[v6') [΄I Gl9y m׻#@( EyR(/<^[v{uK+] r7$I\$Gv\ŅErdg߿{N*re_u9<HŎn[ε(Ry@ʠ80@j`%X$I|#VwʑGv߃촭[Uw_MOLr'vHt;J,HRӉf sJ:Y'@<Hz/^&.Y]tYU+ _*0x 2 n\H9>~%c Yrìۥawmy)=?8ɖs b X$<2E)@O(Z\q4fK|V@o4~ߝ t:i mQx6pc#XVG2ۅeڝ5[d"Z;m9zEI`z(/= %P$- K#\Bn|Em\%.}-Ryy{wJg6{;?/~%U\Gv{xۅ* H s iDAP_z@ң<HJyIɫ?Nzد~S5XzyD V⯴ǗWkcp1:>[εHS#EQ$5Cq~aP._@@g=3֛PҾh<H`%XK; 9yR`}~i`H\jkn[έVI@<<⭿O^;׽(y@R8T(Kү~+oxzK*qk U=\0+x`wFį>kٻp[ey͵DMǛuH#z@R<Hkj:ќ|#ooN鷿9\Èoǒ򃊮n)ǯ*@[/9%]_g%>y>.{~qڣ.@@ML囔 `f CV'餤g,(IQ%>Lc*~?Ho~BK:;wLv_*%Jxx՞+׮UVVרT‚:lZgubG-ZYp#.@@o7p(ɀ< )o]V[#O6=^ޒ$J\^C7=iuͰ <+X_H嫶<rnM`1u4ݢ@H.R?Hwbq>U:iy$k{xkcI򽿟 kx8\~ߺPowOa%Sd%>*.#;KTEH<_hrs\x@Dw g8UZp%P_z@R<XUEq~e}GÏ$IK7mʥ˒4k%^X-ǯė/ぇa;ӿclbRC[fu`(ZX& @Xu(ίz{/~)WKvz=ްgY=+*~OYd%>Ǒ++řoawεr~GWz=e -?u9<D]*鮷H @XU4o,Pwm,d1?יwO̻%IZnԺud+5%R~XGjzJrK[?yI,Z._].4 Ng˹,?JHHn F~QM}8IFyL}Hҋ$qW,Ηl,IӶ} <{J|t9xXmm)>?4 12y}˫`hږ4<rU^F@D ?_̻ dM= " (lg8?K:磶U+ _w*ǑY_򟟙>k *.*"|C74:~3VoRNk}! ##D^'Mӽh% (lexfpJW~jڮ6H}NL\CgwpQq:>[έ7Y#!0 rJ:K`7Dg#ppqx].I'T% >ի`hږwUoZEwܙ 3/o?s}9},YfY{rdg'mbWy>_M+(lGy` ʄ$m!̯}{J|t9^b%t>oj R|Ν; ^33sNϡдnV]pQ#?+kZ]}/8UZOF-h gBQ%STR<|+X9x˕I`H]KyJ3bڑܲ{V竫,n\`PSҩ8q< (+Hy)x S[._5]kb皉]I'HmC,y)@OP W#L+ܽ=^.h=~%d}Q!S*?ZGZ]3p Ν; ?тr<a˹{U&&5lWCӺswq_ܹMτߗcJ8HGRz9 XaU'锤DHD9)1\$k?(g:t菞o膮]׵\h)xʑ}grĤZ.__^򧶜.ǡ]?Ν; ~2|PhZ_T<~7QV sOq0MIoQyC3MII&0W+T$r^UU+u_/ǯGYU_luXj˹*ݺ;ry$0uH2F^}zâ<x(A5 =ZF%ɵĖsGb 咴L[+«X?:Ř۴0 r%Ƕ'&m9îWc @1 5o@AQ<0t(N4P4+|ի`hږVq c歩Y}[)C;ilܸC@?/ By$tW| +;WUmC33P#[Яk}?:krdgikEV|K,vΛxoƬP'gO,{,'H͗=!B()d@?NP,4݅N$c%z|NY hZu[&4=>u~n)>Ru}> זv[%Bt~MuU UyVJWmdkEjMLxdC:OG@PW=DXybN$v]3Wjy~cU MZ2=wݼ5kji&GvVDL,ϝ&]yG`1 >1u'8&O\7<a -п  $4'}CDyL}R7Hp$d^udgi{UWUH t7tc֪i MϨOm]}7b|dU+]}߈':61!mY 3/߼55?xrbkU0$ڝ;b:z5}QS4M(CypHq I=kc-Uɕq^@w]w#o|C7tVZL䞝wrv04.\5!\Ԗ3*%H--C3<0M$ ,g;h>oω<`t_~I>@Ξed^_3cUzJuﺮ]gAumvM-mΊVɑE@2B& ljt%=񕺄Ϸ\jHq~- M*54ApymnQDQHLI"|JJ^awMdT\}$kJG\m(-@IyV rUE0GhzF#c/F lnD(-YO@$yaVo(2MNI'I"|bܡWzf//ƙoșow%A?kqnޚRK5]#;+V7K7șo-?}˄'E/߼55M}#9 H2ni=Κ{/zypGq>\%% ?3Jd[+b%BxLMZwrs]X;jUm{B3|"͙APX:xDM#h(@3MwS8/Iџ>Oq%ϸbPB5d@J{mGu]yULX2~u}u!~=~ >U|+4= IctVəoU,M$/ UWU=}@a$n  (K8JJJ~&fkEVi_.GcEz֌SUtGr,ݠmrUa?}tQ֮}D;C# <&B@B_!2~} 63&fqo$Q@f<"R$J^X̷X\Ņr*gfҳ;:󏎫Y' l`eٹ>??}BlS"1rJtl}ۦ?LӽS/1pqx<0Vrd|8B۫*$)Vw]7oMPDhzFm]}jSA^D _cGbǞ M?:.c] T\T-pQW3$BLӽh% Ho Eg%93= 3k ztM7Tɥ}41(S ޯ{GCӒ¥xxm $% v#wH6n6n(3ߐY!wY=-z+WM@)))!RYΚ'H_ P)Q8,Wzf|6 cUzJ][."g>I@kO" hb2{|_s.!I]YꊽmEN$߼Kc IDATmc͛A HyT z{q@=/"6gzW~*UVœ| m~Õ^ndtiO|C kH$~TH04=kt'Hu9Ċrfjej:ެG)Ї)ܷI(@:Cr CM'Y8IvD+ U\}$p|C7tzeq]۫*:ߥkqCӒXxU*. WxnRnd5>Utz} %rVdGu> " H? ogza0Tnv PVN|CV*g?׵w=cϵ~ks .KMbdX_)vװ:$mB_|"4M7p( P4c?t0s8|,ǖs)''GvVikEp!Jg|C7z: ݼ5E`&~ >~}||Ajq2Xo !#cK Dz4ݭ>IAy҈iIz$^x|>5? P&'9Wq.^.Ѝ+G&جQML}< Z7~6nA~}sj<T0dBgJK0B,z;@( =P4a& ŗ_ҾD>n|%gƗ8cUkПk,j#/߼55kf MXYwCkM=N{7J(@0MNIۡ.0dJ^`y,n<׎t4>GyRi .;3=\ƒ_ EsU\5 7t#VO߃Y_$Rq‹ {Y ;zl9yv0c!&oأ_~Io~0RFyRX8V^|ZeWU\U`ZQh"׫$($ވlF:bG .H+ }5gbԧFh.Z-nzl^6`ܔ 7`㲧{΅ X<^e~YbӃ EkhW}hZ_n55Z[%Y1M=)_7>.PzfB6G#/ߟ;n%޴AU(yO$uha.Z<s޿Wݽ=LC HRVwڼtlbRpmzg|/\ç>~R>HRk֬Q* zB!YF5 ֨rZ5_Vh\L9Och1~_.7rV@i"<%OǮ|iIצ I,'O蝶_J4xc< ~ ? W*YxTU$,IJzj\cJe65*RP(ʵkvm ĪtNx>y#J?${ofHGs3Jy(AG%qlFN|@6]@k>{"J4Yj̪Wm|> g?@=/I?MSN5)Re·V"$13VHXMl  yO$^ (-,tlFV^pjIOIaڼQ{w;c28kކtc/mkؖO(Y;m-ͿfHVtG,>"aI !渚gש\[ʵςg^uUްR7p7PN={zu͐."@<cfI$]CCpvK"J4YjL?Jn/EWwȖy{ڦghuDmSҚ^UDꪷ3b! TYO6/RwGKkl 9/w_Է/`/:d3 E KRV޻@6$i0lӆ6mH*?&p]_}Ip.ZiTEV޾3?wȃEZ>o|_*ww\OG68VhsL6C'Gs3L/PČ%q]_}=1e$>%(lVN=Ϲ}gL4XOߟƌn>P]3y  nU$T J4L6;}fH}y(R%z|JO^ 6] p?lh||o5lY@ɹw4w/=͐~4ƿˍ\P|@2zv߫C?g P: f~n^yE•4fcnxEׇGiJZuի7/l)vwVf6oاO? 1~g.72L+"ctAR>޿Wݽ= DJZܴ!toy+?WE/RB.]xͪH~-,Qώhf7h?ˍ3*3=xd3 Cl5s?j ,G>@k>|7>桖"6|ij|ϫ ~9#A=x톕u_xs$ˋ-dBg+d!<h18>;q༃SV޻M(L <P5ДjP(v*AdiJN&ѱجELz%u܀?9HpqlFnZ2 gcKsML:sXYߓgwTc"4&Libr*Mkh0gRM/4#B^}QVyX}>pձ%S?Asl66?M5|{>H?5-U5Q<yuH'<^mρ}9]ocKyVyXaG%qma̖鷿 &Q([sN_Wm|7M9^Y{p&T:rv7o؉~X7z+~0F X9`=Hg3:y4I 6xƢ`h3461nmd>4EA"k;ã[^"F i`1yI܃$8WJR׼}gƢyOXΛFkx{ ^>Ap~fkh0ft)!1 `y.{מR[g{5oۖf@Z܀;Zx@/x,pC[GFH? `ySҏ.`Ӄ ^34+t󒴵y#WVGT_WK#%.^anf l|cρ}:t3!/ %]pzo{{Qro߾3FsQ؟Mtea+u6o`J_Eh4^a`hJl 2:vzL<lƵFIlet<{JE:¦oac$ݾ3V=}gﴵ0xDmLpF+敻;5h0S:;y j=Ku3 (/QLha$˶gWԭE]xKW-mX_GL6c'1>y  <oiƴ_R|A9a@SVGjcQqyfyxuuqB|Yc[gu4E-%K@اt qIx{ Kwxko?|4MsQx<.ѕak[ika k+xnڹwg<׈<s`vz:x;-㟗Og3aּ7vlŋ*V.C9+u9@d3:vmti!<`߷xC?ӞX`Rw6?GsQ؟M͗M [ W  Kq ;y @qs`~GX:DG%qաß3ƋyV^;NsQH8M.ܲRhuD^F X%MsQkG;M+Ojc]L, yXcNI?zt6c'``]& G4I'W+ R h,Q&&۔lPUU(Jݽ=jmos Lyxc ?Jwʋy Ko^< BxV|򠕺(y`]VkVX۷u> 9y ^<مLD=O_=Mp+&J^3wwƢ pc%ߛãV*V. ްRwGK)/橫GQKLyx cK'u(%$bg>Blڐd_sVjiO(#+,l^F[ )@2t_Fi(+lF61fH"+tw}}'ecDxEYmmO' XȋVX:'4L6t ?bKwJ޿W{cswi.  ~0G~n^WnmifLaMeti.>}Ao4/1OH[ `Ug0hlGllB/yu^6ÂuZ][A#`F%<`9X&pq꽝. =!<Կxt6gO3XU6Gll/7!\eijkʵ\419xݦd54I&eFwonߟtH:$sKųG=O]=bRV겱y^s%׋^jۖfذ5qB!>r]vJ](e^oN)99b4OH%"c\=ɳn.Q[Pr>!"<Z1w՞z;q¾N45^Ĥl$k x톕vo=O܂ LIꓴŃ @Qffs4yXI-+u#JP:DmF@Fޒʱv܂cL4c3>vlF'ϞfPll5c}o͗TZKp԰.N-\yXN/2?$py2?(x#/1(J)("y><3Vj€9n]VpF@&Libr*Mkh0eI4=/7̜7d<'7Ks'ϞRhQZ;/m(u6#T}]-p[d*E@iܷOߺ܂~c|p_⍠sRm@XJ{\,ۦ v%Jm yxPJ 4@Yd3K[Y/6\t^R߽$>P*Q|"k [{cCkK3DmLUoi`hJ-,s4(b{{]ng!<)G%qlFݽ= Jjf4EA6d<:O(^1X\[Zoi`('no0Aso&hM< {{r Nb<gwJų'SI[%6kyϣܼ;m- R Qk7lHsܺ=J<{ZT' 7x.=yiy16dy< U ;7nYP1UWEh`p(gm )^l![%]`<WI8LJO: f~n^ye3Ma+u6oT$\P9rmji`rwר.^C8'ͨtg%)>eh.-^95M[یyw)#(a-IqΞft N&R(Ħ I+u)<epJd}BzDmLUtMlW9v -Jf9@"<ڡߜd*r1QZ"k[ܼZ8rmjiX00Rwo֎vʒ[D=g9w3 ye#.SJO1([T}Eaha{l~(f+8/I[fT:B|.^i.S:y-hP;u9qe3g<  ~dQ-+u6o7DmLUl>MTşFmo܂~cPo$];{ѧ=X\M+wwJmλrmjiXr +uwdh.,G{]=~\R?SPKplFN|ՇSV޾3Fsl1U?Q+u#JI5S(GL5;fVr}56GPc'P:b0J%#;y:)y1!:ڭe< Q [s򠕺[7*dp*B#ټTEjJ5`Kfs4Ek|M([D=g;w1 Jy%Sҏ.S6q*J^ib}J|clby7TP}]-rVno\(@r}J'Ϟr &@)"<,xx_渵-@QL$Eah!@s\en$\Ixu h 6]zJfVv7]=~\>JQͮzӃ\}3FRmC9+u[IJoH"=QlO1>A dtPo]<{wo0P*:ڭ]m(mhYc~nZxżjyj+Vh\Hr}Jݽ=?.Gs]Jy⼤ͮ;d m6ϣ:+uW:<}xTy+6UX}xl^F[ )@Gݺ=J,x:t3W1@) <tĵs꽝:tsX<  W* nd}BA)c ( +a`(gvN :~2Ob ;1~;%J*'[\M(?לϭدikwZ2(QB.]anf3o[{{L%]=~1~)P(Z7R}.;yiy1KRd< ecJΣ$mm&W7 F%< hQxʋ-dGKg 3yI؉d3\}g[ @>[ϯ [y"JLKj +d&&۔lP]c'zŊoޒ l~Ƣ h5m?qΘXPXaݰRʙ+|&NuvLbBx@0?(˵s::` R2(H&WԭEiC(C B|l604b ]!wݧ ihסßz3LbA @Q0o{;u D-v>M\,7!\Rwk3[lQ:ژG#`\y(76g` E⍒3{{2dY+u ϣpe5m sVj@uq`&&۔lP]">EJ|wLb@x3?# ,36(_z;zవ>kzVn%j i:,Ӯ1Aj#<`UaW_*0@lŒ(DJ]󘟛Q;'[2SZxF*Yټ@d3oz>cfj"<`'$vjρ} P ~%[x Og"pJg\|a ZXݒ>vQSWo<i[ihR(D&?Ӄ<ѴmBxa]&*xM|wh@b Yd1.j <`wJ:ڹ{{qiQ PTJ](|гxep#Je&H8L#` ݾϢP2ٌ8LFxZZ?9wHX<9~L.ܲr W2e"FSVIkh0=i.=(VI.8md< $_cyRglb20Sl/YQ(CXMha<,Mx N|t~lXI#c\:stS\| `6GAXogSw~n>:ƢH XeݰR7y`h[O攢Ug;+<a\jlbƢ ha+g&8_^-=X+uyJBr}Jݽ=.=.o1_Rot';} ׇGt۶4LD#4VPNOfMob<wߩ?9;$a3KgNg3:v8$F{\,ۦ k޺Q+筍EdSyX Plmy/16GPĎ8tvdFxU~pQoNq D•??7+VN[ LļjUWEhKnXټ ߜR\XEx572}ݼ=e- 'm|hblma:/I[ ᕋu| l{DFMJnKOţ%3l"<3:\:ß+/ &Q';O߻_'[yhXY5Q][A#\ji&xR;']<L[.ަC?+$%xM(0yѴ|۶4L'4PJ|X.`DZǕf\<L1~BRKgzN=VP: f~n^ykj2l-l"rM+u<7|CxW /ɩuݽ=bWXA)+u@slUp5o+߻28l匭-͊+%"Fu";'7mPUU@HOţwg<@wK3AN.>2^K661IslD5>.h~m0[CFX\zJ-[R hwߩ?9ѻw1Dj@`;%ҙٌ8V` ,6Sg\e|p%2y(> g6u,9hڭۣ4D;qJN'A!< H}.6y:):T5c'xA <ҙ?}'Xel6yƢ\W+YJ[\zJf`e9`U9OugobҙٌOpEnXxMAׇGm[|,RwG _L7`c'Pڽ˩<շxcℨ7@ 34fc;RW5[jkZF@Tu `(s^SWoo0?x]:ǭmPOR/g7޹K:O '4l^C9jvd3:v⸋G?m(ZZ͒λtjρ}\|x}gLey^s+_l/}[ܳ̓$iC0=ͯدkGKs`~\;z1~g.72X. 'ə5lFN|UP[gr5wwٖ ovϞVѻ/r#L <`Y;%ҙd !*>e;c ,/:V+iMy \ h@gb`Mb2ٌLsIRvOrՁ"n.QH8?u>TkK3ą+ys004ăυkC-˃S4ΰs|.;</KFx㟑y.|4Mx˖O(wwNY U ^Yu^?NNB1fZP404"A'yQ VU: EG]O(rsKL#<Z:ϞG (i-Y]@k>XѦk敟W$\6oTI"@,BFh?߱ZWoN߮W.7D/ <e%]9ß)pՁJyVxRM*PP(DCq<]?ivxBuW.CILcnIr6:9(-vT>AdSg>Ax=~'OfQ]<h͇#JςOg"T$V$\M( {?OK2F.01~sB2Ա_p2ޒ <<}xT)Pd}BQ?{ց}]HshXE1%N ]4+%jbcPZ8 2@lO7( 3>Aq̾f4`VݸShZG7R"cX.$IN$K"2y=4TZ?sn~aUu K,ܸ7%}uFqQzUXXy$XוL$TQ <Ep9$騤W巘:VϽz=דK6o@}m5Mf|OOTrqx=*,,PAA<_]\d_ 㡙YP< רh@yoNTII3\q%=zwwP=T[)]Qj;+J V9un;o连7}que;[ 5-Kv3q Y~Ke)Hdu@}z3}z[=]QÏ1(t瀙Ņ*.J(\\Te~Ax"9@(XaM2?Qd?QX| pWZrsLp'K9Nతfޔh\>T:OoUeM=+JU)#- }}^WtCt+JTQF-S34wkO^y7:c\qOI:z[ 3x%r"<7ˊO/+F2r6o"PC|^OV}8Cnq?S7?3u[GW'uZB<"}9%I/ܤ!@|eLީe4 Y5FӿD3juڡ۷`x@YzND-Q bcyBxpn)Դ,8kI]Կ]zeWlgxIoVߪaHmӗ5pC 7nf.fJ\K$MN462 W#?ӯ>?} ?Sgokw=}d"ᖒKu2}].8ÒsR7J7 77Ii^׸pb_^RKcK6XP=O6oV] w0\Еk%wk}*J$IO$Id?kpV~??o- ˟ZRCﺩ'܃<"xJ!r<2UUUnz)ܮ(UUe5ͽf/3Czsi*;sS/9N3? 8N)IRTg w o,]Q*g&lT ھczc.vIc%qT_jd[J.Q*gFxs8, :r hMž$,MvE)R*MUWPD<9}Y 7nj~ƒ 7n$k>ofSm/n Xuﺩ'0} $pK{~.79Ix~-P/IM@[7WUeǍue/0|:(ZBW'i5*J7f6?QHJoO#ܠ>T]Meu@],6vGyBd^Q/s -PJ~@S,8+w*`qW%tZ"=v[BcgƲ?&:4pCyOYEI墥Hz w= ħ/7UUY&TM,S75w\DrZqS 72/cM2|^WԅY/'hV%J#rLc4o~WD-%w@O,6k@r@RWIrI]Կ]5P~խ%:O_%A+z=I{,oRSGyDN&>L'g& /Є\:WQthXI]Yڄ+*ګ#ল:NXly&ﵴ5 -Pˮ(UmSlUWd+r-Y!}DحAyw+JȮ( J6Z,SQQ!xzt ~ԣŧw]z,zNgR`@~!< j5-Kv3tp7[ܝ͛dW.TUY˗ 75p#Op{o?V\T(y k~)>5xQ|jFࡼ!{u% q=د>?yquJ]撓g.)I/`e}}>gK6çW%>a{),xDownᯟki2612:Dr~sV"1 aSN]7}qObcz7r85aWjw Ƨ//yC[>OUU)^zV]͚Թnbx*=+r-6Ml:/ G^0 _^ħfsfYKxdt@>:t^.N(~iFg/ Y_6ُV1 hM'N-J-=@xjlj-@k ŧ/RwaTUeR97Zޮ(] -a|z3L>},>}Y 7nnŧ_$d~sɱ`^^-ayX!-'!41ܲ?&:4}rn^ѡaB< +SY׀׉OutdWjW}AוL$R~ ~Gx(t5g"e- k-PjONfoz=דcimR>guxnӗ5pC 7nrg.3u5+eyoYeV?2:NxT0~⎀Ɨu>mqQHZ#jlnt`]7}TSL}ya.qC/wzu̱f̶z'^OLd%j{]Hpoݾ~~F& ;gү!>gɱKqQ + 0@WgẽԌS3 d";.IjioSkMMZ#mڹO2|.8ña6@s@P]ekO^ glTҷjyII_mގ}y)$2 7n*;BM+JUUY`nk|3>r-ׅ*9~<"˛ , kħf(#4\$>5q%s\ ƻ% 'NjIIR0Tv=SM连U|29N'-ry 9NT{n=-t֍ 7njrj6OoG[>Oկ~sY7#]+7oZ\~c)NvyBzٛS χBFF. / 'syIY-v5675Fsr巴`~OҳL]vX756Op X@ nT^_7>k_ד0<{+Jd.BɗP[OvyLcM>Ϧ2]OͯɆ{~y%s0:e3'=֣c=2-K };KrDcs:^Tbc1} 7r CݵpAɩYŧ/ҹ/cFFղ5̐rw ȏa\ɹy<;AyC 77nY[[t-%({<'pX7Ժ5~`YF_p}ҁzI<$ʵD&TO@zly=KUU)QoLZښ<ѡa@H'Q|jF#9^ _PUMMxSzR3z>[9qOI:Zz,K"q&EK%,}&_qSS}yI˚e[9;ݼiӽa e2|^ڏg@T0~V#㙰<y,yLw\}%I-mj5.Ӟq|que@ລ6"Xնj̱t>>ˮ(S,׳dkǰҁyi2 h~a&< 4_#Oȶzݳ+e>%csOȮ,gPCJ$t16Asl'NjI?T0Tv=SM`X~Kv﹥|L8P%it" _PK4 p~3 >QFNqQ K`Mxo 9ڷ<Fs;yW*?y%s0:]9XyI]e%ҮHhilnR˝=㖒_rد>9qu`^2t"w ԧM>ܼIRjCS_UY&&eBYLy=;io-ݏ'/x,Zvx~dt\6-CJ$2 #'=֣c=2-K6F$o Uk>?d-%uSed?@*u`7`Wʮ(U̱f̶7iߧ^O|^O& ʗl2ݼbm`y\!8S3srl ek?Gff8W5 ԌF0?d-%y TBf^Oj;̖/қHy$-9(,xD.o S#aUnxL*h kV"1S|Mw\}eZiSk],巴`[JnvXl0y 9NYIP׸ "kW%ؗhF %,my=񀔺xyq)CCXGв]YN*Wt9]P̲˦2]$IDB'NjI?T1~ܧ&uܩc=n)bc> 굻k/S걪қRy=ř0|Uebod^Yfj|QQ!  Kl Ï|JܾDthxLçUUˮ,]Y.\%w8w^{젢gudWjgA}ӵWP|2rK=DxR8,ijŮ(]Quc˙m 7n,1/ ʗl2QX,ːo*(()d!4j >4|zX1ѡa%sW|jVS3}_|ӹ˭`m,P!tFְZ%xi nXc4XR|2c==#ӲiSk]Mnvz{n) tbc=L>,8:IPXjyII@k žTzf[7çXPFҊ eFf< v(>5ŧ|Me˷xO(>5 ]ONJTQ&{S7ƇeYѾ=?7>53QE5p& $% WqIRK{Z#mjlnh Xܤ;{5y.3}  EU^|O6`դnl&PXwcUezi֔S,>  Gө_ m(Աky]w :Zeqqcj]Y];ԱkɹL\hI 8)I ܮ~bt'I%`@v!<d gPܶ漞bVwl +>}yF çbW)l[a#,C+i' !Ci*W"9a%s9X-PFve-۴s6ƫA:ETg :RZ"jlnRkWx;wR~ bcf@ <d Jz vܩ& _ԬӗZfxT>G^Oq& ϶xBY!bhRyE+Ӆ XQO67 keWˮ,W:nӲ5aөqEOO(>WiYj-Y8\5Ҧz\=IO1y {$ߋl˴Y/?^9Jǧ/kM&-m%&y o._TTHC DU@>~iXSpK*3[5 5 ֨cŧfDyHJ&;~pSZ#j~w`mvXl0y K8NYIٞ` ,M+JeW. _G'9u3|z[|K$ݱE2TXyUPP@S EHidt\YMNhJ<YpC|\;km џbAE(WIϽC4%on}лn)bc>ܹOĴy%i[u5<$iMMN*̦דu7ߺ-ټiI [x=ڸ`S3OhdtBדsb6UTōd>kkh jVְ~U:E;A, =#V) Fަ'PnRg<Yq%m:MҷSj{ɦ7q'lKb[

KkkoOT|j&LEɸ$M6Fڹ7 vkk+Hg'0y`}֙$rS,xܖ2,LC~vy_ |T0~V#J$484DbNc4+"ol2 kkdWɮ,9Y̮,WǮصCD5p&ߝN~`^z^᧚T9 'Y~K{䣎.3}` E Oc<T0~^ѡD@+Ɇ`m72 ܾM;o$ *:t^, 42|!2lDiScs9W:utC%K:CxXGLiZfrjl {lV9y >/ 5tk@>Ӆ /lŊ0 [jke ral kߞNkLTrA΢d\z{Ge5ҦH38 v7d"r;Nh,6[&:q@\u~O^~) 4+døu󩨨* +Sƕ9xh|`m,P!DspOkkj O,n(͑L$w\}%ܤHGhJUzN}䣒b <J݆%+L)e2 /dWI'Y|# Lr/n7<&Ibvc%s/y[4pNԑ?P0THZ"UvwթOjdmvXl=&=:pS{ene),xDey7 <#ӹaQT˲%y)X[Csf,PְZ.uꋨ.M I#42|A䧲liWk`]{qGcLX[q EJ'}Io[>y=˔?2:DrNCJ$t16As"Ɔ,PFve!kB 7oOS38/?=buc2;.ӲܤHZ# >T] (#d"<1 ԜuCݵnB `C%]ܐL+4dTOs꟯-?حw疒Jc!<J^8 e lа9+>5ɩa\ɹyq_'L 7iVְLǢd\z{Ge5ҦHd-VEcsvwC['p8;䁵AxX#xV^]eŗ2d򛆊 iWJ'#+\v]'NYIғ !n +RhߞE|jFg kLHJ&; 5Ҧ&ُV wtJ&n(bc<k | & x=ũbh"O(>5 ]O0AV;74yn(S=0=[遯ؕصCv(O}1ȅPN`^z^᧚K9XҁwPnRg<kq%m:[S[y=49YAyc<XOg &O-[j.ٕ4 =ŧf52:DrNcgivZW[[ynavnߦ۷7^] ҟש/4=K$ _Б?[yK]MjZ#m 75*zv >8Xl<'P'@iZ+`%q.Xs=++!`UvZ~s6ܼ~i Ծ=ڹ}"R%DbNc4JGhSEZ+ܐL+-өqEOOڱ(>WiYj-۹9XUy'Xl2Vy` ^ДJ^[oYadMT\T(o66?Ӎ?׾Orn^VDr^ѡJ$tatBK3l ƥY}޾O%[kkQǮO(:43Q IDB}w\?njTk]6ُV Gko.7ynRz3y`VRnjs/<rJBr&<?dYMV"9qŧf595C@XA0}:ZRFB4XdWk]7J}>;AyC 77W}{zNnYxqGcLXu E8ͤXGi؆zSa<X ?yԌ~a-"`?H؄.&Lç֧3[-ӠAal 7^?;S_Dk _PUM[[=*Y*qanvwXg 7n|‚Gd-M ħfc%O(>5 ]O0Trn^Vg%IO6ԺuJFhߞNŧfRDyKOw\}%I-mj5.o P:^T7:c&<*p@^g0T]{8@2 ,ӐY!9 . b9ղ,C !Y`m2/974sCOLOղ5@]Y];Աk9 jLT;T 8'PPO5>TOsp=]{5 'n(= :V #< |/d\%p O ELC󪠠X`|"1 bm:sN}1H0u ]UoߧTSө}ְ,ӠA$4s6ܾM4p&y"Kӳ4HyI]e%ҮHhn;w[zuC[Z{+<'𬤗Ύ;eװ+JixѦ2>9`m5zŧfkLHJ&;㒤6HGhyo=d"rJz+<'pXۥWB7]XQSƕ9xh*do*# ,Ї}€ĥY}޾Oe>>ݘپ Ů,WǮصC\&DA^ 8'u էFU9۹ѣUӵWG >8Xl+_ekXve9B 7oOS38/?= #)>WqiYjlnRkMv@[JݢbLxx8g%uzMU ,4:WmM#rDa#2 W~PQQ!Mn +#dCHʲ)[W;_PǮRcOGΩVsXive:vPǮJ$2mP.HhI 8 75f6wP:^T7{qGcLx8灕q4 lˤS [ T0~^ѡJ$tatBK34=Ks"lo Vˮ,]Y`mfvnߦ۷eC:u&؄.&6U ekxn"!-Rg=;# VK]ϽC4k>?d ,Sy!9NREkv3leHoL`3QENJ2 [jTUY.Lښ-#X[`m:v$E:aYz>Uoߧ2 ZnTְ‹wQҲ5ddt\͢d\z{Ge5ҦHd-@x;wP3x65y!8NT|MM bW*>}FBW~/f{\Y&dNsx`*do*# nќUn)ҫABY(97NӒ l S#IO,^73Q#)HKIh  ˴FnjT=*'B򛆂ղ+eW+X[-`m5mѡ6gB^A>J_hoOFF5p&S_Du16As$'=֣c=2-K6F$'GcsvwCG%=ԁoFx8 iK>hWӵaUѯ)&܃iRxLcɶsү[W!ᖭa〻H_j O,nO])Hx&ҞFih k|'L$g'0uJ%:x;\2TEE4 ָYpC=l.g0AzٕصS_ *97O$ 8i}j&`1mث֭1 suUFiUGDSiF?H:U;U#"U64qUO⳷0NS)d0B 1NgMa|HΌQS*TSM|sYGt(mI灿]Ns6̬:|uؿTt2s^ud6ZW˜eAko{Ō^ kXu` y67W}管2g*?/G[laK19M3Y>s^ϜOV&W0N C(1 }C҄m,_* y-9]%r{Th> sڕ[V ,[KȗXu` y`Z"I#t Eg{H|]ڵ3E2VKm=]VZ$cU}Mk/$_XAljfVg>uj˹kRS*,ulv$CϵsVt2jR_\>;V <f* R-gw5 lL8A!]hjf7ke6e{XE&cZ% + W|TzO~~ӡԷ%=ŊIZxB>#XxSp,w`lhm4,L@ʹ{濌(՞9urjf6\ L|`,N]N]Z[P >]Ns ^[I t@Z[4~ `HNF]wATY]%JnOYfH %.UVW>i_Hw]ڌ\l˯1uGvX{E{-4/ؾ>G[l  @9;oUˡ2CsnW57֪0.D]L9Jp,yjnSscb{jg/, I=;obM AMkhⱘK}[y=Rp>=©mv0)?/FHYs_ll='{V@mŸO0Ѱo1d wէ=stN$`H.J~}Jc6eٝlA Β:57 +Lr$~@͍uށ͑ݣ[rJ:GGQ<3zmbőn#Xm$5InGtݴ<ŗö@}Z\hDW3ntjfVϜ3rh B].23P[rnٔ疕kgAC )Y-Tlv|Yf=^VkKeՑN#X$0rNW$9]1vu`4_}4*s9Trhvn^W?ԭyîJ}e%jn% !T/_:|ڳ;'!26!WYcYt2s^ud6JL/9\.~H(lR$ˊ#Gim_x m n&Ily`hwh濌ʰdЁ P 52mcy#A553^z}zܺ7M4OE:ֺt0:}S]h89ⱘ .H*T%ˣ4'~ύ^>m|Z+tAxij-|\O\c}Xltv0)0S4HCs_|6ȶ@5"cƝh:îrUwAuuN9g'hƒ:57%@0KC/, I=$mjh<(\m4 I*)u*NXo_Ū#G:yřfe<H) 0)_H32Pˡٹy^Q`P [p0`H JT_S.ΛH.H?t3`+{Jc?LA"O$Y-T%@{W!<-M V<҂Z\ϵpH:۷=,iC9;=ޡ:P[ jd4w Yo|aQ>gwjBhicuU:$sM=hPʱE&tOWǯIɨ:yq+,j9H_-s@<>x}WYuy6CηгϰS*kIg떇7?O[laq1m_l Xш(2f̬z}: ] 5ٔ$g#_:|ڳ;GT%` @͍uNT Jgⱘ .7ReuUb"= }zW&%VFGxgHz5p@)xl~x+`H_t=22Pˡٹy^Q`P [p0`H JT_S.cjfVϜ391K^krU_SX|!g/Zowz{~69K]jh:(FsYf+zͷ^VkUG:x9]%jh:*:>&!OoF#74HR CNЁ ?P`P#a-޾cz wէ=sP[r&#i軂>V/~9HM"cwR@S34HR$V$V9,9K]r{T0WP襶IzY'$3r/x Yv)CֶsI;ݽwOl dW F?xE놭wjfVg> ֧AށYc+}]VE4X#E:Zc-N\H?H`Iwɨ .,Ur{TL0~ύ^VkSLaYt ʰb2s*mhO.MM3i~&خ2Ce.f?xEAݚ7l+W5r:< @12U_t#E,@~p ,yjnSsc7+)H$vG654S%ˣ4RXIKU1zJzQmLfZ2u$[yddlWˡ2Csn`HLr\NHSt:+!_Xk"c CZ%:U9:ye2!zZ,3 M_s×<}*+ <i3rqU*)u )lv +'{V@mŸO0Ѱo1dEӞ9j-W}M,y< @pK4)26!Wqu9U_SNzݣ[rJT|%D!&%VFAxHshuשǭ{wc6ef&)RS[TVCA6_ՉW~l2_\>;VF@xF򮑋k~SWI^ iک۶UnLN:z22Pˡٹy^Q`P [p0`H JT_S.A!ku>s^ϜWi4Xg!+!]Ns$E'8U9LfܞTzmo< K}[S8< j-|I>g2z #oUNvwh`@LOm9;tBj+|BA g꓿O{v$"[ry46}DGcJOW057֪l吐$Eo.h89ⱘ geuܞ*^ե('§ǯ;+TGxFf~E,3 B\mٲF0<m_l $5$B#;53^z}zaWTd)Hc+AcO'B߽}PS*;9lK^XX|A!nXG=bM K60gs-^j> <$50ѰFF#wjfVg> `\57֩N}̴5&` !;9ⱘ .7ReuUb"|CCA}xΫH(l2Y/_{G"<LE>kmILkwbg 4>u5q ؄=&W5AKCsz{ݣTlYRCA6^/l.TExv ^`L;Rܜڲe  -LM3]KrwSQ*OEnLN kCTdNqQXkKbJ3ӵqu~~VT| H~'6ٔx~p7o|- + W|.=r{h|KIKNWCF.sZ6>~G*z#]@ʱZ 1r.^t4m%<5/?I^_i,oV5{oVd~ :P[bmFFEO8jXt2X|!А5gweN57q dKhwS%Z,3 IPX'^1$=>>~+Ty6#Wx<H{v Ft&M_UrܼF> n`HLr\NHsfSknX Ǻ:~?ko2<#GJZ [-:3,4omk1u@:b^ :-Pˡٹy|VWeݚ7l!23.+Q}M;Xk$&4_R|a=ᰫa9TdfSk wbg_9h@)3#qz .8, + ޗ%ߢJOub*=Z_+:5r/ZmLG .îc-M( qhdT8lNݞj4@z[F/MLGx#]@[:? ÑDaľ酖XGuA5}Z5LU5?/&?j__i.Φff5oVdlm0 :P[̍iu}rY#a-޾czI9-y<!26_.)HCH~o\b=r{dy4H9ӟ)08d2n|Xm$;&#U^<  B4X#vf4MR{58I  jd4шa띚YOg>=ᰫa9TdT\T׏w Wa5ݳ;G28$ )S5K W_|mC )Y-Tlv^x~ύ^ےb#Y/IzҨUVWB[#515MɩPˡٹy|VWeݚ7l!23.+Q}M;IK+;S?c]Nc3̬:|uq^j{tOCWBˢQuW&YnOUb*=$ROj-|j|ڿHf ڌ\˯ &H w4I-'{<T䴺>Ѱo1dEӞ9j]Td72Goէ}Ld~@Wǯg%I˷v$k-$Eow K [ⱘ .HZb, =ᰫa9Tdd&niRdlBN]R|a<eN57q HN͍u9{*=$mjh<(\m4mo<8cPLG#$GxIS~vfhR;w$'f-C!OE<19O.kd4w Yo|aSjbLErSi~_1u$~N$xE !]c\W2r{2gi cy4_϶e2}I=ᰫa9Td71Go1L28$N Cp3υ .7ReuUb"=0l֣Gt(61}Ix}#ZwYq$H:Vk.x%y`.ϫu_/'{<T䴺>.U|{*rCRXVXruEZ[ӥ!i}w rVE4H}N͍u!zU\wz{~6=UTf %.9]% 61}I<S6-)kk<= AA521qYOO8j)W~>2.îcOw ]}h}CMu)gRٔM㇗CֱJ$V$/KETzx#L6yl:B4)Dz{צfsl"MSQrܼF> n`HLr\Nh}MwbgA053gT&CF-M( bg_9QuW&9w{e2 1}8 =u``D' #lȦ;4@h X_9;(T7&ex!Tڥ%/$ɒ-M:Ҥ؄:|?"͹OdHE4H1E*.*Pscb{w @s$c1vG=r{dy4i =ᰫay*ٔ@RPw}@Eu:ֽ =.zV!}}Hfg^R`pH'OɒoQZ Meh`p%.7wed =uV$];hÛM6Iˡ2Cs4˺57oz! C2ef]Vr9v +!MG}Wǯ:}/Uw E~G&Е_9QuW&YnOUb*=cj=zycǦa<b/`dTRݘV'52;{꓿O{v$"[ryH,yjnSsc"cuR 4>weN57ֱ)@Z $)q@@͑]Hj+TEF 0gG>3LLXcsg3[i@  }ŗ4H2I  jd4шa띚YOg>=ᰫay2ww ށy}ש_ա:] ŭ>p/w @0ġUz{ݳ}nSCA9n9@c<cS0u ,w/lʠI)p޻/i\ȧau]֭9o! C2ef]Vr9v 5K7ULY٧i}:0< IDAT~]l?޲lL_?~x9H.453K$EBa<%I[TVIKnORExŰSMf^~UV c6Cٺ!e`p7gh"rwSQ*OEnLN kC_XO>ٝڥ%/oNYMէ}LX~컀1UwrSZ[P *ɨ:yq+,j9H_-s)]mⱘQKd<6ֶ6 zľy?Y$) + W|.=r{h,{YYO?ע{eIzF"=0Lfw rVE40K^n&X|!y=;obM Th>6灵Gxjm4a}WbFi&'{<T䴺>Ѱ z E|aQ>gwjU_S.K^.IٔF&ԥ!kjS~'.`U+ @ 8CH\`ҧ4KBY7S y^FΆE'J5ddJOOjXvm4X-loVg{B75ԕ-v:wlEslʥ9x" sХtY?Tr59yP4Xf~[_~<)3V<NZ !H-NnIl่-ݦ &Y}&]{ -zURGj|"dzbw߭W*+WcȰ?#ח3љuy5:Ԓ>wٔZk:~'ӕa?/{& M_ZhU`f*="sy<<1#ʱ=zѼ{DVjeEDFx"uՕTliY]խ%"s-0kIrsTWWl-Չ袆Fo >ܜ4z{i1 QY!Gev+4}S.49"s ~LyPf.z}1Oi*<3gju%}06)7)Ʈ i1GtOe-yPm*(9#0}x6a:vNmh %`CUWRewU{YZ`R2権J-z9*+2??#Ey>]|kYSnNfY֑8)ק듚 Ik\Lf2STLo籑N0D `#<<Sl]/P#gCf~wUAVD2%'קy@Ւf IZݡx}2<'ZSz+-*<;?@sb6M)VI h|"a_߭~^P^2<[`*<3gju%}.bKݡHtQdD<.< Ïx@f"Bb<c]l%K1bmL M`H(n-ԵL9jR^ 6IٔHtQouqЧD2EsZP֔Fo/-1@ZW^D22<v^^KuOe(Zm*(90OTj!M$Sx}x}*؝ tZ-lVG{u[C#~y>%?;Ԁ{Pe̹+ @1r3/~?֣My>]k~!F$& M5p_B5jrT́!da^H`ݤοf:?4!n=)VI h|"a_߭~^P^2BDRO} И4љuLo[\4Rb-nEs>$2}AկIy@M΃24 lKY0}VRߘbc=4jaL͵t{Y?F+UW]Ҳƿ뻪[KˆZ`R2権J-z9*+$NKloVg{sfRAyJC#~ u~5UUKi 9O$3g8kK5t>#+ަ&Y_.9V`IIGXiXL:³pbL`,y^FΆE'J5ddJOOjZ\Z $tR<>nWGk@3rϼLp~~!F$&:ɧ:ɧZ<&UTlyY0}$c1jaLM"BDR+ $)VI h|"a_߭~^P^Ml wF뫯%uy5:2@v[; $)4}SC#~]k*<xf6[IXS8BQHnYRuՕ--klz&u-0)Sn~%_loVh܃2Dά Tjakx}x}*؝::ۛeHz8yXC#~]t-0Icmq^ZLcHŲYDRC#D#9<&Y_.APM΃Txܨ%2}τ<-9v74Yo1߿q)VI h|"a_i=lEhVcCfS.̦\W$(ק>/h:s2!z^c:ɧZ<֎6WNݭ/?¨%tDҿxTSO6.Z ˺w>'TW]JŖ5}P^UZZ6lS:'Ijqի֡Z$jWOwz;2ANGc=sΜ=9s²f|8~Gx}> ͑h\d6y 3X/]oo"9Ј__}-!gv!jRWXG{%ID&iD<.< _Pje}e6[ɑpg6y<-6D"T<NZNgV 4>DȰ/4Ԁ{Pe"uu4!)@fSZ\jq+]Ԁ[]k~!Fsd'Z_]/Ւfu7+Hjh/`RWǔHhK5t$^Q69Z4O, ϟ+'ExOf+9"ikc<l[L SW]JŖ5}P^UZZ6lS:'Ijqg&O<ۭݙ)]UhUj<@sxg1};jI8iĢ:6C%&Cݿ46XޮlFsQyR+w [Slof*25G{khįVS X\bG MЈ_Wik\LfA #eJeЩm|#/&CcK4=*UãO5>2l 1 5d*2_xxrh<^.Hh3XoQS]:_UbKݡHtQdq_}AL\Hm?}5p76y<F-[ݬ.l0u6Y]u+[ZAy}WukɸgS&"3{ihoFx}7Q"K ^T%jW+_-zL҆.]Х:ɧWQS֎6WHZ>o$:+Exf+y]kF n&u~- o׋r6Pٹ]DP0gSC̈́9d]'iS bwK ٔ9ɼreد  *4~Y rTyPM4'?wv< F-5,1jqǓ8izME` Sh;Z5<DP!;Ӏ{PAœ~lUg{:ۛ3͋>?_iud^GyHtQC#~.7=$2}!n i3kh/Sn4#Y-MD2s] NktYjmoSٹly?JN2}<Iy`D`,ݾC` 5r6hv.*wW5>Tjakx}x}*؝::ۛeHRrMc[1bQLVV;& +c[7l%G$5bm]o`˲}dM,CΆ9j4;M+rװ5|"rg{3ANkkdf=g7әuy^ŲYDRC#D#9<&Y_.A[TLo5('XS1ߵ?6XyТCm.jsi|"р'B9ٔfu7+4}SOW_ќgk kZ\4-2\jvl!U5ղW+44j'$ǯ"<_e.NX`~&`[>xC_n4krR+iF g>iub΄3=^Ykh@!;Ӏ{PAيѬZ̦\6Mjq#E Օa?SA"ʜ2Az.2xVK:ۛެx"I]S"AR&HxNylw?JN7Xi<<~I#e2:$;4T+}JVD [TxFNIZ\ 3vhoF ewVWW`ISХ??7MO? X᷻ /Y#H*H3!gC 5וZkؚ=^<^ v穩ΡfB2.=.z}1`*<3gzBLno/?5ڞ&7j w$=}+5ˆEfu& lmXW{ -:ҡ6' h|"dzbpj=2[: qxxq$(ק>&k̥+g0ga/-X=DLf^6ɠ~l7uǍX.N?Jc ydl%/ɠS49p# 6ٽ|'N#frWTj%=>H԰Ngtt$%= F IZݡoj=+cJ$S4g[M9j .v+_-zL>s:V/!#Nm"<úzpzM6e%!gC 5וZkؚ=^<^ v穩ΡfY-lV'?֣zvFH$S3x-H⪗xjfSnRj*]g]Hs<| =B3HZ`Ƥ&4a56[oXiǚF,Q]y;qnB`!gC 5וZkؚ> YVK>$^Z:ۭFx}4fUWW/4qƵ:=>%E1EM%)AWӈra6Lyf+Iw?`<d`+[-ТCm.jsi|"р'Bήf5:d6HR敊54Eh*<3gmnuz|L雊DQd~ukf59gE3Mnݦ C!gC 5וZkؚ=^<^ v穩ΡfY-l$)W-z.⠏iׂ-zL74]Ե$IkG/F>f+9NI#unwx<&B7hMH$O$iZtͥCm.O5<DȰ/4Ԁ{Pe"uu43OX-POwB75ԕ1%)ւWS]Vx""\F-XDx>Kl%KkںzM]EYgrWTj%=>H԰Ngtt$UOp/KuXЈ_/39#Le^1Ƕ:=~&_X`RxRSlW"7byl%7au҈Eydg< 쐳FΆEAJ5lk͂yjsYVK>@Z;Hjhįp:#HLo*i.kIlafvi\QK<"V:B6[I׌X[`"|XТCm.jsi|"р'B>`!܃*YMl$)W-z.O c3o*HADRzSd᷺f+9ߘb t҈E9d}yFr}-^ʵ_R4f#Q;ѩ}W=M`䫧C= M ڮ/XOgAǓ$k˅jiCxD26[KXۻ0u6bl&;rrvP#gCf uVf<59,% ^Z:ۭFx}4f&A MN"kId4rxV/[t <}He*UUS&zSxB{ -:ҡ6' h|"dzbpj=2[:Xٔf>{8Әu[AzGerX?≤3 &?wRY\K!W^Q.GucF,oVRJgzM[ҏ?><ʵ_R4f#Q;ѩ}W=ٔWZ\D54A34g=v N_$H4'5T<V$9WU 5bK~q&]oi$Bx>l%G$5Z]BZ;X`IVdA#6\&Z:D#X99;lFstR+w [Z``wloՒfa䫳Y͊D5VW_ќ ۃ?0/*4=;&i ɔ#bC?lʑ'd-*21by{m߰ف|v9bĢLD_n,Z ;qZtͥCm.O5<DȰ/4Ԁ{Pe"uu4 VKvhoB75ԕ1%)oS~P$\tQdwRY\Kd/-N+h Ȼ￧?Ȩ坐 g $fLfz,7hilʵ_R4f#} i*9!gC 5וZkؚ=^<^ v穩Ρf~aÙZogΞWHd:($1xy<wTYVKwxnݭ/?¨坐A)Yf+yIFX``(<;O#lKL`)PK\jx4񉐡pj=2[:X`*0rW^DRO} М 2љwTV^Z} MLDc.*כJ$Sl<+*jɓ81t]oid8|+ml糃!o4< ˅. '%H2u-brWTj%=>H԰Ngtt$U8 3rެfE뫯gΞ̋!-zcuzZ@~QEc]e"͹Ւ/%_Dy`~]iVK/]%}JpĈEu"jrrvP#gCf uVf'ח iv7jg3 %?Mߔӕa?! !jqo:≤B3B3_5y<wTYVKߧ`[}=%yJ%5Z]rUT$` Shѡ64>h@!pHVf5: :[&A1%)g}X-9~uz|,\tQd_L9-V%_VK|́!Y_.J1#f+y= +m\z FK4߱x6M`ٿ\+ZIOh65lS:'Ijqի֡Z/8*+䨬c=khO~] L㻛r.N_ /*8="/wيTX/{i|Y-KzF]oi𼴚U6.fIzhufv ?l{y}F8`!gC 5וZkؚ=^<^ v穩ΡfY-lvhL~hOcY"h@!~Ӏ{PAيѬZcٔWZ\'7ȩ}^ZT`2H4袮&i,ɔ#bZeeOl?2jy'0 e$ɐ)d`ݻ_Ki_+W*Fl$jz3:uOL{8H.jhį>ҿ_Vx""_R7V‚|SW'qiX'M΃T!_<"Ex޸HeZߐy``<ƖCΆ9j4;M+rװ5{>y>SSCͲZ ~jWg{:ۛ үϘ 1xT[U/j,0xh@!;Ӏ{PAيѬZ̦\6_p~hį )L)7G*jɓ2rd/-9UT^QdЈ}`ob1bQ]o1uI%R+49ExYWʕJ4ީN$XPc7Ǐ!RY\Kd/-ٔ+GeP[ÏZ I'Ye h@!;Ӏ{PAيѬZCD͔#bC?lʑxl/X^;*yc9bĢzdrWTj%=>H԰Ngtt$U y>SSCLkEg_B2~WHfs*+djɗ==Q֎6wl%Gyc8iLfZ;XY)-@#6۞Btͥ񉠆G܃*YO$I34T;Oւ|C?jCjhӗE;!3Vy{#Iv@8 wG|2YYsaTtK2[]`{<fRZRҒba L78M^܅У}F^:zSkA P4;*)o6kz<7znş}یUF1Cx>w6cQ흄`u>c{to7S#I:vH͍jn + X Oj6LpAGn767H`<iW/4^nooro|Cyn>sztBez똚eY9x#ZP>F~6GIC"Vn]Y.=`B'_6kx^JyÔs b3WK60YMX@=:vۚdNŎ=z?~oHu퐚9kAIǧ Y-rWY$ӡzs,rWA\ϖf,90*%UpepM u ·կ>ǏjbjF{u_x´jQt(=>*kl|J[>ujY,\vUjHk0kx0*L) ji=d`u;w*8Rp>=YgNu7˽ XF~6>LvUղ۬rW]YCii="WK3f,ﴤ1Ax>F>I'MѾ΀gMK1ձ [~^nKF8;D57x!57s(rȍSZu}٬Y {fIMʫ_?xӌ}0*L97-Xԩ?& Nxc GZ\$%IM?VV9 iŕKŎ<Lci 7$ՒFOv'44[C .kg[6ܕerW幙Y]f K|wrn <{_\Rp@gK,l[sX"dLPD2:\yu9z4I&W4ɜC*ؓ:s[gNu7˽ XLv{vUr6:._hΊ| <# [Rj`0w*9ROjmLKzO&zcu!B{v^͍m7Sy'zݟ^Fnr,#7h !WI߱[CB{"LPO}+zu֤WS_𨟃&\ߝ{f"QEW۞ 77֫^XjIowWfPg ߚ4lVU*ut]Y9Hﶫ._hΊ|#< kVW{Wm03; LPDRRjsb8 k#x ; uTΜVoH{2mb]ѹ =gvu>Ƨ4;(SiIܕer9r^oy W򍯛5<_e/1Ex>6[ARZZ0Yϩ,s)0=G#dL,WdykZ}1PxIHhz6`r蘤v&|f\Px"F30e Lwwu퐚3򱢱SkA P47u9JrɳwWt,9<OG 4tmЌ坕 fBx>FEo..,>S3n>2DrEpD|&s"ѵdYzG515 7>ߐlVKzџx34rc-(?`H3]!٬U,H a|aTL9;nM <!rTX<~_\ '}x%dX4W4̬3Othxԯ˽ X3TZR$&Ϝ/uڻ:T,5[i%)g' j>zDgK,La}6]R[5܇F~~=aæ֤7bg[ՒN9duBa-rֿ]~qU7f`JOL++dC*)vURjmyڻ:t"<g)èxAA3~І |J˱$Uݚԕ Kr̝;wYNm_]zGKaoSj\"{fcNmAèx!)g rz6Ut9JL`l ']C .~_z[(H$w/}ah~b8+?‚|55x4rm٭}hvQ) ?90:ov۬rW,Yzo5D\ϖဆ 2a g!è(m:4xX _"ߝϛ ^ثjk'"we9j[ShlF@`L9NVP#r=[d|;M\NMxԆד~ߚT,aJ$ es?lpS9<_Ij>z=LpAu30E1~8e+\I UWQr31KZT #ီi19$٬Y {fp=[6hNK?r <}V[ƒ& IlpAX\ck  #:E]Еu9U~AzA|Ѧ;4<:l:ov۬rW]Y1`[wuǖ /SzORm; X,yjjP8+Jrɳ>'!աs?~ߌ3&g è(M3~# L3 ih->4r,9s ,$"wUyx%n ?Dr%?QGRmGM ^y6S@np6Ѧ1]/&uj:r:,_ W`'_6kxQq6Xdۏ|8m\.a#ۯ˽46ַJYjY Hxޤ|83k""|#*,WZ~oA@ƣm>ו4=1lQ&ݪ?fzT 4tmЌuK!S~iz4g'P8PxIc&i Z?IJo $͚?TXsHo"ሮJ vj{(gC,<55xU(ѕt}tLyH%J7J{H( wu5<V,`/H:hNpAZ GZ\:zHhjf.S4 @zIv۬rWIl^7l6ŞMQb8{ubj=|Pu5nY,y r _/w6 ~Gh$"wUyJweZPzTo}MŢQv0*7"<Nr=[dAޮghcO$ lf`nLgT}.ڽ b tlP$ָU[QS@ƣm>ו4=k2]Y&H.g!}]-GtE3wvl# j`xd IIà $ذs}ç$E4 p55<ƣ0= wX,yjjP8+z"Z@]Y{K z_7kx[mfݒ Tn'<I=\ /F yu [;7y^V5?>cM$WopD]jjx^M ^-ur 8 rG^h蘮op$+?2KEr9逼Al1OGj7VZaTt3Cx~6[A-G* }~{:!Hhz6H3dA$AxB()o:9\6ckO$Wt@WTXy9 9CjkLjj[3A%+4 w۬rW\5[8w҄ ^ثjk ,i|o 0*%&WK-G. y @IÒ6<HL)H0>m]Yzs2mV(@OuWz>ߐ|Cۿ#z;=:W255<,<YlQ/~iҪ ;x)o-ۣlwu0Uim ?=0=X< <{lVU6ذ]Y+> )e{ConWscΜ:vDSO=I5F,jb緘aTJj$<CK_\Y6=.C.g`:DR g6C .7K=}kx/K.xTM,աbѨJ6@`b)opVP}-eY 4)RĆT=H*0=G3d.gQ:nY,Y&rWфg%o/y.gNtӉc .ro.kn>d'+ 78‚|xR'mաs?6ݒr?d[;koH l χX"l'hARg\NԶ lU[͌]ƣw*UnC7.g^k]O%l1ѕ]PaAT~VI-Gx~ F>ITnWKQ 6KÒ6<HL)H0b\%ml>~ް-9~htlh8coߐ1QG:+ߟ ei2緈aT L5J]:pEb_?lr%oկꩧRey5Ax@#‚|xcX|ӷߏ\gN̩nW'L?pDzu_{]N55xUCzD6]hlu < [Rjo8 ׳ nK̇4rc}4|F_fȽa Axwe>SqH>K/~/.-g<D#Ҳ~Z2r}K.55xsK8z }4WoHzu}dg8:<_Ij!c0filvZZ2\[a ]΢tn]YN`JgO?TȲ>h=|~b8bǶnx!o;B*Hӯq|# ȒK5>NHOGj7VZaTL9soA6[A-Gdmgl4YgQ&=~/uL6gwE1g5=-yv7r9tNtlpA.\\7$+ }aAj]Еu9U~|v.S%Gx> bfURK  #Y-rW~`C}c]Y&JFјB Lgct#rօ7rW_>ߐ|Cۿ#lP/^+j}sfcmW#/VIè( &rf,mof<`(u:hFO% UX/ <~w9r9h9f9k#~#o(Z}[<Xz9u2 툳|JIqƣ/_TՔyI:-;L83gW*v=C@ְI46=6EffLP*~zDRegc>XB(ҒfC:vHX\{u_7S;, 5<ƣ0=;A{WEf+g 1}&wGgK.[hǠ YhQ&=~/uɵ"{<fO&iD+˴xr4mV<4\HC?S|# _uk+ZZf+aT &n2Gx>sΚ s4r\q/.ш ))vUfLAxBhQ\x?z[ws.g^k]Oxgl1ѕ]PaAT~|Lo|݌yI3|fwE ;?,"wU*1/Iүݕe۬4 `z.DcjF_X/OU]Y3uT|C 郫;&Hb_^SM ^55xe0OGRfgfVY`/H2SMGn?$ O츺7%tt,p2hDDk#l_b=Sscro:LLAjkߐqG|ޮT~*L@.j4ex^J2Ex>3TnW{WSS.,]$G9 S*k^?W%GaAx GxƮu6k:H?\HC=\opDYvy55x, g-#1-&3nIUfl#/,ȗ`-nKeyy x>_QV.Hf`Z3\ߒKmn"Qݽ{WO=ԎYt㓺ۯ ]PaAjb›6[A-G*۬p6/K/;=3'ͺV_$khFƮ,;f+uTΜȍ bk_ GA.!HZ-GRO3^n>S].6{6c&3޹sWS18L( ;t>Fმ~r᭩V_ӻ?}?Rsc}z6{k#J$ @Vﶫ)Lwsy~FE3y@1FK$esch? 3|,G^mQ(D}QLWdYݻߐ.z*MG뽵sW߭ڻ:_è&g›2]L4xHY4r3Ù;37/ͪg握駟*8x>F[ί,G mVo;m4\H{u30# 78"K.x6-GdFVZ$󛄿$QQ(].y@6(@x^nMf4r]M2ʊ HX\ÿݕe[#1,҉c:yLs}puHs!מH[ g\EZZf+nLי*Y"SO mh,#BCd#w%['s]g,Gu]\"9խCY-;pDWwV}ouÁ-=ڻ:XVaT$7eK \Ņ4p_Ņ}>^ڒ=8R,gl1Jr4 f}к(\o[oю Oub{?_FH$9:pARK#_ҿAW3u@sQ3͵2Ӵ`SnW^d- kOl5CȖ}wez)v:s[4_ ݢZsbYu퐎R4~]ԎxԯQG5wlf,[!-yvY1 s9Zw?V':_TIcGԾJ?|G>% `>u3ur-'@xəp `29&cdJ /Et30E4= _jIWdM bҚb8Br9խ7Hf]ן~G+(Hr(Ynds (S0X`(.ҶԒLhքI~)Ln2h=|pZ]mX7^MO믩~>=w~[?zTjK#<o'TΗdmgdb/nn}֤Գz[*-)V| r^7Q=K˲1mt퐎R4WoH?Ԏ}xԯQRmGuݪp(_CoMu0* E&x?`Yv14k‘mΝdNJK2tЄ-u~tl\opDYւmjo.ST~Lg6]-G*6s77'iྜ=~mϯ[Ul,yl4`S~, [(Yhp]YJ$W¯t㓺ۯin>d7 UWQt@vﶫf+ < PI3DpW$ݚ|K&W4>1-gq 0p3c}^/IwlPZ}ظVVW3r.gVY2Qw'SlP/O#{FH$98t9t$yrDq/.m5Cᥬ3k- }ZF3u5\zi147֫^X\}?;_ã~'ƝH_PamWQSnC&S`N&\44p&ر[ҋW-)f4zc\XF_XoԻeYu퐎lpA}!]Ԏ=HoۥYD@f2<0* E&ht:x_g&X&~P85'+51Ot]lz&H6,G58mfUY"<:H':;Ntbǎ=\opDok`b]f,>:6s*uSͣ No\RDѨEl;`IfeuU7Ӛ3r}Kޮ:/nl\}[<_5Y3uT:wG\T,0}ሮJjj`d IDATvG|HK]pleuK!}4lDQQ(餙jjn=`!Ŏ̄nMDwlP+s ZtHƮz,;c&,w'mdZvDӳAث?ޏݷVW(B` -ʞ\5љ]L } {\7#׭֭imVJdpp6eGl.kz&75G4SM|  W;6?"IFR7t~Ulp߯|<nmQ'#v0M)LBx^F' էUMݝ-#Q6Hcڋ_}Gbl|NkSοtF:6ՙi@/u/[18Rcfg_8-`ugU0y`47h󟴲)**ȓŲM ?o&mӦ k3:[ޢhlQ=A]ۦ}hģ.ffT*ո38#mGeZn緈m*ð<fHgB`/2WآEd[Ub/Ԟx ^ߍa- <[Ӫ Y-{7FjƼS}),8H~Q%El GڎۗV-ⷃ[ ^0RMƼlK3_8U8UAMŅLJI;v{Kcc.8Ox^Tӧܙԕ^7٠kd>ϖZSmoac6'F Ͽn 4ZA> *4"EU坞Iq8 )VQa/%㓺Mʱ23n$*[Ų VUYsguloPlqχWwoJEjnV!'AzH2A%v}~CpTtzdZ[c.A' @[Ge˱&& Kں|ny([ds MHKW'm}_9KgڏQ-}K]^?ӿưl HֶcF,rLߚ@X]]S|yEٖt|Rʪ'eUb͏MܙJLބ*. T֦:;z܃sgJ;S U1p4HgNoᆴ~z%NI60H$J9σ>^YfO&>IآnQAMŅڵ7 ]vjrҺ?sJ (H(e:["`N=A]ګ1)hhģ ոjn6h΃NKF*pTtzd3UJ0ϭ4Bf[%MF+VIql94 r ''N\|:}9zoP3A׾_{`XarTqQ~rMd:w^m9ք?$ںĴqu'q|UeYOw4 Y-E:wS?w3>,{LQ|(~?zUM1x>depTtJBⳁ23I} Hآ<*ȷ1MIKK&7MO>s0 ·To| ۪\ΖN}-.PX/u.ڋvQ*eee1K8:eZFT8N 1f/%v9:YUX4'c< ZP0)ߌR<9 TUɹ07}0 vDkSZt A)jte]TR˩j6<%)VF*+ &r-ZhSZY]׌d4T+5uwFd#Fwc8innxpbH1bxJ~#ϱ|dLnu/|B_*Iy T4( m*.'ANڝyl9 yeN:ӧS{Po] _R|Ya'PҒ"6hcjU,5RYމY#<6R1$IVD{苮Es‘J Řc/* I;goLG*' {LJW4M_ݽ47<|[i;j4R1mXQX4յ/ɸc }ߪUMLdUb͏%k|Vfj]Uںff*).d#!eUUr;۩z܃zo@%> ^]ګR{Ajeee1ΑcF ϟ`eQFcaHcL2{/EcObj%f̩m R FBZhm__:֦:>.߼_xK}7gS0#mGeGVN*A' `r1~ik}}]0o#[[[W`6p$}dr#hTҎh>ޝQeE) iE-^mڇF<肤jR50#mG8}S߱Fx}h/h;5|F@lKRwt|R,#ǗTAMŅڵ@N'MՆ:O4p$l+ ijٻ6W{52EaSUZR`HGڎ1‘b**,PA^. $ՒEBߍISveeUw*WFwE-嫽NF-Ey'BtzҎ}4cYeff(+3fTE:t>/ϝ }lqχWwol9joiT!m\H i;1ZYNI6{\pQBɘ> -;ZY]!lɤMP&giL\v_9:[dٛeCa]ԥU18@Jf[zpëmG VwPQY*6=bZ__W8}ϳX%OJϰ&ۉ)dNo;ܨ,Ru\?w3>iذ_Vwo^KWs4SNV= $`/Ds+IyNRý)Hf@޽c׸ 3?LL\v'?sEuȲ7/º|W?ѫz}W$͑F,۬ p8*Hj vR\ f[%yC ,NX[[ĔO9V+֮]q,-54o48Ϲ31ʊReef` ZT/Q{PWz4E.^K]qUTJYYH KF*z'ͼ:ak]}%*&182&_^$efdz@23 m9քG'gXTDu˳Ғbds$>÷igtk)cWUɹ&?^Ӽx44IMժ=^_NIhu%< B_^ѿ%߭IuY'e/̣Yشĭ ߧw$Uٿq,--@))Ѧ(#QUVR,e/ `n 'm|-G 4^Tӧܙԕ^7٠k_/ol9u9PMCqt^b7RY'̾GpTjj >y`p~4 4󒔛mIsOe++ofV4-t5y?79aIHr;۩:[dٛeCau埾_y] h%ٌ~Xf #s(R@Ȗ??;PvFKRe=)1Z`a/CN2K j>Iɬ 'z 9*u3zwο>.G_7B{ ;v̈e06 ҉v^啇sU)3c L#%E4L"SͶh!K1|ո]:ǗTQa 9$O:'m .˖CCkmSkSΝ}A=?f3%ϝ)]TRsC5#mGeZFTV?5뚚6u\O?0 r +ϖZS *-)bc&vF|h/Ld(MxHumc+裱f˱u@R; 5\Hʱqܴjmm]>@آk׮]4`ZPXOF^|^g:f>dCau_y4S69vLWc:%Ӕy"OYTMxHy_~hlRMNhpdLuE0+heu-)Ͷ$ӾX8-ϢJKlJ tSM߇K^Oڱ TnΨ,׹:wS=A~߀i/u.ڋvQ*65۪z 0RY_s8*މyY'wNTwMi~<ȘB}ǗWGͭkbʧ| B&b/7}I hۈ=ZT/ѕ0Lp.HqU$HcF Ky4Z5<H<{9ޕxg G`[>ί~ssHL#chlRG:c!|?FneBDTr0 )DY<ۯrR]UY&rͦhyeUŅ\줎u([T{Po]yLQЈGC#]f+?F+ϛ&=&S IDATo~..mLȘyjsIB?)_l99J,(EI[5i_4Uy'UTO ` vÍ4xfZYYUپb0ef  _R|Ya'P+.o:͸/QqB0/r182P8C汮o>08I[pov{h|3sXeP-8f (0VVWin 'm|-);,{QN:Nz4.ŗۯGw)iZێ$Qq n'/DEy_^ѭߛ$_^ؖ?o!{>{|->kyǗҥɻ3ip @r;۩SG{,{LQ|(~GW^W~@;vԈen'TL}cF$|vٽ34IQhlQ=^n%)ǝ7uMLNC9/|Yjnf3@ꫫ>/k?sE6ՙ?_xk(Kq6FdZVTQq@Rj2U,A4N?/o_ۘS%ؤ5*FN}kXY2MՏuf1+I9n0Ғ"6#Q,D^4 u]Oڱ7RLh!={v0f)NMu^mڇF<肤jRɦ%#pTyfY&۳'TL1 XS_^Gcz@92\{wFǚku0E_|폛mB$cNB5>1| k.HKܙJʱ23Bx>fس[e:["`n#HWc)S{`XYq9P-~~n祍h54[xP`<d˱&d1}^cx@/. CX'ۚtְ}.yCӾD!#Q3Ҝդ}7vSY&R:3@z:}9zoP3A׾_ rTqH1_2Uxl#Nޅ0lkŽ582Fv&Ym ).zKONg~#q= ՗u+ ?fp>̆7UOL"FVUi׃ ϟ<~(+E:wS?w3uȲ7χ?}]/򺺯+ HlV 3iG I6Su)ޅ0= =^>cǗWXTHs9tK?:R\o^~OWv6\ڎ=-ǚcNu\O?0 ^|YagQHֶcz_~i^Ę,O#mGyyP8_G>}mQ[s\XpHQ&m\s{H 5Xsme}}]sP<[5i_6f -UVR,e/  )nx_Nʱl9\D &`/*ЙuyyLJW4E~>Vwo{gQ{Kj9oac V`𼴑GYF{`v7L]fԲ}.87_;̦䝞ٱLh37.M:\+KVj_|2TYfOZü)++VAMŅLOדv3t)+8gL\ΖN}-.K]xK"57TZYY\<$‘XEF*j1 ;ƻ&(h`q; )3c:~[s_Wk'0?wǞR\bJ-ǚcN|ʪ&|ɶl_14 ovÍ4@ey_A3hoQG{EƯ՘wx44̌0=w6)wC#&ϟ0 @XLWȘښkY. Sd3τ ruIǚkeنIj\?*I9n0@xDu˳au _XV$XDè{ARj5>IxRQYj=_ӱZ=֤$E/DR-Db =/d:|uE"Qً ISI۟c77<,Qh!={v0f&g/*SuqyLJWl/ŗۯ~rTrpm9l AG+QAݥ*|jbq)n]v멚:֤CNGŽ&\JcMyô/[-3>|۴k.H`(OҎvF *cnr PUYsguloPlqχ›AR{UsI-GiN5_|%̞C XDe/.`+)_`GrKKqu_O^x3YdǗ51SeE)%>u\O?07~W jf6hڗr =0<[j?͑F w8*z'>4zy c0O%iÏ~cǣ+Sx`>3cOrONKCGW~&n#Ho<oB❞.ZN5VS53^{r-Z$yOܢ -3>| ز#-ŗr<[StM|n⛙UIq!PE:wSvsgRo}U (dCau_"57TS6 eDx>t@:=h$"ϭQEQŢєxHe{f7t;\qS?ygǦ=D9Jo<nNyuu}0CUzޕ ay$O4[wTT|9BqMڱ A51svEC<6e:[ޢhlQWzujƼShģ.UUcCP՛KCpTz'1Zul #S 频FoV4mE"Qyn6\8~ƈ\u&)e/{Ylϝ8P_&N%՚bx[sC׸了nu@O׻vͶ$ӾJKHlPJe!I7hNx&4PIQ\){ m{~OH|x>f4͓GQF<;=#>T*=]Rfƞz-Db =/MmDu˳0`(OҎvlPֽY @UUr;۩z܃zo@%#mGot8*މy#e'BۣF"U4!C|yuuTy>9j|ye[s뀺{Z;/^⦪{!Swsڔ-ǚ/fǶZ[[|hAed`0K^Oڱ꫕oˡB>UОݻimT֦:錮tn#uB/TWg>>ۣE4(ńQu#z@r((oJ70`Bɣz;ȘG(-.=q|GOe=w ·<*ȷ0_v)FLʹqr 'L;yW4hoQG{EƯ՘w)ľD>w(XV^O~Ow4J|ye3ār5=2=0O'sBښkuk|)$% ɶ&nԫnygm.ڑ;$Bi?米!#Q*'JCzv2dGcz\ N_a7 Ч_`ۼ?֟+Z\ nȝkr-I9/@ ;jeeUS>Y-{UX{v)`@KKqu_O^x3i2$0uo,4:}!eC G*).TN6p@꾞8|,{3I34e:["`N=A]ګ1)ґzu IQTJ9Oy,˖ IDAT#M?a]V 'G8黗g;Uz#y  =֤n.Ͷ:=q/J4i?VVV51SNUeBift|2iYjoix,S>9Wp m؋ tq>u\|]7٠k-.JWt0_G7&WU10΃NYVeNH"yK I} ոr |w+3ckxn%)qPiI)-gQE*˥!&.]c77<,&񬬬j*Jhc/*й:wS;իW{[\2|3AUUpgZT'{QHQ]yJwF(HNY4F}[HT۷DupsX}7wI `m{m|r-Z||ոlnhlQ c {7K&o|S}m8Yeff(+HMujmӹ/l{܃};_ŧ¦Col0\MG wt(cNisxoH?,$9+8--m=yuu}0CUzޥ̌=,4Kl1No<n=S֫qPVVPi_@]N>;_|?7C_vw[5i_MzHmP8k'Hpi׮]4!X-{ޢEcիW{52E.xRG7+QAц͞NAx>XVC^m \}]4=9EiuepW|  EQAN';1!nW LH!(vލ>c4ά9!(@Dfמu;CZLNQjis`1,M w1.“C( =KH:!OdyOrq *M/ "W ҇fpuЃ_x&H{Ņ+.T붂ÜDDDDt݆ޟ\ӐFc6^ .(DD?]I|Z::MtڍGzpؚ5#89!ぐk >\ |ri9'ơ/giȏn.r->Zw{+ƯM}wͱ}cx/چ#G1 "*E^d. Nj4v'" hwW.D{en>Bb 8;c><_xGJ~^|_cV^, """"|KrVI_|cx\/{X^^f1hObTWU|"Ӗ̭ H$͍@P_h|Gt~ R3ELgkoتV DDDDybblDVMm|NYWan4󕂈տ_WiG6%"Pg)i8s t=>xGXH.IG艈(/}@ Z>NFwmvrb0X`>\jK$]*ˡ)S Dׇ+34Cb~Gը5ȴ/2U~8ښ*Ɏl77b/8Ѷ'"""c=fcx^$7kȦ=ήDuO0v]r8A ݝNtw:cC$>/DώDDk[~0_Kԋ΋ [3f'g0a<|:8'2fإ+yc3e_<ىϝa[m:Ok2n-,ⰶ Rl飱[ ˃l^W=PÊӝ081ď~C9 n4j@4 >S`nLZɎ)_LD$S:e_|tFm37}z?k7\o@"!ޑάmH,,$[KP UP{4}?{]/}KVNv-(fy:s%  ADyO_q=O fpuЃ_x0O~+V\/:,9}ÜDDDD2fn4CRaeyYNpY;|axoD-NPʍ  EQ/hh-͍@Pc~?YeHa  AD9I)(Oo^0ݹΣ:<ف6rc!CYbr:: *Y">38cx[8w)G-ھ;ntx"mLu΀ϝ&~o0 ^q lV DDDD2e heA_*BѾE0F Fp>i8s t=>xG/~GY rox][^rb07l>ggJ ׇǶno?Px'7DDDD$mcۍZm8< ŝr[.9͢/&_(FuUJEQ}d8^w0Iz<L˵xKSþ\@|fu "7}'%>n'45!N=;xGdq5;CK]LNQj?y}.gH.ax/wprRNHBPCS>JYm8цhaD8?yрDVhDDDDen4C_Gt.*au,gx>GXyHvLu5od7\oMwh|oc>f֦G gpBb`szN@4v W=py0O~+4zpuЃrv781$b~9 Hehv&"w] l_Pm#~Iw]! ;GQV1Vwy>_ȋ<QJw>S{҅-Mf4.AK,,qR^dVFmu%q;\ >ў])l޽\_hk8w);BS3[ATZc'{Ņ+.TNx%/$""",<$X^.®DD9Z_A(FMU%x\@wݝNxGrJjfu c &pj &/p~n'=Xy]ϓ~$Ww19AE 1΃]B?fn~ ~G9im&³0ײDDTg 8\1;7AW^{5[Az/&"""IVeFc6\GxBx8B}x\z8[3f'g0a<x>3Зk =}~Zax(+sK'Q3\gؗp/󎼇ԬlxT5sS^HҨb7Y" Mg,͏p:h """!G#:Ӱ\N3<'"VNNSvQN}$l/\B57A:h|oc>f&(y] N<"|K̋}ŔEbt0WRi\:uzH* KFcmz =0AQvG̨`AHXPӉN'#~ }DcOfu c &pjvfMx~jvy"4,-¦Q?GWltgXcy%G(((`AdNprFE1$)ӑ9V5DD"WF9}\ޱ ^q 庭 0'>bo_iHvVO/HiyK^'—j@D6V'gdJ<-}589!ぐ >\'M45osa{""V_!u;^zy l_/xGsDc7]hwf?:ҙ jd(HFvR,6bvowrAҲ~ӳs0b;"}`3s ~J*k/_뗯XSm8jahJU05Ӱ\HȲaey" M{?Hԙh? x٧/~fbI'___Ð2ks De??vɟH/D T:}9^8s 7qM<>. 2&dV15eHvuTw r%!45+;ls䬭Dxwe1V ^pox%o>+Ϳǟw: """E~.0; `U! f;oZ} F͢4j9t#~n]o`{pvQhԪtϬ!_tp.ݥDx @-MZ/tw:wď!Ck{S] 5slmv=Ӡ!h,Ʌnzno~ }=wde20G#,8jV WR>k_"\c3 ҅s>eJ,^$'"Yӈ'K,nuO3Gs~! G%YAPiGӎ@n߮,BSjth|Lfv'"YwE{N' L~`AAA BD$9}=O  <'$7x+)%l'"f4 b%A y|hi2s'1Iug&#Д񈾜a9q;r ks#nov:dc  I΀p3>E1CQs"䬯E,@rq :h8( }=wQ^bH~NvdGWR>]5c˃gm-(l *<> y|hf??`y QNK$0<O8Yd[ ɓJYnmܠ\hY6䲜%Jx2+,:ODy!z$ tw:wď!hLcmӓ <~QHmd+ $bEp<!-M&ه?fԬ5< ;\$1DOD9^|Kw=+ > z ؾOu`*L1)d·.Nt""`( <>Bm| ;45 QΉ'K$7"M@7 AP՚!2à'j'po}o6B3G=DX:"-Xm}ޑDn{'DDTg 8onGJ]e AUь͠\1kӿ坔Bcr eI=D?';dasߜ?y1b}}]sgoc>f&v'}=~pz.tEtfOո*pzLJ!̪˃gIj`.C,~ * (, XLu5ܧi#TWim'"/FX҅sx_ +DDDD"Yx0<EWxm5hIraH42Lu5tu$y3!\U -^ H펣Ш6#D%1ۃ+ ‘(VR/,@yf<x &sލ]t Cn"ј5<nI]$\\BQ R% Y=gTʒwD;8ls"} DDG|e=ODDDD"mz_NC_ryGv'"Ta6BYIr"s16e,5&0#sb=4E[]S /f;.TBQm 60w$>)åpؚf 7Il Y\4(PC]TɎDA_qaGA|vIF ۈ>}?89ښ*J eQ>'r}s:CD{/߃烉|01}OX`ij`Q@6gۻȧv%Y~}- >w=Ig!.ZpQ]UOɬ"YE,CP@,Do<o%Zrb+rݝNN@ϰvSVHz\FhcD *=sQ hm'rus|&版CDH.!27ٹ3 @47qc1X3 kE, DmN‘(VR/,@$zpCbit .hhh|K~Kt{yTPP g:w4>P`ع@P|AQM&N@x25 BD$3-kngbn+rR՝cx~?R3hy)iϥәlH~jDb o`{pvQh*(#XI7/"H"XD*A82QNw: *9lpؚLJ@Hc M"45~[3:v$i[^Iay%Ɵ7R%;}0ކsy<tD{v'o]~8am BD$#_"jXYh"""}b_xX.®DD=D G,^~h6*ڵ̀f`^[sYfu c &pjc8偦 ' <;񘝫4 DάՋo _c1>s>xGޓE % <rdڟde+LOС(KJT@]DQa! DyTg_WC{[<㭖C̻u?D;5!ΠJH7qu#6?,4>/cܕ;0k9h (pO8-ã~$K™>3`br-6 q23v-KDDDtPTARaeyY.Cpxz!w.[uibNfd#lu K\E x716AQ\mx?#XIeO$K,"XD|a4hU,gf8lN`x $qfVFG~$?kkw\[Br1{JYR%  wO]@"$wu'xa"dVjT DDtuЃlAY" X6\?iH;VEJs#5Ic[AH4ƢH yo48 Z%6ҧO,"Hn<.E>f>tk,2`7 \B57A_X\B_ ]n4'Y[^Iay% ە^]DT]EFKD{`}.&#(ס\ǂȈ~*n s*^`EDDDt d*l&4!zU*/o5&0#ы-}'l᳏"JgX$4F FA\go_ۏDc{{<5~:K^fVtw:a7`lDI:TeI ԥJKU(((`d(`<,2HҨ~E,~-=e';Xh"""b9&qWX.[r9 !]$!SmhCx{{)J$aW< >\'M45(3WR#Q2'_XdHLu5BP@-{ Ouau<>4APiGӎ@nVg[) M{? FN'6dm}.n/c2lGze6Lϰ| z|5 0p-E$BӨ(?2(_5Q: MDDDt̍f XXNfh7=jYMDt5i'grK*\3`C'g僓3*O;n ;c&5BK-Mf$Kx (Br Ч(8ڝvލf~. (j'G* }s]IJ~sn^0?W^{+hFYlVe8X8<\۱\m19Mfv'":z^B*Cx\fܼ,:xo`{pvQh*v$OnA.4 Dը —(> wW>A]89#jYOL˵xKSÁ;+J*AAy9t(%;n ;c&4?"tfOsg{N z|%.Zً~.}D{''": _yT( e8Fc6^ȥ4exllA=(PM:A z!zvz3AY3,O9a 7hG hwFba l>b%JgX$4AQꪊ{:ě!ܚ. 9W/0I)t ޑdcxԏj}F7z~=HPC)TBHk׎6rw{^]BAA CD$+0O:v'"""AMNy }r.PaIUzJ""u-Mf4L~!K}wa "B9+8`ru5{MU#pd+ $bE/,@$y@MU%8W(ӖAa_0xB%>pزڃ3dRpo}o6Bs.Q~30D2]ŝDf3DP:ZDD"Y^IG?}Km\3,4Qme9 "ɂ]版$e3T$KNds1I>3Зk y"b=]i$Z_A(NSV]io}?@:*6ҙU\ * O >w= }άb˃Vk3:vPbH~O8Y~xx25eP*KX"=巰JGqB s^ݕk;9-m+DD}NH_גh|oc>f֦?A<{ȧN|4F F}O\g>X}& <mŐۇvEG:ݝNtw:cŗãٮ8lT׶UhJ.U!Vk3B$%$PTT:-e|%"zH-^q 6 MDDDTA_Gt.*!\.>@|"bŭ.t<'0I^PJB1tOt'ilÍ@PԵH:xXd7\o@ '#a̺> <pyjmF${Kt{ۃJe Y;Gq3'TWû/In255oИ&Μfrnt %<8l8d '0Mhjejr6DϰhKAz@(JYe]X" ((ix"}S'8B81܆segy^$VM\""B6@a~ S3N"89#$(W:fGDr %Qa ov |8J*xbENTkTU@P(E" 8نG <8dfgZ,BSwf:"*2UJ$|LOϴ5Z؜Hﷳc0RKU, 6W=ϊ:>BI xT>V"_s:mgv:g{N!?ovgAF >Xbt<'&IPSU A(N}m5䩻ӉCa.oa9low=_\B_ ]n4> IDAT}Em6*P@((FQa!>J WVX>箻H6sPJU*֕APsq)v)G$bbldT.ñpxz!v&ZtiҚy/89AhjjӔ}? lݝNxGrŽ '$IV5ei(Q(>Eh/9_ۈDcwy̓,xixtwF ~[3cxS] :vv%wJꞿ/**DqQJJ@AABS3?DxY^?߃O(B{lrq %BSV]_(/^u^:܈m,4XɅ)̱Ȃ o3HDW?ӽ뎓32,OBQ TUn4xH7 >YCSMBQDcm|"T*e Po닊[IG7 G"j,@,BQrR/J#޺&6~)HbLk?(2ED6C_2jmF %'g0"89#Ht56B򕻾 0H. 6j5Ul ^N[&ݝ}ž|\&3Z̲Z;,$?~hwL ˟o E1 BICA(.b^^yJh^y"dV1d3A,@,T2(%, Iޏ.%;sN"""" mz_. AH\/J Fb%CX_˃)c<[3f}dTW |MUBw zN;n/;/~,Q-Mf4H.I3,$po}b8li>Y^IөС JJJsThj[-Uq7s~fю,^e\u , IAn[)K>BIW/!0q;OT版gp^^Eq6$_oWޫ7\o HgVYy B1j*!i>E7}άbi\z %I)YŐLJ!-M&y߼7fGzR`w} ]IDDvС8tZ 5 Y"Tܮ~$תDDDD1܆ADaCDD$!w-%20(/yN'Gҥը —(> 3H$APl)zDx 2̙N';yO!BWi\%:@*2U$?\RP\9$K۾ "zw'')SB=/xkrNvDDDD'Æ9l=W5娚yix_Epr.7C'َUayvǃpCn" C{76|7ek* (JtPZhi2a<u;}o`77qؚ5#2à';RO$å?9KWRpOEE() (QTT.@XN;@D{*CDuMm|wBɄfȨ\[mX%Ij<휹ހjԨ.g N`=LI`TUBӔAQC-cH>s ʏEH:x_eeg{Nl>3S:.ZٵרDeml7)( k(Q(>E$,(pS/,>;ld3<nQr\o@; K]$åBӎ6;'$d}' Q\TP(cjiٻض{%LQKX$jdt Il,,ֽ3ɽI74L@Q- ܢ[Nq[@s3 \ZM6)w:n6$佔lYXI,9%eyls~CFs!?9TUŤ*y,[PvJ޺}rQ .zڧhhn]ύϡ`!to͍Ti5Y57Hur:3xCjy.uyzIRFzCg/ 3oE24xHcW4Y~%#pTᨎu7d2`qwyg;\sS,^\bEpn}n}6 ׽PTKSWuyiۯp7^lE*jCze_盚HzC~R)!) #T-qjј&4.݃NgK~OMvv ή9ەL-!zkq:ʷCLj'U]l"'MNXlq ̲[}GMp8m~&xNk(QW]A@H7=[rY^fPzo Uu^@AHNUyjq` D7n&L~>Ulo𼚚rgw;<]N!D_jܮ|<8KN0z5il|{Kd'H Z9yjY iwq+w"xVvN46~V) Gu]C|E{Z][(T_VV2UT8tt ^Aw}e ݛXȽյui>44 $}`C:*9sza_ A :[on$Ćgt:R_HcSL^r:୓Y.*PN{?XI4^y.:٫n]fLpqbJ'knPo(6Vns67<V@5Q}W=({ ݸP>!z9_jm0m[#44[[vH'< }d^[onܮ| qO\h4-z _p|Ohh[%__3v9 75b; uP8HLFzFyN5nAy*_#-.Li蓈&g N,ɾnI7gPPg7u?gw}?FbbqJ2 #hx{J}竒2aUUtʵJ%%%zCkv4sA57 ܼk-B/M{k@1Yx~Wlfv(<($}!v5J5nvPH(v FF1Ev$oIRNNg;XZ}|hh"ebMM^~.D uZE%VRTs2@A;}jL 0Dc 6#pT_Xg/ k'ܼ >>?;4S ں}NEǎm"$ Rϩh` }*_ʼn)lW$@YX\ֺVowPC#+>;HL=!eW il|JcWqekѷs|w)y;.T異?XQ(N#QSo PlXZ BO'L)r[F:eIڮl[a[[ s +ЮeDb#<Ҳ kV%H6D_UY!w^yxc(z4uok_ܑ@.Op#hLcW ;H<$_X\z:JJmƆ}lK GD#cBh$fE? ܠK s|;Z\Z[rWM Rp+eum]?ksΟ7T~75x>>wc4  ֳ[(6S2%^wh$F"HX-#o_!IE :'t2gil<> Ghg ܽ{OIJ$vz*8=r{Otf´44$e*QIsTG܅ vC\G#0I{1L ^ff22 24Җ[}`*K-?FbW) Gu] Q[jWQ%K#y*))QY][OLǻ44ٰws矃PFs-\P8bꭄAtZJ$SZIhLi(թ4LqR_HcS Glq^T57+l_)nhM]z.T|3JR7!zb~WuônoՑv)xБ@.Op"DW]]vBX |"y[̣alXfU|&gbW9̵9 #[ΫRowP]vVzD -.-kqIy ׸]HtePȱJ}}URRBΛ?~Xyay͗FVI0$)%VnH5, IEhOazQ-^7H4ID32>dJC# GWh2c/.NLĔ:|67V"[[rUUV(Q.ں666idwi7t3ԋuTIUj Vӿ8oJCv -;[xQ;]t/zxvџ>u fħJHV"|#>;HL= t: 'F"1[19t\5nB:3No(IGJQ]TeV׍nhcsSw$Iw}uvL O >[PUe^x Uއ}\;ުV?4gyۄ:xN]vni$h$f+ɔ~yasK$SJdmƆoH-x־Kb>u_GAhͯD2O"JIru^RO(=๤J+SP|V6'wKuS̱|K~6ug'44P騤O#\pӡz g a5,#y"o(QvGDsЍ ^4: 2^DcFzCјF1udLgRvJj^߷ ?4u_햯!*+3?`X z:y4J$SvbTNbz_f(Q_e }!Oil-V蘜kr:K}!u9fS|uUy܄4uU ~UOHS'r8kG0!z@!O$o+y4 -,-@0a;8ZcGuͯZN,+Ю@5Ĕi%ҹa ~VO(K]lt{o&XIr-ǯW} 44P󵣼盚١<K~d!4(PdJ2i/f*vb k__a~>`^;g$zVNhdF1OY~#pTᨎuf& 09O=;}gXϣWxj^NtVQ*ۦ@'wy3D?j4kL:42;C{TWQYi) | Dki?ުvx&|!rK6 NoYX!z(,;tH+Li%Ikn$5xt㮖풧:/K'z584b~F1u'vhWW]346>e1gP8@z`$iյu(>[j.M]կGN||SӁWrFe ;OurPv2 /ސalآz/~ ƥ *'gMO\?w-4xHƯX~dJᨆQlWo(>xU/xnGIx~7s \, k(1=TKF#1]"Rb嶌tZ |Kq:ʵ[ @|s&୵~}oۏ!NU_.O5b$]_szCAu9xbẅ́o&vz*++h;2 mlnjsƧ4}ipj~惒,?h ?2`F}6g D lqgy;_sv@ ;TR ?9 S39 [ӡ@횹6hLqW|v^yո]+6s!_*y;JF5{URRBr7iݽ{gi #3[zorHG%7sT TZ( i%VRJ$o06L,]-O+v=PEu3={°9SgI#-J$S46~ԕa%Јu<} yGKZ\Z= z} Dc{9IȩzNWo 'D ̵Gr[WW)ɔ+eӚ_\alh~$Y 25nA @|<^#? qtduy:p+ ]ʼn) P #3XXd-|koJKi{0Z]7Nohm}'Fbw79iȹΣ]4{`٨%Dd>ksalD2Ta(#&T'{ $m_Rf+NGCAoG aNNOg!@k]vu59=HΫRowP]vޛN~5?f_^rko\{TRRB4kk266367l>1{:I@Zml1{fO>h3q$MdC3шeGfCcS QKd@Y!dJ?9 tud/' ¯_]aE(RjϞ[u?H<#V:5c}Sϻgv+t?ج.'wٿM626>p2a֕dJ5u>&ۮەEse,r Rvve5.U8UGS2FzC?9ss-qtz WcS,?9Hoh4h46z9?l?Ow;>u}u6Az(2wSvJ)SBOlFZFzCV M}} S[v;>6kTB^ +NFZ2ҙlBdFsIVC(~o͙o-&+SCO?8o~=zBAMNh$3m|kr:K}!¯d43;ȿ #$Pqݻ'Hkuzݻv2cj©xS t]砙7;<.gwϝϿD2{٠Cg@elegyW$ Ij,yjqh 4; YQnoOp_veeDb81ecʎ5 PNv&fW*0 HPII dc;tZw 5^hkUUYSտ75nvx>h pgP$Πr6|`J2u13v+Ɔi XZ9qeݮȣx:٫ksߝ0wμE{ H4)}F1Fc:֙/ Uvd0;Q6wVJ}%4pRY1(EP8b>\, ![eTMM^٧flimsArWPĺ:H4H2e57/\˝tZ3ffh혈;q:ޏr:d[}GMh46;StڵHL',L K:78[!smNc-,-ఆu3u$[]'NVA(;ܳDNCN9r:EV߼sGwNohcs*V3L-RYo <Х A6l(.o`hV|F:]qg~=<i%)$SDXA୓Y ;T(n=.OϘ  (K46~cdJᨆQlWo(=i &_ه ӗG1 HxwmWߩB*++UUS%[!{+V{v;w [l_;hh]V¿fֆM 75x.-#8FlQ-o~qyW+ '5T]쯯Y.Z*֪ lΛǦpoN9]9/) #B_T57+lݟ̺Og3Ixl~Q UqhR}IIrI d;3_dC񒶃qxZw>)SihmWSӁׯikVvixi88! }!D_ üK"Rb嶌tZ/+ Pvv=77JRz<%/LO&6CP ȱ@횹6hLqS|v^y # ;haٹG:`<=QI%)Wʊ;*? |^ FZM7ڗ^':AIz翂f0@~T8hnﴰHb4x; d+ORuvkn$[vyjqh :h={aXLoiQdJƯXOLi8h$6 cg|U볪P̲=g$3u,uU_|~ůp^q7Zj⋵#rdgy=̵9xk'R"yVNgur:qW?TE@~>uB?6b#? v^ut\CV)K΀AiMϓ[W?OAz oFC`{v 4cT ^/(f3+ fdG|v^lW( |~ >[E@q:7o4SO(H&]vu5smNјKWۥr:Iә;D5I|숎uC~~c9hF Ϸإ_$<e+ff+p: 3 / (|FtMl Goid QdJCD49=c*LiphDo}Нw%eBV?> =cڜ.NL~O,&Jsm}knPUe Zm5kfl4إŏ:l ~fvN2 -,-8Ҟ={Tϣb<5]4 Puyz*FzCg/ 3o@y.8!F1W\s.6yA{ [u7^U} sko=I&cG4qX݊758xgrfT?0Қ_\<&VW"!bVNgV --{w+0,_sB"t:t gaiYCB4: yO(PP3XY Azel|1QeS1}1ywxIxI/;wμM%z {>  /y F"Rb%_O5s-S)btkVN{k3ޭtr:2}+_?8/_s/+N6oiԉn g86hͯD2O"a1;ϛ?p:46>e5 =,7ҦW?o<`|KK SO/?ow|;__3v9W$} "mH0@e3s2 /P"*f?JـZXZaksao<5O\~\o|v^Jф{ sa}ސс]qtz WcSg63 smȿ?S'{ud 2Oe[ZqK7n& nLK_Pb^;zfk^/%Hk~q9SE>UEHkaq0u{ܙ rR-,.Ge'ixԸ IDATg h֮<Okg ~=̵Ly0K6L୓Y]{rOjVqO}e;+:>5,ZzHoh8h$PP]`Zp8j~F1uthF"1]Q?{&JfgƱRۗ49=StP.|4bjܠ.M^y}npK4uUG[,H0 r盚ͅ1fHoU_TO$SEWe kn #gf *T}ٕ מt? v?eCᨎux=`#}!\3aݷX(@:=pB'{5il|c՝cE}/NhrzF'HO]l~WS4m(y zU<@럭j{<. My@1K$SJdjfP!2%2QAlu"o#X t4`n[ItᣑP; /)_a fwȟ&`mP|vNf&Xő@.Op sfi/.Hg+_sv Hdy[!tVjmlʮ?>;j]v.PzBA]Ïg/ o,j-4xHcW41ĮN=Ivy#x~32soBZ]3h ڻNs0ux.RyPɔ+@z:͗0y7xkt8#| JA:#y_ItnpXCሺ,;o?`3:;8o: XHvƧ4j[vu}L_" ogAK "}8'ȯor89-/3_&)$S4L 0dƢZʾTwp!|}e'`dW((k,WF"{M+ɔQFb  t:tz~rgr:)V,+Ю@fil<`W/dOFclp<V;\n,gG5~IHHfȧ765Z74Ltڥփﭓ"İʮL3oޚ9H :f74j8ձvQ1Lxͧ鸩(,K# [oiTƯh4+nj;;>>|!HO`eU{#4جxK.7U{rrRY!I[XRznwW0ҚSdC :9ە6|}]lu<5Մlle^ʼnLEc*ԕ^48`qK}!vuy:p ?skv%/(3 񉕭GVM,45x>Ŷr6!?w ee*/+$(r))t\M]Z\tf)| KKv;ش(k&Zd&\xUGa0F#1˽lܠ!z9>uB?༩k4SO(H6y d&\h4f*,;aZR^ya#3aaqYFp<pF __3v9P.5X1 [~gTeDz璴|KKˉ[u]Jcʀ D6୕頁L⪪1e5kiguIsy:nH|v^?jv9@4;Ѩu[ |6|4*Li4 >dVIZ33=I,*_X\z:ߎG XRKxr?jE/w XX6pD{쑳>O_onn}vt?o<2ž[J2s G6+P`uyzԪrFzCg/ 3o y.:ٻ~P8R4*+oѷׁG = pDZKG1G5ͯ!&`V'5pT|E nM$SFS׽{5flB^C =Xv <տh|0WIx+P5 ֞JGJJJTU| kum]3ZqK7n&h\"r͍Tuf*mJL"%R"*Ȍ.NLĔu7e}!M.eSs?׻}HHx.ƫzWSWu=c:|2(3@e3x.X_g0`ij:p>}A\(G-cU*--鐳LNC%%%_߬+>;UE|m]ksZ[7hTQ@oZs57o-;~p^u^^@TFLh463H7tTdJCDlYItnpXru^RO(( 8"HOp<USxw#9|1H^$<6C4uuZ\tf)| $K*[Uk '4xr^y~aNF1A}|v^CB< uyzeEfy.846>ejFzc;SOwB@Nttځ =HdJۙm%V)[<)؇P.Opb# إU)>'&㚜k}zBA&hWW]&HO TV8ki TUY!_sfOҴc:`/^{_JU{S}xW4rb}r5xtܨ 7wuη<#3+qW5FzCF#1u^RO(J#韑.484b~&jX @qʆY5Y/ї ATkqYF:Noo(D WU:Criꪩ̨:`/C`.66:cܰpd=5P̸aj43m۽:?FbV6rlW'zBAΙ;{aX?~#+Kx~oN^DcN4g_f8p8c _X\Z}׽45Su^lVy%Evi%lkZ\\T3Z]j.y.yԸ୕ K0)g?{ayI)IdR9-1 $zb{L Dvd4Mp&9 .vCq $l޵b&L/;[-DfJ H7%ICH|_@ϗɇ<%x --:$=4|mr*ɩ|C&8_~`B+c1=8`E!E!MdJ$Ӧ7ƱLKg> TAKnnAv^q5{j_@<ݲ'}_b? </y7HIgtjPra-Fݭ`V<`}ۤ}xB$2u~ ChxҲ!.~M[ *0kWbzgJ$ : 4)ϭniyEWb{+PPCAN }Ƣ٣Azw/|Esu{qWd9M]jGT _WUmrZBArڼySٜ>d@8QV :&kE/T. G}[Lw 39'Ӗ3?io*ۯnhinj:dZK+߮ɩrU}9)b?EbŠ Xܲnxy~<_ѝ3JgysSY>(j_.,3Z~lScE_R@*K0m^lӳIMNe-9۵ )%i ;!a]~/z Hm\ݹ'9^"H_F~a5g][y쇯N~P-l6P1T(|ϽWn'3p` QWĻ,ߺy@{ K`Ld*LY nS#Ê)Lk"sô-)) (r>D`#gJҦg,:.gZ`OU6oXv;'r<XAOV>*߮D8UGojn`?6is7<~]&@rہtF7on*ެ6771#èS N6CI Xbؕq},r!EOH-@jr*sx@rs -\gd*r L^xRk߮_GBAtsU@~Azr>_]۾]߰1p: is\]~OeG6on*7;͛ΪAI>7Ǜ u ;ʷc|QVNLY *D&kڗ-͞ áH8H8LCgp=#z?2u=K+ƓC _vB%Ri[V/@P}HX5 =Az^J :t^V56ѦC~ h@Em{lo?{~e8jKإ * ʿMM"#Iz'3p`&SnSn1jzd8*d8*0 ,Di M=&2Y%i^;?˯_S˩H8T~Z L]O,ҙn?W`P16;۴D2 ^QcqEIt9"x XAOG-Z*b|[*}V?>?R]~ro n3ħ3ysSf\(hp`f V vMu ]-V_4eM.灅ooqƓm7tu,h$tw>RBѣ<3ڼ쬖?(hPP6oTn6gˌ:x=n1]-w0յbw5LhOwKZ*h3p` QWĻ,ߺy5*R,HM[~|ޣ "ᐆzw&h#H_Fv՜ s ۷glߒ_u, xs~/rOeg8jKڼ쬖?(hPPჂ?((7͋*V Qu7 mDIӖ ,1}nnAxҲ K+:S4~nO4=7u=UPx=ȅ!Қd-{BbiKTZTZϾ IDATzi\a.F޺V7Qv#m߮oXD8{E<̔]6iw$p()i"DeOT+@S}; Їp<ސMGhD8A<WO1I?.kGۭ6yV_5:g6;9ReCҖbɴNk0~j84:2׮XO6~\Ugdڲ2۹[ik#H*ۧn?Az3K +X*ߖJQ>olM |?<Lއ A 7e.?{lgrZBArڼySٜ>d@8QV :&kE/X)]] d[YmnS#0TZdڒ'K[JJ:P|ԔnL&IZ +r> |&O)O\o$XAOM5='Hg %PmN|ɭ ǣ:luzǚoo6lefˁwI/2T~6p`#G ˩n w8ml]],$Iѷk m5+p(ih TZe[&ѪH8ıjȅ!L}nm7qo >[D!E!MdJ$Ӷ~\3r!f/#HYI"K {=qs|0[F;mΞKwar^.A6h*|P$\Xf80Ul?zCm:uIM.gC~RBbӶN~'x'-/hUi[\)w.~X??W:Wnk-h"5u\'.sL AOB~'_̟ͺja7 9{nSxcv\Äq?(P((^N7{oM>3p` QGn1["eg7M/Vg5n<6mz5quLNɴe/*?hD2 KֻCXj5 }AևOQ}}tsSymGm! ZpК^;mΩ܉ykMfgAA˅ryr9}ɀPqN-^ϭ@uLnv< jR"ebw<&3CCd-:UC a4XȰ/l-L_@}'-qR1\@6|>dj7lцz:ZP/_G :8a8(04?Lx~y[$2,l9N:#IEFLrnO0x6PVTXJ#5hu}C3ySm8`:d5a+A_T˩H8cjz 47u=TZ=>>g ENjz&WW)te,:[Oi_*p<` 0luES{O6-?{S:Zomwl7[fVC'íAy}i|yYN7tu,h<PPLvMdz b8ʁx1["Oj^Y/mW%MdnP!['܎ E'5 jh q,,et$^ydڏؕa8nOgrO+czQG/ !yw 73uޠu+?Ŷ<Ճg/y476`a~KoA`Z=2:zO0hSQn^ܦ?b5f"5-z7@ёaE·};陜!^K[SS:P|}zv'cvWO։rLS,m%$BvwUev|V7Qv#o ǣZ-v`ZSz;%uWnnlnu}ô`@!kM!ENZ6D_,m)O)Lۯ8ta]~nA7<{EEI)Cp|cC|mjl0wm?:AeRGh͛72u@MNz=2-_jDisLV%.FG5raH㩴ɴ-mGɩrX\o=MA%RiSC1|٦PP/Gkm}CxJ/ 1xJ%]iz&0`kc&xPgzNf~W ۧyy@Z=2:zO0hS 43W*̥ 6V,H%CpHCAMdOam :Z x¡xaHޕ1=̓ v>x=*HX_rqy=qs|Y^Gyִ:%Wm<hwrtIaU|J ޝɛ>hX_/ 5*eCE]~|;0ȰK+{kcM$RnnAESse,}IX@"&8]!E<Q}iW9D-ߑHln3zqX/+Җ^%T+ף bv۷glv18@94*wl7#@P#o:? 2`qCjHxQ ly|\o@6]NHwhxuBLdk p '-_[ձr.Xƕ1= ~W áыú5S׳h,_Gz!v]:+uuv<aU|i3CM.z ]N]0Hx@㩴I6B*,aiyEWbsF?94:2~#_w C 8@ѷn ǷzOlzd8NtmhG vyXMw] Sv :Veo0XHLluwfE! L^xRk}M :Z ѣFRףbIq|Š&~}e8NyX$AvLcc#{;rV|k-ou}C3ySm8`ȸ~b8WnndHM55CԲH8_M?2$')[7:Z%I5nwB`P UxnpWM<u&5! K$k;;g!܂܎ ])O* K@zjz7T,mzlpq 3pD3 qp|@/Iˆ若-)%it9컴=+cz6^G$io&S/MM]O4Tϗr ا )S1:;u:/ KRcq x^yC{ϯ_K\B<lO550*O%k1KD$P_@EImӟ!hĐQ{pH/l,>9^~U?&| KǗ__~UdZbJO|,-ޞ ؑϛo^?^z ]b!s_Gkmfomky({8͌b;Weʲ}Tp ?qq!.~M?LD=+hz40}=xADIxE3.}ehA@Ծ=yQQO>zMx]{}kz* 3"aZa}z^__kW_~U,,,6z,czxv+I7_7jmuvW~?PSyث܂i|M.m ׳߾~qK7tu,_~Ux]8`m@6 ^ S ovE5Isgu6Šm~Ka9ުoT Yfw~?puqeg]fnnA 3jFn:frW7v9pOM[9jND&k0r~~Q_&SpP}~"DmPc陜gg쭸mo&2YSO|ɭgP~>Ξ~jŜXXaU&LlZ灲G#ֹހ-f)nvt X6zػn?&ƓZj~ff7VcCgZPKOκ#)T7՛оZ,n1*[Ҳ9!&S=~ rjtdXSi%i˶yv h(*56z؛Hx@LړT>I};i1Wt6Š:wVήⅰ|mUMx핳n_ޯyB.>dU$2u~yn áH8{ZO\V W8(SY/4vG/EITXTִ7jHu_y`]Y]Lޔe:2pP_!.~M/#Md<5/g}Ipn'5EK<MTXaߊy3PCqϟi7'jlRZPc+gU~.'_dU"4u zޔCn^Z^ձ^|UMdkmppH-7yEMə;zC#_=ϠѦ|]?}Lz%:ۑ}6G%MdnP!{lӳ[D&)koXLc: rRM / %iMdnXڲ6NNM. ؕёat]k?ǫ-px='Z^G?s\g] :Zz95w٫PQ^sZ +jz!dM 2 r2d`;lS|Hѷ K[SJ$;P׈F&2YMdn 4;mcq-4lpW-^S'Jkl+Lkm}ôjoW4ྚ=!뵫:=*;0AbTڴe0PAnS#0TZdڒ-Җ9"D_ChOE!L?赫oS,'M]3zAly=# k2!ظjb;o"5C%`p(px29^~U?Vnn'.jmi?}EWHDuK[2cذ' tlE<joM{]Omd@Ź]ΊW?bh"sôe`}$D&hPc áёav''?x}h̍ruir۱S:P|} +W7H5a^&ʪ@P}W׹ހ'EI|{),y6kN|ɭo<5 O:Hjz9w?T  Œɴiˏ1d ]NE!pYv[&˯굫o*7[ CWO\v۸F^gr<@0&CҖ^&Æ%:KG<P/<pw6S[0mMMku^ T9p()i"U4%ez&陼| M@-6}Ӽ68˯_3u=K+Ɠ9a@24)}-y6{yܕ-}ok OdP~~ђۑ_T~~QM}FY[P,R,ROO}Nl٦S:WQ̾$}qZW?kӖ}&E<,e9u𼗽iihiy\*<@rs 5{94:2lzW8&; `{fs"P<00uLyUxum ڤ G kS#Ê)vR39KvK[SS:P|fF=+jz4Pp{"VO+Ij]5uxjg[u}z'3eM9u}xKx&r7U>=ѷk 0`}8TZdڲaɩ&:[P!]0LV\vXvcz} σXT$/ZZ^1u=Wbwa8:JnnzC#_=ϠG<`{w;O>wT>HQ,n1X%S/qw!6fE! L^xRkּjNѪH8DF*^z S_7te,:GU23u߼5563h:Զ쾁.yZ/EH㩴i> p/{ZO\VKDzے_ׯW~L'.jmi˯굫ojz&Xu* 7>zLdyKnZ5yzͶ`P(Ȁ؝[P4T~~ђ۱c1EIE!0<۴:ޝə{zL/x|*/)VL%TnB}W)6(n3~m_3w'Ԯ=rU>ѽ~grݽf%X,mT^␣(_wMK*/)6xU^F ~k{kT\X@Yv^y =(E0g0uJgPRMU;j5:6sn/.SC 4j $a5uCnIkVM}~iC ?7:HtRl̨POѧصe: Ϗ965m/1~s{ju0c7✅`yfUJɼ-<.qv9!y>ڼR++d(2J F&zL+/qA='ѱqnnQ>]klGQ*>mJZ<>YВ6f<2zbW: cc:$5gXaro#yHy>;D'fU bQ/GQFUǁ@BcWs]|N聙O6)^SһnӣAϾsmj6i#ޚ* #:8bl|R`E+te7ʋK<f@TH$Jboƾ$LYjjWCK흇ȤHtRm>|~YU: ĸ`FDfx&{ ?WuUjiInk}_m>K(gq5?BnllRK3KQ+]K#L&.Y0fB>B'tw@@%Ū ^ iޖj|~zX` .uu5p|{ܢ~nzF̹=>1~dA<K?[fɥg$yծ 8ݦZQݿ^ p _QW07|sۣzT^Rl9N*b&y_v~͒~6Se3~L '#rSo`2u~Qv7ok/A ]{)1C}$ޤ˴XISej 8½ +fi>Oq1ݵxz}~]{[he;iHv;{6O#M `Apa QvlHn,& 7.76~C"KYڰF Uj'l"qǁ:kK+/qġqwV{g@  +3#]2U:W(˂_5`uN~7ԫYvϊbuFG>Ect< dA<\*y~uQoء`Xhqa0dKC2s@@$*HG2Dz=4_˦7m7dHtRY\Vl9 A<T2+LlqbV3&+sqGiԾ&jI8v'Iej ! K#V48gnnQVFE9'65k׌~_m^],64Izp @<*-V\v/ffS:z5e^ ELO>xh (4zXoW50z8T]ez.eVcON׬ʲHp .jĆ6/F)u"uQE508V_G=َݯ8ߣ&܋hÛ$7k* ۢ'/B񡓤eRN)#I+.#c nJgE`VSc֬*6-_Q{'7$]{[]Z]$:]{[\xCnSӆz?p|荽16:M8g!$allR.,<_|;{jW`IYjjW$RV_m^̟ģdH+ۯ}U:WUA}"]zqtYͻUy[t뭷[&'?ұ:y*&ҎݯjÛ/(_Uj~ǧ;KFnF 9&5ŮuuԛH@2Z-976ϟr/C=}R-HhsQsE`ivM .TU3VrL7Ժ 3`ZIIjU\J ;TQ*_HJϽs:rF='npPt至n iՆ5֥}׎ݯ{@v jn1:+-5B`?y`i&5Z}~ccYUFJ+aTPkDA=yf=,Hi)UmbӜ9\jJsuWiktAa{O||~9T^Mz}ѱq=4#>,"u4HpViZ|3*/7'c Qki.uUA$Jg*e +)+c +1KjWN/Hvu+ r] W2H?<6?+M]pȒmhQk*/)(ME"Q7<ă4HXک,99V]\(1gi&јL+.7F@"qkkfzPǁ@hXvFeVmZw2խ)Ԃ4n_y#aN M#Iև7_jWCo۹U}sۣwVw;˖ker H SkiJFV5gy(_MzzۣZ*~琞پCZ9ڮ>IGrsNzW>'TMWϕ*3=XJ/X{nj5M ?v5ѓظ﯒HId|j](2`K?/NϤD192z+i33U^SR缦z5ԹyXm^B>-eQךUejsq5!608fw댾m7VlɌ4_ƺ;TZPwk"ጼfU奎 1נ+VW0w$5ztoM )4 )N߸Ni)I+-mevqj,\̸L Eh^A`|p%'qV9Δsiۡ>} Fk&/[mfq~ZiQZ.z?jWŌûē$Ss)vmٴBYŷ[7Ṉ<iC2F nJgEk̴5߿>ýz=zW f%=rn&񱻹EjJp=^cORϭ)j)VImބ۴^v<N^yqq},@<q %b'Hd^ƥ^bҹBv"u~K..Ky{skzfq]HR7co~ש[H?ۺǹtF^*)_vMM3r1]+RH$o7w]J<`E?7s.qKrsb?x^B$U{acW*(2܄K m3itl\[xU,SMU7WẏqwV{g@Kk+ۯ}U:WUaiLVkoˌckL)Iou3}":)ǧ kk>sܮYUfo q{rkInBػn^O:. i|pz SϷ.N_mIkk (5ʿfUM_#|m}x֬*Ky3wjb 04'ڔFڼ~ JoIBk_qm2 D'g nƩeyB7Dؤr,wXvn`@ E c>f&YF Ʋ2X= mrZ<>}B=z(_M?|\7Άpov7;?x^Z9N.Yk%ZmM*]`uvugvMMꍿC(4 i|pzBz}I-@i K[8G| dek}sۣJ&zI8ݯ*6U*HOR{{q^RsR)9F_'pGQ*ϳE=>e˵l9$u4nC<Cy9FƥB흇]0vj]P]i{qCHO.>u0#=Υ 8?-;#Eۚ*7ђ9_E"Q> -fdl\m&IO=BKMKT2cgی;A#9C JgEV,7=7ԫ0/a/3w$.רK% X*-Vc?/wSSc8LJ}7✅4HfcÒdNv,fdNX\r0*ef=Цn=}ڼ~҄qCHPOATZLXwJ 6 _%92>6XX bזM)4 iNUIJVSVS7t0NjSMUE8(և7{ Gn3wDF!RmMJϵ\B)9ƿR|CkFn¹cl\_G L-QdږKb>f$2Ia%w66vyCvkqKrsX=5dKyDjvm2a'l@LJkW w%vF6a|.yhtl\[XEY{k8g!Eߜk/(X7oInNPoXlW^766͟fybIYtL$χ{&f"A;vM2K4ч{K{O~ndmqA}j_^Py8$!u0C2. ِ:̾VN/o_27#cƒ:ytQd=Ѝ‘Z<>=}Gܧj# gZ+66=Υ*]{X|iC(!w[6#tHf_KiIpc0,񡘎908d,>KvUY2XƵ5j+LyLjZL u.eY3g:UPO;Ӓg).SsŬ05:b֮Hڽ<>OF]nSӆz=|I)6\B=}nQh@R!uIs({v9&]#fJ 6+XlSCK5Ujhwjr..SCG4GQEj\[΀Z}=>.'ۯpoyT\jWŌ݀Dc|WRsz7 k"an \f[GQ*3wHLgᄜظv7yGծ TUn)ɒFq`j^KU;KcrK%'uB)Z]w#Lߤr%s$7Gy4'wV%$#7wtlxB5_NO8>#zo~[oE +"ݽf%р ѡZknZO67gZaB+حu&L5+I7=26.~o6GjUJ ee1b4CS7$UR9?+.̛)Otqx|F_/MYZ|;S͝KUeW􀅐:`&̡M*/qPdgde^ u.wVl)M-֬*SC&ziP0d%sS:9:=؄&88tB}޽kt{kT\I"a|]3 )ۧw-4? $(RL%/nT`|+HWCK5Uj^ҹ&bUWU$ufz4K 4Rw8(7^nơlZfHa)x7oY TP_W׊b $Rz4+#c mS"a֥Z;r{  +Vqaj\<1=NHСR]43ӑutp1~h4 fzi)b|YZ,Gau?"ViqBߢ;t0o)~qPr.ѿpj\)>R8|`dNe,1;Ņy?V,5:_\1k V,SLw9~L7!f~Me%tCF^Reg}o8&t&rEKKH Xuu,m/;E1fGPoG;mrtOUi7<&u9<`9<_d ΗXD4jE"Qw66~M)M>=ބm=^TUY fdN)48&f3T<0SnՒ9tQZbiVszpzq8/>=K=ٳS7Ͽk߾ڢ|8p|l"Mh4Vq!/wy+k k6Zl(֢{7aGnUB5U4#J2ћjzHQiQm:E_{Oa{=3#]w8T,i#5 Og {دE|;{VI+JпO+J)0^󆱱egq~s(`>/cND<YƦ\VFP{W]LD'ӚUejsqb|mi2gXGOihlBG?E<ظ|~]7u^Dj%?l飏? 棏?_Pi)緜jQv 3:g< cX,|c)~KQϦfwݭZ8Gծ YR,vn|z| `N =3>g=;?کuo9+_0@ }pzy ߾\;XjNs$`2DWD308po33U,cCfnSs*36_LJr.~=efyFF(Nc&֪+^I~\=4z|H[[RyIT"}y{i\W9 Y i>ɜFgr=ăZEa&u,7eV ';qaInq,5G`M7чzx0fظv7uMi:Ɠ!z N&mMV^c}{uS d7+VW0,mKqU>SW0lSSڲTDA<Ξ]-Y'ߢ%Я^7?*-5E[6S:\g鉈Ip54<]6g./q;|9P{7a#Ix|jU^PCKY,0b.)MD?d33dtl\V(;8w8w 47+>8=zy4qܘLq<`D"QyosQd@HWSc֨Wן'YUW0" E=&N =3 f7[Nmʗ( poΧعe,]}wi ]A4 5 ~ HvM .TU3V_c 9&<5Ժ,qi۝eu"S ܐNOh#M_)-5"1T|)<eϋexPK< ѮlvU5Dx>ۯ_ڣc $tvOn7O)~{xP뢉FFV@)9JUAIRNf3OL*-ʾ?{:rFGOI~~xlBc4߬{kl9#?HG(My~&u\h@l1s"pu|m-ڬPO|~u 9ѱqnnQ>]nca itj7%>\ϨzݖM(BhgYgP 7DMO>E+J) Jibdl\Y [qc v'3U)*]TO9ŰwJCҧ ݽ:N3Vv*6,#m`wP{}KI;ol|z<f͋yS[$MzD"Qil:ee֥ j htl+gN|*6G 5dNd*;tm\ڲ\[֖kxlBt:ttzO8={{н5UڲiM7}eM9C1n@zzlyW39 v|KP$al;˖spCP<i3nR2X:ڼ~wV$:pD'ӚUejsD+WWwH}C"()41~Y4y 3R*Vof&Ξl>_JKKSA-[V I*-^tjOk~iJU$Ȩ># ?ֿҨuu FSܴ"!4m om>Up5YڰF Uj'5$u@@kVY&GQ> IRW0POCXIsE IǬJFz?=c7'[oUYY*+)R-/.R]kop%}=ͯiddL^oN )y⣏? Kԟ<egQ$o76e˵l9EpCh \`dܑI[WW0ldlm*el4i֥Z;r{ d}BCq kЯ^7u.TiQ rH(HZw\=v Lޓ ?7[}Mm\_uuJKMW Yv~0%7w/^٫ر3w0m_uLJN*/X{k(6B<0R $F"Y%9jjWCKބMD';o">΅zC1SK>mYǹT8jxlBmcz&vN'"zyq}lZo5<1(jqoGa}OjQv3"ۧpoԁ{tz"buܼido_Ί .-͉ybfw{gXӒ9r峹0(+#]MDjO&Czf}sۣ4ǑH$C!zro͖*)Z*-&U)Xw6ݡa٧wDÄt}ǧ7d*m3RS K%ϟƊq󰱱]bPRMU;j.<s/ѓ?΢! lj *-ZT\PiQJz78_?L?1u*3RTZ4(_Z R3D=7ݡuwcjSd¼#z'/էǿE{ݹU- 8뭷j]ÿO?|NOֻYiuc?CbT_>QO'"5UZ343$3#=)#qDf ee^ u.wVׯHt2c B}_% rPbq.=ΥЯ~_ 7Wj\W-+-5n_hzUԟZ(%|k[m՞_a1ۧǞ'(;EO@>|4e,m|LeD<0c4ϟy 5)+#@\4ԺTSUV_B=}: )OA wJꮒ\eS IdgFXBou&}ãOO=^2.S7dj~#mp6mO{_w ?[j~#c[;kEI1 ½}C:8ly\?)Hz_[a*EIb>f$2wt{n%uDcPRCK=^T$ա`X>zX]ΥggP UW<61{O>=kY\O=Es{i+'1oV}_Q_V n:ܭT3?j; 4_F}MEs43dInᘎ?x"1d.G)C$Jg*e ZUO]4 WQ@KruWi rPtsq.Uwϰnp0}OeVw[*?}Z-|Ev䇖k?{V`P۾%z 9*{Gyӕ̝;G<b~Z8T^POm>o0Gaސ708POCvBb].$W5+-ViQ&:=={o'xΗ8o'Mc[&3ļ[LJocP_C#4ߠ(#,؊/gE>,Fƍm*el",Q/GQFUǁny#ij<,SO$*Hk)zѩuwh740n{GolZg<>QIONu5ў_h&#OXt~t ?{wV K!)D ˔B;Δ:VGǧ3;]ݝqGw^Yq|Vg\Ggcg|yl|ҔDCCCH)'GSmisr\WSs'D O*DDDDD ӼK uN0uZlj֡ %Ѱl`~4;V'x)Щp*\ݛ!z ǷTp pp~_~B$34~-9b8pށAx|v ʋ;W (29DDDDDa+v~hm-AZ)QDDD:-6oDӚٯ%@/0,n 9„e"+2 W-GS݅I y0yD[ER@}h>,Ã\DDDDDD<Q1_MAy"""""":版HyXŽVy:-*l\4DDDi"z6iS"EO)W@yR}Ot~8pÁ DDDDDDS Q)oUL0zzTd'Ekh(,JUl ;N[;HQF˒hXbʅ"[ߟ%!?O\GD| ˗˻b"r2iv|B?믹 _s)_ kYӁ_?s.2ЀmJVW~8pށAx|v߇O ^ """"<v:*T*8DDDi"z6n1b)2(/ѣDc~F%G^y"J+MuVv\[bgIշ-/n;{6hGk^r)o%~-\XsU7mFR߱{| b8pAs 6K13[><Y$s,%%1!.T;RZjFl>(o4s`Ҕ&G#ùy"""""ZNBdRWZÐ? ZjM>308F%\[`1.g hT(i)`(1{7{&_'7\k빈(aw ƹ{݇a8pARX0Ay"""""J řR `LZyKQO-JEFCL/ hkb`~*˗(YrQ) ep@Nc2棹}lm9Z?p/*q0(6ww~x7zD}"Gw`~?< MzJjRX-ШU"""""J+ ID$}uܢŊ^@DDDc_Gvcqa^0F:]n 8YgQD-K\< lMDt6,\˗e{zrP>Fwa,4'/ /ajj*<3$waI1lf z剈DDDDDqVl*|tvC ( ]WvN?'׃^/'S(,= U<y(1{7Bs/:I w`5G8sAyV2 '`x(Δ옷9!ħ?<6&a(tܢ[d4@.g<>t@Lrr>QF)DDDDDDDř^6Tjmm版׾^OB/0:]rV?)(a1wu9YrrU(YeH$je;z0H1`pRЀxw˿O5s@\Pj<)i{].xyj|=$oOFXPj)ѐρ!"""""IM&/~ ^~v<>>g|<4>W_w j"IJI7mJũF$w6&Mk0Ծ^(:짜 C\%UWdc, y*j28DDI`YiQUr9$k͏a߆@`b FZQ80DDDDDD $<+'?ݷƻo ɈFjX%"""J}^*Z-ŧ KDDD7`4$Nͪe6CawŔȒχ扈(,Bg;19)c;'I1O㦛oE>HbP(5d@bx:BaAvv6$j)w`0mz|Uonim,ְ<QtEiWg6|+3,?GBN 2 (,+-~/c;KWfF]XR<Z̨qPRD&<~<1m8sp"lN+Z߾^(Ǝ!4v,S%eI4(_^KX~NF2.l"VfklޓUo%Iwg}'`23(ODDDDD$/ѧ(6Ƽ? J_Yu0v^: [L0扈c,+-܅ށ)[8nwu/8 1t ِ\Xyy@"""OTfǼ !6pCcF@DD:]n9(a%|"ejkU ILNݴ /:-SZO='zϝ П#J k52T'""""""cxbA """:b!mEڼK uN.""4A8K% E!e@UAUA&Ik˱40Hrnc4JK ПAFC>(M14 D[J.""45EJr5S.y"w܈[]O~~}M08a6'r? 9vaR|%y剈?A """:}^(Cauژ%񯨱ǬDDDz:]njrQSf1_}bh,|sc-۽I׿N6t='x.Yh6?vAjRX-ШU\DDDDDD'""""Jѱ-fE@DD΅@40_]f@yER-OBN<XVZ_=ۉDRIPC4wn)%VQAy"""""": SU;NULlɘ)D"1ihH7٬bx;u""t5v K(1i20 tdfʸX%\us#ߚ1==ӷB@TW8DDDDDD3 S̙L[XDUGDDDqUd2;06״wvܬ:ODDļM*/Sd˓ xARz=V8HE2fCFC>DDDDDD$:)KL= ;0<;W:T*8DDD<> Di;OEDDDin_'-ӨW%I" :5T,.N"":wLxr9L&~GۿKCs$+p_""""""?"Q\kRϣ0vt=gĐ?$"""QJc搧wmuXu~%!dϨWXw:Q]fH"K :M:版4{19~C.cbB=;89D;7 kڤ[d~8IDDDDDD} !;{KŰQrA1,%ŬTn O'NŽw|DDDDDDDcxDUth2b?w`y:-W:QCTp!'ҋ}1_kh(@ `(Xt |oknM鿗.7[E/_b_c:e#GB}23e|QQu>++k?aSaU_V^f+ʰ j{ছoE^!az""""""$4^Lc ۚ[Ǝ:'L."""3*.Ѫ鴨u9DD$:A` A0N`VRN-~ݶ3C.40%ɒ`*B/""Mhr/L'p!ڋ]I_Y><aD+^Qj>'Aӆxy""""""$uOBRZG%cDDDt"=ޘ9?om}(VDhӳv裏߇2 rSzeiU(ЩˁD3 C~~9U_(bw^E5k:\bG5euV G6~o!D"Iџ͸[89DDDDDD$It2e6xyz bێ49Q먄^!"" m"+d""ZߥXtCp4 D&%}죡0zz=%4jAl,9.\2t9_/9ls)/""[\QlﴧUsǵ{\{幗73GdB]wTRHzNyu@LbgKvt`E{Jݖbf1c'b[yl1`;]E; J'NAD0@&1?Ap fo҅!utмde(ρF_&DD$v/[w>??r'ntq`_r<`]겵""""""9).KLz ܶئF uNuZ Q(6Su@- g|H!Z5> #Cp4R2dl$^hM-E=frS@%@ E6_%";DX$}ub?~|_o7幗幗pkWbCO=6lD8zU版H |DžfUxy"[o Iut VK1Iwv"""yHw&wsKhմU版R\xπ0A$ uGK% W@MT."[.26ODDO|@bTu~>%Rb^24x{\{ǵz4ÚKX>F~^ocjj*}^َoH++/OhQ" IDAT>##292 Y)_ f03={~}@8X=>NDDDDDt\=~lCSDŽyU Pk4<:]nlX8R@C uNx}hBOWw`vΉZG%:-Q*2b~2?_k%^:''(F0c0DBt+;QbB[wbw;eQ+.@,-4l.P""JALDN&?{ω z3~O߀Z_܂A.4r4>%! r'~|d03f0==?cwm|_ /qxy8Pyu^yz=a+5# IlΖaEFDDbT E%QrJN("~'"mp4`h PX2wPޅyMlⲺRՒU6LZd\DDp|@Bo(þa _2dضmE! gdgf}jh? C&L&4N&E~mc=Wףޗ`h [U&"""""ɚ {<?vJ ~ǰ# S܉ AUGbFlX߈Nm]n7vwQd4Ή*P*\pDDD)dyށ~KXQcp>n| ¤dRm;ZSf,5buMt9}]扈(} _ʆx: > O1ŬR#v^&τ\~ogdȐ џ<ۃM6"Ncbˋ'""""4~l {g>Əc(>A`4Ey;BhvO.wJݮ ܶئF uN؈h^Ks:'N0Fpt C&"Vnp3Jm)G:@Ȃ@L)%v/U(rS>wuV~y}\ 7./^۔˳ cό Y L<驄]w|&|ƏOg_MLDDDDDIebv{z=-glfJ͸j}#Z;rc4E$:х +jVj]O<ϱZEODVBVĠ$;tuض%%.)/jCrYujiU\DDt8}5U+!LLW[8IS}=/ ɐco<3 86֣qu=Zz;`xjC?~?Ə{=()!]&Nx^LFþU*hZS5ut$ƻ׋^/tZ4taRB$""J3m]ͪD{U&=ѭTRz xvksJ_GE1/*|h`y""J~Go\\O`(wωڋ= ϯZ 3v#Y99鄍ӃM6"NESտ/sQL̅?cÏϪҕ }.jj 0.1Zfʛ^9uQ# yW;zz=)QLFCalknEsK;*lhsB,Q(204iC|yO/iy"JjPѱ646$\hNsK;vt$}?KQ_mŔS@%"tc&\OudWu~~gfadvϏ_[HB版$)a49|fu=}혷BU6TU ޅN~ɔP;[:+jua+5sʼn>/Ccvuʘ( #8:݆nIZsz *>(&:I+x:/%_ OUsjy%u pCW'l ϭ 8^0)I ?p]%t X}(9tw{ghXs#J.<7<%U x}{st_VjԌutG˝ԷO?[Bdm]hBU;*l\DDD)Kkv0Qh`(`h m(,>: 04[1j1C3[I^VI]h¥˗@^w˒PT E6_f%"Գ/]{m?aʼĀKҖVw5`.2NB{{Aۛ2ǰ]p[ Kڗ d@'eXtpL<>^5رqxa||C,C GCa Tq=N5uhZSNEOy:-W:Q밧ՋDDDbS W0k Z({|I @&14PܨUJXKYZ00j,|iM(1in樲a*B&RRoHɁ}iyT*pצD~f|a]ʭ|=ET`JZ^rAþA/ +Li4f{~}\ajj*acDDDDDnbǃ"Icxdİ8mwaUz|;jv hmBO'o~FCalknEsK;*lhs&B"""J:'(E "m$2T.qaI14jI}춌6Ucն,%*# :Gښ M;b}fy%n%r>a;'<>XϭOifNNN\9愎jZqxEϱb<)I|a5bXXd2`U t%Z%x"n7b:*QsQ8%«y:-%9?`(`h m(, : 0dȇѠb $Oóv&cb jB-OQda*B͗U(ƁDm?rWi{J|J/`BHF4nxj'.]o(7kӅ"m|?k7\4g :1Go@D6Sغ}l-DDDDD$Ysxy0>hxPRXwzQBd=TUؒXJhs׃N;i-w`ށA4Vܯ^'""n| $eYZ0098hێVut%e*J (rnr5 s epQ9} ?/p~ x⅄8?O\G k8aUȥha5z~hB+@Q?|IlꗱdL9kfNNN ނo7 V'"""ۛ4&#&@Ssֲ2hr4خdq-sOGuusB\x~r8(]O<ۍ7& z7iJK2#wwۍ" uNV%""Jev7b@" Dh0FCaMa| ㍆JٙnB3}/Wda*Bxtbzz&a՟7JHp޼Āk&"G Jz}xug{BC'OP}{؇##A """""[8|hr`]X K'8&<%U 49Sz|jv:ޅnIh(mͭhniGU MkXՖR)ypiyjhu:Ot+ V)u\4[%^Z Z {I|%&-]Nz_ЮVd02YIVs7a6/AA~^}.tw\~,ʭfqxx/<qY89d]}~fK;Ϳ2DDDDD;`Zb~n6o2`;)hr4eMx}{stS>0S E?!2 6Kp ճyDPdKX1OB^EADD]mżͣcxwv  s R[Wvvh?{gdd@&czz*c _o`xZ,\xkY49hrrFcxΪբ燆b) 49PDO]w`-uѸ*.DD{Td6Jj~Ha#’RZ !FFCM} f(i=rY z r5J. ""J c X6znu ΧR\U+*+-{}LOO#jy "vq{Kɩ}OMOc]겵| Q\Ylh4.-CN*|$9jϢZbuذQVUaCU Pm]tD%P;[:+jua+5BDDGR{'"xoxKQJVVۗBVjsJ`ŔcȒT"E(}LDN&dڜؗƴM~(1 ( k[]xwc~p`6?¦~9. w^yy"""""ؖF+W;kf:zgS`ÜQXwzl}Ř#N Ѵf%z.Fр:'+$ .\Đ0cmh v: 0f)FbF?&Ju 3rT0h!ep0(m4{oۅ=r뫹RܥpTYs;cz8N83~6?ӹ|04^TVX|<t2Hb牒XP=TUHR@#ZC+<۶vQ:':-8DD$I՟5v D"  Lbh8Q37ga4sHz5c _FcADDsںW?,č׭y`^|_mYpg2t> ½w| 0O=))l0M`oZOR3lf4Ck?ڻ$QSL m]aRV#"Vl2$U뜜:+C&HtlwR ^VۗBVjsJO6,-4lc1v}6/108/QvjS7_ :<7@?Y< }q911'""""J S)()uS>tvl|ǡhiwMCp.vPRT s""J rЗd2~A!1< /lD>Z.K;˷/KY `u9<-Auۺ;ޔP3m&vW`k^.^aȺ133p$4@ Xk?x 8QiS!tuQQV‰NDDDD$1[<;$)م燇<ٹgeO=~7q_ogfא%Z5*8݃Ʀ6لܽp&TWvO=베Hj|:0<^A痁,c-7vk6lV J ;u'aXJ=v=GNB6d\J{ve]:*TVͨ0ߊ_?{Z&>$'@Re`&mVDg%۷~/(JJt(V ^EP~~IJdx}5vj ̎2v9 q -]f?ٌvb (ۭĦ4q9۵<0h '!ۦTf NzMwT܍}$4g|?('8M,tY0QZ ^"}5 { a1X;jTWuj֏ {8r|s$(.<0L,Q c[A9PCnlحًmNDt_}'%Z'܎";e }JADDDsdc3M0Bt=2|rmMHyx7@B H~x /%gm Ѧ-v[91V|[춉yJyď_&'.49Y5pQ\hi©6Yt@?ٌ'5{(.'"M]<,zu_, {YJ{K\ ėBEIT?x\lj6Q'0DDD7clxcuu_lWncu(,__ۜ@y`.@o2QR5ۣT*E^'=/=pX}98Ȩ9Nl""""JkY:smyv%K:3Ot[)Mُz[] ϯd@C uN%ixv 6SVVN'")K鬺;`| |n8=^0=^YXH飨0}Ņeebg6H$G33L ۱X %_>F$}܂ZB|";q{F ""kCIƵ)񩶄>o=IBow)@?331dgg{7|ȳ=JU$yx_l_❣=IMDDD&J:o6. %J/D1}}&9?ĠNj|;OŹՕ娮,ǠNjƦ6vd]@o9#;hNDDZAmVye(1B /<#,%@|lbKv+llh`F4 fff0. įVϵ~$?0f£egq'/R*o5"Sf1n뛒d~u~Wy ߜDH\g@ j}g #kO  I7);F t+DDDDi:ONLʕڗݾ\MsS~<+Kz8n_ KD$-مϷ26 Þḯ g n3q`-EL GBk %EuVaG#"ı[Tu^`. @6gӡQRTp"So"S+஢:2d}N czzb8p8›GK;KR1;~ J\# {ӌ$n/-:>?۵z|:NZ}+5//d,պ^ |ٸ DI-׊RG /]dFFEY '4Qur+3}5"[u*KAno{ hsΉ46&wfՕS/,Hr69疁Ű+ya\mVhsVh3=TJu:貴0uP*,S0D1LN>摣8&v jq`V 'MjnR`1`4¬Dc{ LKtww%j`@0ߊ?}Uϫ?Sgxo}qJH?}/k?d&"""""2խ[9dG;8i:{dV8~O6]uV!n'"1 I=K{C 1B#7>v+,&#,fdl0AA2b&BBbR+hpIZ% O>&=V2Z ًC}`Ϯ ?W Bk(64KOeJfcѤ0 ILDDDDDF={dM<1 G%⅋nb2CZ\v&لZ;\hp!fEJv]{HdVj jTdv6\jC飤`s|xGQ!2šT̄ADʇ%pS0&&&%,ףPZwag)jv3=:- ADDFiI-̷mxv%@"gȳ"Ͼ_JQ(&v$ #''"""""ڜ.!$wٟ<\vcx9 (./DK{N5"$'#8~O6cGY jT-v(%""Z|5i5L{C 1B#@#rGSh n1!< fY%Z.LJ=6/71{dadYAT jDVbCg\ql9C`Wy S\6@ a0lp85qiT*-׊}$AN^"""""MNvy+ܫ2f˳c8鸯yXL49PDK dv 6SV3QJ))*ppxEH -a\{o;S3Ead0u0`T*Ch NL"81ID|!1"ypި;QqҬR*Ph3ADDDJ2 ݿ3q ai^/Rm}`||n+* &sC_,<GsmRKyjPŒPWw@0!]'i+Q]YAMmhpb [-x87GjP*,bzdžykWBWـ%iT6FPbxSbTV8ͧگ6>jz}VUe;˃RDLwl[$c;O"""Jɩ^|pʲ/\wOu; myLiGᡇpcq_wK hsΉ46-/*pl2{$JDDnM ,6%U VxcT7 |FuMOG8I,?o$Yaf:(J7b6nlN J}+QemM7PO%{v/<ʉKDDDq59Wp٦_׿c艈 SZWs !a/=^'!FḱeA =$q;@O6fܷ*A""JU#>l2b2b2b6nVit h:'Zbj*|t"ܵfR+T Ad 版dBq-/$ήdo0Ot'vW76>IB!dfn<$G{/ןxE#"JN ϟoGNɸֲ݅)b2CZ\v&AYl[k .۬qV;h3 y#y))*@V@݊Lani1a1wQ400賠D ̏I۩,DMU!'-s0,Q MJ2nղ_r_O㪼IAI{{1]7^(n<#'ֽRDkd/'+3w Zw IgirP: =v{4 ,Gue9zTs:ݲضa/%BpJ yLy.oշ?tc1deeARemM5WT" ٤hGݰZsJ9<ōg>%"J+Wd]eҖ݆ap}ᢛ4e1PDC-.jjLOϤ,+m,/_dk9Q(.c}MDDvu:Eix_^z;{ԳirSNjƦ6vd]@o9#ՕqVb2p%/?-ǠNjƠ+PȷYjP`υVh4hLdY!hԒwZQboAPPkBF ""JPX"s<-VNV+O_x / @ z㓧`5WT"*Qxdh,Ʀs>ODDDvgZX<"乺,mUUݼ ?݅rYVv+,&#,fdlsR)`6ꑕɂ F>LLN&4yȐ48_SY*t+Z-v3JADD$C~C4j5LwI0ߊk:X,Ө(+Eݶ)*ӒǖkŖ-~_9<mػ}8w͚I`ixrPQRJOhhs݅.{q$wܽ0 SrhJDt+ {z~ֿ|JL%Eg Vdj疴6&} z"ng!4a;K~+YF版rOqA^r'&8)9$}+{7/>`0@Vm|P*1{%>}p6ۏѵ{NRĤ,kixw3>^}nbd,Gue9| }ڄHo?đc8r*G;"ڔ| |e`|1,?G V{ Q̎`J! 9Z'܎":9Rh /L`xlԝ?;Dg1=]P!CuD4jePEw!X;~ IDAT3\g 7AoBւ\b1LMrrd~~/pb|lq3dОRCuw7ǔcL'}k ﯾ/ X,q>Ӹx J> JS[[~IO'""u;z~q ]!"J 2i0<w4tz؏3јdy% =\A⤻lSrL#i'S"rs87HZZnK?9Yn~?} ( JR{%>IDDDȨocy"~uoy=Mf_Mb^A7Gq!Ņ8Ԇ.Hof?ٌv|1HD$_ |n?xeKl2b2 VZA[jԖhA^bf Χ {Fkr/v'k,C ng ШUgPN'8u߷h$'7۴92)v'[cuxW[>RE`|<> QiL|˒'B!7 JDDDkry]cxHZKWYJWď_&epK{,&d1Z<~-.jjWBk f uNSVp ō(1{Dq݇a/ffNNAPb`(ivbxȃ$S hc1AT D04<*<V FDkf6s.k5/<bxRþ33g?dggu6FEY)U^T"&1;*`@0(_sg99hMδ_}wB3Qz#Z ]uiJ[jGޖvʹN=>< 7A 8"$/__[ %~w#IYUEayJ}ju z-&32X5bd Χ>R*`1@a1hA>8 OדY&BYd ZPgŽ+D0 YIr(f)e|Z\A`0yxȇ ϯ Z큽xc}uLy|jxD6&'&d]L%l?r0!y A+0sZ46 ;;N5TsJ PŽ2A"ӻ$/F0Yv[9<yHЈd=]2{N(ږ^/Yܷ7]Um }ݍMmxP=LZ uN49BK{l.{d@*TW3H$1Q\=bU n])--f#ϊ"3ju-fz(JhA0==i9p`g)>bp~;ًy ϰ 22P` gn;%,Q NE$|[?0cgX)d8I(%[cuxWq-]y&oT*(>ռoGD$ 5deo{tsՕ娮,/ıO1I8rG5]uV D,^/mVh89Ņ,̩TJu:d[ <(hBEX7|#7%i,D0{]2nd$g4x)yJ)vWB:\nLNNbzzju|ώGO׾z**Ӓcg%1"$oగE#WRTL|b64YLAz"dPg_X'L'G?^x_!@{wI2vg'""i=}GX<""[z! 9ux(_,Gue9=^46G kıMQ@ v+w\G#_ƮyQtSRT`[| nEV#{LXF:(΂bzzŘg2m6Lm,5;\W8 (.rs,xv ADiix#m[Mr@B^ z QBۭxP=D-.46ɢ;ÅJ P]YrY˥!w]D4\nBՠ;B+p8T*%:r3x5QM`phS!c р\{ҏ_O6K{Fq ΧcMn|kMi3h<ׇs}YP]!";)eZB\3||4˶JQHv?1Ds; Q:0ͭxnMB$6 Ҽ|˵v'""e޷oᪿ>Ǣ^`IH2LIg1Z4n7N5ap+mkpÅ|5*SVr×+C=Kr8l2b2 VZA[TDNRB!j: ej*Q~E[ `dԗ,ԈuBhgh<ׇSk܍=;Y"Z#Ҳb| =Np<|_Ta6*{ǾҀ$0' -cfo<'oRZnʤ9nG6 ÞqᢛyV+rS{ϵ~`p؋7a 5hϕvbxynIȶa6dG=ׇxŸ-Pgd_%O ίF Χ@??ډKÈgh=f o@uE>], !$}F5P?Ň ߵb>MB!H\+xI;2=Qrs,DDD=p5{':EDiorbB۶,p7me0hmb!(E?ku|嚱NX<'7a(/+C$cp4QND"""Zڹ~)ܽ_4Y+2亥 ӼP]Y"Sʰ hsΉvZڻQ'"JGfa[ـZA[jLFF=2Y  12 qLFShlNڸ ߙJ@~qχۆaA@{4l,8݃D Ja~~ +bQ6AbΝ8x6acݪ< @RF>aN@"""""ڴηwvnvr|(LJmv+9T?xC- Q ́gŅ ZkJ`ap(gf004k_Ԗ;ܽx:6|j8ƟG.$ Ϡ\Ëm3fg FC>ߜ` 5ϓd4ݜDDDDDD2Z}5v LiAPŸxke<5N͊nOBNejXp5P3Pm%Eͱ@T(D 02^ƃ,l);^|S!1i>zs Khih>aARuß}#)E}MZq7\B캧BO46s+/c):=g>;uPb)(s`G@1:Drf6ur/. ; ~d4X86o2a6#++ JxQD1c6+&=8p}./JXDi`@w~EV!DrLCQzE1`vPطbk } \bRdAh?ALxx76 z=F=->س뎷Y؟]&Bf$Z|[bQV)ǒ:~wHZA;ڽ$,<[`wC+%xos}pHFneW`_~eZfo{$ov+9TCkBcs Cq4+BEK+:ēp&L?L7 (٦gf084ɩGBbRƳY4*TJ m&h4? z0rҐ/BiI!ʷ0Y7Ϛ;@WU\>bY4gL}9%, ѝ?)XD1 R5&:r;}sZ ($[Tݗ.'}4FF}ͱp"+`Mh`Bb8(c;?V@ 5*tv-!AZJO%E ح. Hxzt04O$X,Q|#T*%x#\KA“lgp LM>kX2ȳqW!v4Ms`Ϯv.\\?h4ʂ,~~ tgQldԏ-k)$FX8ٻ;m%˒ْ%`lv60i! I6iNi3m'oi;4Mޔid!Ӥ@h%mfۀ%.˛B^$\\`&),1`iVWա'`v)_rT$K~A<kphrhtG藱 9ڔFh !*K;'YyHNJ\"pP}SKjF-P^;'ҾZEwAɢ_d$Ţ}6J!NGs8Di}ϱw:s%oX~ے 1AZi"$""""" >79L!iUjApل\BJDa~. sal3 gX/dg^kb.]x"I\ΉyDOFFX 9N>؀Z~ I:^מy.bW\.DacBߢTJwojiÑ54w#\s0 b{xpC.6e(D ;0s?>=5 y.tچ(XTkkb B(?2bJ!+ ǫN8-Cʏ57DmFICD7`uȆ)7!t!^Pe yդeaHILbHY ˛v363,_7+'atXaw\wZZ=TE+WH;W]ggٹxp#t҈'C DBp< 5fݓ7;eA>'1ޞK-{`u\DDDDD$ycnLvTONBg>V7wja:856-ƵEoBM}#L]J˖ ǐ':ICx!)ah($WghB2=3|Ê߾{Qw}w/~n=tQ0#0[a;lDesh רN &i T)8?WY}sMFۨOp/IŽ YK>qO~؀-_zN]g@NN"{֭߅>T5wSkiçdg1wVg~%ȶ/\4E&\ӏ%c$pp.bi`dYz}Kex$yDOFF}7xu_JF18?JFXxS>B.Ðu+b̖~ ՇK?Fn 4x@ZrSicc},~k?óht]?f@şխX4Et7hvyƴ U 9ۀ{֯ w_K@TRk EDDDDDt3k\~fTc~Fyۮobxh)Izb6+rn;pp g<dUV䏑+'+C6LMY ?/8p/c)rwb(#,,uJư^*2ݣ͘ Z)0dҏNK?AE>PZ.?QT^ kbهڕDU=FFGy>219XMsHqp8^aD=9'd% #5]]yzff/}ܱq; IX|o{1F+ܪbA~Xz.DĩT՞ǩXz$17S{L](Ba~.֬,`" zv0| Yi,."I :cY ,9N_ڔ\$2YSᐯEZj2>~UfK?:bB/d s|]]Zp'`A>y nƢl< Eq:={,{JlpqhݓWkXS A>|Q oHx*bM\DDDDDDALعfd51>6m75,2< E+n6Uuo[GHCWTw,Ea~.RFTp$贈e:@rmx+aOusQ,,h(#xIOU nt@|[ol%N\63@7 kXETd;},.Ž008wis'BOY ȸNS25t8lB|̴Ī0<2;ZM>~7 cWex$bt bv7'6N{K`ڕ8lBYElEih™&$QRT\p *!?y  mx=}rPS=?&cBWMLdbU,lv:Crrt|K[PreX> tm#N6.L`mׂ'1 r:مBlatvyyN$ZIM2*d슓/[R GNعHDDDDD66&dnD}V*6 nImXc`WeZlXɢB. CQxED+B׼:&lX۷e<ÉFPʰ|Y>?πņ4P]6'5J\]߅c,WUJ~w$ׇsQ^Q kc?AtAff/}Q.@""""" wOCR΀ ޞ^oEDzfPS߈Uup8vӅjWTciN6JVNe6UDI.ANLƂX߀!É>v,}Xm9ټ,0a9C&O!qahHl=Ntud@/u 96Ш#RPVe&w $R‚<|/Bt,4ш.dBC {U -YiXuGR^o{Ki1c`p$FFC^W ]@!VSKre~Jtzup!*JŃJ3= -,<ϯ_W\TV3 \]4W6;~!3gN܉۷ :4N!^F~'Az];oÎp}0^~>Z"֯ڨSqo?S ڼdxD=51cx>NE r Ztl֬\.N.@""""" vOC钘Xu!%&'!{Vߟlqn $*u!Dܶ/g~^h6pBŮDSظBUu0wIbn.ڻS0?kVyj}D)"ϩDbnCp!48C4|4HD,Sڋ=!1ņ,|{ȣNsp8qLNir}>-YUw!i65on\2I9܈ڋ=ޣ蓟y#~Zã] LH/Ә<֏̴Ī0<2p7<4yDE*( 23wMLpdIe*CLIaiNV׍&9|2X 2BWTy$b^ei.0XY xrr9 -g~xiA|闱Ps~=T~^ujb?g~eK %]A|cf炢d&n_ͫ>O559\Y7?;-) (Hby(DDՂlyƩ 7MZr8]xs{ؽe Y.KP#59)ED7 ։qfFyE(rl{1r}tjda, ʪLx򅣰:%;G\KOٟ~aW~Ou!44/Lxko9闰`Z,߮V #J\f:\h44AQc"dیdo\& :-A$"n]}c1DpbaeI}. DG=3ٹFr9*\%GeXp:;YE pWa.Vx{x ~+N°9܈Ax (n }NOѣ۫ {dy 'd[R*X$.zv.^j t]Bס-}\|DDD3G*q̹kM"q˰~Js0Sx,OIaV,/2Ym/|cn72J$4`ǫ@+aLco6"vS,. NBL&c1Dd|܎>LLL"@9z޲z,[sI2`gly!Cgx C#\L$:-hl{UX".*'bؾ ;otb~Ỡ7V 8<7h.n{){r5  _38O784CG_Ʈsۿww< PkǏZ:\P#59)bHlN'ZL"ƞCp8nX(|hda,󫕨<ٟ~ۧK&3{e8]DdsI>_*4 \0!>"0﹆=I.Nyu'MN}~R36=TznɅGDDD񹟈wb+_Hra$J?|6DA@Rb"l\[ FTV%}v8]n q,,\.V aJ\k$N'fJR$_[u~zϻl#Bh q?{l:yXۏ?}K&3W岙GpphE@e3uҒVy۷amڻtJ㹦lzGWqȈ|yQPF(P5KPw5ia2ִ{ N+n$SGcт4NNNxlhq;-\xDDDO?ԊkY<"Tn1J-Fh w8]lLD4meTB/8=q k $"q|j,,y-.VDdHn7{`GPj]=kƩVS#5IJ]lUT >N6 c1,uZ:UabrJ2sR_[J}S8],"UHKN& i0y4[a_aq;ٙrW^E~ؾ _z<;8]Ӏinwÿ츛%,Lע gǡۓo}Qh^=mj \q=rzgmxfdfd >DDDD3ay""߹exlFF$&96:#MbXh@BL?EDAJƃ[7X&UTa&qWF>%ZOIH$&D4It I~0al3!l#0ᓡ|2)Iz&% %Im4QR!br>@(J@JB|/ŴD#q߽c6nTm#+bkԈ^ _ g礦xM,52lA}'a7w] ڇ!,Z<>AO>! ?o ?` Fo?O:CƢlsZ<'٧WyEAa=  '?O( ,Nǹyijn ؜׭YO9<ظG*}(~'"K'o}v?o6ILU% fCDaJ!+ VWա/Mgspn:vS\2h5qi eHl#b{/6_~XzrJq}ffڵP+|3XWv6l$撖~g;r+P /Z=Rib=DKk~l-swjyؼa #wQ~ʿx $)/Lxҏr< 弒{jN+>A´yN'n-F, z>GDDDvǼHXcӨ|eH ۦҏ=+$ר8;JX>EϠg}~/:%ߡtm#N6bW%{t`Ki1G?{k #Rs<|£׾Xu4" &&|ym;(8LM8&<\pLLyaddʎV,<~whxHe5_=z- HD2Ji:gcxT# C-Ϫa.Xm#28H$I(υ͌&ih ~Ca~J)4XO5B@rQ!QPm?;oazMZޛ K 7dCWp1Zǃzrw.O>m Py5N6J_ /2"';47;N4̸d4_ K;8z۶Ūyo'GSK`ZLLNkʥ)|PHTB|E>> tM@,<I2aJsx~ll[L벥KPyiلl.8"""?~ :-, ]鏳06:ʥ@󶪤=+A}%E,2Aeuj0do+G Xm-2u J ۍ>2~!4\9IsD= sՕjAYEZ$>K#8~g;ržGšՒ:֑-dX^$T*% 3\[wWFIu;\xko9[z|UEYx7O᭽Ʈt]-hF6,}..d$<<}6z 6.">t߱1LN Bkg6ⷯfxrgou2gj1\g Iec~':&7mđ|&BJƵEظ5Mo[ޅ&@,=<."XXX5u}.8H'*qEkuo?Uҕ YXs+_-Q4yb+J?…fࡥ*ܖDBQC&tt#2 :DEEDA_ F_.{&xuWAn[}CxU's*rwbhbC0؃˖G]'ۻd2c2It^C:f|bՊXZo4J+u8]ۈGx|5x'«. KWZBL@aZa*y1y >p9Fae v:~: yHIN Hxk钕HdzD$Qi5)1>[x,U%1?175,2QƩ p8֠ eU†l#ƵE,<͛,ca\.^QGp}PC gp *e YiXU]R9_ ё{`Ϋcbo}+d{Cs M>sxBD]ߕlǩ3A;\xCX >)[J?ً8Q\?LxgaH@ǓbcQ69qGF=+#otZظ85gDPFBB.NVգq:]NB4_jcv.0"""16Q*BƵE&޽yچ}͔D= pd 592! "[z+oς!Bmw ɹkp^q~qlɌ~: ZkԸ{u~ė..``>}r"(Wu?y ڋ=~3R> \)z?95kNDbThƀKPyy_CDDDҷ,w!.d!HRάyYh\v'%&'!{g+o m {UuFXlPAt牂\Ww4%(#,4EʄʳAr==T%yG(X}G=SHi ɐ- &^??ܿy-5>Qj<>-^v&1؃6p)]\$4sʂ\vOtIqISV jS ztrV.<""""" JCj! '*) JkB 63M3 ImH:aj5~ -Q~N322YXHuftoq+R毆>UyUG_[Fp90AS?y+x ѷ\6~:.<l5x7OAq|@ j>9<¤1AAB}x5ɩ).,+D޳\@'K[g7QTD_SăB$QKs LtJ|z]S<_;NN-2đ:;v ZYyШ#Cf?yr|wǣx}|Ү6M*7oŪ<(#n )F"n˪y_ruj;G!I*^W 4Qwg mmsO %o4:QKSs`:/ ȸ^HH=jN>k}.R(?,]Tp@9CDtl#(b閺z|MmKI$,\or FXl ašFl -ghl!eah *v~?|)vlvҮC0wr1QXU7k`*uLT|$ѹ?Uۈʫ08$~wmC_]o)|ǿFݹ=qSrQExpc@>Q݀=oNؘ( dq !Vv_/I%f9M]ȿP)p8 kn$""""bj5|g wttedKb;,x? ;31DOT*%-]=B 63/דa> ZK^ENBIlȾ{`' -rojqƍϑQ'lcNtt:a8\S!.uXqÊ6,d$Gd-## Iz-VV(?qzF[&n  /Š勠P> 赱 U+jEN6݃y.7o7`ՊzMOM6Wy;۵\'p5 n=:;~be.H"""""ˍ1`ȸ.+@4S{CDQFڻJ|ob5V0]rzp&% ** IXzxUgn%6Z;|a Q".FyCw{ۨqwgZsΉ)kǹ~F+|:'i=UaZ/[.z[ơբ'ud|jEn3z,a|v]oU18)q|Z4b0PGE6N]>o Ϸ^Ynel܁ރ8](0wa|df$<>PW/ Fs ϟ))TI\2dҵƩY t-o:󼆯AAM"$Kw܂mpʯsVbMA-ԋWW;]Sh08^oF6 w% vuP*PFKp1LL zo]wBe4' Etqg؞(T*%>.U=*dP(PtdP~tILLL\.&&&ry6>tCx mmx/2@? '/W'6q!耄[ /Zw`n>OqN։~?/^jŊe~smI*O\'&Q\ˍC*== Shl…fX' 2)Iz,j/Ba~.T*% N|| Nr I :I0킎p%NTډ2B:c{uNZ=J3D}bC^x/uwFzwGγT"^?Lf[v1*HT*(;Adjj ccc=v~`w)^? ۝xSޣEna~:U $ǡorML RΘySxkoyPkS9 IDDDDDAbt.FsmyL*UJ~8ЄؽV(Qٸv%Tpp% MmLMJ`aR$v@63 M~O6 ۷, M#XPmؾeߙDmTȬKV:as`߱K8k*%!&R'V_lh`xwE6ƒ88.#Q,NO n\Ddff"11jzy刎a[sOt~eWhrqT>*/J ȸSSShj|z0-ظ*1- k?"%""""166* FP;ȦVt/JƵE?7,6m|pW LM *eB=ڔxipg^2߻ Bl.6\R WG I8 xgE|^o؉:!.Q+B;Cknrb kV@u.TxRkr="G3i5b޿wRd;Db W(PFa}gA{1###mԉ{jE,#)0ј-{0:-62:i yhjɉ ؘtwttke.">D,xp\A8p'҄0M.85+b8ҡg1Bmxc_.]rt1XhV,IW'6T:߽(.v/2}P_';CAzoƒr9u8$+TW(gP]J%|{^AKRk2nkbTA6lgI y{m$- S1<|GGeL\}W:,N(gHĶJ!@YE5 ao3%QŠ\.Czjt,Q>tN'jB:8/!A}-43ߞ$8'pQ 9"U }f7r|7wČ=ٶ |xd v2y8䊹WrgA }zHdd$깟8.4wKb(1`cwEm8\ Z_܅qO/ـ3.1)Mg󫈍˄( F')Jkxu,=,vk5:/FJeҡf1BmxDh5…i 9ڔ0>. R|Œ$|BCDDA/, ?&&h/݃;s|W;R۝عSeh+N3SF('ȾY_&gv-{p~W"?7[m~a^+r[[4s|gs\Dp5D+ffAD8aW!:4m$Ū #p(fN`\b2Br.J@vjl>)[^! SۨStUld)z6)B޾~MCD2skvp0 jHrbR8Da&UZu>sauԪEH=6oÿ=EK`3+:1e^]2?f@m!8cy1j5m)ED6G_~p Fbb"l6ۂ>s h&|eulf򏕜2$ Wn#%I" &ngty ųz-y{b,>e +MMdz^d&"""""ٻPSiqNk+ϓ-Ǫ١su0DO$;gCG+BːkTv"@D a9ǃ(\k=Өq_qzX(KciЊ xpr<= P.tW'NN)*J:?re)* jCh$`o$P":#)_~pr]bAjjꂪw_o h_}?n1r{}U24ERG008k͂(qnNlj 4O%uK~4b7^u' ʥAxIĄ(SxVgy^J}i!$[ۺzxa*ׇ V b-%XрtG :(LE`#'::,Z ($ECZm\/oóO݃/oCVjLHay|NUbUarjZV}t/9>2߹*vRm~NlZ/¿7زzV#11B֍=2:N՗hℕxɶ}bm,]"o)m<:$o/^z#G z-Ж9"Uornx:9HUyzTѨܵ=_+o~=d37Ē֠ߤ9;uono~+< o2vF&05=͉FvT ^{dP z-'}If8ΞcRiV DDDDDD̰Rvz|IB5Dn]CDPR$6^?XƁb\Xu^2j ɉqHq0Ą^?F'N4T{}8_T5\AsQ\h[[ GHI@~|L<=(KAb?.7|Yvm(.\P{K_H®HI}sZx'&Ylh4X8&9~g⟡Vk̋7]ĒQ+vn#%)Z8+4 U}~ln=H$ߵcM%V~XL'"""""kiVN1ή}lXVs:9o\b.Db4/8Ǫ DAskvb#WoQU۴9h"sAD M/^!οvMC}Cxp}RtIqђUe->u-Y10+>ݎvl +p6ߙ|NA*[Jb| q%"i"c0xXy=vr\n{[ 3O*@3-p9d"!FHY&#MBGOۏkhd(E^Weu' ggWwu7 dmb|<,{޿tvv)|3BJA^6y їWT MÎYin<NV i4 ݑN "5Fܥq!Qudm'V㝜[?8Vё:$B5Өנ8/yx }W(HݗXk%/MR''"6Μ5AVέwaenFPg B@Ht: vlYe|y=ŽŅ+}2zo:J&V.Kd8UYp;KD_s{/ɀۙ8C~ЎRYseP}~`pA~-榶NNv"""""-%U/Zj])w)b1DOD[7k'* ON9ڄԔ$XUA:x#Jw$XW_c;t^ ~2b\.N# S6B1ב!WoFwo?/zbxKFJRp'ZXͼkvf:hڲV s3w{|xuY@߫~mLw5v ~J=<$v{nc#Z875 T}~lygp{|ay'󞵣'%Xwt]'"""""S,@B5mJ%y ]ycz]h,c9ob5PZR(6+*ENNkii^Fsp$91ɉq",$!H(johɅ.4èӄ|pF*"=6ߎӑ~,N0I6o4jlf#c%feZg~7YQ ]T*$Őm&y#?  |Wʾ(YզQcy@k3DO$^m׉֎ѪtzWFt:-RS`48D}!{)ӡoIVXLt#'b\d'":RىHMf^c8rduT\t;ڱ)6>+ 27#4"a4bHaazmXId2l6qGUjPlzl^XfI;:6WZHV#&ϏOx05={^ÑcҮOp~=Q/]nEq3DDDDD$_-k5^ܖXiQ*$0+֊4|s tv2 YY|XbӤ[LEAH{Ћ킵5$aq[g $8Y)3x ޵NI>Xc|Z)<)lm\Žo='mD?o*qd5"x qXMHMIJ`Mczz&(bkr ELx&=ǘP]ԄhWo!zs0zV=^@+#NUѤXjc`-MW)|(@Q#>Rcn]} bnޯҞ1!zAޟ[r6ώ 6ώ[r%"lDAc*ʨ?Ecxa=JcƮZ o`%ayHҢh4HLL㎟Vo`ܲdq.w ssXBahXU3K킵V[߂5?- AX|D}Ggx:׷y(g^RF SHw]C2D_'^֍%nbc+WP8 y FV!5% h<^/&'=1*(Zp~0 %#"T ͅv|S9om]ylTq);׊+#O͊"h?ع.$RA kS>Jwϊ4AVo {qnoNAVe Ҝ8UY'H[KDAFF60S#X| %I")< KDDDDD1%NBOx^1N)jݺT-rtʪHs@/PѱnOPjjBhހHyw Wvu!z!:okM_j5g 3VS3Z#Ipb,&D|6;)[.Vɯn+{ z 8t}C>/%v{ig#Z8^h h+@Rpy<^U~?x4ɣ9ۡ ʞ, ?W]c?EY9tr _]4)>+N%`Ѽm[b@81tCyv4X;a9oBKSlFBVɶ1f"WɩiO| +WF/l+A"XZD"H`fz 3SaEv mbbTO~=khEmulXe8v>/M47` w^F8DۄAzWȱJ{ kG(yJnGg/'Irl.5!"""""ׂ?xuqM Se' WPVq!zyHJ|qs5<CGUe6!ݑr˰эfff=Wk@Q:_t]NvVb2`=)fDGV-E4jRͰ՗S0 ?wl,W ,86/D7YIPZ{h`Zo=N_:tҲWkkURQ826^Vr{| A[^M(բn' ^+x] /Y}uլ#=O-!XEհLOaz'y?^D a]C+j/ЎM''J>^>/icgkkdQoReS>/{Mm;cA؃xgVWgw*n47|\S- a]y^aH0zJ̓\P WPUItyHKMuX}> !$'ͱ#"M[e- P ʸ+jDq=6HqH&Y4ņhĘ04Pp74ת'Zɠ?}Y6}to1 W݀Nj=˂ץ$3OLO05鑼N%BNl/ hunү(\S]m mY796aCq pn ͟=_/wO!vnמ,Np>ODDDDD$' ɷmQjN"a%'ʲ_vbߡr>Ɔ"Q*!fhxDvv*8R'LNMarr*NV1YgG5j 2j" ZFHO!35)fěc6x3R-L= 6",up{dїX|͞#p{į4cƦwH:^F}SD!;Jڇ8 JKVԆjJ?=>.?63X]Bc҉uH 8q1fQ&|쾁aN<{hޠǶcsjI"R]I#B"""""@47+iwyB2ju5<Hrrs.DbՊC-ZA4'a\.8/CMqPJ.jRS`48D)^=^C1FEݝ &_8^^x zM؄?L.JV{"6AS 6/:T*l"fvv>X;N:xt {:W4b"%nۖ9Dgs{/FFM*$͟CĎ~QdIW$ ^};{VkWnx"""""SX6ox(X&V>Hȅ_&^s!zm۸Np'8!#Be$"GMRSױj(n y#uM4G鰹8=vp?"$ʢ/^ nݽ8Ag7݉8E2GG"B$&)LO$GiJ,N& Z';\P?w,X4V.Klۇh9m#I~^ls(|IN@ \n {:4So<]ŸqUYy*$ RP ѷv0DO%n]z*kE4vt:-) `†GDibb+x W 5;eїX|xuwAJ7FհMD 45qߺV1Mm8@kJ>V>|$wjբۊ6E]v9z˗U'ղn7'%Q98;m<)c }r!= ^?X=׉~U6penXk`z '"1x^El3>ƨ㴹8o9S]`MC"/6ܽۏ#*Egt!xZ"DŤw8@jy[Ww{|8vmlXt )vM e,I,abUwcbI(~_{e?Raydkc۱cK zf<=Q04(iwZ/}N'";!!z vՊlQqh`H7T10GHapg?n$@NjLr`i~PADST2hON|̬fV' 4&镖DgyV?r,tc6r$:h d;ESk>q {@y<^9_g}5=_'~^~Qdɷ0MU::9qdb|\IsL \o%~ԝ :zA_ +*^}ׇJLU8)!{h8D$k.V-XNuG/@sK9 Y噧 oEoY_8?B2赲>J&15)[JWT#'EqݫR%vřjAoV-K뛜DS[(m̠o`33~Ay( O?v^%Zv'%)QFQzIq&70ɸOϽRU笿3AYW0{SndkhJDDDDD0>6/ `5 GA^vȅ=^+*H  &C=<=2޳[ç z8Xq?-ɥNÿ|kw@m\PTt̓űcy"qLܘkW"-[}}~/;Á+$Yk XA^q^'*bwuЅ"'<=^9__~+"|)&{b,~l;vl) y{u`HsvldBM-9h!B% 巘>'R[KEmU hr Kw97Y'"`zzw =ݔ\ڹϯoAS[̧@'P@U"b;HRگ h06uro=|S&vqN`T^c1:6 N_sػ<( fk|/Īf$""""" QccJڝ>1|5'cCIQH%Jwر<+Mmp%iM1$'!f@W7~uZ5ݒXAez\ڬxhǦw{w!fűcy"qLcj#i,#/˯Z,y=HAl1ɫϻƼh y)mL5 z~76E"%)Vw]??U|]CDze~G8?%xAkSv"<@z]H]w!zRKD=]8QYÁ I \\ ΛY!tMMr`sq:qN&_";d}cb# &尚MX[$n՛J F92gYl/DlXg;ӡN;Xq?z.pÐ\.Cv~?-MZ.ͱj5 XԤm_`C*k2籓/(l ݑ"1tdMwQmYh5Q[^p t)9@?8<3ž_Ͽk}?͠S"3ͮcf ,ZOIYy^y($:V`}o=I+~-bü2&D$APܥxS960;r{kY>ȡZƿ|kw@m;\!z??}OM9vHN``ŤW`jf~0V @?~QCuAnHGOiJ͌4q Žo&\S{Ͻ< /G]C+ A}~kV(`ctqHr-*sUlf5B2Dу=)ƶD?gj^m* Q]boj j-Xlu]p\nYTpjbַMKIXYJS(fg15镴[6-9jz珔Wݷ 2 =AR\\I"Rr߱ 7Ş7qt-z)Zq8Bݽ7 ˟=_a}[2{Al.]`b­A&"""""ɍ)iwyrwpRBqhZ;BG}Zj2m,Aa"`XdQϽGO =$$>0> i%Y븘tZ5ߝ+;Njq _ޖWI:|/ryFMձcy"iLObѢEҜH.KÅK zdCgBY5[E|;Jv|&Qy˓8YEV< /8Y ~|&8q1f\9x>26pB %4( IDAT)␒$a~/pcfvh,:{10<hlG9Y2'kQDDDDDDbPSi lܡI"?g$%+eB*D˗U+"X SRٹm~+?ʼnl()`K#2zDDp 59ىX/cd\jǰ$J29 3rrǠصss@UI?}OtZ)U$1;)tor1 -{KWշ ɉ"yAk,1 a`p z-}rE_UAݗkU߭p-Lg fF͌8+MDb| " c 2q_i2h)kU@! ";#B5ݺ)$Y&Rm$\1b̢r0|wo?n[.!'扈(65+iwyr _ll'0 ~߶q?Lۺ|T6vy>:Z?;zn7B08ODN~2[9ӪqX`_δ(-\m%05wK><րd`foF`[hsIl%}*kT}>22r^yLJYW߶l, ؘ$c3 uxt NT.O,fŖ~?pxGU;rmձST0E9$6;;I$FAdd$o[;?Jv|{IxyIVivV Wu[CvO226k-|b=91EDDDDDD٧ayN 5)FA^vH=^+*q\ Cg#-5=mCxG8A!z6lƏy"i*0*BxJPswe`m~ x"\nApgQZl\AJ:\|JR,VfE(@:'1Y<$\*~##m1b :e_;;*Ə/^linAt%D!h.D_Vq'ɾo()$ڶ|鏢?EY9yN&%Ć18ODbB(7u8Gp'NbIR4u8Xqmo myX2:JڇtGUϞ̓40pSe9lo' lU+2p4%3赸|ܳv? A """"PիhnlBoOi4p`iV&4 \WJN2}W jxIb0_m|Ů:27q6UQT0k<pd}p(̢b/'2[R-d=W>jgVӏmzkVp@Htr\n OMNB*.pnyN V͍!U+C7/6@ΩKDVws fz]e618ODq8 Ƹ|}phV}lRcVc 1\jˇ0+q>zU-s0E')LOKi zhcYmؼy'hĊ|u0)b,&츯_v"3A!""""y;}|CH<*9t™XUzvn+wC0D꾷ž le#-5Ym:z-2)J!mBrb'ɖ+}<)^5??~"h|{|aC AN{Ϣ\+^ꥭkbb/v3nrYyH'{e6E"wjzpݲ:t\ $ɶNj%Pyp\G8zeK9DDDD6:ӣ}9s4&'bq(P[9h*9tj6d/}!zm"Ws5hT a Q(bUcx~>LM}t.l(JOg%SVń_ES)I[zUe{"'5ϯ[}®) ٪k $YocyYM҅.}Z ̦HAYƒ&쉱2ODDDDDQ[L$/ظv)r&IdT$" o,CkGh7OKMƶ%\$8Y)ޛs(f8"Z&ōDDHȸ;vcQPCZ7j"47*(M9r/\sJ qLN w.t:G]akx2HqiÃVxo)IHIgi?ޔ !JϨH,NGgO߼o4vS[7Gco|S^2NPT^~_qhB^/NU֡p0:L`k V+Pńtܳ6\w/ot'""""WG[;Vٷ-fEOggWumDщŋS5IVl! V _ٵ-(8R!_GZ w*߆BTҾ's[)["v-bphaSūNE5jthk#̥ pgCW~ |XP$uwc'Dߦ d}aX,`jmjQ Hq(e0XLLKA4s@BTj  """v)rF] vMF"쌃Bٍ!c51Dm:;ڢ|T6O%Z=-012=:K'CRqQHgY۲Eސ ϫUi  ʠJ#pq}گ8nz%I~m`UϜe} ~' W_ym%Qַ<}h&$R1:׳-hȘWoetl MO6]U6E"%)],!$bB^N:+KU ^=$:*#Êܯq\UV$#B>Vmdʩ3$¨ 7 4`|l'EX]n&qi=u/7#cB\U}`ڶq.6vnx>UTbulkZBjJDDw|c Z{G8>29S]nt*|˨iWwbXUJGϾ+͸Pu^`ߋ)ts @u} ֬_Ņ+z%Jߨ`7a/@@)_7 ͅ3ғfguys{|"""""?E [\jinQ. +dI_.pßk?߉qVD8~A]M-iz ?kQ58y&BU PRlH^Æ"тrpyH r^ fx?|. eDŰ Xۋo㩝w`ƓD$WjBqU~=/Ξ!Qu^ǪDhvf3PAv=&#FFo} j=~mS1oX̽s8N{X?șHF,or ˇ^qpp(,$ٓӣ}hǃ+S}Wڟή6APY8EQE8ZޯԂ1_j0|=u?}  FP9*1DOX[tvG+]9jiMCWOJcpH˫Vd:qHSmCWKV~Z9ʉ!^4~,voCq^ D`o$ipnS=LWDnz (ɶ [>N ""SSSj#~X?..2͵!8~ M]C swn'<8n=H;Z㐕 {r\-7D Ү<${2"5R<2~VY!K"J,k_Ks ƮWDӉ>gƐ-x׿?| ]wc'+kB ѓvn-ŋ{zуyDXR7TWHN O<T7:qщܥpI^4i ][Eza]h*ٶj5̽qTh[4$ADjff 33XR}ۙy 22.o<؊~+;STFǤyVU߫ˇPU w'!44#;[R!>ւ\&VPńK|JR,+Hw?ۃА47'sU]""""F #3 qvFY<2ԢlʱSr,ssxVWo9Qڶa(uغqs}y?D_U[ %EHwy0)`;gbch8te*Qz_V79 0G8!DzO| %I~.4_UiáZ,s`38|O-{18,NSbgiIBD$)/"]3"Ď[0[kgޭ;<EyU:4ssue<>?z_`6E5ou:-s& \' !+-֘h,Lo J+Fc^G/\$ɸ$ruٷ-GOO/FC?rw{>4 9J*2Eܩ*i4 =k53V ;b]E!o{DZj2C$K 'Jeغq~QBfsծDV#jxۻV=@޾/o@b/ff}wc[mՊX&֠cyP7=5 FE}y jJ?GwIPvBn.qNv5>ɩs3^|>ǯ]*jxWM*,=[B|, rZÊ?1ć]*=Դ $' wX ʦ8+m.""""4##ӌy lX\Xc4$&"95*WSjb88@z9kC􇏝"w(1DO[eep΄|洔R9=y"8>}nO^G}NY -JX~1jU^EiQyCg7$ OUIn隃>>j5 ~BT7%Ea&ب*rgH>8H0I듟g$= o~?oÇHhmtNZ8 ( de@p""r³OZp28-L؈ܝׯ7Xl,уW=P^5{!ZI]Y-p{|ێm9 ɋ߿CePwV.`;D}XξɈ݃Nϟep>x-&FDRbpïToaZ04' wZ- k>lCDDDDDWxd(w#4XKR^Z,É&|3DOkb4豿B6N7!":̈sZy"" [[R 41Ug-.,[ ZijS]6Y χO?w][څY*!>)DɜCfiA^S{lcj:Uzn"&E|dh^xCu(}5< U-4ɄWo=")恀wA~qk4 kK{ ǶPRQD_Z]>kxxHy੸0xh<6'ndii /MAG<氌sfKK8Va>_.-?l}hIDDDDDQCfUb(w#$pL98$=exObuBlIUi `p9TFZrDאGRbO<QDFj^3~zԂ !ND(_#}S q=4-?ߵ O?\;C+\|,EV&՛W)"iːhmoڸ/[m91J%6pC"Y^/ٜw˟Q;-=?&n .Cat5bMFC#v >V~v~Ekid9<+%qQ؍1<31|pD;+ā hTW M-8"X .9vuDyi1O&]gKQ>r̰%c'엟`߄9}3X)Pm󯮾}#cv~_EJY4p"ambsw#3r}l6]Ш78 ؕ/=Rך.``tc.,.eyo518/-JJ+J~~#XeՂfIC\-Tyޠeem.q( * G]|h`p^T/~k?lL@RpB{fvg;2^S.,.-qP@¬Z\I/dQUWPH ĔiFq (Z |I(N5^| 6H zr87xC̈R@vf: O8QD^Nxc3Gu9ƛb[A2zpʋӑjhTJ~#eVYf漰O:DO=/ND/?7+mpφ)anJ,ށEܲɉnU(/6{ӂ'd=Q(: ݹc'87.vvoFB|}氌Ϸ"$KG mSx]]S0?G?%J': %"ucf΋q'lSVa"WS{螠G} 9UHƖD~aqoN()FJ FO^lNQS]Ș0>#!CZ'VHP^Z~ηvmw/Kc8X]ƙ9/fP*6@EBu /(ߘ6~?F'Wk3$9K KP(So Wm[J*JpW |w/3=4/?~('Z}r>vJоd3/.-ajSVxad߷o־w\e *'GV >c8,'~"ލII0&]T{O>џ_X#kCǎ7`d.f>ze%cOEN7TUIoސ3Vh0Iءp8gD{k` R#ؕIPEx~ɿi.7TJb5 GFhm߱}sیNLQ5aޫn4K<(9XSSŌkop{|tts~PSU#:.ʘ GO:?}Y/'<Px`qiide$cKQ.ڻĔ7w`gf隃NAl>bG/ܞЯiQ)DR:_o*Ͽ'Nzv]qmJ:|'nCuv$q[;Ջ=e ;G 4[:ٿ 8T }DVJ)LDDW<_!ߜŹGppO>ғQza5HTl@NX tjN*3q](>7-.{Ёl-Vdc,r 5y(z3xBD M־]÷ XΞ@ idiR~ts¬$}hP1LKDDDDD~ccrN;ex^D׆͙fhu:d&:# Nǁ"XR!zׇM8}j58xG(/-F~nfԏCiɢ)+# Z O=@?53 oF:_̜3sWԈU#VFL 4-Jx`r^gC!?.JdɝGV'%lPlIq Vk^Uы>XqoDK%QiM6k+AdQZ1L;D;7:Px~>>5oQ8y"h~{jB;ߏ C(LMϠ&Ⱦwm {FGEG@DDDDDbȪ|;J1cRGWHH׆w(1D}s`m;ހ|k!1eZZj2bc!ъXݒCoĉւmG.4j\g>̺kTJjSCrRgw̋nƵ?c|r?03c6K3V5% ^Uv6bGf.-<6:b :嚰%/[2n}+pD'~qFro?:Q\v{׼ ~L|Prls*|N='?~}ItZ.Bx~feܱªW^y8)N< `J9+xC*/-֢<44tcBT'Rj+K qՇ1Ș0DHJLCD$C;.8ptܱ9]!z.,ǔs*: Ԝt.5Դ 5'& eS$w AMww^.YWln|/22tG18:Ɋ+S(5aOiM+La]So_R`}W(`JJ}:.cυndQk|.4j!x<^X:zQpLҮeQY{֥>!v!-#L3II G)A j5DUEBG@]}#j+L()NڨoDyiq~x;wѨjCD$H {pb’ s^]?שFNb'`ts8]s A++CzQtEk S;owE 2 p.=ojOZsTĶdTl1Z<6|#q۳ͳ2(]wg H >~fbjе"TciIU9(P;䓏iN=ҟ?<}{_X<IJ/?9i G<-<2S{ ZpO=^o)",߬T*JDDQr##5rB+!|"N#d5alr=C91rcqIFĩT*!~O~7J1%J<'JDҴ,Jnz[FAmӖ!ls]!^֟ݍ<{y]c) 8@.S)Ę߿ } )V%'3QYzZqF`Ŏޠ)^h8(ڏ,ɠTQ{რSUFw ާ)'N ϗn ޿ЁiaQTQ6MfӰMhP~ɅGx_c^&T ^][s&4&#bcuPV$"SWB?|>+JV#3_ٴ#JEߍ~v>Ǖ"Dg/^uLA;+J֤Ӎq|=&&k=` 6wgZ6٘ ffޯ m:]Ze7' Z>OLn """""ظ'ԎR^|anv7 U9]sWJaYATS'\T5mGq^X1،~;Q-~!?w_Tp!sA}v߱Y~ۓo66 ,Jx<^A{^Q5>a%F9Y|XA8 IDAT+. CAr7 xuQTӹ߆FXQ{]V()FJ zL[^A y]}U#P+2T*eN xl"hߕ[ 8|F{3s^` 9i :O,@T )1 qZ^25.|ȏIR!A'j5TDQfٿ,jEy_JBObiAfFpu*Ǒ_X'b D.3F41=׿ԶFo+zGĔ=wc-`r \wO_NeDיsMi{9dbn 0.v6۱t{j!߃C5,"*;[~OtvvV?\9ǔWEkCǎ7DtHZ[;q!z 2SY}}HBk*-"""^FZ2~a=ހm=vؑAGAzC|^)x*NR5ZEiWÿ[\ZZSfpd"ǕZmB~5 nwmwmqa.4 ^/OPtoSDo@Aon>(.|Pw~[2|ON`߮R隃Z>.Ly<^{E(+Al8ԟn]OL<7p44?u f|tLN{m6^YDs3/>fK'1tIWB+PUQ QS]fKz<#Ks&HC>BDVvjpv?s3qx`+ք̜-6ؐGIA 6eQ+eqN Kw"^FIb/̐!qyBvǚ*{egHx-޴-m8A`]̓1?` N_X/x^_37p{&FV ޿ mH1Hb'fQV3,GGlA@<རo`@vMF>KDD$+y06 q;[?7 fiSwN 0]r8 #a^YDKQ^Z,&nl2%xۿu`͖NzGBZV55SMabӒq ɬc. Q))LjMWY)d$' } "bnV>[sfbYTd&"QlB%kUy.vb훃_Tc,>_[B3nIBh}TyVVp ׌-Eho׌T)DAFf @F8wCo/)IҮ)y""Hʠ|xؼ)NDa+. )| l0gf*#wm^*>=^C-Eyh F]}#z8]( dg"'YFZ2PW߈M:vzh*H_и)8$u!SؼJeSkϜq r\}'QrR>ˇNyrnB ~x^/<~)F ]}z^mzoHKI*#/R'_-ZN5Ғ(m߹c'Ȭo|'j|tLn]rB/L  3<[HK( M-8"ղ<.eT&ؼvԂJَUx7#-V$" F\s[%W~9x}H3y1/J9 ߿gfbbG"e`њ/¯xݟT_%D᚝Wfa9~1J%pרUxޝxwoao>~h®57k |QNimTзm*@Bwbhm,/#"" k[Qo'GV:)c>Y9)^aQlxA ZVAMu%*$?rQS]}2SY&hM(/ A~.%yB}U-GE;ϛAcJqpmЈ+dML9p ˜$M/9GBHbWAqGRQH!(%r2y(lԝ> S'd8ѭK7T#ηvJWB@s&&R G~#awbKQmd.5JJNt"uRLѠӏ?fK'HkqyЁ˃@Vc,v٫sLcx`=Ĉi49.,.-dIT9t?w߉zԞb/FMe^TlS*.\K˽GqanP'%sC‹L51oš{mct| Y\ONiAw{]u<^(mfsa>u5(#X'ظtQbԉOlx8`LJFDt FjfoB#v<1!(y9fA+=ހLY-5Z^9LK1ADD$bl-ʓHk5Y܈}#N(-yJ?]۳VII8KcLVG&B~\ h%5% X̸B޵xLŔ}|<\Qu.6~[y<؁-xi "wwyS(`Hc:4jw'^|shĎ߾׌v| F)d%6b+H:׎v9шnAy nك{*x(,z{z%YO{ǔy !@Q0ϥ 3DA`vԂJٌ؄sh_ zDD!aXյ+#;^._FGAzH5";-9zl6F1y҅K{myc&*DDYrih{,..{;zAm1-mc Aud!+=3z' (Ŕ}Jq%,}myhjbKV</~қ#vyhC*s]#x(lZ,r,}r:#=_XB˜ E|(D_^ZFA ͕<

J:#uv ƞWqBqQTw_ GSP~5}ÜD6ccPmĄYN9a_؈#?7O>"R{]V()FJEPUQfK'|px=xS/!ɜ}eӠP(8BDp=|`dp̅1`4*%rSS!raU˥j zۉ)gȏGVKv, PD$s l z{qWe;l- 'lD]}cT˃\%XazZ ĩh#</O:-/(E?Fls*jn{vajzIpS\ F++U0ȋ;D=o~KAmA))C j? Տw4U_\Z2BX|BыW~]/x; &S}wEk8ለH G'Yxb8ax>@)n7t:.FD +!zVB+PUQja(y9fA8|Ҿ_qvW\./ӉT,,,r T^Z ѯX-Ld_ StJLCVYD$=W(?jx>`Zڭط,ms2q_6o2ۅ%ю\s+&aJJ j{}\,lQ{xw;=C{ л=>8.0;^|NvLIF<|ވsG%ڮw/'Il3r2cƶdۧ_U@JI"ܺF0 TQ(I5t [!0=Pe?t5Օa*'K/R,s'1@*!H]X c.ڮJ:ʹ*%WGuUqq"P9Uv/+)Mxmf4\%|_QtyH1%޻{aĔScF#ſհ&~?"q V3e=""XlWɼa Yl`D$8kwܺ$}r:3C6版"c>2Ғ Zktc K7KJc:M("#-%U툈cocb8!2Ro Ze1H1j~oEum?3 EԔDh*x} tp8B >pOU9긤Ǖԃ%8c߿,1]Bgw? s~`kQ.\y=~OL9㟿߫F)Q6F'L~(*Njka o/݆M_vTr̜xDD [l"2k ʯ&]mKDUNpu&;;K6'g6""ckQZp/}Mu%TD ͖ñxOIr|ΙӜ z8yR1J̈́BݩFwJ4ẉj79WW\\QHMԦ,] n;23(.̅R:BȢއ(RTl @٦T\$_Zۯ<, <ڻ·oa X̸C֡V\߾sF1J|+QmdZ?~ _w%]}^@UF¡ڽۻ1aơڽЄ}Y( wp^O~DAÙs}GfNB""WDq;ݲ{]8bܩ1U4\.j-ڃ:-r2"H۶v(dXy/\ r:C6.BD$6 чPMu-x}/p8gBό03K1"pSbȁJ5UˊӍ-s`nbpl9#+Y^NV .YVkyCߡ{PyuIGD{gK8yBegE=o?jPU}~(cFjr$}c}*;XCYrpm6^yndQKQW4p6D&t˩Jk(/-ă#c&# '(QU*#ޤp8]hԋL;]U O`Ȍ5A¢dV""L(r ڶ 7"#bK' H?{XyHI6b`h,$ǒbJ-@gw`pdU}hV$rCUCI߹V{͐uߟ;߆ϯ3kĤ؄3Rʯ&59)< *@{Ex~)*$ L<zm ǎbd>{*l pPa(#45RLFNL""h4jͻ9hcOeTad̎fK'>ecp2ݥYUx| %@DàC>$m7męZX?^ :NEJx>1J%p͆HЈ/,` IDAT.֢|;aF*G!rL ^u}Xʟ~>TY\ϾݜDDvmP:0 z_?-"?_ d_M^gw BWvou٘Ofu W!Qj|k'ηv2DK +! 0[nݜ ID$BAPi8x T1H7N]fx9DD$s.Kqx<ޠVڸ;_I5⫟0G:Ġ7&C{}&IdSTrț 8w#m~&S~Dk[Pr;'&D=W_/7Il[o+@^jP>o+.˿z;m:{xQ_׺eEecx<Q[ 7[:QW(`J~OEj+1Zboc뱵(/bωC9ȃ&#WV!"QN ;!]7'q‡Q?&N7f " +EDjͅtGlvDh4x^&;=B'IEBy׋e|_ jD}HW;@=#;6mڗ2LfW` ;(Tbi=unV'&QO'Aqي͛Vo"8Aդ&DD&}lu $"bK.D͖,CUECkP{ ]x} D旧AkNK^i4jDDDps>ryI1%r"\\Vo£VYVNf:.:.U۳ԃ% a)5ŅAmsf~?Ub} 8yւaU{=oItL ^u(mY{#,--gIDSW+ʯݞoNax~lBz%o$ͱIBNn[y~pp/;; 5l $")=^N7tc CkjPS]cu qXc/|-yPo>ff{`hĎ_}o+ĮШ[m[1.`jz/9>q4 O~ĎwmB휤DDa A  #߅<(oanރy7ljiɸkW9ܱM0/'3 :{1LUN :y]r8[#)ZYDDԠjnTY\ÃumP>/'s]aݘwopaYBAy9W`xBWn]ϟL݃BIJ2Ʌ5J'ss/.htFM|FC-FQ#d#"sn>SvDDD>x7q.p~.0b%ǷI"<ׂѨDŽ}:ǥQpvoD} 8yւY[rl7ao2N#zODm3d%" +auv_wotsOw~+QiAy vۧo}ENMN =5#.EEx(1lcHvp 72DLl)C{U6֢aCW*_DDAxP:`av)i;]g*@b2^ ȯ; M8wMԇS_=y9A"Pacx~müGBOQVB奛Qw[;%q׆܏L̏7fNK'j4pDDDPpD- \waIqmiP(ā,E~'(J-=.X9t8|x WPoR$=޻qosB0€66)؍i&&xnl/M4mzo_ۤiݦͦiڤqrI61 2FH!$6vhF}^Ӈ33یF3 #ܣ|.]$*VkQ\ߖwVLVG8)$/7^[$LߎG:^8_Vw x5b|-_^L ADBy.2j`,3\x(&O<"F>^e_\7$ %gȒ//-]CQ9APعz4okDwXf@sSI}[;8;ơNlmZL{}}1ZE IAy;:!7Bܜ|~+kke'{^(d/$'z|Q3|1 VO%Em+iX>>H" !oJk9F,j HIcd<OJ{z~Od47Q\ށ3>ܟn-orW;:waW-:1=}8ӇB V_5>@ÅejM:ۉ38žZ\H<ڽ'ߴ~5p(Ca:5<[粗Q^̐k-킒i}55dD_Q^8c{$/sxw񒝝B. AڈDc?P "2㤼2I>c <x[Ht⊢E?F}—TKr%y(+GYQ>bFpypys2=2I-(-ʧAI,!Sc ëzLƬXQy_:pkBD"I4$풬,4*\^kתp_[a;bVPY^|,PS#';[0ćVt3%|#}Z_Q Ac$o;N\7PS]ca.oI=7ow x=6,{(9/ 8>ZO@'KK:# 2DNJ=#Z%hnϘCJ걿co@݆5iDꢐˠ\Aϑɤ~5^ѱxP&>2FFi9tk6,ǧ\K'Etbbp"Rw Gr#cX fBfMu%ᔗ9#Y;NEzORZMARȤy)KXS:al<tc`ЍGTB,/֡tvs%oS=c9uʊ^&_Āy,] R篩!AD+ N9fw6m xr{Rc![%O;o!A!EyL:'/F_&rBiL$LǙlur2)Rݝ]bt8'͕V,=8pN nC56T JGځC!Kވv1lv'}Tv[7 V!7'Nx  u8s="wtH:yTKzK@CS$ARzDTu6[ɻvPYnlFODD"r*n͉Ob{ҥG%hi?vhL,w7o&ms.P;gǒ\ ><%U ^6Lbd2)JfSKuI=t# ЍP8bnm r!u~*#] -.6&soƊƲTW%˳Viei OX[k囙PJ>LfKJV BzbRry bNoimǡNA]%lmﲣkWUXfݏ+r4YCR$Z5AA(qCn‘}OORY$y4OhSWLbΦ c*C 9om|BIy!47C<59M|y?aKZh5 oV)1VX=@7lߕ,AvL?19 xpſ:L&w}kkYt ⢼lHH:\Wm;.Up&jsPS] Ǡ m&3' ZU dZD7A.#bAIg&A1GsSk)(~oK:f$ բ웝;G}~!euXg⥏j&YŦ^kL|8sh^_+|^ HE.gƃoɉI HHdm.$P| )/پ H- J}gRl S/wF)⾼Ā/u;JKY~>u.CDZ Q>BTW2ؼ}$Jk&S.UdEu4WS~'oA.Qէ }DKg&AqRDϏ]{ b*%oΎqu\}H /*_)c b޽D^ѱ4T%3dgglB ȤQDҌC(S fg\ãxV73:M ~znO3^wIf:Mgo㳟1jR TJ|iXSbQWfz|S .RojJ tQ֭0'?Il}[qm72:VVodB*˯#ArJ^3$kЋP^jRbP#}m8mDK;7b Ic}-‘(kŝ)5!aQ\4q5SX4G E&ٖ~qc$@@0Xz )zppWƤg2wlv)RrvܰAd{8p= <\ֿ(֬4@0 wNOT(:|XfHx3LdD/jpPb!w&s/oy.i\n `a=΃[?t8I' T*ףy[Z.(]oXf@sS*KDlo®9;}Z5b[ ++N` p8{.=;~V!Z#BNWd*}{|oI$(ϻGp #cX fFWn_ZRWVTb?~󣄷]ΡJVjttOuHXwu;Zῷ~J{T!rlvǜn;(-=nyjfW=n¨Ϗ@01FPD<]h"$eB|"0]S]@j|y a[2Z?)ź5tAWER RٝE#mƱ3.x޻8l0N# ҏ4by>?8F(1OUejޗq<ARFEd<0MJ"Ldzjz^gERuZ5iH+/-]J,$ @qqXhimDs/cj4okZdošNΎqJ%|F4In#..w˟`>v^Eu*'HT "㘞ߒ% {=hk7!7I:5YR^nˀ7mG⼰Ϟ[ΡeݪrT0Dw/u":AQ|;WV^OK%K/~6d!寄څW|?NQ~!H.}wP&Ɉ5Uh?aJI6/j`QDOng>uhW}^%K34ğ̽s?Sәs $bSSiBzN(\0m^S]_c"/6G$_2AaXV._GңN%AvU֮.3ZZ%џbkC-k!mƱ3׆4r0.J H$..w6E>npj'A烑 Ȥi ?Ϗ$W*-.d?y~dT} Gi`D2=53i2inn3^}WmvMw2 $΋'o㳟1m5pcI`zv j5w~S#i/Dz(c ɵ]"1 # %վJ'gRFS:LFp=wd2 <:9b3 ` ճrp$p$8)~q7gtڃM׬ b̖@0 װ/tqȩDN^n6B& 7=AQk8̊]A5'iR_&DASxlb]%+{H  OΆ^[ MK[TOvA=2AװH{9(u RDr|$ʳ^Ix9QLdd˶nueluZQj~gmA}]W/Bd2$ %.ѷP{''^*775%شǻ͜uYd}NʩK#/pfR=ٝ`s  SA ViGYBV)A+:1I".E$b1<߿&˥P)UXn>K u>dR4ni 5^Ld6'9a^,$&2X*Ky92)e%I 5_ [! 񉧞#y`Vq<_/2 )I `,+Ix6{e&ގc'L ^+{yzbA>"GqXz9 y T"H~ǮK>ޮ{[8;n3jQ\b9HJ!Blg~:r{15M?:Hy0B*C݁K&q>ظ=v ^-dhTL&s_mgi Rrլ6i#$\&.,+Dyv1˗ 1ro/;C'Hq8/z]VAs: 0!'cphK|,͛KiLs~\gLt~0"t5|sHh%YYX94);Fu9{~DX[걱&R/b<(BYY>3EhVW(Sl.'%@S3L'(2(5$|1-ؼL&A,x7/|q^KKgI5AF*`Ѽ-mD®`,3%(-wswckwX9}ii8 xiV7{`;)=jjU>JtJ$Iݯ'eSgeW/t*m}y52* #P*h ]g-]sjj @ "*5qssTJ#^8{LIz}K$]^^.t+ ,7\$8Y? PUVKB.n~qJ'&o;ynG$aK?D s I̗ߍe%ۛy /NeKcYIR uvc`\a;ݢMjԨ^UM5X2/e޷v/BD|V=㸐3eꕕ^UIWϟMy6S<1d(/Ia,+AMuj } de:Mʄ17>HҩJZg8t3\ twvJ'Rjnp:H  ҏZ=w|>ZZ%?شNRav[jcD݆jF xz "9Lfl.Cn\Þb)P)g™ه^RBM|++ʧA!d/d:64nސ> m`Ѝ:Ad,htyy4 B9W['m0RoXƆ4 P8`DEc T_a(b?⛌p8 H&^qLN`xć0|Af,WVB@ѠzuJJ(Y~ݸF,Eyp:6§lxQXfK߿2Mf I<ϕdWjONO=2iB p=k\AuWto$QKg.qU*H%\xn3w&775X>?gسrT&>>h _lv'ƃ!2[q0 JP\L2S] vp#\_%$3EXʏƤB̪T$pՂn><'|R߂ET:4F`D1 }be{q"3 ))|˨^YE_;)nABKEyݑ*$ a,3$BI2Oh` &cj{y\{acYI¹;d'WA,xU},9JtJ$3?S%0ɥzO!Kc<;C$y_*ˢO} GT 'pp'Ѥ'''Pw׬6iǙw%B^rR?~w P<8 76+[.$/щIa1+i<'.z'N!a ۨc<[](LZu5}b _:piN^Qj@Mu%nFF|$>rߓ$';nŔ֞ K[Sarx8'\+Zn} A(/ޅc]f J?cֆZ4צD(/UFqvv[eL>>kҒ1gRg2% ::Hy(yAPQV2& 8Yߧj&dj=J.Q|.g/As6^} nX%yy3V1bNӉI.)vCIyRk_lxGԐ@\f"8AxY>«2=c|gyk2f(o,3̉\ V'.^DؼI؎y Nw/mZuBP`Db2c2:фП%Bx'ϟSa&s$AnC56T JGځC)okHhDsSہZ&KQ_lvJ'8E*CqnNWV)E ^T kNN, W,IFŅtZ6N0 &{n qqyH\{z 9%; A!,6ԢnC5::qSP.3P475XtW;>78M&})'r{r{gz`;1 ᔙk_2l|A'x$+/Y`: :u֭L^Sr' y> CQ 'uƊWhg&''x,;y2iqbtj>Uؘ|PS㜵O~aN.[[k6Vh6A!^. +D,7x6>oP"RDK5ՕNgR6IUL$d> E6CLާ̙l%[&cML0{S29 aaXd)܈'Sxֲ`ty'Z ^ * RM hD?chimL߱/z:Nb](-pٝD5d-?-p yiwYӼOa IDAT2,j0X> B4Ywu٪4њ [H_XzkAG,p"AT*--mn uAsS*ysG3~8-w[G'70p!tϦ2[qNˤ0`\czf+KE:[4Op퐛E!Idife?yN04ɉ R[NMbF#^lljM*ƃQ<`ݶ^Rnۊݶc0ZBˑӼ _T/5T wbcm 5%<Գ+l7֠PN"8axċ}1D';aP$/SxD|!(䉇tw&X IE')e0%X>'&#h%j O?ȷ5y^4X{{L^ GRbѼAPį_ c^Rzȯ;Qae 2"?#[N==$6)Ԫ/Ԡ\cY rYY$. .>j! Iٸ=?gI2*Ԫ8)( htr\!gvxF)L&R9<ʹ8ӈM O2 $sR!?ָϟM:a~`@" ^?&y.J x^M!}:?(o,3 gfw`󦚋;^% CX8Bi3cY NMLh7-O Y/ms8arAx!?poea#,-]CCa8J %W$e8)7X>n^#Q׊;?uӂ>8~&%BlٟNCOpʺY~}u d&3}8H| ?ssh &ˊv?=G[<a+4 Cxs;zSxt\P+[QV¾0> K SW8!m+RF+8Dgk=(r,I1fD_Z\EPNyy?,שfLz;S BMJx^{k߯(5uJF"c%v6{&Q.J\A/y!ibķeJCN~,Uu6[>]#>xyvmEr~#,gbjjDkqN+rEuE1IOߏ/ŦxYs>ywV우$+ jj@A8+\#sa7_m?q(R s`J`>#G_Derr q& jlT.3珏u+PJU&70>&?~SVԎu 2'X(!"yk7YMAS.R!R!d,o`8蹚 `t޷?R^;wDOSe䲙g5Օs<һ vb#'N.\nW#%_Gػ{bJ~ۍiXR|P@lTGp u0.ߩ˯6&Z ^]P|K[{{&.D v]'ѿw?F"%#ބ'{himGsS‘'"..w6E>J!+t61^O-MYٔc췬(_P퐝E-AVS-`]"D$+l|jT4 "I:G:y|o+IjSSF4(8&[{}-XSQmX?m FFhtP`脨NRnwÁꕙ.;m;/7{œHg&6cwoBHv=xi;g68uւo= ֭֔L6Y:ʉ5ՕIMi?ahՅ! x.uerN# xSWتDBo,x=^B!dA!~*KwX-킒OXJ?tq[kqrjD݆5sRs2ZBe.=> jw5aA\Z/̥JfS+ESGDBg 1]*ͥ%z%\`ʏfmA&&QYnEa " $W(+OMD0!G"Ò%K>T,h(E?a NBx&|럻a9ۺq=~ ԯgmyy˅ZCaQBѥ+7̼U=N9{pGx]%KvzMuaDԠi9[!I^6kMNk~ۍ)2_Fg26R9~fcU87\Qeˤ  r{ZN;V|,/j2[_Cg7A1mF݆jAIH[;ps}sS=uA8L{O,+;ȁ*K GXz*b&5> y&]lA b5a #Ia,/ANN NNlS 1427[1PpDuE1~=WH9=Nsv~'b1縀|+';2> # bjjJpcI"aEP(Pu HPBEx?!;|] /NBK=ݼJBJT2+0y^U~ 9ojMB>A}RtAo[OiXz-tfAֆZmF[G'w J?eFsS6T/w3 g.z 6{Ά?1H(%`;g:r{15]!VPP1+TWQz|dgg!H!$ϫ]n} Jegr=A**krRàÉP(4 "sJ%hnj@c}$QGKk%ۛs/sw/rcNd䗙Y~<)zCpȺJ,I,\%  5D ؗ$yKqZBs9dʏk;RA7<2Bm(xjj \+A#$i^&MmGhiLM i-?#퉧ş^{1L%K}Z5"0׭m{:kÏ>ǿu^KE ODž(Ͻقc$2Ac#/drݷYRnFAA&4y `X DUކΗ.P.0pr "/ѷvPG }5H!ny&'̽CڝOpJV }E: :5e%)}zdZ$˔ǞzI 3o`-y|c $k!JDD\7[A8o݊o~閴D_ y/; ԯO[9rQ-@zL>t#gO<,@8T,;I'C&KG.{p߉'3֭L8yfwW1]nOZd\n/d9p.U ]IlvgJߣu_Ï>PU r^\&M݂p ҋdت. 5OBD\/A1T[7bkC-ZڎfA;.:T<knDZ3G'Y.xbLg.=O(5@a}u\zB..y(u}*"{gyF|hth AM/Y'onJ#ryOCA`Q*xk;i-M6 z8yWgv೟}(R!G8=+^wZ?c4i3>DR"m$*Y K߆lAMu%+&s?p7`]$,ϻ޹LO׻@0?hW57º@5&f:XV|+ϧvһ{`;E'srxe$X{-tSA V)sh (fw/0'775`oK`~<݁@0<йlA 쒚ˤ0̥uu }IldBKˡ2xpzUt: V&B ve*M EhҼLی^S+6tA'8_wy8堓ev7mۀCw}b1P ̗k }D_aDٗ*(Lfl.Cn\Þ'=C<=bV'P"y^-vɢ2Uj,Ty~uy~l)i6o\OT"4`VjQ*=xW>I@?ă݅kLJr)^^\crsY_sV ;},K8r1b߸t1%I\3/~WI0Kx'uMu97]sx3q^.{Uڅ/^ܞ|߉z?.% &s3\5o'\D7Ear}Og^+تuυ0~ *N708rq?<G IIQ-˶ȉS%TM\{{8kqvmmiy}9Om;mM"oXV,ZaR%HI iY8`fy^fHb>o|*\zҼX,c' pTO ['Q&1&"˿uU",D|~|]3j OMOd\idt ϽpHPIKW%%Ͻp(mTYx-f>~{v5⯟AB">h_@ru5,fۍv#pmj]!9~?!u?TKxϴ2"%%빌/PU6|7qGn 5|hD~‘Qtt=de`, IDATabxD {nNZU 'k-Lk,xTj>g:Ҏ]M o(_HhB{llyҌ+^ϯZep.mxF 4ynB㓲lנIÓpo>y'~E[|Swau3T},hT]^Oߡi|~EOvvʬ bff6?Hy^ Hˣxp{0񓕅Q\T"%bV+Bsͅ窷)z9^9rNi,fk8">-q ?OÁ}_jwo<|B|xh$aDW&[2 zl_9@kjQ$jV4:p@kլT|x~``TSFU jDDDbmw`{!:C݋]}#!E-HR\TK Ux'XL Ϯ@IMY!x7yE|X08DiuF~B.GID"HhZ?<"v.DsyIBh9ۅc/ S즂\|w*-רLb`Xމ;#{ng>GO_8\T|U%hRBxq]#S։~MF f &Iy~F Hw:˻.^JJyzyR,1krGDo==郏߶G$_?OUXSvueo_^9^o &5,=[xvۍ@PVRŬL^nU?Ÿcj*5~#Q<_S)M治/Ǭy2w57;7c͘ pT'±GU jMUO@3o;Uxy GjA-?GMEJȔ,_iA #! NN=@,O-J,f|o7YhZk"$z΅WeYlwdt ?_"E60ܪn7ZϹD郿#8pb44@p `~XRDƇ`һjӺѠGeUiW[UHA_O 5P+#y"""t9{jN!xA2+F=,v}q:j`4Rl,bGcyYm۴>%9 ,񎲥%f %?$>OJq˃໪P};⾻nNvpt|y b2,oho~yF݇<FrYi1`?qno\/`Dϰ(7tԨb?/EJݜH0uWذnclZ_| Z ]ٱmmxtun=%IxXg\Q{}(4>c'/\1NboV}bWZ旌Iy^UF%>32wҧBS}.v}Cw-YgQty0Z=Vǎ-U3K|x__*'ǝ[YY̬lc1K=Mb%\v{pSSat_x|SSSn'~QTCKі6a]#{'n}ęɅg~Ћ`1x' ^Yd)|#" }B%% {W& >R\Mq+tT/߿ԃCO 2+YO^ɶW[0meGxJ- ..!'' ػ{>;e5(-) K_X11 nW~,Vy>;s/7"43 [&1X&AbrͿy^\Lf׽#c㝎jyW&HcZPk҃jQ5=< ==!hE "R\<~ݽ!$E B 8k~?#Qv'Y-~QgxJwI9B 7#e~77Hw7,vH<8O_9T&P N+]҆}nT]*X\sZSU*v?Q̜ǯ<0:@Z~ p:pڕ0?l&=RTw&!-+c,fggwY*k_/b׎Y Rt[~U[Ϲ nGh='><_n 7h/,.Ja1 tT \H:u~b``ZvV5޲>Z)+= HU [ o`b(:($:G5-v_Zrb.a4RdPU 22p $Aϥ;H/q#H X:wu& Ol9׍&!)!eVxW[C= \eDCDʡ|v6SVF!4""T[ ⸽~::‘(<~FB𒔩bʭ0`4/QE"Q*;;EH}N&kI_$)-)N_&ݳuџ#Gk22x!hXyT~nV$ؤ Oh۞R/?t]^WgOXXZOiscVصv4AL1Z:D6K7?i6UcϮ2dJEE૽*V%P2+ؿo,ADm~Ymr z]n458yiK{jYSU")LU Mmѷ[1>1misO[nzE@^>̘LG/4tCep?F$ꎗbS>FBI#oPܳ]cOɳo۫cΆ24/PO􁤍v$ۙh<0\ BDU ~)4hVF~ΕF?grrgj')Y&Nj l˱*\kР_x.e/^nlJZ{bt:]6r^ tK]_ˍhlFSVSiÃ;' gŁB4GLcMؑ.^/0B]gmF|`?b=3 ocʚHQ뷛 NNK#m1wWMՋϪ tԤyU"ōϏ~M NyWwiTc``YMʀq_axHV_}m3, i^eFU0:5O!YAr֪n3֬K{کԬp$<_Si9Wr&/MZls֨z &,^Z/?O<ۊ%Ĥfj#{9?Sh AtrGQ\Tb-RJ{_0YY] ܎t^vf1f{*R۳/|DR'!OJHx1cwI%7tgJ烈xM1!Ey"Jom2b<=n l{u8qN^`TQu=J577"$g}zZL(|둑&/IsJj73;{ <B(cMF/4q˃_yy) y&ѽ]U}mu> Lcxy֦mέ |5Mj$?`Ӹ.ٟ3b-Zf!H?b}%t޳{v5&oO?+B'V56='ԟ=k!++K!amJ.nF̸*W'^}m%v:ӡ:zol 94{?:>|SAbvŠb1D:gH騑}2:A#‘(.r { _QggQJX}$4z%wg=r5yejza_wPuٸoVwr8d פ%U{ ul7{?: _` Zd4q}Jib>an5T]J9|_h/ {p:a/Kk,w5:|dUm~ҳ*ca?a1EĐ_Z^n~*zi<qyfd`ϮF|w>bPZ4t"a1!a|HXN׃c_\v~_ ̋b:{*[q줸kFDcl ~ 7E]-m.4Df54 0#BgQ% X""P 9nqyʅe*m˝䉈H&l1XX%]N&kIA߰d*>E>\ܧR\5\ B-B ;LZM ݵU Ir;(6l$ZMok$kd8:qE}" BCD'6] 1jҾ9d=sL6pu6$,Y=^Lƞ]&F8)"<iA$a5q3Yl\=nm 1% 11܄USY}i [jP]aU >3 "j),wҴݹU5~1luiUx;9D&1th݃/BtnLnj@hqQ!FFV]!VN W̳#ۂ^vx1#󍚩G›',}{̫~D1v'yu`;S>_VVB+sy"""w+> O!z ,hcz{Ѡ Y7j32MSg] K IDAToXu bp(u}7< KQxo(+^i߷s+Tq6ڥ\45Ł`]!LNG1¯1,M zznB̳vu^ $8Rox"rZ׃ Vը*\n458\z57{W&H7Q_[ [Q^y:oKR+ K@KgK7R(.%ڌ n|,*֮*Xnb./`@$w: Wwg958vL ch'Թ^ >p/{s)n۽G8lH4۰{g ϳRlw#MKb( mw`{!z9 zm х(qvU A$J..&XMt,Qc^&X̅CV.EHD3,B K_ǟ!iU) .||΄kD)# ՟ΰQZRgff W1~%Z P#i[-u '_ʲݭ$ewjۑgqDgGOw.,Ms2񕇷/qՋks,I*;+ [6GBqQ! BqHLC컚' $r=QZ&:ANGN߇^8$8/>ȹ@p ~r'T+ ADq^sԼ*/~3/ie$yzz@DDDc{u8qN^@]QYfѨǖҜ :Q{fgI $ddaR䞆rv*5:=ҪJsk3uZa)GiEIݟyCG(6"3W!4F&vw4Բ˼JwB c㓪:]!썳8zW|ava1?.E-?{Q΂ߗ7#ÝI:J ˭=Ѯj$_$ߧNG ZϹBDl, ǘox (~~ǝ ӭYVlQ(." :YMTrnЀB-fc;n7jT @y돝<#-mbVDJ i0IN|dg/Ut67(L\++(|CADWt+{c84>B rqߝ~<Dڻ 9o{w*k[\Fgeڎ-ā}WZ?5h֬ 򰩺؆];ngQLLY)]o=jQ[&Vt`_.+ߗԮR&_$ eőhly|;Ղ+rkis)κl pic~%R!j?L/ieDyz@B u& ^az srxb7y""R8󪗿.GUNvOC9^;O{$VrWafvv/MɺgfEZ!3\VᎆZV1#۪ ҅< ,#ti3O>'wl}ⓓBg.p%",1,OLn!r|r[wGb q]ݪnVzG}.YI\P#cCIitDQX|?|镴rUT(pu^Gkլ`x^ab>6TYfѨǖ` :U/HDD793N46!}X4oWk328R(_̵6H1I kK7ebA4WnqءI3o44iU:ͧ͘ޏT8 LyQ/m0qs 7`t"޸;IzF&lG֢vE!R {MppV)]?x,ń]=RK$o1  ҹ, v!.<nX&+>,~.Uk~ RuWIK}~4_saR2^ch|In31pu2Ϡ 6HMh>J$3C,G˹.Y]_'ݸUwsu Mi3Z=?/0΋+ān=xsg.nS'@fd@ˁ܊MՕ lRmWr3Q@)tR_ [&+Duf6yop$7OAKkT'jTLz1,Vft3¾GosaϮFE%}#:OR O WA>֠Fn49m^ހ;*aet?ҟGw(q^&5k^쬬k*IHUz:3 1@0s,6tTxF7 ί42:o<<)bA&yizE>[<ϛDh^nlZ`cU* DۃH8jAh)1\IW]iex(\VaC4vCh|JmI7FC㘚V]}0곗io~tѯx1%q`f+/2HG[8wiÓ d/x"RuW v"JtH^LHP2$|/^nË?~yUDc8t>~@cͅ=A2+z_!{xC8ŎmNpsDu^+Ah)<)+= QB]cȁ(f6bdJY>g$۪XS혙jDe͌vôZںeNUwey Lcx[^^H"m,7ᓻ7`SEjy;xo\mrƦ)}ᡤt{%"S{W =6+{{:kf߅Z ˭_iຨA9 zA3x Jy0^>"5~#Q z458祜dDߏ@0$zM'Eˡ_m  ;'Oi{p  ^U+#ÅywCQ z@Df3^\Ds /(<|dy[qr,6!MFM uU :]BBh9%˶8쒎Ωƍ~:ii/${RQy?p'p(9%#c rͽˉD$+5wUR߮Uvg"x1]#تjdrZS>^nmͅ=tԈ !mo>C'.r='OͿwh퐚r :)Xh c M}FDDDҰWpQ:,BbX"(vFWJ{h8 ղ87UlGۓn3c݆U`{ts-gZP_W%}WUWߏUgf!;KI? H|=/][KQ6n.AݙCa2<B*:s ]|v^[Byui!ʒԔ~5/rd׳M"B ETDM&$Uwu|,t{jQ{W{v>!x&ns s!v'"9yZլI3-27>/DDDDDD$\<>"$$ '+EPu9Ndx|WP_AČ:"7׀ǿ1\܇LNG8xHqL`/EMib8 ˶lܱVu! u578ͨ6<?? h}zU_.RY^ikmTWXQ]aTm.7ܽ~v'1,OrxWm;JTW_.ŦT8cOc|* c¹NQeP>*BDDD+ X,f(غ wDUmjp/.*TL,f*ˬ$'MwSrBeYdܾ W^\_kĽ;qzB/Kҏ636mY ˓,9ׅlVbl{qGTW7<Ⳙڌ E{h|C#cC/gd[ae2(ODD Q{WąW%]L8 K_Ѡu~nJ}w:juM N繥ͅǾq6Ub6b.QÐ<)J $JDDDDDD$H$eR cX"(9_Xj7l×|Bm1mֳ$ثo@#IK]կW\T#ت[&1E-f rjZc/JOSS*#c`/aϮF'/lNG ,BE\S)DZ?(zR/DD b$""ugX["Pi(OYx~:F*J$l[u =cp(AvO(-)FQ:T .|8|sqaTsX}Hhr:~}Yu{_A]]n>-<_^|rPHX|Ͻp:qr[v\&"mM"~EFqn~JrtTnQ%ڿoljL@0@p #QxC:c(ݴ<:jx^S<=n版hUf]< 1v'ܥᔼs.IsftP"m] c`(щ`=)63l[`+10<TER_tVHYx~n~C&o3?C) Wz)l_ƥQl( Fk?;ǒ"DMKVY~+uy-xbrn7Z ϻ5pm'xr:|\\jsR8 )&P|ۿxِkYUAy Ou{vXZ6H|GDDDD$J8c4b2js)TMY!2b\J[`ۖy,+e[5"/׈&˜bdtr>,5S{]l{k<vqTڰ.s~fZqoKEb3齊FBS~][Wzg߽忓?Ҏg}PBzxCx,QM0u:U!*nѠ|,hlUb1D ˭"󍢺s }/:hisI=o2v# ! -蘢k B_)z,LݳW&ҪwNaAi9m;g09eOҊ쬔l)T_Zrϑ3]輿x|VZ|_RTu˿_.}'?hlF?xɷyLGZp S?1|/qlkZ^&)z꩔wǯ7FC iisKDe/ +1*ױCQWx[k\=5:)anM'gO(@c|_m0}(.*OO= &l )[Džv-VJee:>xw!"""""G<>B8"5n,<7O{vJ;}~fv:zpZEϜ`}@RG[F6o\;Qrh9%m%:jڜXg:pb*>_p98ՋKip_} ?8vlԔ+V/A%g`1C|KNu%Qd0X5r+.B! -vA9&ƈPF^t^ށ@0o7#/רqVn75U"[{VɷkΡDUEƧoBgKK);R?zBO|/SƿA[m Eݏ(9VKcPHvGjow?_n_m??lu}w_<,`(cBNK.^jO &N5Mlb$ JFDqcQTPa@43gޯ 3{91{/~($'ԕ\,KCs /"JO8@]US+=Q4|xʣ;Y%|UM;mhﴡ OFTǏAyYvr 6-kT,Ld!oIe2N--0y>"""khne#vEPlr/c\C8r+{][/uJ7MÓHd.6ةsq]l=X$5jx.wbtS4ɿtrgDy8^Ոgw?w2xynؔoٲ_Dlܸ;vl>bQB,m}~ ΏkG@HRS׊2p0|BDDDDDa%IzN&x-9zy@%HK6A\Xh(BCy®td3fx(:?o})?`ЉV#!RA*ώށBxpj_HI\fر6m6o~ {A suqʙ|1 Pv*8!9t8Sz.$QϞ#FK)I&C -7쐞dx_v'ά)D,=흶)]xp3;ȏwHV!% c($ըEy ]5l|}s+kx Z:o.ΟBP@rWQ`p0?v9Z|  [OcuJ*!?UKfvl= iUɠV1`waxxNc7vo_z56n|Z===h&wv߾ظv֭[yf X4ԟ NW\a(DJ](pMnhn\bS5^=gBc1(ttu{c'.g _tMTjS~LjSXf[,֞Ą3KeNZZp8VCDDDfMl]Eh'F6R<UþrTU-2g%!Ƀ\=*k#{a ]:P %xd@Vxe{{smĠcn V 4nS>ߏA^>6/o=oߎg 2kgq&;x/"I)|FՍAZ!(3 2gtu׿c'( Yixq;~,7 z)]D0 -[~}`5(:|O!!@QZaEVx~?H r [(h=4j pc (ˣ6S]|,<ȢӆnTԢ64ZZy^g-"?_ LW^  hZ_̝?Šsp)ND B?҄k'""""" |PE¸"P@IKB4%zwdd{V{}A^8e3xqGx_v ;χ>2ۭmBgWj$+'6 < H~1U x:Eu<666`ǎظc ~^O|KeeeX|CAA`5E|gևEϢ^4w%$ǡQSϥ+`wI5jV_v "},=_;(%<9>+= $nAV7[@;MbP`朩y>Y,֒Ą^RSue% | Ph<N@gnGN[6G OFx5]lOTbά$|<:'z Z. {>R;o[ ȶeo,8]Qk۠U+nz{~}%ϋ!;{3<lyرcyf;ƒ +[9Eׁz<`鿾~ؤ;QJ*vFJ1:ꆏj>/ yk*Ǐr*n44 %~i\¬4l߭:q ҂ Drx%1/C=_khv,$+~Dб:WJjBf &bt!4vb1N4a ю}ذkAdd䤟yftGR.[[ e!!%#==]|\sU7 ^Lvލe0 ss–-ߣ3<lٲ< swoLh΢ Ώ{/O I$1YiTGϩe`|{ h8l{s`d?gRƂvXdOhHK,[mGkibw{פ{-[rA^Zaex^dvUsp.HBRLS O5|.EYύvON4W?~4躁g/ʂJûM;Yu9+Թ^ ǻțd1:* /cP>.Ա1.! :VK <TWTaŪ """J"IԠ"6"dgpo }~aV7+[/u9,[!cwy"znh)8hܽ&[m<Y2}ߗ.aNLIٺK<ȼ #99٣od455 {É݅#D1DCsh;p%fౠU5u;hiX;hiEJIԫɧ$N6qTԡEǯ*fHKE$,eSRX"TJe&9&A簿֭R!|Ă &ܻ`6'X;vlnxj`ϞjOK٭|_l6o غuĿr~Ǐr$"+}ju9+Y(o^Ơ|2(:3 f5jZ&rh*'NK|a0a !|uE1!!;vmGYY U5u 'ITqWԲp׬6w&-5{QBB?߾ƺǧ$&kwv3(@&\.Gl\t:&,> i1f$)j+u>0+ ^t%0"c2<2Ax:vg=p0G }w70/6yzٻヒ7,—n8<G^zٳ;vlYkC:8}_-[L牤c*N44L)x/uؘh\nXS?$ob7 0~煆7E?K#h,TƂ݄A4ICb=LTyژp|p&3A"""/E82E "Av|!"/[4wa>î :!KN oJ(ҽV?l#YMOm_ ]i~=Sr9#Auܭ\:7(]g~#'' bROHHĜ9spYyꩧO_=u2uVdff~ؾ}+W}H:5MhzK9$ o`#+=)IfxQ1(x&fD飦FEl\,T*KGK8`[ǰ += )I&h5CxPd6`ƌ4]()HfhUlǥ4*{~*y<"}޹(btc ;dg^AqB⣑9kdAh5*TJOh@Aݝ:C^;cthA^۵KvRVXm*qm)H V7.0w x?< Fs} GNN.{b͓o#8?glٲuҏ߆۟݅ş VQJ<0iw8QUS7Ӡ1 ӆVTgZܞ)݃/- y̝e 0ohnE}SK_h|RDl|Z-H:bZ1\[RPuEVZ """ |=3}1"`98} ̧\Cxb<~!e=EVCCntzaG!$W-e 3hiFH0N+)?mPY2]9aʕ[>>7y Op>!!"<<|Y|9PPP >dxH"2gz"?vRpo{ U-}2uXs܏V#+0(xfd6!lޠYPJ2 1F#^LC$R/ IEwo@DD_nwD$C3l~>F%$' e3P؊[ryVBKVJ DNZ.wtܴd3v o:㦷1?xIn쾐=@4\YKp glr$''𱹹w6|t}t:l߾ã-[nDt鞇jѱӆnTN}Tr9§i/ ͓1(x ʛƺ[Dd$ q~>S!iZsRP}mj5_$`x'|ϯGFF|w#wbzsw,1s M0Q0/yp=WJ1JKmc-1V曑Yw-[UWcc?? >6<<f|=_W9?)Hp~\Cs D( -gveC;ȏ|[`w8_ c)I&h5jdAQ!%A ͭu@ Ơr9&hZ.գ]jjXq=2'Z"I( !qZvo&Kf+yl?2Pvs9{ Jϓ13::6c ѕZ.uj?VBtz^5^ݞQr2pL N\q6]'\wލeͅNw V |K`Xy΢ VX}>֭[/(؃;vW`k5D+% Zq*^l{F 0FG}(.M-faDNA+d2 cpD>tp)N$X3,BH-<_<][\E ""igR΅1tW+Xx-΀R}1dΚ.cfhȍ>"y}9㵃~9>Zq~Ȉ_l [w+X$ 3"qL ,m;ƲR=V7.pXp!4U۾};Dk&CboWp>??yyjl޼Y}lԎ/]L܌4d"{QѼQ JOÇ<7&?yɉS? QAR`2 f&DNCl|rAkUg*8`]`o҄kk EDDD"I<X ol;a|>Ƃ u%eg27\[Jqκn?)6I9ᨪđ3-{pdbnj Gm8Q`ю_~YfAѠ [%0"$0CR@$tܮQ,[ᓱcm -1 ]^:-]ޛp\.Z| *131 sSa zKF>:&Uض-_ػw/:Z=];Ӎ?:K[޸q㔃c(Ս(*> Ze"{Q3d"1E.vU5u{xNjM4jR`];s0vWʚ:w9)?+:&POʏIqZ{yMÂ.)My""@tDDtMa,XϏ6FtfTwwr0֯]`ņosς?spW0߅bÑ.Zqҍ}pG6FVX:LB4RF1:CI'ƆE&38-[N۷oGyyjpБ8t8D"e#9q7*,_}teH*0OY 74G!JdP2& r9/%8`^`ϗ@jJjEDD.wDDtMNE "Km8r+ 6ƪ`m@W0@O$=z}ըX"" pX" tw`c봸W\9 W\u+THkmXpIKŹzz]8{^ĸT#/om8Z50D1{'MWZaٳgz :㥽^d/B,^'$QDrX84xqPCsDP5u,1(5VظXT\HlʏIqZKA |ue=p?WVcY""i, ,!Bcq|B=~Xۖl&,JéZ̩֋$w a50@OtQRܾΗD釧^{h羮%7}YX8;U)V,WWWc۶|IɱU8v Q5/ }ݢxs!jxX>%"Ap9m~\.<-7:}9˱뵃d^^l_w;b 65::ֶ.DE%DIy?9 }2Y~k~Oc1ăՋbñ8='j.Kj^5n'üٝn, 8{lPYuMk= nQ$摜i4$g-MNUM;m FT"6>Z RV WqXxcŪ\Y""tX""&v'"1ֽsq%8\~ߗsq"fl BraOa }sӐۍ=E%~8.DG!,4'Xཷt̷Cq4]6S+y1V7㢥}wbq,˅N7,m[jlۖtՍ݅]X+`]HIb37"o9 g/ľ&:ȏ@*_ԂFK+"r jB{r=g#tt6NtV- m<@ם:$q^ 0DE@`hS[pbiDr!̽c%zy&oK m8Z0Va] ?_Šg%߾};˹CuM^~c?]+0PKt2o㳛~B>^ƋἻ /JC{W/^h܆n+.G9k)sKi!D.\וKxèmGHXR_q/f>󯣥(%sop-Bmv\t~_,M}dh^w-G^zlOrQ;^{U;yJQ#*"ݽ}nt44 }G&Ao0 b3RO=kp8Vr8v"" |x#@D!D%-1 3l!,@ IDATsR ޱ..t~@GW/V-'cDkF}tᭃhIÿ}^}>vJ!Q!Z<*a(尻<pϭ3r9Q܁ZcuE(m|o`ӦM~É݅]X+`9 y_ ^۞FBJYW[Qϼ=3$Ǡ }[Ox}]u i6::~N G+)=)q#(eϼQ0DLQ>B{{/l(z{D4Vaܷr&IN7,m}~o8t89+`] MҊ pMN4MMAR`2 fD\x Z pX,V[RPu%DDDAy"tX"Cfu؟1LJyV%@_t EྜeICtt!zLŹzazI8{aw__<QB ÷sTrLS+0`k g%{t ևzװ_tضmrs6e.3SsʢI8"\ڌ)HMN@Jh=-g& QzE cb`0 Dphb}}u<Z=E1vt^!|%w9⣃82Di"D"&_/ZQ"}%{M_DKe{Ny6)R$ZVڥ)\(bwY ^EffW$V+&U{!zIZrVȇq) pn:f!9;mhhnECs *kacP^ & r zKqj\OS+X,!版Mx?<Q@s:usu ~BM|CX9.f#Zں04{!ۍ7?EX8#htoZ Q:$$\īoeh^Rż~ۇb!t֚ǒ9S{o" A|t8<YκyШP}\D~_|YYv!+JT*v}'̊ b<٠|CS ' #b \ظ8u,@:cXbx&T]DEDDS! A~AD"Iz\hbFFF3/oO }$̱I9w w-P*'<8::;P6MVÓo]=~KA䮺 Aw9Cp8eVBN ]Sb@ }v/Ay]ٍ>,4ӠѨʓ3H]lh?DmchQR{oDz?o? qX4kӪHB[WOCSB " 2Y ?a]n r zm͘5束je.MڥШxq:߆Egp m򐟿Mmaǎ\hÿ_c%pCD[&ͭcQDAydCDd$A$qGˤ8&z{5?b$&&)ͫy"" *∈;QX4-\>~x>:==2}4%rm}\D~!}}}ظ\h?9t89 `]Jh5 1(x&D ^P~N JBjJDDDDDDnwDPb Soy 2g%s:Jm]npR [/ƭd`aVZCCji( bJMsa޶j|ܻf)T*_ǙOޚt" kUת0B߀\*A Jy Jyؔ߬~Nя1pa>:$ņ#)'.\t㢥AzcufM:YT[/7mڄ~..,ƾku9+Y" O'M fH]RDl|Z-A$/^S+~?XIiBNՕ>ODDDDDH, H| jI+ΉfFFFa_~~B!t-m]n] !%e>]诪ːCCn",4jZ j!cW@؉sx N߭GRż؟W7ĸp]⓱jjFG?shN.0FpX,J!'5J9dѾOB&.&ŀÅ>WGLS▌8ܒht(-5}ևE.C:۶mCn]\p;^<|?w`ֳ(DPjicP>0(O2 1F# 6Gˤ8^5SkX g̗Ҽ+'""& !X4-\>?5&!2̱tvƺz/¹iP'^R@QCT+}ЂFeMC֊</Zqǃ뮡IIE*A0"ujDp oЅA.$"F_GhS=H:߆EgpwTNW){m[>\-/į(R,RUMDW4ZZYcP>+"2qqqQ0:X|@bp:!Օ6ped( }% J~ZLC$ 9:m^O,z(;yyHnzΡ]U**%BCY p:](?YJO0-nXp'ȈjW]u0(ŠcvNW;cj Z1"V>s;(xǹ"fw8>>sh5jA3#-& Qz=9rfZ-A/^Scx:Mp'fcȯ$"*Cykʁsگ~U_irG7FG /9/=7`Ǿr$G#lWzBr,HV)"cӗ*գĹ2?Nlփ'yAtYIz,^&crWij4/bv;*pB_#''۶mCxxpb?.N<}7~D3 | SXwykd 1ưDAhTVս6bNLLh0]J`x~m,IocKDaڥ)(lrb}᫾R)1lDro1D"oJ}=X/ub3k:V-B΃rr'ةs^=}E恱wk ^0e<R" ãpſ EdhrU,m}S t:yyyF c'PUStv &";ʠ|aPJ!6>r9G!"`)Nkb^_4JDDDA%" LNE 7O{X\*Nţ~યdFw"( JyVbGk$ЄچV,sJ*J rJl=}8vOx678_] @&4HAi[/8[p+4׋-J8\Gzz: co/R/JD`P^|ʛ-f , ZbBZ{KHqZgW1<s;!x&~$Y""ֶ h)RgYGYذn~^7M6gd0%ţ׍wЎ1o6Z vc`pP0ϸu6^0:-/aWuB" ъ((!V3Ϗ ͨk'iK _ZX`~3M"J,j{%KGff&_NZsE| ̟BMc]h8߂ ʋמ iY "p^Sc`x~|HRyׇjv U4@DD7=`"< eA+0@qz-bh@ (ǵ{QzUA|\sלEȘ7VBp>** QQr( d3R)E3ihzmlܺͱK+) c g3Gvv6 r,Ӂu\| x;³}h>y MʝƠp+"{%:{Vݾa;f^^ $1'')ŇAy*LdS2, mh8W/ũm#Cm5Ml- ^bp%:o1mX?|y/zxV`U&bGw:lߵ VS<-#5F9fd̛#?O`3=rbW/-gkǴHh{ Ճ<}}¬2 ?v&@"ʉwGdt;v̂M(--亪j̟?ȀN7 z"h8<? 0(Oba0\bѸU*vruoliY{4*版hpLH~2lܺCC7rr. X|+QCkj:<,>9;ّ^.vŎ^8Z/w݆/\ CNzp^&M߽?dD ='PVXQP9y-~j5RRRp@ `Μ90Bmm-N'P[[ -=I>_ŊCO$WkOcQAy#R$S24 ADtup6ruo\j빲DDDDDDBHȌ~NqYotZ j.w]{ 9O&<6HP a3C[/w?\}^8[.Zugʝ0!G ﮂlTܰ\;Z bҥHIIEJJ5c2N,Y|evN(//GII Nʫz0cP^|L3̟V R($*2 0 ,MJ64ԶquLJ\x版"5@D8݄<FO<~o\)ݽntjGJ\ \Sh|L5XMH4`@q~w?0ȐgchʎV vt7Q$#^ZRDǡjQ\'q\^'5SҥKti 7::fsxc`ڰjjl{%+nGb 3J ʋ$5X$''C&D4iʥ:\ax~N @/yV1}tVS\~t1444g. sDمz_jN~ z(`C6?#xxv J)9%݂'ƩogrYg[pEllN 6 &}# ca7;|t:hv[sz `P^|R"``P$O&`4"!1 hІsR6͉\x[KDD$A 8H$"M߽? ^ntǮ=8spv TCUB5&Po5S)>4㽁.ctPb%ȼ6Qc붷GO*E/l(>>ՆwI6 777".,,xxfhDGG n^YYYB~~~a$@5Šͅbb:]h:jH2%CPD4: iùfKi^ IUbE "K JD F} \s;~Ǹ,q9~K7ώrޅ>},rZ]}<6O܉[R0yę&AQ%߻(̶#Vݾ9 Nj=֬ydu2Ն"#// t| "à<P(`hX " % w8\cx~$}^11|ÀH&a7܍h}tZ wtZ |5`Yh>һnCN?e4\8gxr0yQ؞zb񱤧n.2ϻشi`*#cy$&&NuzV(//G~~NghAw| I ל<;D׊OHhL.c1(գ]S՝'Nryb:DDDDDDRRDA4_cAyj?a~qgL<:zrͰqYTV 7M{is,Xh>2M2s*;Z_p z3|kwaq(LN5ub^%''#v|˅nA՚5kzeeejD Q$aWW$AyQŨ`X6qDסh`P(X " vm\݉ax~N @/yV3?@DޏG{G [+_'֎~3d2 zhgكwi5XEȘ7upvp#-ER%9_('in$ o[앂80==EȈ8PWW'5AMM ,X ##%%((cko~ 0wt| 73(/ M`@Bb"drAD!WmRN1T*$Ճhn .ӆ^I:^)zhEv[a`Oƫ^z)hvՊ;NCaai&*Ë'A DhJbQ-#թmNp8wl^z)?0C!\7Ÿaa`0 !12 8Tv)Nm'Wwrڦ{\jyP]/8BRw`DDDDDD"ݏYI:=>c bՊe=TJ̲&׍^W?2!\S+7 t @gW6[o͘xaܴD!v[/E|,(.~ :]䟟].rrr֩=ml:>gݎ-<WBΒ[R,==Xu-~Cq}V͛7#;QAr!??n[k{n޽[sp:(..Aܐttw%@%x |BAf4:ZXKM8Ay"jH2%CPD$8:;5 OPy(k8:tMWR2ωH(N/= I=N\|>?{B2^ViAzGEkj&,IFX͉a ,xem`p(m.lW񱤧S^^^4qcAлt:!;{]HO=y5'ϱ1(/>isaaX`ܑH L34 ADUq\S՝p٬RׇGbگr,N~cJWDDDDDDb$ Atb @s?RzP0va``0dc zgWRbx$ca3'`9X :y ?-38OZi{Nb,(( Nx? 6F***! gdd55XKDDDDDc8y?`A`uCVStwq) ̝mf8[;hGK9EjN~Vst3cB@;S(E_xEml:nm\ݩcx>8$*秓Nt=K}HE CR@DDa DD@`E " 1O+ትSz,F F wv+c,Z`8L gk.vbW/7jYMPF+hV^AQevGτV2v+w_hNx!(m.lW V+^}8h`ŦMiDWB^^>rssrU|"dfya9y?VBT1*-剦 BdhuZDcoNm'WwùfKi^z.|~D+/gFKHDD"9)UD^bص~_<͞㍄}F 0;Ϙ<zV hoML 1h̜9ghr:z/Ep攨``a D<ɞģBKqjg#Wxuy}.JaMi'oϢ]J" H]04tYsƆ˖܉SAx~R¤Rݏ~/bs spyq~ `G:ຝ'J;syغm} n77@YSٴYNwt:y$tvϟct:t.=zd2MƲD$ZIuj۸|8c6 l)ͫ^111\2'Nޛ{q?^OUݷH, @DD$R~hAL|ksO"yf6-y6쒘ٳ<ѵI,~8x!ص;yaY;J.G^8>~/=> q L&F&fD a5 -ǧ/E|,(.~ :NC]]]X5kG}n*T$D Q0cc W#"8TOpp`&upYUt޸;))*e4| =.F}S3@DDI(5ݨ&y2/:e 7[ƗJ J#FCKV/& wb,yy Baa!JKKr+V`͚G7nO>賳EaaaHWTV\  'Ay <BbFa1Hru>m`xH8NGk{Ǹ时g{DDDDD1`g_"PzHOXzi55. c>r(!)@&ܯ܉&.2Qy|b]VEqkMQTTc͙KhM%@)lʧeQ( e0HHL`1Hq\SA|9FzRWwW7Ϟ㋴)2'O*Uts;pqv'""""" G[b,N7!/} f3d+^A!*ъ $De6}^TJܿ]Vi IDAT/E|,(.~ :N4s:NXVqx:/0 Ї< Q$hZ$P}"CeRN.Cc"MGmT*eXF^{<tem""" A^1DȨ߻:nٍ ?%q!D  F```p4H?00M6cǨ1C&cQBHʡy%\h {HsBc MPr\Ɂ7n|Fp# P~~>31eg?T8E,u0(ODP(`GO"$"wߖlsvvCY%!qz2tn}(b|4MQ6܏;*6ol'PGDG+@^;ڕ`~SF+RE#FD\΢XgW^n?T) n77@Y3cj(.~ YYYcA&ՅX999X᯼2,;{ $<]H7paRl1dlER|BF#drOD~ 8^|0<f4/ׇ."GB]3?ay"""""3%ųD"a"o9Wy|B~̱]~dPFGARBP|<ۄ?jS%Ǔknt(m. 6Wǒ}t: kxmv[aNJ+f#޾/8|07ndgCEqqNZҒG5X}\D$djf icoNax>tAbyax^DZ:>/7{?8.aːf$Z.IS, |Fwšc>i100 .] ?p CCCy\B>V*U>B wg$?85F} (>>Նw)cAAfAp ::"???,c3'99۹Eb$@?D}4;$-\q$;7H, iY "vH6<W74^ڤkՅ8/Mn)-$ÏT:z,*DD4m,]| bTdDf/q%y~صm.ZoeaGtџDgf+R[mU KӉAfN?ۋo ND4^E """",^C,y9#`1'cW,c!AR~< ~~ҥ.]H#c ǏIxNmjNE sVD۱8 @D +q|WǒbX6Al``p<8ΰc琘8W^y'luHSC-!n>W  {Ǫzcu.I7*'?҈^oTii }łeA>/4j^EJFisa@H )9 * iK]wruC :kg|O|ݙԝGT.M[z-zzrC/sK6\o-"~s XAq$X`B]144taxiغm?!::ռm:N @/yuwuYҗ(kin;{6 H,3@DDFq8<ML47IJ-[ (>״Gɾ2+-"ލ~^ʎV&2?bGp\@jQTT48xlV(** VX5kw?^~@KR?6篶v+w?8Gz켼<6dddBr ϋD4 $$&B&D4U*_S;p8¡|&Uy(ky}W,3ηL>ݽnfT>{z""ed7$DxOὲsNX8S4ڍ~[٫1?m67EɳM_P%~~?ybz' { tjn===hookr. 99 IANN_{啗xr|B huo&I+Z/YFxN2qσݾ:3jjt]|8CL 7  ZL=99߁sj<3Wjjjp 1N/-KEA}mr Xb!͐]&aVb-ص;vŜ  ̗Fs˅i_eb9{%:{V͛wY+My\_~9,NSfy$%o9*gXYZZBdddOngã|Ay"HNNgDD!g#W8ڤ><|pAx"e 0DDtֶզH8Rg[&:J*!Ne?Wxr?OPTT,dee],' 3 e!hZR(0YW\YHuj: χ6H0<_W]˳)eyʏ;pdØ ~?&t}&DDD$Zvi&W~~FN^~E6nh5>8#Up cg*'{D}Oi8zhDU_PoooǿaҥK~cW|nȏ}Z@v<;@j]s~ƒd0HHL`1n\=ڥ:=À0p8l6qwHmnbq$ueim\x>N.?8,[r(ηp,7Fʏ.WΜi҃˰lB]=x@8|~?O& ne1B{ N۴⫡ǃ// 'C%$$駯]V\*<OH}\6Iwpn7rrr`&,/+8jH2%C{DD7_%u+z χ6ER`x>Lķu?cݳԝG~o,DD:)|^&""04=tߺN? r19\VܱpOC#+@Gg7 rd׺E6O"6^]G+jw2؈@ pmů!cPظq#4_oooǾ}BzlBgW#*J6-CA&#`\>Q) ,k!"GšrN]ÄnjɅ绻 pkoKvx|_ Fډ<]RML47M[-b8S߄3M]SX;ohe$d$,_s.^7`IWRDɱyxpI A"j뻏Gtff&_[X466^޽;,cEJʵϗ۷%@?S+rjO6WXNRHO >!F2 "CeKqj0ax>Lgf+Ro"))ug&ֵ|3}R)o`GPY}=bZ,Z8+]…!""""iOTN 0,L4҅>α pלBw^_t|v)Cs O wޚ D!DǑ|ֱ==^=/BXưb Xc u{n`VҍOzH8?R%@ysl6+VZ=LTTTp!H 3 AD4A{KHuj۸|x ݧc]yw |>?Z;`NJ-'[gaˎJ8.Xq2L(J`~*̟EgPy$>9sR\Pw%iq7Z@8P_ًjyyym`H iY "IhІjNoW8|^Ҥ|^><|[+ ߧ>?(awJY.QuY""".C&b0c8Z׊7:,!)hn (Wl}ڙ3hD aRv [pt#NkBw]@%%),Qy|a|}#(..jo-=466^ښAVcƍ׽?] 9,gЫw?v&~v#;{**CtrHp !X "I[*ٮMW8|#cYwx\jsax>LT*%LhmX7H TDDDgN5\bE,N7aq {5s2K2i>pi4P?ҡ~5͛Yf,[ŚgpVbG7{](3s ?=Jj6+8QP:N hllS ؾ}{XƱqsHLLmwcs7nPZ:lI:!Bk[fGQÂةNlWF/6 77W~`Wq uU}Y8"ioJDBШ~JGʁK\00cog⬣}#YK&Rlp.sá)O[#x(F;Ȼ<"tR_g޾o^x<Y1JknG+Ǫ x`0 !12 "  wp8|d&Uyp1%O>!HDD7󉈈(ܼAhlqgV# xwƝnh\ѵ~H ڏ _mήTT^?Us}Gkg*w34OF KgIOOݾ:NliiAgguo;| ޽GEui u{qR $d2LD>3Y]+gM2=gҙus&fMt;!630ƨh:*E.*ԍVK糖kSRk]E]ݯ+զmGA^d^B]{|Ri4gf`0DDarS]磀 Fsk8 &>n?{sY@"""""YO@ϏooߟG\(ׇ! 4*l}<hx|WQرvEMGFF044t߹n[˲?}x?;CDm 9ˏdF^mPNa Aqoߛ|O'H&&Y""")F -KϬKϬ;—`H'jOadmX,fEM=ovzIJJ㭨J4j%?c^kP('z% 7jdfgL9DDt==q9TkYیOLb1 ?-ظE ""puL<^%xŇ12Żuq!z"1gh( oQۆBTW $ o{Ӊ/˶all,j(K&^9jj> o8v.1S8DD4GP 9%i4C"\YTHLLd ׿. g8:A[$uM$"""")&nTtv|~ ZDKBDyktbCGT;v]eSӻ୷ނ㉉}}];gHzkp2`4ntw]`ԶAuCosRmg7zax~h` GX8vzAO1?tX Nr\ 8CW6g>N{s^N=g}(ܲSY_cgyyuxuq%YDÃGJ?& /=.x|3זt^wϢk֬AmHM '&Es+MZ_@d3U<:Q ΂Zf1$ wvC? #eϜq }^:δ 9o.8{nAO1{j9 Aԉ6Ɇ}^d5ޜ'&Ճ{s $"E "9ZM<@7pZa;PD[(7B(fY%@Z XXE:irt?;v`˖s022d#c s#,w#""""" Ԉ?\pC &'YY!8tWbdSHK3?1rrrx!LMM!//J_X_E}DWÅqYDDD@P #3 , _^AD]/ g8^>nZvD ޜکe]󈈈1t; e}~&gbd‹nt?])板4rm9:w럑eZ:o& ü?99NAA###뛻7YӍ,=8 wW?s'"dP(y6XsKneQhɜh=" q2 >lm#s#(\h5 ќ9J\7]DnS2 *p(fzqy"HIЍw-ݰ_v=5"cƦ XnDR}PGy9[åo7==.XVn\}}}Aoo/MIz$а p՟v?yprVfsd@ =3cLK08#O\yx8Hj`v=p?3ͩ|QT9GvU :w_n(w ;3QjBo q?Nf1D"ԍ>y;cĔ!S(m6颼}HNBAP0>bd-m۰mE> VUcѣGgPWW+W۰J,_K>a I=if3SKNfHfdX}aq`x^\xCn؍Q$%ϤȞ.(<oqDD5n;:=9^)ƂQ.Obdk8D"“'Ȅ=rg/:'IǓSg$}/\[@<5^pXyWP\1,r:z˃Rx\.~PSSvN<0^;cɱ{>wPQ8IMBb"222xWJMKv9yDph }3, ϋ>0<GƖ96xtLs*[ FDDQ߻cp>GP6_FI`y"KIg. chlA{03AD'a 7 /lm#|݈ܕ8vC?P4"DulPuz^|W0ʂR.2$âo?xΚa4Q].vFEŏ 3QԨH0@OD$jY0 ,FIMKCJZ*F Kb{ܳwBSl%gX\^۠z.vcltI -'版bS5,Qdt5F&^ h&a˟; 8\Q ]\_, EȄkKe>'B]o*lݺ[l]R'`0! !11q].>Aee%G9Y|K;|_oT={d2: 44|W_}n;5c(zś7QX:,mT(|+-ȸ<8YV46'$ew"""""&Snd12.L$gO}+O}+g2ICjf#V7w>,?2e(ǃԠ۶ml^:1>>tPT> K<zUvϭ:3뗔lƉmعs'Z?艈ZFzF&#AsRlđCEׁޔG79QD7q^vX\ 9xGny}8چG6vq$"""""EJOeʘiI(F*L?qLzq, 4*&Q֘h_pybq( ۷oGAAyQWWo~~>,+l6l|L (**Ǐ}\LxSQ}Diiقog2P]]*޽+ -dP(yWD<4.⅋Q zY5!Fv4{8S''""ZN,htl4> ]+W,ǫ㑐DdfgqBAK`?'EJV}/ml=16:dN4ETn̂Ac1HRxbа PıD1n5]ʯ;FP% E4j%&Y`M71(O .gn&Q$\okuop3,9Nס 'jUXXGQTTIz:Uh4Clf/3jb(K@Bb"A V,e9D P3,^ ϋvw(?, ""k>҆_b˦'e $(<ݬ eA)xk㰤'2@ODp@=02 P}UJq`N6 ;m g ȄkKe)V]Duu5ߏ[b˖7܄昩ayvwMMK|fx|W_v9 b zM&QQQDDᑜ4 %?3'"#w5EL쇬V%6g>.vkYܩh͋q]Um{>F4ik|9+8G=!R26#'v!LL!0Lkf,8Z j%ғ 0Ըwe2Vg& P#?m;jjjPWW["!!GEGGǮT*QRR^x%%%S%뛆/3Q}.Gm=@e`H4 33xF""6eϜ>{gYmP>gȆ13Z{3QU[wed oWev'"Qc5.l`z"ZnD/no>Lz> ܻ>5!Pڹ]/ff˳]"ZcZ^T*?>EL9YCgifH4Pw?)--Ů]#aHz f$$DD2G<}aqcx^@y8 Q8Gۃ} c%,VÃo.wU6zú _5c"-]>$>$>Btw'|H( e %ӝ4rm9:wx"Z ш͛7%%%bu_^A+zk8F&jCՑ?ڗKe۰{H z-v|y>ABb"222\(F45. gX9AY<' bp`Yٜh"""Z ~ LLe?FH n~=Q4*̞a(V΁`Z—_~R*,2KJJPR9j?ss~ ϻ> R*p_?mz](//}nP]]7~(~刈nVbňr4 p(OQGDDk1",Egt>a#"= < ؤ둓t3пC~F|;|t:[oprL,lGs}{wZ4D x^4vUVV,۰kn\.Fmޮ艈Q(HNIA9 "1u:_3,~ K XKVmlNa A酉(6y}~auD$;n԰9;P>-i8PDD$[ Ǔlu `0{m93q477gD999Uhnn-7 ϷwbqA~ 4at܃@*A:wGNb0bsP{z""H̀Zf1bLOwz{:Y?c78SmxOphQZh_m:- GDDcj.d%@Rp ""IbxsmX:9sxa ²k"[lAqƹ*7bh$/ЦM%ؼy60o2D& v=c=ؾ%I[UMz1!xka '11-b ·%@oZ, (F7r>ΰ40;<Qfx{AiC븣QD%%X0JKPVV&͊"zc=GsuIiIg0坆~ GO@pLfPVeǏGm~Y'$"iiHIIBFDD=-rބ qy{jsr:ζöNG p#""I3t15>ap)qH t:-*);\X[կawN 9A=w.""ZV_ofv@b8f+uW_k(.ވ:߿;5Feee(--]7Txڻ`QկNà6g;=a>dbʏg] 6m*={DPFu(-}y=,lADvux8\q`'[Dy}ӈ$9<ۤ$`mGDD$1=~GZDD {eP|n철`,z榈v{/..^l:M%(++EIfɏev [(U+tq8UJT{O]03UxFy(--EeIK& dv{t^0@OD2Vbyx{9o%DV%6γERr2'9<]ѲY55 nM / =$Viiff.g;ȯ$/EDlz;v/v۶mǖ-[Q__ IDATb eeXdB~~~Dw9_< swxx7ZZ~`&@ꂷMyDiijVkk/à%''#lB`1p8}O 8valyy0Ŕ!0̩I,IAJ&,fONbN=źF-G.3OѦ둓+ s\ͳayt[.頂P~۶hnn5 ˩픗"`Wxl K |2<DDDs~ehY!;'BPŊHnQf+[7,(Xw-$sd43moDqF/~ Hr2;%%a4N@'=+2ݴ㜘{grs|TVf ?(N'nDf 223X3""%eZux`Y%F}Vcml>'[ȆYyY[j/kEo 'Efz*:zú~ !ŽΔwSQ $'" IV37VŹNo߾-",󅅅(//u[1Lؼy3jkkc45݈G=ȝrbʏ ڻz6m*={`2d_ab…ݻwEmA]U^>33q!k![ofX,m$''#lB刈>]I\99ge'""ZN"?hkCxwjkm9+AmD$zv#Z=1ObeX`X`Z&iBh#իsP\1lChh4 1ev***-<"8&!8&a2hp5 RaN/i cn\p>0sgETGJyy9:;;}ߺ^xouAfff_Ο;K}}~F v&"jj8( K$VUr z.v#wM'h~JWsj2|l=~m^|ښ>a'""Z԰?da}QM/jp_⾵kc B@ٌdDDtWM q:Y~{(]!ǁlmcxHv|95c; }˦'5_N{V :P^QøBAˢ-p \[0ORXX(*z&ZX~v9%ؿm`i㴶GUUC6\aڵk7>LNNFm .c ɾ3ٳ/3j| Ԥ6!q;FEϝJBJjjLUBb"222PDD4?uqyi?d?u [^x:LDD$Sw/?ezNmϗ`˦'ףϿR]n~t{,DA<<0H2R="?QTd2Q #H<==.yz{{o߾}ѷmoo#}d4QVV*/dBEŏ{.#v@EEEL[dv{Զ@#̩(~|=wB 1b^4i֠V3. }gY(AY$9tyGO z^)߆moBsPsj260LFiQ=Ug]ehff%SS>wZϓB@rJ iihyx8| ϟ:<ń W<wd| _Ex>f`mlzdpD$9 cE?ĕ17B>+tH'1X,X,ZXZ-7,tF5 )uN[BJB;"TW |L٦M%سgOLaP[!Drs ·8._F=kR7ze4Z=Fsr>βt1Z&\qiifo}_yصk7w0a~~ knl6c*+gO =ɩ[J%Urr2f(<"OOwϜqe:%>AiZNxP;r0tOٍj5qe3_-`yn3(ZhGs?;5;K^l4-CG=,HvBqZ" Zzgćx; p(Jadd  (uoݺB__z[2è ;v,MS***2chi2 ϯXBۭ7V®׿;;1{rةmχtv(ݲ]e3/<Dk9oIIIAbb"X;hooGGG{D֭*b)(++î]o,*]^ < &P[!**v3a4Q^Cs? 1P6Bגi^B $$&r("hnTCY~ /0OFp lG]孳gQ$,"^́_kz""Ah,Bz EUsA{ $vFZn6xP*Bzz:N';BssSֽuVnTWWYRu),,DEŏPTTسrصk7w0lvՐsY|%@RdVEyV+H3P*Q45N gY A[}^NOx>]O F̠)ãw _`C0uT"iM<8Cu29T_ ǫPAR@TB& $^ LJ$ ׇ122rt:#jwۿ}G2594cG9~}wQTTd2rJJJsΘz\jEvҐthZYW^-h4H̀`GDDyx{9oexb7z.v#wN7.ջ{-Yln[́y_HlzJD]]cj&>Aa υor}znxqqPPeD?_ {|3Ke<2#J%RRRic||<55#GB}} n1Lv޵WTDKˣ%%hoBccli4Q^Cv_] tttc7\NKKÕ+WoW9r6مC؅^.سCe1HZ83#b `׮]2;v[53 w\ٵǬhsx ;J Ed^̰bl D ȀBwh}$l>Asy OhwބECv6Ϗ K^Ѷ lc!E BQW^ŝNovBMDR0$ZrVcxx)IlJªիmr SRfNEDDQpPL}eyax^xC;ሇ糲ѱ]襧7l:v>8J15s M,(DJ% qZm|7Nϰ$zs.ow^Z `}| C57N'm6Llז6L&0&''J)/54 dONNb׮]+L&Q^^[bAII JK`d7P|( r . IOU5x$Je>ڙVXĤDFPܩ(*hnTCdybx^VY}^N #z?k=>1 u;X=[y~v{'"Y]seY8"yx~!uI MLMD mn իT TJ(qШgx*8\ז3 Ǔh1Orvw8TGkbf1LӋl ؀Ac vO>i@mQ ooT"Yuuoii ʃvF<DGR?F#pJB īTfCJ +VTj52`03QT}9 peZ%A[$}IC :!>4>mN [BR; 91>SBOLb1TLӊrãx} KlN*I^$ǹ~hͅoS+PWAR@V-k_y )jjbddMrMvX@fa SWTDK buO m(**fA---.!(o<sx6hrV3l^i \贚?&^@ xotW+ī^^tk ǓX1O4?)))HII}^]j5vڅsgZZ-*8<0`Gm(--'J,+JKssrс\.ttt`rrr^+CV ,V1 ߉tvvD Z/YTa0ffn|R8| ΂Zͳ845ryV4Yo^}degˢ G."{)ή<D$nwa'"YiDR17V3H$fUӀwOVBN^Jp|rW(HpY'm/8ERrrD'`h`P4gzqt}r G,dCD~95#"PԻDDR1:p$ DpEEELXv޵۲<-P(@GGlw}o1 nHf6CDD$.Ǐpy:/c ˘ Y8kDE~pw Fь]alby"i Box.O<M ]@$*Vx"IIIQu|Ȯ]o ?mر -X<ʸ( IDATXH? D7Vb(Z]O Kβ|1drr?N|L *+d&'֘> ao<1B1kX"P(@Bb"ADD݃3g[|SH$;@$=&"""qngXypz 9ٻ_B=$@ al7N`q3c9q n=czNfu57vf39GIgzΜ$5'qtb$vmbOm#Jl= s[Z "ǏxbLܼ+yUUUn+***zCa5t9`89shhh}1X GG.ADD RN1<\.f IVgKx>(Bws[41{N4IBeba'aDd(E0||(Rt:z{{c>с{&e9qDD$&ǮLA(L kj:G| c @p<Œ`v|>jnT*궢Oڀ[zj56n6A;~h 6ɷ̈́l'x]gݚ(ҐġRdQ9d; OCUN ' ˽l6molcP-o4> f.;<l=YmtX䆵!y}B. GDD[| ϓ]˜o +2p<D$&Z6&]xё0surMfl6txhmmf-Wv/phk;ݎq^وkbҏ? dtp2(aRW990<\xAЍadfL̬,'p|8žNwwuvOB|@!F$_jjjPWW7NCC#7q V} ~<_73<欳=JBW76dŘJ!/iii ""JXl0? !n*'NH4<ߏ~F4#W-džGVU\.8zDp\f5ߑNlcOlE|[iGlZF0z)/B_v8=(/o{_yc~[\8"?}L&nu[y"",yNfc7-?tt}>>cIW]=疈kll@KKK?ކ}sbѢEc77B{Iюd255~իWcjo|ߦWeKm 7NikkC[1^`Gv_z @e99tHIMdQ;w,:Ξ:dO>;!<|r=!X[_c#+B/P#>|;'3"k??,~>n?woph~ǢCBps;|\^oqnX ^t((?ve cW$>* P5p9юZ)}e }7NFq\8{C:t$hB2YXZ,OHq(z8.yBBON+2š sk Ҡl>q8'DxvLTNx8YLNN.ͻ,ʯ9Cmmmֿf3wvv-z'x5n'{O (ocX + ȗj6Kny~<n ܼ\hZNIڻo-!*''vH4<!<>Q w\ٮ·~{Q_ybтELDD4cYm}Ca uO?#N~MM<^? 4O?}G&8A$J& & f&fi-%qqU^tڵka_!1mXm'֖^\P|||^W'vl6[dZK oibrZT+㭜pyB^NIYGCrwrIrͦ|GB7fB@ϯ0-s?qo`("Av6ׅ'7ӈͫ .|7%O!"";0%OY^,W7sa5 Ok2 oDT^^Z TTC0ODUUMx>z^f7TWWfsB䤠onޅfQAR{b6ϻlR}Zzfzhk;6l6nPrg窑=+0qrTZUE8tbTӼg?v%Yt GG""J.~7`'W9y1<\.E!Jq|= hL}п;<'K~fhԨn7kuu,u 8=Z0s(Ƥ?HL I]0 A2cڵp#DDS[[֖B ~<ư ;v4iO>~}~->/N8!߸۶Ջj?ijjZxd2 n>,(di0C G3aQKM͢jN%C\QtbxV;l3 YYNwa?ׁ7v^D [ o=C g9)1;x7nJDDDvngDD1\ sY3y~j:G| N"pIAUUU . 2ODf2Q_ [Ƨ =5lm߂vB>v8/bpp@D1ތ~;jՏcVAxܰ> ̶c13m哈NPZ5sw7-ÏFun>ڎ] J%'һoɍ$r?0MJq|N'6"3+q/UϿWhy-"1Fg_XMB[^>ۅ D-0^8ttui$;0\kȄi|S^}T ,/t)/ QMfjn Xz5V^E]sٯq׿FQ<!455+d * C]]uuucGST/a wvֆ}lؿ7L0ԐgBv_( xߦG`Ϣ7-%dtp2(i;s)}+' pͫR܁'l|\.} 6RNgFu˿dgǽ=4zl-dxHpN!""MLEGׅ턈#}I75} _P ?} cWMqAIT*LC&?(UW?aCgg-/:xy$m#sݻ[Q_M ф{f7nƶm0̢LfTUUゟ@tNol vl;gki3Ժ%ewGkϤ;~N8%\D"""Jn^{]CU& ̼!h88s!1пHrssa2fbҥ QR oskokkcvQ^%drr/n T*ҀM55ڂߟիޟݻ[QWW mmmfvKq~v=߬3ԙLN]6m֮DeY1'BZZP* ""Jz==8{NCnٲuu[E/55Q_+l7nFccףiUJ \5isK u 7F->izcx+'$/;':)) """ԇy<ݰ ?GI}>H-cn'&4;xd70PQ29 DD1604 'DtX8qKA>>'c+SM{e:+SDR 5pr EDjMҌK/6Tk& lq*>z#~@EEF<ݵ3Ԑg —f2Oai?;^6m\ 'IR(7#-W "" /\\i.lz w8>Nc-?(>{?<] Eő>'@De] ^e3dZ`s><.1yL/y~`x00< a4)N&VEE%J"X,dffBP 4"" Zz5E1fyuLNN>nnޅfQ[":Zy FF|uu5~0' jsa6UbOZQƮmڕP*'HKK!7*ADDt_uq'W!q?&I܂KKgn+|JBzzz(,RDDɤf3~쪪*Lfэsv/Ç}6?#; +< oiie`>55t9J `6Cc#KgZ4ǎ_?}N)) "":?`;W|U''C+%~l~Fu SS$ IDATyP|! utl~O+C>Dh) X,V,ZlWb5 BE '(ɩjo֭u ~,JFQs||>?q#qc5%6͛7A}:;;v"~dFUUv/JKKtAWRsB uKp͜4 cG`ᕧ)&TkL&do-!qܣ\i bxnVR}6ɆB=:ylh5*I|D02W"xML |-Z 3ayKqA'qZ 7 Iхq}kCZyTTPB@jj*'n+hBSQ{^MMM뾨T*466q ?j=Wyַjy_|1cgvP>.OȾؗ񏯟6~g9ٔpRRR V "" ysԇYϕ9\.fB)odxsXZ)ud }tϧK8~&b0~gkҘ@D#7/H~̲9mydjT{PPKKKTWćy`80AyB֯*¡ {W7m֮SB^N=ۘ<\.E4y `-ȏXx^Qၥe8t=nsyy"""17Mq[ g 5$p K7K 8&fFy@[j +B- B1'0ODD & ڧ@z`ahz:%si˖ZW2xܰ444z#G04oPZ K uJO=θ19u-jyJ0.gDDD$ Zwrf -\.NٴFЍ ݰ..Nd }F8?+9%7[>ׅ?|TT TV.gKMMU>55 @DDzCA`{|[1`9L&444bIՏ M? YY:x< Nfʗ9)4|wr|mc׫9$J)))둥ʈ8d; ].\it' x߆٤Z` m8W8Ċ PyzŘ>;@D囘躀 - V)a)4"_1fr8^jjɰDaW(XX(WVF{P(Xh  ӹ DDx;7nFcc#juҭZƍؿ&~6> l`ٰo>Ii%Ys4N ,PRm]Gشq BjN@~ԇL<7?obRsBʲŰCKnJdѱ^ĥti඲rmhyvX^R!55 IDD1 @[[nn%[lA}6N-R+8<MMM`|SS:;;znu9J uJYPz$, O[W6mDzWxI1&f:{4ESBFGGqU (P(P(DD}mqJӝ0n-}a\-amZ`V +.~z9qw k? O?DDDQ604<'(o;|`<]?ObX CAH_zvӿs#);po"IBPbb"e)bEzz:Z-DDS@.|v׮^N H_Jӽ0R }ʗXKcxXax$$Ѽttu^86遥()2B 71foA)c,ڵMM!99zz LH NVVd%!IJݨdq&x<п%[h+%_j@i: ˧ՆUE8xKqd{bY%0 7/#<8IovU|@Dg[?tpi>'!u=>wB?$>Ş~r=3]Ȫ7m?O Z^b~qz#$-n] 9ۆrY[st|ebX T;MLv>5߿܍]L tAW@x>UQQ-jJPP-==:""b0" /Pmm-mOм<>p_)1@!K㓀H4<=m|he7))(Kp>u\^y"804_ ϓ;g`4R'Z oGyz?g`Ų2u؜FXBGW76m\w˿볳"F(-FeYq(0Z93&SI<}jT]_:edd˟Sq  @Y "$hyy7=j6xAcd$S }8ygŲ2h*;yz ?j'7ojTO+,<U ͏R!$ob24{O;(fE9AyKa:οDs]ڕ]tdFZ` MKޡ;|嶍7?,#]܄kdmDH(||vHRoi,+ܰ,/^]pn돴py'99zz C[ nps@~ nnDկ>_644Ǐ'5L8x"\ި<\]~!ZM:L4Z-rssɈ>8~<&?QJ\iyd}5ߑ~P=QehyY4x ou> m,//5Թ.t {F\CGc| _dDD$jgo(,QAK-p*86_r.'&&E/6***GX-xrQEAl634ODC Ɠ|ŏ~cN@-hjjU"'}/_?x/^Eυi2 %1iii3gQqY%$iΕ&pCyhǃJ o4/rZ ~d :n{\WG!3+$!)))鐣dѨ<(.u~ N4 < r/J}>a{ GVU N&9B~)A'>Eobg/:.n'¸pQe,[ KA~趣?٫ , N4D.=NςBcCFQ>ƋE?'GZ/!##(,,Bqq1&RSS둟 "z6z`ڎ9I4T*Z[w1^MMMhjzEfV10ODԺ%1i..uq1&''a #dDfV&F.DS yHKפxvhEPpAb,YZ].(Wbx~Ӂ##l_1пw({Pi=}gNue|hbD$PGW7NOY+9~RQZ<'(ϾR p 9yBMxʗ\?$[Fxh#U``ۼT $"b0(v644Tr?_)1R,3qh>d;{b-$M |$MsQ_(bػo OìJS\>Oh-ᄓ IO?@v:% FGׅP`~Ǭn G:^YVFxރV,I;VW{siqٙP*䡶 z,4D{̩ժߧoXz(55%%%P( "JHmmmc9y^/:;;9A$YEE(J zzXEEPhǫcO7VU_8 IDAT_I-4ȱaU/ͅN#"QDE}a7Ή4rsR8"e4EBŐYG|r_jS >YB?95%qi۔\L NDD1uM>MqWR G#}3KW*)r<#,(y=V86<UަOP yP;|Zz쑱qpC3Ay^Q[ C`) /Gg^dXMWFOAƱ718OD4;?9~ nnDP(`XCx\8 ʇu=:yY%'м٠ƆUEJ Yb"I?NhGqtTkL&d$rqy0e&%+˹DD1yax"RC-ᓹyG_Мm^hI8 OL%?]欠bTfYPeabK]%84>04R!k!W:,[_#8'B'#DXpTICaDMv@xJ6`<,]hAGJbp^Dg܇5Mxx-Dn?G KDJJ rrj9 ꁕ+qA\z5dAJB1G?hzRqϾJ%4 F(Q$I.6-)`}o ݢڷ/wDDmg/:.ܳڵ8 }r?ڊݽ/Wv|w4)elq($w,l1~~Q/V9eep420IFjj*8DI`|9hH&@ >тϘ_xIJh^uK4a(=n ^{6*s=jHIIA^,]'CZ-z8/^….5Do.*Dj8"y"aHo4?xG?fBODbf-$мC] j}MLo=;l7p*PP>xT%9VK5g /d^O3z_~rQ"HMMDIL[[y)z~&o VVJz/Ν;m644fsR?_̄5ˌ(-U(1޳wbrZTGpJBшN i)@"-'%$iΕHax"`0?¦9?kjTpeŰa)ȇ>;yxW2'?04RYL-825*Q>GFG!t NQ9hwD{ٱ 6=8oQ_BBa* ^nNßQbٰʂG>c:َM|o4T*9IFT@Yȉ "JpI:rjS0D;>-2)))鐣d%$iJS$1_bn?t:Pi=[艈h^:ug/N/$8Nm_җ_t_ga {F'+hBȜ.a'8=(/n9D"ˑΉ {c;mmv{B$9fN?dp>Z[[А'J Ph(lXU?\+wĚBD1ii<HJ:O>)oZߑ>bmb =F| (/4,+f]ZQ/XR9YA1i& =c`hxA iw"}\hR` #<+<70$>#c%$VI c0`L&ի(\a``;n7KVBףrigڸ| ERě@d IZ%7;}Nq=uBoII!{&&}9nsljc%;#Q" ȼI@#mfH37H;wsr")8ԄhmmUܾ/`e[b"J  %OcýyC$** {7"""Q9$IlPa 8?>ω  E˃@a`/ "Z1#/sIO3?OF3.<ڴ;<#o ak[y7(20Ofx]f<@LuuuXvl6O~ !y.^jU盚PQgC7.]+3B ",SL }q8A~&""zŗ"al'1S3bZ6CvYݽ15Ep =8,*.?ȨGb|Lp N`9qN'{9tu9úOSHz־,UCwW^1<8[du$Nn!f4"ՃADDAܟ - ϓ䮴Ͽo:ƑQmpJNI7Kwbk/c }OL FØ̃p 8{BCJU;+(?Nu;c;Jmݽ><>ʾ>?܃#B Ix^5ub΋$91N734OD0/7AKAvg{FPz DEG`E*Vsy+\ak/װ>LcyC(¤J23$U,3 bgZ2D5 /tf=հc+Poq]Nە؀\S '͐,z=9fK|2&''˟YjS<y֭[(,,DBB"2M٫VR}ڧk}>_kjfE(*ΓW"N'B| ־Jż'24ODܑwIswcýy)&&3̲IDӂ>D~/^DRRfMM`0h!f~Z'$$ hQ a616&ϟu5 -Zh\t O\Î+kP]]4#o/¦M"|;<׺uPYGǬ u=CDDeM6^=gI0k}Kƈ(bZlS03F,^l$n}l@||OE]WV{AqC裏"n.\p۱s3vӉ4.86燳@`'kT 3KZ2Wfύz*o񥘦tH fHtWP^'4χ2ܯ9 ǽϛfDWWrssy0f {N("GD:u꺯@{w2uk냾_H|>f?cYvYp !g/\l"C1 ܃dnFnjhhEtt4ϩuD. . =s̰,ٳ<|5%%iF#xuH&[),pt4V+[k||Bc:O\Oge\_U94C2lK!y1AYẐsmZ a'N |͜jɀNN/bg.i5ookkNU?xt݋W ~DyQ,wq4C +Z[[ ^x<63*abbBfN7sgUؼ^oHZKJJP\CQTWW~_Z H1#/s}##9#r:L&"""9uHZ SXDB<ϫ[GL&.'!BF5y&>SLVtZ ɸ04"q@xX31- ɁkbQ}.fQ\ mwݫQ[ց}>3 hŭtv"Gw$:8< f3bcCwG-`f{xRu L\t7<>v9QS;w>q9׭[u\jk_ݻey`%7.C_DD2sr$ySi|TT#1)'[牤O `qo84C2i-:{xB)!`ؔ&x2Ԑ㝘tDEG#"":yDcx&Rq, W/^DDU?Ʀ)f_́&oQ!o!3Nx݋wĿot+}(j/;(ںE[7%DoLMw^{BC661w C#ccAݷTE,4LN ~LWft^`0 )) }@ hEa`R,a?04O >GPT]5cz?VUUǃ*S)4$j}2ܵ2/H"P:ǯks3[RC_6>ޑ.Iz{aP`ZŊDDD4oU[$ V SU@-vtw gi.g[%[z9&Rc u CDJe_iAb#E׶1gg5ldHFXzO.hтdZM'. Wewݽz"bz|Q) {n.]مED`8TTfh(iTUx>E;>sBnP^^%}-–5VlY=g8 ~\u织Ԍ]o_n$<svU磢f4"? ;Z٦pbx*RY|Nh4}A\^އ\[;R9Ks??zD!&,%V/yŹ\J%x^2oLMvn.݃[U#x,te?z?xt??5ϼ =sQ+9ʖ{n1nam}ALN}l}*>--S_s:;xH5*TV>1Nustfb^/_m#־ݻw\nIέ2%"BDC~4̿5spG^$}Frrf,J$""bd6#FP+ىMVK\b8\yILCk ]ҝ(3{Ō;W+$<<7"Rvv:#1X`LxcPB~a#"qAؿ~Y>qVE[s{Z,13m5uI_,@7,w4X{ {~8_9SgoZlLC_٬FVnas?pAyD Qǽc7!ko׶&>󱝝9w10alld@e3Ub.\pSٳX†M6j*f;2Aו盚P^^K!QW;LpE)s ku:3̈U(8ܟ `ߋ/GPe< $7o/olG<"R8{^;܆M /;[~nXsi5jm_Ծѱ 3vFuTz1+ݽB>)`o@zVc=kTq-6 wvvԘY&dnݺuB$$$2D\638Ԅ^ˉ.'ꐖfĺuk߶~x`qb;@eOx^5CAFtjl\w;bcU^c1 yoDrk׮>w5?OHHgIdrkSuuuCv۷aut焄MMMhjjgeeb[%EE/7aoDDj1:':x1ު ͐wڰǑ{~5f=. -|ީv5E֍A''O<Fv46199cPSSlڴ ;w>ɹm^[X}2NA,Sz8؃r^ SSͧ^ ϋ9ݽX{ /U}yE\,$"yΞ ěLSAp|N $/X L&6AqC x֯_ay6~*lp8񠵵UcDii鬯m|sSĢgϞuγ8jΑ:9r?0EsPmE,8QDDtCYh?q)]|TTҌFXvGDDD/audyHiomt<}_ކ•6r {`z" ږe;C>8V'O<2m ڇTWWȑFOC~倠̔ek8cdt c^/.]O.ނ=cj| QA`,ϝ.j1 ^نm5>'gOtO,y:092UQ[-())eü̜Bׯ׭[wsVVVVAA󙙙p\.'ʾ"pXZ5qh3DDD$EQ,0G""" }/ d<$k>y[ܳwYʼn"9 v;{~lB/;[~M>PxWO~n6c 劸+_^o8-i9aA{>q3׾bƩvQbuݐ31P, K^ܽZ;O6ntZ4f5hF"66+cP]](-6JKKg2455I&߳gϬ־^qϷ{ ޟBUf[I'% D5Oqi9pDq$'яfax IDATYp\ϴ-Ŵ{j70B}aiя/E]Q8Ay j!=6i5H3$ȼ=8, ,6~5[d_w2^$$gSAmn*66fMм:TUUIbdff*5_l& x'sNpD\8Y*Z,DDj"whYTeH ˔Oz=LEbDDDO8#a3Nr<ޕgV8GG^i|qjN:]G->쭪a ="04rvCbn?~讐1^:m7#U {pXpYi ڶtZ xA NfNjY\ j1 ~ڱ`j9,xc`ϦMojf[1ZU*$FPۖ PYxZɶ=Wk&j[߾n[b9v8K> MhٌTWWx/[W "$lYcEݱESy >/$<(N>{H*[I1'Eq]\aFLL 'd_VpI)'%ņ{7}nJi-MiE}Aٶm'`4庆 _.58@t;-?d'] ݽjGw;mZ̪G9mA.K2wpvvqV~GQaTKnNT^j͙6l<@"zdgg34p`ll,dLu X~=, ʁ;dg7madgad|]B㭖 } ϋ=GFwQKZ?r zLy,eT5=R] O7 Ň[ll,f3 Ԣ"4Am&x<8tHu]wAݷw9{=..|w)Ğ=;dc=6ODDs&ܾY 8r+~1t0 %"""iZ"a'%axJ|ߪ}8oӼɹAنh~3N+vm jݫhY_] 6SSyn mҖ 1NՒe:,)b݃ÁZbLMu|Er?7/0n+t ^j@Zi4l6#::C%pIɟ{xU$;;g:$ɘb11yYq@kk+Bm\xccc|o8C\Ȯm>˔]E+e""" %u?YsQQQH_Ĥ$x"""~L MJ<)NO?U>bGg{rriBK1~vE${[l:k3uȪ]_4C G)}f˜,bΏx@kGJb"/$,Xz븠\C Q(, `fd?ڰlz|{pI7]^a>_'T`0+&+^o~x~,,I15EDx~Qo/ C-; cjʌ6dX-2[ Njb櫳UGRGZw6<L-݉™ܓv568)2m^jk_yx Uxqq`ZNd^|)R['%bx)R;;^i|qjN: fw(Ǹ\6gS,Di!c [pv#{m|a^.ztۘo<;,(\L8zbR5|ﮔa}FEńŧXՈ fAԮ`y=Ǵwb=kd=D=6c5ӹ?^ ʲh4"-mzNu M C)$~zz: ^σBR5@ii鬿WV حG'DͼtD bk ֩.Ipb(@󲬬LVmEؾq1"H9^= ĥY_;[Rh [ޒ{^ۉH1Hi[I'%V :T<-Ȇ{7p \I!9NTb¢RFaTȻh=Z2/O\:F w~3DsFMJvW5{ z\a_*Ӌ3Ș&^○c@||j'r,f~b>#&'5=7>>916 >?PHi4,]<*$y_OO?ŧ~:w4֭CffVGTP_K:$cகke&F8x#BzAe3d%$^ݱPw织cǿ[w ?s򉈈Hzq?Gp+8T ϓbQ8GGpzmt-9%E-Ώ{2Ht9""6.%_0(O15Ep{p$ycji5B[ȅشajb+쟝eN15dX-p|؁gw/ X-f}'c2}D*JQ<qիT{\㐳yY@d$%%!;;fudλ]~~S6FTvmjxVG6^px^{[G eok<Ώ{UKZ?r z̙smH||[;B`0 ;;B\PXhCQy}GOO 66III0 +&ضY_Ҡ_SS$CD? \ lg=DP2TVy*++gO^l'"\GNw{wÏ$k,Sw(ޡS/Z>8gGZ?l+WnŠU+bJM|46)í1oA|gG&|p'\ p%3X{]x2HODDHl'cxΪ}9 nDrJ gB -T|((SSDGd/ū=fffH(lWhx=8%ClAkboWlx^kff{|a^5%['jh%Z֝Ш?Jyy9 QXXk!allL6 ~<{y󖤠XlPx?wqDmnԽuom lv6o/""" |pnj!x3NJC@Jz"a8 n/}p,'TcXč٘,1riUm#1a`gw 8۔#bB94 C#E'b/sdBOL|gZ O# 4+=qt ݽ8q$% ~sm]v{ |?$Ik6QT=۽x":::҂>\|)sIв^Ƕm_\|[YA?! El~_ K8JKKxǃ2&8[y߯cp#$Mh-ó|%&ʐ:~k%JM?(Ȟg{z\9tl'MŎ,SPɹ}y5(RQOčYB KD$ܟ nRqnKp/7J?O%""Z#e~/!Γj0W{[;mpv :w̹6ܹ2?,ŋc#c8*m[gOkDmA 01qyCru8@EAp8$kk~a GsIc۶煒upHݼ%QorVV>߆̬y}AIɷpIheH@DD${ XwzYY)k{e<ф'bZW{|8EŕUMq[sI2-E5ڷ#NcoիDA y7߶p}^ bB+5 ~]ѯY1)Pj<~QOж݋3p)ǕT<^nr$Zv}'))!LNN ---d+\ZYw89BTGL[XC_&.4=Nccc(++ºuke/g~Ty""RuwnOK(7ŗsvt|"~_xaߌ|d^r4A*)X n^$1N}˜x :T/v۬־&x(,,5nз[$y&߯ Yɓߊ(--B D ~T7.ET#5Id5#. LDD4OR Γ{|T72 N2I&d. A@mgXۧv[Yyit mmU}}RZE-dB&i@&r&d sI0GH2dNrfzR~g.s9Kk2b2ddfrIV#-ًB?<Č,.B4{p IDAT2xvK VMjxRGDcҤQ&,{ؚO|E|I}xnvE1?o]r=߮迓O r\_Zh ljP!9uJ ^Qp-UU~I8Fl㖣|[/dI/ovBWϷqFTUݎԋ7466bÆI1sS+φ.)oDDSiZh5|:Ҍp8<[ŜO$=OO28jPp7q)ְyb]Nc}`I3B?oB5lhrrOXr%ey"d"x)V#_&񯉑&v7YE"EϗM1w̸q~1Bcx! ]uMoO5 /<)ݨ@DDdxZ+NyIWX Ndo)[(,rOX K 7PN|"x)G4RJ fd9=IȉP䨜}oo//>1SRR.kd9^kSN*߿?N"<'?7ዝ$,+@!M.2YN< yO_/u//I s[?S5񋍏GDDt=WK-X<,Apxg/ R[{|xanB.,CVQJU)+I>r{1' y>YE^Ɨmv5>Pdh| ֣_tE|?490oN!~BuT;imIQ#[Xhynɓ'xq1OK,ךDv.|c6UknIŚzwH=F2^gu=xu N|{9LV VumWⰷ !oaZ 8[9y/njWH }c ;mG(R̹>r '[JdhIxox;Mm"0l".;&,ų#{Q^_ ֝BW:w{p{`ʄHzԆߺS/ [hɆV\d"C-WMbFl')␓]<3c||HOOdf1yU~yEݸsRboERقDDNT;8xwEqsrPYV3aO,+^&#: α.bpY40zo^ J9DDj{Ul+Nyil5^X?MeӔi߹ml9eHJp&9?'ĵa;,%>ܤ𰔻h?&/0EmvElȜ _(ܖcůEqI ǐ))`n=jC[$'}৿z^&!~.h0#' 3rA![Eȶ0-^Dj5;}2͂S,) ؄P1- a4FZ迻n I:G٭t;&}:4r+YJ}8<^J&Hs}pʎ{ ߿CX2YF{ؚ=t`FN?.I9߈e P }'●܇70oN!"0D>pM3BSS'Aǃtttp2. G{^^L^M&ȇ絚xӴQZMlt=i5wʱy {sVqߥ,-W^/7>\].lUNU9xZW:-J/ Ka=jCŲ1gFf;mW>9p|1'ƕڐ/|>|>z=L&T5&YyBuu4Fc_wM9XS]NDDO"ϐ _N ;1Z-xtCQ^ZMe9bawy""R=WK-]'`xTCMfX%hZ.<)["E׫`؀d'm7J:.0y)Vc\ʜ::>]Zs3dTN{ܙzl2I"|QLk8v֏2ܗU'5axhZ7ڤh%-xKu^#-o?Ph E!|DŽ8@)y^JH^إ4+d\Jpۼ!+&#h C6rY}N6|qǭ˰ [ y4e?ۏ= |> bn|r`ɒ%Wf_{mRRR=+VTa˖uMMM?ܙ.V2[]%%͉b.)^gd9y痖W? cii^31k>bٳO>X'=)eߋ65rʎYE\xR,Vo܉عm;=i>|O`(MLKf W|*Hi'䞬BMB  X|qaD>CxlvI}sWXgzL G[;(_hb$i1#' 3ra4d!==x)۞i< ӥL?f ZŜ'\.x<L&Wcc,ǝ=%KΊ]vbw.WH,v's>1f旈h*>KbcҰ~KKٲˈ5եB:,y /r""9{.ZY\uRI6Ayعm;S8)^"<Ѓ8^zCŜH e p2$%iXD8 R64}p`h4mϕ?&u9n/|^'P{~k8<ڛb2[q`D1Ӯi)1?[#Ѭy[zz:8t9j2<! &B34&55k׮ڵ&}N q󯍝p s_Z:MQJp~BZS]Ƿ/(<?~ʫjiF8Fl{p)*G"#3CQv17d H"9S$e=Rە@:ۚYJ~Ѭz-{$=lv:^Ĵi5@,([\o/t/x)) VYf38OW5Ðc6684&?d s  ɓ8y$@T)B3|>-Ǧ&~RXr[ZfvZM4l9(_h[?5i`υLaM~w:1ǚ>qm6, '. -y˃kj`9c|_^w1TJJsgꧤ}ޔVSF~> {\3W:8c-q"󔮯)' pVY_#TVń{ jPp %:Z56x& P۫5FZKJcxsnM'o^J̛S"Aj\ysI\;Ըq)c +x^{syN+>DnkK +ENIڻ=p53i^x :- FKLLD-YvqكJ NUx<h4F\󳚹P?ܙo3EX}<dkEm0kߙ4srz:Dpq版(flif ϓ sɔX?>P8 OQ-DEJ֎E|`5Gb 7+g  YϒeSUDVYdʐXN;;F_ 8{)=q4(?ωy1#'Kl6TWE:OWSUU%Kx>`-xG9 p0LQu:y~&1 ;n9Zm,ZM EDDD1oPp{\uR3牀{{/~{uBO;9CVDŽrOiC󩖬Ӣd}[2a).Gk#Y?dnQح@E׿>3-y3r&uHܢѐFI6 23oN;;#z̆N,]&==@cZdlǶZl#F N< ш8Ş 8#~l>O&:ڵNApdüy%XnL>Ǧ&yb`>Mi|蜬3'?rba&ܙzɶ>7lp3B},-:1E'g]6 &:DApd{b}`ދoɅzevuu(&~Xć; Kivu(f^U LXg?D=|*&[wœ-jAFZ*Ν;Ә}6 "O|X)рxƨ[A&DW3#'[l6i9 4Uƍd9~c [nڵ8"|>444`ƌA\\"KkqwЦMQUu;RSS%^ˍԘ~q3]R .Q|hHiL9̜;Sm='|jl2uQ7́>M{Hh'""5 W\u"'z ﮊy\qz#-?ѽTVH }IaR<+J[|z\i Y{\YhSg{NQ:'pc] < rstڤG[g1W|Ap~|֐d\3| ^Wn.ÿӽx7?`UEEp睮.#-驑oohqri)\wuǯAmANDhjjmuuuf!k׮a׮d e:.DDD;SG a kj]#-3@ODDQpl2ӂU'ŌYEXЃ^xgbk~3VQ$ȒzImUw{BMvCaŜo5RPx^y!8aυx=|DGmX̍@ؚO֎Voc6muZ0豬TE󑘐<]; `L%pH 6Nx<FI{^S1sr.A "11qRe,?&ىHB+"BX%&FOF98;y.leyK0Vo} O1綯VԂvIVurE&GruZ֣"rۚp{D Y9s~.uZlQ&3~NiFN4ExECKtews'`ppx<1cƤlf\H:G9 jyHJԈ[-P(jl~)5 eApNt1牮lw0MeS1*ۖ##MjbcE;QТXd9(\m튚IwV|U!ؚvm5g s?saPfJ&[h<3stcvwr8ǻՑ6=wy>Oڱc\.֮]dN|>|>zƫO1rW,\iiiα)֧}/7MBtEoqֈ3gEuoPpy+bx ɔ2a;~t/b[[Np\(RK,CQ5+3,!>H9-ųڛ6/ ho-!nEոـp8/(ODD?ǖCMC,^<'&wH:,%пuO`Ul'Q4G+[ΆEQdn).N@0$q֣6T,+\[wN m5 +mcT*0GGZlM6 M"x™V+*() J֭î];eiھV֯<s"񠷷999{?p:y~63:󍍍+--}tT;[\}#Mph,{^.Z{ZDW<j2mQ ݹm;SގbR[mxnГ(ɺ}6deJ U;ҕ2@07%sm)d b=ްv3i{]*%Iax冷qq|h(nhhF;_<3I{@ 'xXn$''s&hhhX 8e9׫`4 Z[[`4X Ǹmq z1#""X|mXy :#߉"]y""R0g]65 y=Whl ]f C8^TN:<)Pٮ9?WtC7] o0cV,+Sܔ/^oϕ\_~G[\/π!+⢋,ɺ$8*r>}h9ݎPh.p8Kklܸ =iRV<XxHxn5ODZ jh*h5(2,TuĨ]"""5SjU' ] 8{MPx!n,/1a)RM-sQt֡ȱXDÛ\|2{ȸdTdxR, zԆ//T{,EY'I0^$)y}hi/HPh]m>ttuComZW{i֭[:۷wRۅ^#!zV;y}DccS)|h\ķΗ\!cpp @hZc &D|sgcZ d[OďkDDDS*g{$6ekK 9!Ӣr=G|=>NDDT㪺.[<8d{0ޚ~t/T-4:ܜ+ko{ٚO)r,rt^uAɈ?oCV& LF 6>|Ϸ ذiUJ2`)s:-xXFi:Ɉ>hikwMˍXn. ՠL$3<p:#-֭Eyb.FAz=ӑ>%2~xwF^?:U6AA ~tw">򄯲]ΐI '""c!,?s剮y'5 X2: [IN' 4^w{p{`TXFנz>PEZ$f38 mn栩j;DD6`h@wR f5tTlٲV}Pdv'@I< %F ==)))jHI )=Vd2I:)wcq8E!=|*qM9l'""i/φ&1NkmhĞ߀˥Daax( ɔ2a5oFIZ-`&ua =HnkbL|沰m{Ų2T,+?#B -2F`jZɛ0M^RWm}h9ݎPhعK/!Ze8 2%%xgnݺ);Fj^}77ɤf8TjG#Il\p2sgc:Ӊ.x7"""wi5 qcnc5H> 8{sN̼}>x{op|gAI__/ "UB__?{lӔG ;g'Ywwom0D?j2_54D~3c:W ~s 6BIO6):MhsMϙ!mM]+qqӮtx W@DDqp~؎7ipՉ<d2`ƻsA./U'U~t/`HzLd3zٮ z/ ;:rLZ}WT,+n3*+[qYPސvC 6y ZNt;BAtܜV+D1O?='!riiKmY铿!00`5G;[{/lO”";Sm=9o|y64qw"""e{U~5 :8 $L|I ^X^V'[[PRja =qR< >"1֣kqW!y[.w ?DB"ြ!+Y0yW)ӓ7 C"Z="m ozߤps.駟%KaŜӅ!ŋc%ӕ/(0~jlkf2c`s !qpsi. :I$AQ]R/""I-Լ[MC~L\y"q'5 4 a޺5\u"DG }m1#' ޾~NUXDmͧ8q0MR: IGܢys~.,EhJLONF_z>hikwM=jp8`69D1V Џ֢娨7J~?zS^^.3{Lls": `g'aӦ#e ͥy|L9)yAǧ}YVXVdgre5***EIIY@ q|K[ϝ+ ?8s8| 6{|ꆷχ>3twp8$):$&&rhJ`}XQ__sEmm- @EE% q*~>1ǜO矟C|~s E|h~*}*x߇[&-Obi)DDDޘM]+qӮAF T^L]-DS":x{op|gA.Z =h8 4eRSSkiFlݺUŽ;cG\LZmʨ#!8:z7 qHLǴi\{B1t3 |-ypBOK^.ADD4E:5 eApǕ'y[Ojm;U'[艤~L ܨmv g$&$_z-^q <ș IDAT~N[p{P`2"3#,^㋊b^d$$ϧE޾~ttGC.J['"m,YN%lݺ[nEyy-f>%q/Sۙ!S8;tgMy|8k'lGd<R5J*Ώ@DDƏg|JMCp^&y Mg<񶜲T^'[RvǓӢdݬn=jHHX^ma|U}kDLOFOۇ7{{}t9*ZŜ2@PUu;.OܭV+V+g(uvuu:Y)-9zbqX;Sl'"""MB*o9c&kbuADD1aoRӐ7 +O41 EC =0ؚ7v¿L'[iDGW7'! "IwV)r<.wh@l݃n =$M"4Ƚր+b٢9)DHHx>@G]nF}>N2l2<8 ؽ{7x ҋQ9/(0a0T--[,b\MeӦ+?<Տ#mpy5[sgFJDDr7]w-49W{`ݽ Qs}օlSӐ s3Wh'ApLy!x{/q'hl' _xk*t"Y7F#'\+i`υ9߈dYH%E$!>:-烷-mՍ.7BC W__AD?!z!ED"Ηa%Q8OSMuX\"Idb=jCŲI9G 8&?OmjP`2 s? Y;2S/ wvGG^}p"+ ***91HqHqRRRpujj`QBnjjjPSS(//bQm+,իְ WNO5UCTбvqN^DDD L%[iOďY8:M{vAMC~Yq"yZ] v뻱Dab =ER6u[g?k5e ϻ=p5 w{.P2|8>-DS`͟:tC͉Q$m0 c^.f@aZQqqqR$Ʉ^TWDEE%n݂ژjjm?e>T]. oU36GP<tuE><;3Ogs^kKaR<HMR5cuHygxߪi}6q"y{&Svw`{qWD",- ;@Srn5zRy'v^8ak.?]7deɉ!Ww7\Ff223Q8g^`˾t vnGjr1ID&..F 99***e:bj.֎n`>֮]Ũ=͆n߯! +O9 EzwHS`7!#:"1Z-n lعm;[γ@0[=:G4scHh\x  8Ns#i5˜ soI~'9Z^Ŋ1@e0 73ł͛7 lق@ +Lo6ȧl!Of-LצL՞nŵ_hiiT&"""Ώ#:+q'#""5;GujiApnED&^)og2v?O$A| SǸPh&CV& LF g=pH.w02$O4.ӅE|oR ͞5,)Z[dgO 1(11@>[P& }୨Dyb={b6D?b$Lџ1XFfs!駘\I :}g``w?<麜 #[煮~Y[y"">چ}W('Mdʻ5X2.>Jof3sXuܜ,El@ʋ=F,g says>_Dl?&G[{rµF̘1y&5BNvfKDt{h zrr2V+u屮ц/u:˜gy^r :y|Wl'"" i0({BHOl< _xDD$=WKMC~Sq"y"Z[nZ&-AB vuy4\,UŲ2CQqjLM$$y&~", 8aWw=^N %5Ƽ\"%%y&!-- /^KJ-y#I'Ig0{Wߍ;.D?"\ 0 0 a6!Á|QH408O/ںig'""<(8ɏv i^ ka)ϋdboWi} ' 83^=57 7q׷Ws&@-C+D.)ffυN%)0}"o)s:n^#pShit;ߧTNdegTdeg]{㑑.yB~,?Hď][[kEu.VqA>ɲu$9e IMyp ilr,C;[2ɝl` 6 ;&n&͖ۄp21 ,dK6$?`sv[ ~mK>NW`Wt#WٌX$J%cz-cxd ] :?5|x2gk\jDDD9bo|V_oHZ3__&Bz^|5we}SQ8pd—SrJG***ܜH$W1<2pǽ OE={i&eSIdu_ <4yok&C+p4N50 _VN/-EE{d6Z-AVdc}A6Ѽ0LXd :;;XÁ A}:WXX"PNZd $R(^WA bh4D"@+X5ͨ`rTTGWϖDDD9J _EZc!Ո(N}O4~0uhNyh.Uox<]62}{y.>Q1>tffki_q~QlDF'>1Ck[; #8˙N/rM~Ȋb%'k&+ *8V?"7gc2.1@ÎM{Dc<rC0=±7+OaL'Q}͇}k2dTF/(mctЩXi򥥰hn/3JJVͦwܮI<46Ol%yd|fP_n2jؔE-hll$<bÆ ذ͞/U£Xv "")M|l"u>e|̊*OBDDwGl 6U y<~!ʜ_?tk}HL|g6I(Ulυ&Ɉ.n^nQeB"B+4$֎H4hobI'Ȼ/'[ҟϷbŖbHRVw;_0O<{f_/ڴ7sQ5Kǽ="w(5}{.>FL?~ctz,(2)etc|b'|7VQ*Qʋf+G:BF2Bs^ZN/+y JJ9t:fȊ|;nDZ7D&]O&'^WA$AsI=ڄ%fzg&`}XYƺaJ,Q ]l"jg>b3 Z53y2)1;ET5Whyhm(8ӎmus4Ƈ*/zX&b =|ocbl|w{fy>Y, p8P_H'z⳶t Oy ADDDJXgHplLqZVYA"8q0_0ɉhV"xo76U5O4?n1CV&;‘W\y9)> ¤i֎D2@W7]!1t!F`F YQt +2do yWNV: n:! :y]SSӧO#Js@EEOŏ*aոei9LF BDDDg-y0DHw;8ODDѰchS> +O4uuw^"Ee ;S^‚mpflj zSľDD4k~[DfU q晪y<V2}{b-j!` =QnH7F'g rǢyN $eT$vcp`=Ϲ:% 6ƿ7ai<@sP"lz*"H'ڴ?R6>Qv`Gn7Fظ6p?7Qb-x8r赬y^L&&MW9>HO Z퍳8hHW L^&zY180x,/jbV|bVw;:xL@}:|5Y, 6 O\~DtviV &cI p(_Nf5Pn@fmՕ%+6yM&"iرI^ڨ>>QvDYHU<F72#^Z.)e܏>z"zMnDzb !p#E .'n$IBe@łbeFMy:=7~$ɸl'"hرDBioS`'W(;y("}U 9JŲ9CYBy)_Nh 8 #4yŮ`Fue1X,((KL&l% Yi|,Y`/f36mڄ'!$ r ޸kn_|:-Eo*cN'uޠ {.tnMƽs׹hZN}O6T5'^|(jqoH޷n rL'J$St.Bl7!G`&/Ty/:ݎ0 C4(ŴLƽL"EEE,4L&,]8w36m¿뿲WJ}b5n5`DDD4hNT$lMƾsJnl""` ;v8\}y,M2s!a}~n,((A'pO m,&eEJ݆`bfAMw͆h$Xo/Y,t[85PE׳D3dX`XD!uuw'ݻ@Q(|Ȁr:鳽P<_by폂[᭄MDDSְc'hޥDٍDa#XECay UD9)sQpQ|u#G: #0dQ୮ȐMQQvXmk>Qݎh$X,eus?{V>=$Ibf&^(3zTTT?1шX`FW@`9eϭSl7u(*%4ϯo-76MɷO Ѧ}6>QcaR)d" D_нWwnJe3JFn""":ħ]ӠC6a_XgY Rpu5IVbs?&")"b+\' L'-| ҄z k}p\\}x7et|3\e@Vd8ݮGut:(v;l-#MKSg5>jk2>(zvv$I2~xb{q-hb3***ՠO>$:;99"kn>oUc*2nAARZ<4yCyM^sZnj""oq>"L'1{D"n(S;v=3>.i* q !S 03JF8].8]N% *Ȋ YQXn٠k۬oOol:?dQMM Y97?6g^""w骏Q&ح&.2e-5|X]Uª0* Wk2_DDtMwD GzTU L'= H_v(> i~9M>vD1D{,&+$ N \NHЬflVXm9;bW`2 vcxx0?[zxw5~>Ş'l'{6 ˿WHyf۷o3BsssN?Oxwb2`2cccgf5Xz # \ Áa|g|RQ޻zV:A>@W7]!1t!F`F˕n$x +2dtPvv{~]^C?37fA2}~~%Bl?J?66d29HL&122BMDyf9=>oU^GDDD9qMd|reju [Orh?j2vʯñaN$ ѦD(U y<^iG>lO6|~ rhmchikG$C7/_Y$Ip]Xr2`@ KIV6_jh@'ǹxsL$u8r5Mg<ѵzX,X,cFFF0<殁yjEgS版zN}O8\}W]r{~ :Y8sBk2DDtUvqOjCW^rFL8ȫQz>Qz8ֻ8u:0PG q G'ֶvFpU^ȊYty]l9~0}>y(LϝdR)$H$O30/sw&ǽ OE7&|NܑN#Ս@Wh jQ2rr(IVWAVdȊPαl(s`0'DD4Ssd}}}մ~=<|ҫ6pYQP&!""w!2>nP_d\7?lu75]ՁO~ ÈĒ.${4Kzx= NDD_i׎"Nf>Q~ak>n&>6QL֯ 0X\>KySK8{ίkїuw`{D+@,Q&<¾=?WHw{7n4T?kD ld|lIH'F+d mܨ3JF8].ȊY᭮ȼЍhLf3EbL6yٱ7xL;8p>OD$9ݎޯlyK8ODDDBIF0:6LkE=iZ_sX^vx"E/L7𶆩JԬ&"LSG_%Sq? )q#nn"AH<(Z[طgoV3RxmchikG"BfDCLt$I,,Ym6XmV6 7~7L& Xh"";_0&Gs"$o;ٱ-76}NGKE+@J-Q&<¾=ؼu WH0ٜB q G'n$Y;UVya$8]N8.Ȋ̋҈NbnCױ `L]va,tR)rʕ< MMM<\Y +lQ^O}͒Kfu#s(½rS$"ivDGsIb bI'qh q!1KEp(}mjx4{'}rjx@3u IDATJÎH&"N}&Qc<T5qBy9Ur Hz[4ZڑHЩ!6t9.,r9!IC4Lf3JJa6Y9zmi>{ lϰd2"QN),,"yRP8ODDD*LH,u~e_͒\Dwãcx[y""_G"NU  l'F6}{b-l$X>')Bc !! l! YQ^@F6T ڹvλ8]nbÆGX z=AD9{yk供y"""gXY.V/A[5^fsl1u(r>}Nĩ@$6 BUz<<%Ҽ8  O)Owcxx**/ YtX,`٠a0X,t91::*mG5Ϟl`5p8,v$IX,Oo;ǝN"q% S A hrj<L g9T'{48aS版v}m ÂK. DxX!ڼG @DHRyBO(t + dE "CV( Xm6v:$ 30aY`roBg/F 7_ل躏-1΋( =Mο6-2x5u$RSz|0~~Sw75M⯱="NMU @$&g#D={~IO)&.gۅE.'_2G6tzTT^vf㷶|uuwL&Y"j8}7PDzqDpaOhz1F!.C'06>p˗Lyشu 74Mhq~:"xJyWVyn"z+ U^ȊŮ!ٌҲRf#0^4w{d\ y"""0]&PLǠakE4>8&v>7_m ~DDH &-[hq"yHPC+DwC>))U^% NN "r0DlP F#FGGq,Fc14ةyV]]~PSSB|5{-xޥl'"""B4@@ og\̽XM[MsZ(bI$GZ9*DDxp"NMU @$HX| ڤ_?t^62,O)4%FYQ +2U8DtlPJ0 ,H0 b :@!{ƑCivf47D]ݝ,,pD5q-Ń+Hy"""I";}59FGx$ :M<DbI}s}d<M: Q xJy/r9yn"J-~|i?8!&y YQt$I, 6v;tz D5&RidlfgA$|,e6eᑋ:w159CVg^[rfI%R#軐q<蘦h2ž_\PH &طd"!R~"1yHpC+D]|A"jT G^=cob`"5 YQӟ}`@ V@_B!"Ck~MǨ~C{jjjPXXBѼʅ2 W8R{~<E=6mU9dq'008ѱpxd {_xRu|ᅨuɉ(m? qꯨjV o#D76GW$ ۳)ybD YtX".ٌҲR&Z jadd=(ݎyg5;Fss3ON|0< AD&(1XDDD$ğ(Ү%ՋeM'paper1$a_8Sø08lְq&~Q#"1yxJy%#ԏ IL"c }Hdy"l(s`0 uBd@Ǚv|GN[E%3J(%"""u\H_yhz+(2iíto㑿[nf""lDCĩAކM$Ȼp]?hN^jfc1 ܋=؜s-DDhcQ`#hs<V6E.'6E"DVWM&5ٌҲRf,Cy"ٳ8Ӯ1,@CC=.n7 ?0ePRR C4>|{sT狥B-l'"""E ?{OƏQdcӆ[}rMu1b_F&""$xA2qjhUIKQ0ϓhjBuFDۅE.'$IbqhYm69`0X 6Ů H```Ř4؉Ԑf vggHUUHɔĉ8yZ[[q^<|!loW&ح&. /L'.m ^ߩ#c|{I6Ѥ;Em? `#w]D9xT{-,AeʋM[B??& %66Ӭ9].tcttŘyGq<;XC{{;nf9?~kk+N<ÇɓY[`0B4M8-HF7]8ѱqgjãcm ?SjLf3pw|ߨ>"KT5Gj?##Ѵ{ yN "rq( tӼ^ǂPF:,r9yŘ܏?u4=ή]̢N>e˖i@ 8q>UDY8o*2`QY t\(""""&(1Gpnv~^쀹ށ߼kQKUop-t@D_U\wf$Jl DVWM&嚢"Kl,i&'e!f)ݍ];~qIPUUŒn?'OԩS9Y;o}oICxSi/ͰYADDDtp?ãĒj]X"{?ź^ LDDH &-[hqgy"*L'Nǽ/D?GuD4mٞBop\pNɻ]XrD, {f0$Ld $@t"h[꯱nz[<*Qroa[ {}KխM]E+( +`rH2zM$$!!s!xk2\|?d|.OӥYYTOOܼ}L!gs8Z\N'¥^[[ IFyyz%ISN]vNƴy`tU[[epޞ`kT2~iUM1ΔseiiyWU<U6BΔDr$əȆ Rg[-Uy.S1.Vv#j+%SZu0 t <`$eŵ_E iIs%N1z{{u! {?Ϛ~'\b26Xڨ;+ 5Ӹq㔝VvvRRRte@8p@XsǍ5urRJJF AcKjUO?;ݡy߉2m^"8PMMV\~+  A0`毑jkMY4Il62<y<lqn+VG{;Iuw_\WT]%.̟ ʟ_9 dz@V˗/׊{Jhڔ|6 LBݽpiǿqUO;U󓘘6/+% yb&_nfME4@veegJ%4Ex>Lne~T6󝞠^Zz?@ VssleҤbxƍ'9D6`0ꩧV:&8^t#C9ɓ *.ʌZ;៎5ߠ޳_5 ?r ʈSNQ_!V\{rJ*%%F");Min7qղAkV2áu&UVVhǎ 1um\Sp**@8fUUUsk3p”_њq!M[޾qEZ1eΡQӣ,R0;$?.כ_&)+p|A"JsVŰ۫Q0y?77zӧ롇Pl94[1sMTRR*..4yd%$$0 z֮]ϸ@sn`wڣ]M=/WڨCNFcWL]WZrw? хT_[gn tI \ zgK^wVl}[M`l6\Βn vnχͷޏjiQ]].zpKyákU\\kF@8qBV(Jp~ڔ|a?fNS3}`Q!殭z4*+=/Vί!8b0$풔fW ')7/.8ͦ GG%χ5+Vzr-[r|A8k!;;[n'0D]]]U__t FKҕmڲuzbN-ԵMI_eU%tExE3 ͟'+g`B n++;KiaANSv]# rtӷg7v{kTSSbK4h i*)V٦/11Q|?"r[(3&sO[>X5br_}} 8:.aa]Zm>;[7|.v+͝&I1In|}9ZbionnRuM>cXoǎZ~"zެl&8 A__jkkuzg ŋ#0DwΤGs1P -TaQ! 8uO?cnB?|r|oN]%l iy4'k=wv73{Qzl=|p^}OU/o;$ͦ yaa^oI ˟ՂE B3af)-FAspoߩ6Sܤ3gWee6Fl:tA8;Q IDAT^xKDHLpޑ5`4v~${&eEmւE 5r8ZbKPf~ F:u*7˭+Z߿sM-ݮ,~ Fuk/6C֕z]&"L/-Mƍ:n.BKK|>ߗ>VYYʈ]y=5qݔ<]wyy.9G9iF-CYu†mҬߩEj +Sr(0HNaV8HM.־̙| z|UFUVV>m>++[>}FL !!AO---_XMM֮]kHIkIeCUVRzNyI*6Ue2m0`}OU/or NNaW{7H֋/TjTJJ fVFGv;>rR%aMfSo\MkJTZzyRvv6O`tB|}Y|YĮ<@dG{ߴez{F6/kp:Uhn*ZbK0[FxYIIJ?m8_CaەvȖ` @lr8 #̮jkm32}z֯/W0478]s̍0z~~>O`N8Ç%8|rӾ͜>(mT)Ǯ=CFmqQk.ֲǟv.`Lav7ߩEj4ݮ,0":C3s`BM| uO?:.C)0azk$-^٠\ 8NefeDe`x<媒֧ GL9~uuuLׯ/1'M*֜9sU\\w .~%8WkM'is:=mu:diUc=D>i<=a>g1[w]L\ᄃ7XK ÿN`N Ltמ*%%F1!V'CBpӦ19}I?eee롇ehK.D<)hii;*++TYYk)f TkGP{+#~ tys\p('ݩĄ?m Zjj ~CtQhag y0OVIiV[x[k^|R?DfVFGvQp:N!LP8HTw؜á9s檴D/8_]%)Wl NWcK=_'QCFmúsSsヒ ɲǟrpCsf`*%`nĪQ6"n+3+K&NT% Qt:(neǯu뿖}p^y` 8gp^t~ɲF1& N蓣m?ih(2Y5y{Y $"c<0 j7Iߵ^yUG3veeg)@p8Dt5WwrX>p衇aDy<|>s@@?`0kNwJu&1&?ڻBD^{өn!۲ U%XjtH`+ݡdTn]!}r]=}_xSkPi@aPFC1g)3+K'NPn^.8LLfsդI|\A8=rM>c9SsӁ{' UWWGnq.t*+}FisiN-_B/BAaQ}mKPf~ n۪ͪ;\K#bە3z&L,B@qpgYqO.wSzxt=27n7SsHp~ǎ]oV19Hsf&IW#::q. 5sS_xN3fL1aeKaM'N "/KRןxJII$%%ɓQM18v!RgKvӧ롇ܺcv>TIɵ{}%0y8`0(w|}}/~T`0"tݔ<]wy sI:&-Avg=Ԩb]iS=:b®N>H@%XoDyQϖU_8H t*3+SN&V‘#hf{J}NӎnXW\ |A0wpT PYY#s'L:P4f[I#(!:y_G;.ؼ3ɚ4)`PMMV._ l@笺õzy*4`,y`q:!neǯQxa yIZ|yĂσnW y0 t듣m (e+VjV?Lp@4jV& I[qT8a&M.l62<ݲ&"32t5W6}Zse|yڽGO+CRayQg]^oÒCzYуJII!$y2=Js)`!S^lfO߻F555*.Nb6ohժUڴuuu]8h_$􈚖| >^oyp~TJ"y!hn +4( 4=0mTp5>xP&׷bbϨߧw V3 ϓUko+ܼ<af)-vvz{{)Ft,}NuM9~yzrgugg֯/WyAM?&#޽5 t͸zH+ՙ̆ ɓjlRg3ز5{!OG99ڿw_2;'[qf̺YQ 2DϖMo V.AtXBr@L&-[snQUW[uO?c23 nKF:u*9^oVI߲ iCSnwn:uP(-}ҴC֕ɛ"Lw饗p\Կ -YD7o uA0`MMM*+[`0hu%4;JDzҝrR4ʴyI8ޣ_GzzLΒiS>6^ Qaɴi1#pɞ@p`Z:jml=dzptl/}9ʩwߥ]_~E[6ƦtjSb+Mp@"< &͟--7+7?O&İ4[YYv%%%bD7|SmӦWUUi7n6Ibb޽{pڷo} i|>ZZZGnV19_XŦ\@WmLJz߲5ɿsτ}>ڽG; }vNiST|D7hǶ\IjĩS/Uן?zPyy41f)-FA\OBDɴ4iR-[FMr4q?V驧V~]{,Y WWoڵk#rmEuڗCKiyl9RsqufCF^zLU+6N;\㪫S08$i"TSTXTdy@\h-^?^{ k@"< y[%}˪$/WRR5fە%+0Gba bi`Nǒ>m8_ "өܼ\8Ain7yat:e$RRRTzlSQ^^0UO=J2߽Dplp>h͚5 '4w_xg Z KpD^Vgzp^xp>yaOX=8[R Z10YSl}f \.؂Js)IMvUJH7`PחS{oSO2]vV\{kժ4uT S 68/Iח7q+E)v6 BݽjhБNmSSo,6U3fF0@WT}mK!ig9/io5zU0Eͦ4['NPN'E`)pӷgzjPԒ%o{Mk߽_߬}|uUWWGf\=V/},6B4'!S=a=th3} Se ЖMozV/Caw yq0e:}{zWjkm0ő̬ͦ,M8Qyۙ |TpU*_d9***(tuuu}7mz]fԯ~ޔ Ϳ2|}}#sLe~9ll 'ҥ#aKRM1!"k)[PQ ` j^ k@ < XRw[ϕ?KFv]yڥ_WVvl LYin7Eo1w޽5ڱc;'N7x~54~|B󈨾>:8fAӯ1;ݡ[~$)l"/;=5-;?zJk8У,zvK*R!a}Y6ы/T T׫'\U.磡p|.\l9**xN@@TӦMMy.>#z1}}}:poׯ/Wo5&4w_xmr<|sS3}M ww0@[` `tHgv@WK6USSCà^?\ߚr3giӦzG(6"Lp> VWoQuuuDsK՟])9_zBݽjh'GM K K҂E duO?=Y eE77f@\2 ?X/RGhfSۭ'(7/WN'[#*32tӷgz k׮QssS؏rn]+?K1C 755<"91p|񸜣xC?챥jjF ÿnFR0K$}˪5*_J!v+͝&'SײfR(szJu~`0;k:JjS5C -_,":psiL@x vu#.ow O3ЭP'coQaQ!M{ex0;ْ|,;V#`p IDAT*7?Wyytl6n22=vXs3 ]o7r_l57_4{OEة~[iʱKKKu}SAjjj/QFiAu755lS bJ: 6e՛m/FJHFoN`=~u莉)_gY٣sh . p~IS;"TWo/3g.DZ8TVV& M?s`k^5/ ' ;^o[.Ic\ۿo& [in2<JN&zZ[Zx(3?C>}E555ZvI5g\ߺn\.r `P:~\..96p+++TYYi^њqs~}_)Xba7߯Wd\ӌk 4)_7lBز *CRa yÖכ?OҳVArJ-Tzn+-FA@R ')DB>|)~e眐xTPP@!%---|axb|^o=Asg^sI9q~~1y}ޜTJHf@p/S()| SRFo #R)-ZsVAw[ϕ?P(DCbnWn^O,NS.BD7|ôcWTTP8rnO#8/I%ic |EWo?fG%h5uء#j ?qEZ4 tQ>BH02IWHܪ^|R?j9vLǚ[޵+99YITfV}<oN22t:)G%O1",7/Oӆ#a?޽5a|ji .QUU<>ƞ`S/3;l՞ tۮkIeɓtxzutja=KaWN 57@.IiVMߞoEC ZS5q8v+Ód0`-jtaÙ 4ux`Nau`%Q}'624~Ad0:J&M)Vr9߷~}9EsG Ӄt .O`<s^=[GV$zN=n&C?@| 7ux<ToKf`Xa7HZc:TAGhŁ 'O? Fv '*+;KvEhhFRu G!,󩥥%lǫQUU}ݔTpqz< $j dȖ*[Mc" ڵX__ڹ;8f39.]wyހIsְn4v_͍A^5tHڻB?97"~?~D3fLS0uuZb%3 ) jfm,Mi:[vI}lSc ƪp|n aѣ)Dp|Xv*++(v:rE>۷/yIPssמdOЭ s}]#G]nm?iUVCcM 55//RS[0{?T@myt+7,0nz>m8_!pQ!x(Js5~-+ ` OoP+sTVVq&8qB]]]bӁ~7UUU~3QIzk _O1,glyߧ?hd3-_C[+;lIc*6WOo_=}M{]4챥jjlz:tz)X yc]z>|6 Ak9v,.G,624~nSѣG+)`c$]Ur3M?ώ;0O"Gl ֬YcO𦫸(s@MШm׳U{,gv+˦GP)tUoQcqS?E-8_h!M^R5{>l(!< ÿZsVC+p- ;~NiCl`ݮѣ5aDeeg(%T0nl6~I7}{VD ӟ.L#---P0jn6wY=AN+)F`QV KR礥MgB#j԰[kڶ<e&+e`EIm"FUUʘBG>?tuu1^'()1a`<XՂg:ب?hLb|ω>Ulޯܵ<=ZUBz0K(/,0fKrCzJS&Qm@X8N)EJs)ĐdQ3ӟ.VeeŏӂfpGkLN`!gJ"d{cݽ4BY!4/IMAUl/+*'8icOPӃFQVFxҧ G|4#GR`n8Ac tRQTrr)D\Ur.B+++UVVz6!8qB`B G39]!s3I_>7X$| %#7 a' м$2Tyڢ<8К+ ^I>8 ExVCZB% a9jEfSfV+7/Wv;in2(Dv쨜ŏz ZZZ(B|OM;~SS6nh:nn:yX {R4qL&ɐ'-%~ztpޡ tЪƖk}ww^zH=}Q9?yocKU_[G!2 0K+$}u*_J)pVinw\(veegJ-@{J]wێG-HI='ڶ:2ڢv +VfGBZc_S <_4OVI[/R /#pVL;יsh6 );-8ܼ\I"@72K{?Q[ktժײeǘ'N( pP8ק(2w۵woNwhc 6i*N߶+s2*OI)J`9tMӳU{L m_}sBħǫPwZ; ZbMANMm]yo˦7TM !0eNtxW:@S1in7p\S0Vc a&7/'W}}=cZZZ(B 裏LY:⾮'f{/}|7&g"2X>D\ɓjl钿2cؼ?wIpAh* !},i6e?#<_`],NP?: dH2$$"UDZ_m~]~-]z+r@sL亮.EzuWUnA(45 $133$D4 ?r\3|l>y]$W׼ךc$,G93fXze(< *,`J-$1 ٧~! iݺ-?$Թ:zѨkmٲYeEs}˾P? )ԓzIJw.0@@\Icc5 [yݯn뻛m Ѓ\\f=bEQ1VI5É6mzy.Lkgm̞y76fٳyeST@>6n\0_~qz0AX\GGbRollT}}kdڙwاpQ@ x1_w+&er}N{;ZR47I\o߼ K f !8=H`TDk^^/2e}z诙=[Wv>**++[j(ƒeKuM ykkiia1Y+  ,*cjeS)@{k_?tMcI;fӮ~S@@f>[ ):v*e^1G[_kTGO(n{HwOR2]Ff 4p~K%}!gy\ 3z߬YqߋԼ]OqU>++PG>6})d `AhTVWWW֬ݡS׸aL^$_=Gw<5 3?۟ꚢSw]kÑQ?ڞLp(%Kv=߼}Lhvy-|mX4q #`b4i< #Ы}_gQj_^. |)STVQ,߬Y1D3c=[7r30 c{ܧ[a@0yzB>p85~L]#Э|Wt Ft+.PnwTlӎ֞^CjiV{`J%;;Ou%e~fJJ%z_Qηb紘:u)Z.TrVqQK *::jӦi)HRǣܼ\v\P[k(n_^bm\pWq2⬲RajiiQ4UUUji}wϾ󒔝t.HR?p,X27&kwL;o,W_#cc47Xjw=ihoĸF`?1:/a̓6='?Mz l6e(''G4&8^WNS'On\0_9ڶ5`-Xp3'$z{{)[@[[N8ukkw^(~yIOg HVoN$gjYA㿹ǯJ^cc3V@8̟:f}/}Y Mb 8\TI]p@Gβ˥8d9a2O~F8 8FjjjKq'P8igaIkמ~׵r9̙6FGTK[B)[?ޯ_z%K-U՚ >F`0mJ h[*TDk^^1vkVA++dy<\.}lqY? GpXh tGx1H^84lx%)iם7r쮾pL'~:4ۺ՛w=ڝ*2UY(_ ֮8,'8.az5^K,l@1񨰸HEE ~)*)@w}Z MϞjT}.NBū=z4nOͫݡkghNٌI;c.H2Ͻ‘јwTlڱN?8'zS0v өD"b"˥%˖sKw'&B!sF+AԘ΢>eMCOud+-Q?ΛhWhhDN"#xʿsٮc? k0Q0<)utfK%#+Ri MrzM| U W:p9 f"鿤zNS>R^.nWn^<U[k(D8Vݯi^Jyyy^{ $q6Ɩ-UWWgyӵ3 I{/&S 3.PO?I?}OspH˚fJ|;SlI}xhDQF4 0 IDAT}GN_={l)'+޻ FQTP0#mIR= ˩ɏr0"VFfa,StvD:بPxnv=*B< tĉQ?:׹*ϜR#ғj⼙qS+ k Etǹ9F5}YF%vkϞurrMZA~gFpy #+iTb(p8̅_"Qaq(,'7/W^W62^7G>RWU__BBdhTGDq> un=Ӕ< 9t1E? ,K׮iq~ܭPd895Z8_RV8 )Οu@+_B F`?7NtlxT^Y!+M(xTTRL>F>_ ;<ᰆ b P–-iS2:߿z@ȨX2O0WN˔jBv<}c!;UzpA]Mqm~.+d%$)gvUEe>v;TEeaĀI'$0 CGU4j2TC{7}{15 0tx,zv W\lfinVZZi RJmXM1nA+@y&a6HF{j_^v>+++[cKLYa@ L.BPHԇ?:::TSSc:7̞B'q@~QæSY{oHL*wt,;diyy~f] &OaĸFb+G&O b-z))Vaq++(U̙.K{>9]N`|| k`` .CGG=p8l}(2Dvy>_h ?yDȨkdސ0g2$=/֙6/I ޢMϫ$x_Qηb6wbAy&az%-GRo^Q[k+AH YJJUT\$OvN d$y}>oZݫL4:z P4jrw]ݫ:tuYT"4.>K?{ҝʦ F,;57QٓrOL]o{A;I_<`Q?k(n. y#m);;[r:Hjn[er8a[ߦ2ӎk.A.˕C~߯-[ gЄD"#\t^1X Sf(gҏi*2ծǵ_-$Rm$&IsS~<$->GL0 #_|Sx~,huv]3rsUQYgn (! }L;v(R}.BvB+O`0t;t<_^Wt$tk* um Y0zFIKTUZVI`475kkb*$m vy}^WV(7/W4nɖfU̙aٺ[wvW_#8`3l٬ܳDi1{]CC#\@BC#Ow9߽!a3*iNyWETC#Wۭ?}RUkV=͉`Y4V d4~$[/п $t[E*`.Rlz,.MNӔcwvv=Bh4ϱ3S}}0{ M{rl [{Zg^W,tg>m1'eqcuԾ̽N7=I`ZzM̈́1N &k g~ AHYJJUT\$ALtR0Lrt7n3L S6' IIqߞ 0"F`RI%ezuϧ`I6MG3rd $A!B<1=ݭtw:!TZ^'M ŷ^CI?C*))!F2 Ceee)ZZZC BlqSC#r9?pdԴSbܤʌC|lhջZn_yyZ 6Z;"q4>`"`2Z,!b$Q`)v]99xe^322Jy,/]{ZL]cŒy ?SO1;z\&9ޯ?hK-zPi<3zMgIZn^s 0~I+Hb\o^Q[k+A;!ϫ edSO###`|_e|lzq^FGFd|>@#1XUǣb2n]|iǮWGG!AKKԘ^F֦Ç'TqQ7=]Z#ã)^1S_Y]4y;!"QY;?\q>ڟ>GV>JqzM8k~d F #UR IHC!mzy &VaqJ˔b>Ȉ߫㶇cԿ{ pNSee IrtM=~!A4USSSҿή.>|X'NH AUW?e:{YX,/̻tL_;/2+Ϝc s1N}GNꗿޯƦO, oіt[8QVFmbؠ<1d*I%Kk @dy<*PQqn%3~ L*@_–fӬ%Ir׷6د !ZZZ>|X---NYuuB,S^vz﷣cM e;o*QN&'v<}և+L_'65qֶ91Bybo hmӦg@^M3rsU^Y!+N( ȡÖ(Ο۫#sbKjVAl6~ugg̔cB!սJqեy=:z=?СCSi0M(44b,"rKw;@ GVmF`PkX 9N(!+PZ^M9v(RmB $ܾ4/I`POd{15Z?yM;vea)!do0;7oS0b1mzɟLo$-==c4 N #_ z_ -VaqJ(%m -&ϫ3 -%DեG*&^<3 dfTEt˽) `1?(5qʴyboU-8k遛8B_*(Ґ^~Vtzp^6M99LnH tw:' .Viy+y)\.nmzvrCUW,(IG:uj\۫0y5}=M,,cje`<X/ä).{[!cREڵc56}bݪZ<17)ΟM@1 Jbjkm%_`yUQYܼ\$edd%q|Scutt1~0ZPuS1Yk<) `fN󦒔:r0G.V9_ze}']o_֞SrL¹xe'}S'ڵcEF_IY^7  ذi| :A c<XaZ$-G^~V76fٳy)i]w('wFɝwAq Qaql6~5˥%߉cZZZn~?#!AUW? 3h/i EF"G'M9y#ڱ^l|ۭz@58EϯP-% 6&@0YU^ q/X+,>adە,00< CjkmUW'6eɝ!ϧtw:@ncsn\0_٫?6dZ=TJJJ8u) Þe+.ސٮbv#{Q N sQ]wZ- o#+U|N7o"$->= `qW:u A./t9c+)v+;;[L144D~܂L=)Gwcäw{SRt_{'d ,doĹcWϺb ĸ6=Z[ ,GE**.8Lt:UTR,N3=;[K4nܸQ[lrwŬ8I[ށC#\T`?|tҔ.Ⱗ%k Gkqв%˖ffy& X(@1rI#qC!V 76<WVf ! өҲ29 7͏uuuZn 'ysl>QQ0]7^;33=Ix-ᣏrsgd3Y>(w 5OZrs^ #+{sJ5 ;f<$ømzy @n m6UEe>/S_@|Il*.)@?%ycC$  ?E5= KS")h)ǽ2_ݝϋ G7oS0bZ7O*-+`1'0 <$ JZ,4Ɲhm@nkg+7/W4n%@|QON3kwvvhݺʼn@TWWu4-[\!Դ6Q{LS5 IRc'c~ڲ}],,(8T?8$&O(щ6 IvkVA++ |C6nܨkj-[6СƘu"e\C\l0I~u3ug&\}yDnVd$jꩧNUkV=,(8kAg},i QfY6R&Iǣ")#3@eQXiy~}}֭['@]ZsfhNٌͺk=L>2W+iO\CC#)m;rR[_knƤݺT9]7o._3yS3a'i)yHl FmI+H@\ͦ͡,Gr>n\0?֭[] k1Y+oz(3@~ IDATrܯ]ҹ1?kZbqf|㖜6`-ڸ9Ѓ|zhA6 F`kA%"q+˩%\ ͦȖ+@Ӝ.зD"rڍ K^~1>2Bڸq&&]0TuuBk9i 9 v\}Ј6WRlӦZu;rRhdi>/?OKݼ$ V \+N$8Q$ #P%iI]pv]^W\;[y@c=^TUUFN&Uuu:;;bw"aJ{נڻ.GWOwS6W3[w.է}lgO>Bl٢Z` U]]P(dZ{-cj_ށQxh0<Ów^9O9~b4jG)2T%ezS՚rOs& Pǒ yHR/i)I5Ҧg@gyU^Yܼ\Ҹļ>VY}޸率A<KUWW#&k1Hy~Fc tDgFG>Ӕ75c{o 5cn777 $-8ɋ&$1-iIE,Vaq++gPңWB!?g =.h˖:t1&k0{ +4[=A"4::/@; ?3 hhxtҏ5-~?GDڵjw~`Ryϙ{6nzN? olPsS~&ŧVyHr*G$q֙}8& $,G%e**.p·\.~ [b? Rcc#'稯ߥU;$[]}!&Hyخptҏ[ruVg{x)͜65.;;OZ*t[kYH@MZby+(@<)0$m#(#ol6eggB^WNP.>y-YT}Kgg~uڲe3S!IڸqcLt;lq% :vJ}!ۺ5@@J ÏL9ܔӔaZ_TƷ}lߦEqVP Hr EF`(ПDkz$ݮT3e Q?ת5OƇ3BA[6f-[\!47Y0"[Z")k@F).5=5#LwlnikzVKe;UY-4 @8^(@<Jb8=UyerreK6Jl*-/SC?y-cݺu b3qN' EF5@:{  HtLOO3]=cZJ {Mkwvl 8R@XO5::F0FdxT}! FN gfvU)qG6? Fc;nqGsӆMM @ v5 8<Hmzi{-A2<WVHn70[lt9-GUIT__랅n:{uS4ڻ$IF)ǏENHK9 &?fߑZiHw_=g֫{$ݙ⼿0u@()< g>H14#7W#^W^ &pzB2>~mܸ1&k9ik ݢ(H]}Oo7e 4|7ݜ򼕧oyHcIO #_K1gە?s**+Ki N<y}^l>}lnieg }кukcw_+4O/w%5eWU*ս Jp[lVK?&k)9e3= D_ǎilD~ %0?3s'DV6OjϞ8@ٰi[Nq@yp@$E-Qyev+*.)Î1=;[UkVom=B!mٲE֭S0$%WU__ 3tRBORaw )Хktށ39S uܤl &aGwH[_kT㊌D-݂hmy-aH2?o0+BI2Y8={UZ^' \ͦy{d  lr:j?y@&p׷r}z{,C#kժUZfNRhllԖ-[bVۡe+ =E 5VgOP{29vfp&2<Ξ/~'4k9iN`8)&Mϟ~eCP=Ъw?hTfn֬4@8^?:=X&2rI%sb5%\ݮ3UQYܼ\ ,;'[%eUDJ˴jj}9S(smXѡbÞe+䘚F)(2UgOӉ!"jlZ;&wݓ_O$u71 y/x{hi((Ο6l L|rIoKGgb$1_*Ǔ,0TEeZ[500@ rWF}CW}}lڵkURR‰`0jBw/bܙ؂r*\S *:s"Q#fa~fHtLF9md8wt[AgKy(Ο׶Ӄ$0@Œƹ@ Paq($)[M ?s&SQ՚*-/̞:;;Uv'Ȃ6nQK?&k0{ t#:vJ}jiV@i.[{׀"#щ]9O)j_z’cF)/Lѣ^k\qT7=Gq$FqPL/0@oAŒZ$eYLey<˕t:T ) L֣;o^oB_[[z͉9١U;:.h$:Ξ:{t;Fw h0<|o4g:z5є5::iON~qJW=$h|p$_,>34zl65gRHAv]EEL[ߦG[}^СF=jllYC{Zn-$t\3菟Qp@\PW_H;=!S9hb=fwț~Q;rR[_k\q>/?O6=Gq$7t//{2~QdyUQYܼ\ҸHu9٪TC|ZZw~n) ?^-[6s&&k9iZ"erڻRW_Hc!u}y1o02kg{IGG>Y!yDR޿K-UͦUZV$7Ugb[oIK).d .0 f-8/ʕWCI.ǓE! y'( os:f=FZJ%%% Q(z,*U犅刎Rw_H}!erk>Tڻ/k~D=Oc)̘Gz@rIwgOysys(ΟW'ηB.KFI+H^ھCm222TX\"Rn[EEUP N c)--~GU kZtj,p9ۺާ)M ޑѤ}ttLnjS;i*??f-Y_mپ<)y)' a<F`kA,Iz4 iӳVHxK %#3CUgGFF(V~]*Ğjkk{ L7=jhhZӵh?\ȈB}Jwؕ1͡LPq)yI6eHTccd]w}1Ü{™#z}wvjjݼޘTEqp<h*$u@)4#7W̞-KqW,Qye vgi՚պ_̞>;> r&YC{ZyuRBḠ"#jTKkC$Ξ%%;4t;䘚$7GG|7<'׼{U[_kdq̴ytrթSHpI fm8d}UFFli|RwWz{ 3d)UViΜ9InZB!rt*/;74=LP{9틵cI/_g?t;`x|c'z}w)/|iDq=8:DŽNC?tHhIbV{mv8zl 7S?`.k S]-tp9#k Y31<+vǡA t [Hwӝr|_7}A(B('ah! AuvvꛯV?Hǿ٧w _g֓O$E4MmܸQ_|6&+=BWgr?Q 46͟yЙ /봿үwnU7_/W50穧|zg1߷UT1v߳Y-͙2뮠 ^uC54Iuȴy8)7(Џ M.(PAA223IW]:6?6L)t]ZzJJJX7Ң_6m9m^<]֬LGR.H`{tü8ٮC'N|~~#O&& u/0Qfi/7[b v@IJLJbQHyv;a .`OOv<nߪbE *~_5 q-%S~Tl+#X234nS1028|_W/&ۋǔtGM~T1꿑SW \uC:d< 5JZ$ ͠< n M#+Q;6ɓCH9+hi9Y׾Boٴl2-]LAIƍmcr{+ߩ\GRD$~>}iqt?]zpA(ߐ=gRҞ+<%Hko< f(b(Wݮ<{e^uut4MB8/Ϝ/{__2fZK.KoաC䶪fMլSx@@ʠDc]6c|m~m?3N˚5!GOoNYW mSv .}hYHSo< (b(VFFrrsU(b!KSM`J]{.!ȡZkq[omUy< %QV|_W .ۯ6\PrW~؏)S[ꜜwi`ϱ?:Q\ʭAӡ1;$iXQmzE.Iw{ @PĜU@Cע@2224@ *i*hu;e{>w7z{zrQEEEڬ6=Lܖ#ߦeFxM&nvW,SSay%SN{Ri_5_f h?~rkzZЃL ymXWiƵ44qSy@\\ū$Mע@Ţ"Gv480xL?4>===|N} UWW|4M=jߖՒU?P^;8%z #zu#iNbݺ~/C@?Rq^ϨLʬZUZƕtHgjKfGq7qC~dg3 0d`0ޞ &>}'>uWjjjp8RrMmܸQc˘VvTBylG@|v:q*۴Z2U➨GS+kք<7#C}z}קqXY=;$iʫq}qEyWGFvM.@^z{ӫP()']}yv:HҊ)U9 IDAT7wޱoT͚>;-%z :_wuGch<9^<=꿟q&dϙ0Fx8fϛ֮c;$izO!@PĝU\+鿑ĵ(_)##Cv] dX'WaB}OO>>K|䓫 [Ǐ/<&UQVr.CO٫o:2;w>!MZ2UI}PwT:p:zӚ3.wH@q~tOx (ƄU]$q- bQݮedf(480zCKR[v7lZl.]%6mܸA`0ȷztY2#A~}T0?n4fKY-g}U}|Ged)Q 1C~dZX,*r)ngI4M  W ǧӣ_ܒ WNqF}E[ojԪU(/ p>{UV"ÿ|.(W+?.s'qB}t%ZUZƕs83cҩ@o3 &tEX/IAshJyW'M3nܭ_St$|NEEUWPU„ן|:4&bD 3LR~$JH+T|m̸E9DVY&t. .Sf(?Sm֮%SK(Ώb1G~d^ϳ5`&N2e^V߯߆'_OoO/ӣO""jjjTQQwA?۪5UODi3I&dRV٫PB%MP{dcdfȰY=)K&Z d uBO-I5u~Cdd34Q^E Dy0.\Ò~@J}FFv&bp ۣ$uWD֦g۪(+JY@Vs&|40^U٫ &>u|u?޸jQVY2eTF-W< ~P ~z.?/5|tģX%eZvf̬ @q~T<`\\vI%$kBb(nWAA22n 1|bǻ ^6>UUUiŊj9q4U[[gq-GMՋT] جs'ɘEHJ <#OgCtUO?o/LT#+Ӳsנ8?*qCy0n(X-Eʳ90kfWXK0q_ޤǏvLU/.d a gjqS;\uS.g.!]Œ!{$q ~@OH= $~74QCәnQ)/ &~V-OO}ZF\(y@cT ǭ=z󿿮_ͦիWj޽ꭷzpA],NíWrh~m#3dϙ$kABWٛS'rW\P⫮ݿ~1͘Yɝ\QQ;qG&NƝeKf1A< !Q$$ g>nWH@C%~_QEE_4U[[ge^) Qgy^Uަ(,4ѢlUedB(i(χۡ݇[}?ߧ>-#A2 <GEq(Ų@);;M}4S_~y?}sTxY,*Dmo[#n5ZLTzD e58B} _ ƫţ<_TFSm**ghϞVi_8?*Ƶ4 =U@G}Ib* TKiE=Ŏw4̈́׽{رaO?t策L?9r"@D(ΏK*Dy@c҇GwV g D pn= ]?M7nP0<\|bЉSmŢ;rt٬eeMeBƥB=% t ~%M gtf C?~xW>B8?. M(< )P=߻W?ytŨ.''Ge@ wx/sڴԨ߫_Sީ,TC}r=.ӋOaY-ȸEY۬IRF-LI. €<㔯[,M|C.}hYl8?*Ay4\vnTϳU(b!(OnBjٴzjUU-zS{m;mZ  +ґ3j6s <8p%3C C_h0!C.̌[d`o 2R>$ Pwhj<Ւ$oڹd\4ꩵkdqS/=Z /EqD(UJ$1 \Pedfd(WUU'WY/rojԪU(/A\ŲDù(+$qy~ĉLȐ%Wb~RHB40xgw}}4xϮgXQw9sTxzR'UTPiJ%0a}¸KqQ$C~trrr)8inlwMdӦ)*w(0fB}jU\T%M3G+M'HQ<};w>cV]K@(·< )Q$% =oj6Qsc|m[~zϝSީ,@HP#|?T֬LG-sq0W7y@<HZGWRVM)@8vxW~?mّoӪUpPn; a^yaUEY\\BpS(_gcr[/m1EFq>,I< QzH,;w_}GALLt򲭜t@Z<-sϖ>\O]Q= i5 I/=]$16G  zczw)}tF]'44R=1BQ=ڰQG~t نZFo]3R8[mw>:D@$ԭ jTJM8H|H .W*IolM֫0N],,*"xH͍MZ9姛Uj~m˶r)딯[,t9sTxzR?'U|TLQ8ByR(Џ=uY?3_yq~XAQn6MS $sǻ{R[JTx>7v)*ghӫ,:c G~38H9)(prB_}e$æns }zm:~h+%z@*Gy>װf&1;?fi3 ;2 }W btOx P$ @@:;;uQܿwS 476ikf}?VJT${ youUfhLoU3fV@(·< %e ]|I,h]3w0@B%_pB_InJmW>>mpN9g`]P뉓1/ίOk(Py@b< 1><5Ϯ%0os ,-yX,4HG[7I͟y:s9Tm?Te q|]>:w~oj}["{mڻkA< Q< @Ν=y4vs,N;:m5}Jiv;/9̙Be[ Hc[DnP+c;q] gb~|()+զ2 Ȗ:cy@ʣ<H ózj`/L}~`2@I)kX5kS3ʊdd 5hetGP9⑿#xwrĬLY&HB}'2}̓3q㔯[pjǽxz bFq(p[_a_;KS cLbǻiwq%SeE5I854''ۯhȷPw ί[b2u9װy%r9s9@ 9SoבoSceSn54˗e3 mz^e,.63`jKf?r0FGq6( PZΞswi{&'RԱRYALc(+TEYR8N)oR|ܕ?.W#w?#ù(+d)v:q*.۶feC5-sjv /<9粰@̀ }7< P =ojs \.J|AQ@Hav^zŴ0ؑoӬS(C'"ldܕ1_e+z U}&qzw {ؑz;w#&W׈giE,*6a뒴=)Q y@Z@Rm\OQ$63`^סmVK*ʊ4kSyVE ?46r fMw(Hәl;װj̓\5H[d DJn˓#&d u+7 7Au'ĄQ=Z|/Eq(P`Hs뭚ͥ m|>I|Ev:q*f۫(-ԼEx%*ȷ(Zb_6 %M~KZ֮a!ymXWiƍQ "+vIOč=YVHs,<{'ȲuVovnxFG9j;nםtY. H_w8_> "Fq(}~mXWGv&7tmr ,\H^O$u!54DI#>ܪ@lˢLrWLPT[ @؎58<4M w'N2l8HCe1/?Op:6+ǺP31+>P}r*,w+װ- kBfMByvyh/Ry.<(Ї+h]3w0i5bIr KJoz[+Պ>^SGz4mpZX, msoB}1fլq\d{ ̚>ayv.YD lW^%Q2|E.W*Io N}gN$~ ~  YV~?_k&Sڭ_}'%&Y-*YwNc2#xe˙m7Gc{?(W+N}A>0T[^s% -uhRQ  U|T+#@' voeI)26S;Wo7JYӝ*w+/Co;yi{LLJRNIZ1 ahӫ*-|/[EqkP:.H#H@g:pUPT9Q\Utw8Z'b^\(+R+_֬L >=} 9mqVonz;Z-?6sZtd{\JJisl0@X̀-uQyF@y\wK:, @HWΞ?I_=72bѝߝ;!3`Xk8*3PKSlҲR985gKv*%ܕBYDc`zC\ê5 mtwφ˴:s2>^8ٮf9u! ҇멵k-ګ)yn}Hgj?Ξ=;淝gH߹VN arjT|)ҏ@HP\TӜ8Te M Mgz*M;an}_|dOUEq<((Ї=r\(ҏGP-sjq ZQZ+%81Љ^ve rj1I lGե qgI)pc9mxy4`H%}N-#XUަPN HlGV>e/' iN(& 6ZOphwS)ҏ@HAIĬLQl+Ǘ3j=.pꩵk6z׶Qy"@yP0T[^s% 5;wQۓ:\/w˚Љ#^s8[3+ DW^%6 IDATP B=i&rp}kܞ;vGM|0b)a3 ͙?W ,Ҍn0a}]Zү$8@(p(GT6Sv/Jr(/ʢ01e>vfϛ9jy bzs/Օn;^U͡<@ PLIYj֫0a3>ܵ[Hs ]zq*5+Wiv}Nގ9&kV(P<P'_()+UJ͘Y9粨@LymXWiFx(#=~@6ZOc Gup?r4p9sTW+ZW '}jvԔI{Mi2\w Vy}js#3퉸VRV*0TrGNJ(Ռ,(7m8>yb*.q0T[E}:@OvTrW> @ ۡ'ԱMҲ-ׂ-nY #DqꯧLFcʫ>y}dj]K0JVKNɽ4ޚI(RFCϥܱ}\w+sb.'7^ۦD^zO1[ Yr=v AnϑoSEY]˶{|&f9*?r7X?\==ISs@JRYL{==T-Ou 3͍M:5U4 \êrWf1F VW 95ϩ MNux>~2R0a}y<qrJo$Rm\/# @̘Sjij&X-*r`uBjv}N`JcA$`Z?ɷI)KϿHq>23xI"<%esrLq >@' ]e[ H¼$MPhnc,H]GqK8@Q`P0z n|VKm̕kJY@Hy}H̟GV>&' k F54q({G {$N))+զXKei(69&.B=܆˟j*wzLs:p"ޫihs/F(0(0\b&$8mxy ! [( D`xB#ĬLHz Au~~迾iys1Zsc^zEL$$ 6R}eoRaU^v֥_OuA]yUyV¹/}T?ޭP@Z`3 ZxS, ;Jy=HS:-\ ӱjnl#G $9˶*ϰ5%G-l#Sn }Y~XE -\.k۴w yyU]$-Sk S͍M:pD-M6Y25ՙlr7d$Pty M_d~r\^סFd(`((Gj}zj2 $ۣO/雚 $ 95A|z$ᢼ#Sm2L0a}ˆ^@b<@rH!𕔕jz TwzIrMɑKE:[Cc< xmz^F< < *^%m0z i}:pT͍MjnlR4 %ɹWyUyVBte&Snu(jE3.aRפ8@<@@9an=~RTjilRC )jɔcM_ yVfg]3@RA>7Sn&R-\H ,ʕa8*AD]D@<@pK.)4·?Ѳ }Ǐ%4kXwP741+S䚒sPO.P߀7 IA>lK \ |[7 "§8@R<@ptX#R>֭'@:pTI~@pGM֋l ߻p?2{ܜ2$;OXq2{\-\+SD zLi<Ɂ<I}t**ghs9f@=:Zn˙sů'fM#ڂ}^U_͙o\*'P߀|u;Ч@蚟u_@ fUTθXQ/Z2r8I$$x=fFJJUS3҆L D5)R-\<4a1I Q=ڰNA$P Q \v M@ahiJ3`Xk8& %p" 1ppm}U;j)|(.HiDuZdApx}~NfϟKqeIzmڻkAD*b 9Q ɹ\%=NZ|j y|ڤ! <@S[7G $/ ѩ/>/# 4T8pD͍M:pTA$cT /RݕKϿȗ{z;1("\U&Ȕn=pGXQ⢢r̟91I q~a]_\Z ѱ6f̬$ F`L576I CsՌ3W#W^%uIZ(H H1.WI{$Fdj]Ka$ۣ&&`0xmC8@ <@ rtX#V>֭'"dLyn46ӡR}4 HC6ЌϕcPuKϽfˆ\D@j<@rihL҈LIY6m$OGmn<{PR͙?WK_G[7,:HaHa.W]C)GthËϫ01#3PKcSm%i@))+T1A I/="W;j)(.K1iDf[9c$SmnwoQney{o#^E 6 xI"r+U$7\ʿ|a#p3TrGey$~ {z 1(F\⿓w_w~/)'a^]vK?ndg3\ܾ~3?bђ~z vxW;wG{=Dy\*^%mNT[ nB~ٟNwN q{~ˆN^O\..~~P@=FiTӟIjú:k4<.0MCo, BAT횟@#z̠:;; j/*hjh<Dٻ VḺYy8blm mxT L@{ai={D)D5#c_ ݊GIf*|f!693MP9>̇O;} *Z5p877vKmɉLNLEK,j5-IOOHSB|իr\!Fw̛=]2<pF;}JV,_ܑʢKw~'NOƿj5dɒ_]j*+*W~j! _=XNq. oc< $禷R_,_\ 捉!?GbP_j5=ד ,?9~" 1y8sRzL5be} 0JQ6&LXssޔ;711?zm~6ίVs^/|~Joo.\t91==/njĚ|Cs/k[e샓bЕ||8=?՗^tj0$->H\Α<pNʲ~<$87PxtT^OD{@> g*VO /e`Cj48wOe}MY'|G*RISܭpomX/]ᑌNW.8_:h?q~٥Aq"XYַ̆e}c8w7F]??}]ޜTz{ W}p2_ۺp~v&|phy)ʲ>+e˦=6*S0GasZ?b.`Azzr {ڡM]?$k˲[ ~磏>RhIr b5Mo6oͷ*i<;om.O@kM5O{/?ίVTU>ohO =#$/q)f1(j Wqn l*g>Y**2956?sNOO I##GŘl,@3s$wq.[<_]T :ޟ{rP:5>TgzÎvs%tOWFy,c'Ę˲Q`.s(jI(qz+ lۚkoN :7+l<tL~<ŸWMNL_,.ԯ}^OObg^ʮBWʲ[`s(jw%fg݆{nz!hw~v92/ދ<0Ӎ<yŗŘ$eY? 0~W`}|g}Ck_ݖե-y==B |m6Iphy%ʲ~8|s֑{Q1h\yU\x(pxPmyfR;} @Ed8ɍjyS_g㧺Jon/z9{~j.XrA.Vz:S?>7,=]2d<EQv'Oe`TUĠ妧'&W]A,Qy|8=ԯ[,4֬NOO@Gd7\o˲>(j@Emc-׾hX.mqHF~~W֛=<VOYժ@[ڡ ؙFCٙL,Nma<UQ&NX}57~Tc*+s0{D:mОzF;,뇥xhI;j5fnLeQE xNgrb25vh7_;{eJonLt#|䱼uw03 )v2:BQԪߩ\bylۚ+AGjLx&&&291ɉɶ /c?dY:5>?𽖿B IDATW_+?wё##T!=]2x(EQLETM[Š#M525T&'&2=a?3\dI.]vi.XDxh8jӓ̹}C{o!+eY-)SIwm"]/xLjz~o沼<4tvx^ _.؃Dt#|䱼u7,:<Б&Ɂ$՘V,ϖm[|r1^|P^ʫʕڃȑ|odcFl,a)No,7Vwk_ݖW^xI ferb?>Y ׷Wx>ZyS,I&yZٙj4uwLo@t#_zFU БVoL/k[eب,XGG//o9*M&JY:<ʲ>˙ | /YY\,Y!ohOfDeY- Q$k1;SFv7F}S3sA_{ݭq}u[ =#Fs$YSRx*em՘7_?-6gبV=== K.skޗ9.OHt裏TRQlQ9ϛrB^_ʫʕS?>7,D|,e<Պ1`j.۶"k}қn%===gl샓Ȼ>Y&<&pK՘}ٲmkV^%hzz:?|bb_뼞?KZ8cov(;vf9F23fPjf76ܛu 'jŀp8[Ӎ<yŗh <0Em0%U+3mk.\*~b٥YfuzzzDڱ3y. |a<;EQۘd0b5fRMOOĻ{g_%+HoWXv8{d9&e|b<KEQ[d8ɥj4Ǘ7 @hndpμ!1g$3R<0oEj4e+g˶Ybё#ٵcgN,<Q5I$YF\by#pGGd׎;9&Fsdf8X (j$InTyz+ܳa}_ $d3B4Iʲ>!c<)6d,@}p2|yبpYeuAQNXT2mk:1gОL5b4deY?,'3-&3j4ח=ֻB)&&&'291ɉ|8=Tzۛ.8_rIz+B]q;hI˲>!38EQ&LruيٲmkX.&&&rH~6~;j٥t٥`k2cks㱲o38 EQH-%o݆{nz!'OóίVk@GindО|a1o2Ʋ pRQ$Nruيc¥b ҹ/-IZhcG11o$IY֏KpAQԪIv'STrφ~1xuɒ%K%Y\Gp`Nړ}C17.FΞ<,Em{GhkV׿h**b S-yzz8J*I _[Io7pzTc*%K(py`e} ɗL|ɖMeب@tN{܃.wtHll8?wN$sy(ڲ$IV17\O%OA@jndО|a1I6e}B e<BEQLEqيٲmkX.Uykȼ}?A@9:r$v11î<@E?$՘fzz:/y4t [Du~W*p5IFԘɖMeب@WɕW_%vGGd˦͆s$k Zy6*`-J̍J%lX; <~b^762e}P0h'ٝdsU+3mk.\*j57z ȑڱ3c'Ę;'6^(j$InTcnBtw~vGY~Yf Ƶy:@Y'h/yRIUbBt9qDocmVz=T ͷdfF (jk3s~sz8~>SmJ~?@pmeFex Ed0}j-W`zz:956ɉ4Zr\~YWǃ6rm+v:<@)̌1w\櫩T3h$I_Skӓ%Kdq.Xdͷdf;t-K2dsz4N72cg|s$˲>!@0REQLEշ/[mի:IeYtj̭/՟{6OeQE c6R#6X d<劢VM;ɝj-WN|kJ,Rt/yy(jIe`VWdw[G1&3sm~X g<0EmMfЯVcnV*ض5p@˸6R33?.`<0Ed{-j̽/\]ؼ)}.3Fkμ{lTx,e_橢g b5Vo{6w4ݾ=7q"IYK0c_NrsU+sCfbvtHvؙcbIʲ>!d<Em ɷhuͺ It#{ I6e]pyx`(ښ$Vc-˖m[r*13k2cg 1Z`~y(jI(_?lXʢdzɼ!1ZᲬp,@EQ[d8b5^om[s ׉g[g$Ʋ`a1XVM;ɝj5Vf`]T Fkμ{lTٕd{Y'XxmL2W[R=玻LNޥJEt#{ :I˲~@ xEmYfߨFk\bylۚ+psoĉY}Tzs+0exP;9&F?) r קGpj;'Ss03K/kVM=5ZU+3mk.\*Ҋ/|vӵ7@Sͮ;Q1ZᲬ2SEmmf_FkV*۰^ $W_+?wFwF2sm|y~Nrsي\J ` wpz{^OOn/Cଽڡ|'2vrLUM8#EQ̈~sm"~ؖv}5 ؙNd)m~WDYև,KrPyŗޗW^xI `y{}3ohO˦ [oW5)8kEQH=з5V9?NOё#ٵcgNZ6?,gxsReIv'Q]gTUl[_7ZzFw̛p~B Ζ<o)Z}Krs ׉[?Kxޡ=j4h-5yf(jk2s~uͪض5}.w=;A$9:r$~ɼ{lT;ߵyfx)$*z6ܛ;r**bƫ/Ogs^OOcinǟȫ/,FM&^A)hy[ڗ7?koN `^8rx$oӖ׾X?;C{2hzl,q)hy+sͪض5}.j9+my/\].b`::r$~ɼ{lTsm9c< pKhuw}9E1S-}t,@Ӎ<yŗhS̩UlOE[ڗ7?koN +M5K/閽[oNZ`pT!F6@KEQ[dw\okVp@95>?𽖼~`!9:r$~ɼ{lTpm1e\ouw}9E1211?9@^OOVYm84N7O_}+vhyZ[ڗuo*9rx$}KsW+2ړFC̵RJ+wͪ|r12==O_圾^>\|%F ё#ٵcgN>6+sφ,4B?dsm"m1J?6indsɾgh33na<@W*@q9 /ǟT!F{6@2kB9Y2?`X.MutHyب+vVtgfD }t-y`,}p2O=d|w"3H@73`^(Z53;hJ%wݟu֋Ykndsɾg %tmxy(jk33T[ڗ7?koN gwhO 1o$3K|a<I~׬Zuի9];vf7Kۥ`1`*ښ\_Ft-g]T $Fy"o9*Fg8kǥ`>2`+$I~6ܛ;r**b,Pcޡ=yŗ Iʲ[ 3y-hJ%lޔoU q}'?;FC|fOH|g<RI }G[ڗ-۶fUbsR 11:É̌HBa<SjfY2?`X.@Y֏KBg<JQlOXз/6ͷ*@p1,'23f(Z5$w9Y2[W!^yړcbt]Ie}B SEmmfF9Y2?`X.@9}O[GYfa) w IDAToQIUt-g]T =6oFg23Og<g(j2sF5:˺ 掻ʢsd샓;'\~3y8 EQ̈~Rɝw4Yt#{ yN$XR1TjIYz+!<AQffDZ[ sb]T!H:k26*@Iљe݆[:|8fEQf }jt.#zwǒ e}B hyEQ[j5:= 1l,q)EmcfF\F@;K7'c'l'23? ty@EQ&ٞd͈h1d,ۥc<(j˒Nr͈ F]$˲~\ L֟d0ɥjt6#zH:<tmO2dsMYz3*<t-K=}jt>3a4uv%^ ){@*̌oThL,ǥc<](j &YF3.t"3R@2y(j$IU;d4u&l/`)ڲ\S`D_t#R?+3 )`~0y(jk33_Fw0q}'?;FCq0ƲyNJ13#jt#z~F]DfFx湢U $yT7\ʢ deY7yX ,$=z+ywFСڮ 'ẍF5=tNfОbt epU_F03j#yX=@jtn%lX -`4N$^Re<(j\ߢF1utH='o9*FL2d,rf<RQԖ%ٝF5Mݒo5+Wh=dhy۹{(g A5C1ǔ~E:tVj<|'*CGX08_(Ѹ`C /ƞFx ]~_>~MNO>{r-c Inۻ;T)#2LY0:3l/y<G)|ʈKk ?}KB ͬܽ'|?wL|(<I#I.Zcp?gbfP̿~gonc=H7(Elrz*_]1mL5`{h8yXE$7֪- r租rh~=Myi)"]Qϧ 5ۙJ%&З:ܽAۋ$M7<E},I`;SdvJzfBʝ~1ߋ$R|yۏo%nk6bmQsonc8v{w$NLQS^orz* pm|v^V_gAh8QyGXcUk|7YيA8V^s~q9/{= )Nx85EQEk 3J-K^O}ϯ6J<:WµLL(w~971<&n.8MyoE$7pµ,\[4emadxw.S/dv1F{r-c <0@j& S9[1r租ˏyd"~xT2;w%RP3k5[ϯ6p!)A!~D;ɗ>S/dv1{Y{/71D()/ыPV~kOuur^zNy` ng*]_T/ '66r^뿍1DCED?&pm1 p z{>̝ldx#~Uk,\[~يA>N~i9+weg v{wCMD?՟pm1S38fkr^~{AKM +<0Da|]U>Ao;?t 2D#ED?T*o^=mmlfc#F~tLNOeb--z{>̝ld%F~tTpm1׿]r Iʝ꣼ 2DDD?jz% 3;wY{ϕ"'8BD?Zj-fE}/?-g=WGh yяar^V-cjwM:<яA!Sx=Gk qe~dޓxGk@re~>x#E},eD5Fki0w~Zve#HyO ]g*,\[o\NDʝ#WGϋ$|<<1яkWS9[1plz{ܽ_2?^$2nO#8F$7h9SdvJ7iL4 |GY[}oc&<g  ~>eD3"4>WY=^:Y^VK5hz2-8~yHDO|qJ-fv1r onct=M}{xEF\h֪bjꅚA`笭>^ k#-<0=I2>.evj*g+}t;])/7/%Kk?}]cZ[}GNYQS^яj/K^Xʝ꣼ )/DQRFYFv)sWS9[1 NVO?I#y>s$_Jr"?gvjfLoՇY[}>2IJr}n!SEQ?KDOT*YkiL4 hkc3+wemQ^z!I<,Oy>/o-BTk|7ꅚAtuOmaA8mS7<)g,\[TV Ǩ{Y^-pԃ$߷ۻM0()/i W]1|^/k(=|dCK,yVw3Jf|D V_zInw0C`?fsj/K^h5[Y{/+w y9柛`HQ0h4>W"`duuOmaAxmS <*!m&pm1sWS9[1CGY^-.|n7 ϧ迳+"`zY[};?- #?wL0#(cIn YwW]1 _[}>2E[Inۻ0#(S7\rRyu^H@?󁞦2E<0Š~#eH5=BzW^ )MyRw_4&D @/,w0R$,֪bj- l|In'n>7x($KIOr"!=I0Gzv{I<*|K׭1|R^_7"E},%$,:f3;w F0'xVK; EQ?Fk-‡8SdvJf F`OmS!|/迴JH0:z{WoC+MɊ>$KIYu4Nl(N01yVh~| <Ǧ(S'h>WGY[}Ǜ[SInۻฉ>FʐE,|iL4 pJZVVot §zVK"EFʈ~|j/fڢ><s\~I/ Erʈ;kpT*ٹbcemaVekc3/{=p^$VcNxSSIn /Z+bيASYA8N)ۦഈ EQO_i|3yy:Ajr^olf2E98myJQR^9fZ5_]tfI^660k3 i[Inۻ@зฝT^EsWS9[1 0:Y[}A\~H7H<@ۿF35sshdL^Nca`൚ܽn 4$\߉(EQ2wϦZfrf:sW3;w @0[Y[}Q~Iye~ <5zNWdjf:sWRP37ZVof{snww0\$Uk|1wULpz{xc3N(W ykW<2'ŕyx=Uz8.)!ɲ+ #<C5$-IL^NcaZV~[}Gn I{V+02ukpҪj&g_Ml(0º:ekc3/{=p~H7@<ٿF"kFf箼 w?t]Ӵ+<#()g N˙J%S_IB(0ZVofmaon"r[9UyHR9F?cNSV}u~vj*g+F} /{=p$n6Erk7m|q$b~,076tB?xvh~pH<(K)#֠_LNOe89Wolf2䇔}Sۉ=E},RI.Z~+4&ctooA7In%Ynw~x>PQ/藒Lbzpf+7P,Ozd9ɭv{w ~#eD1ܕT/ԌG[eg)//>xAQRF7\Zfr?0r $RFF<Ǭ(ꗓZf|b"S3әRIf, 8ӏ_jdjf(X~k}37  %e4n>7|^y8aEQKyFaLNOet&z8)^66'MxOLrbEY'[i5[yf( )/nwC<}(K)# ֪bKiL4{i5[yYL5 E'>S)#$- ;Sdjf:KKloQ ME<}(c)#If,°8 T/Ԍ0:8*veɃ$,ۻI<b?2hIVDf3~:=ʹQ69 wO<(S^3&2~i"2wl?i*(x2-#WRsaXT253ƥF&gӘHl0'ۏZLrUa4r`~00DF'iLLdRy㵵'W|5 E``x~H#uk0J&2~i"ƫ'lfZfl7[Fa9``E| IAtJ=>IDATT/ԌV'WǛ[Fa ``tRIcCO( jiL4  EZ- 5>f::>$߃;>7<p⊢>R/-'crz* .2>1Z 0R66eLI+N'͖a`9$NUQ0Or*pjZ.OR9K4&&R9[1nnk8y/r/8MyEhH"p&R9{6KTkkzN_oVNN7\4}sB<_Nr#eH?c/z>7֓Vz{{ye?In w#<0>Ë-ma}m Guut^oy/&x8EQ?2_ F*J/MJ&g$SO^/fz~LI5 )c9A#^Q/'2 $2$ϛ[Ɓv`~ C(c9J"0|7&&R9[11{DCE'Ynwy`E})1EhRzڅZ*Hz=\~J֓Vz{{v:vѰX9a%FUח%F0<^fH0^d?Or1 0 H*^jZdrԏOLrٳiL4kgt;\uy`ErczW%~pG:z~R^uy7p*|ʘUzXLNOzE{>W{^-Cuy!EQKYT*}Lj^ N^WIxsXIyq]>PQsXo&rlG{Wef+W?yIY;!<9ޟxE|^J* ֪/WΞMq>qf$i=ywZV^zӼ~]I>xErCFD#JϪj%3?ИHlŘK덨|f$N'Nטy)c<gT!R|~ٌqU}[}I?xcgo'w~l 0_7!8!EQ?ëKI.ZFF˷ۻp2(c9#a4S^n'1RcsV4|X~$O<Ч~9_@z2_Xo1u9琉M(9鿴|6by! Gb E,0C(KLo4zCM<0"Ӽ~Y~$O<0>cV`Hm #Yy^ A^埛<oUy=*y=oF<{+јrV=MOnﮛ!E},/uz߃~YIyUQs'9gUPUyxuz~<'n:ѠUFHUyNxSW9 ,0H(dUyNxT|i"G"Y7yFQBUN܃^_owM 0Њ>z%`h:z"` ocI 0„<#(G_>/R;ByFx(XcW/ZOsxM~P~,P(_N2c=HX޽o}yHEQ?P?2ec4e$?e(nﮛ>xё+G/-ٿ" (X^P?d20 wR^iwwxNQQBE0$yT`$@<d??d>eP?Kg"` `E},>/Z>Ss`+|k_Z=+)ȯxFTQ~~: 92oMyE},A$_X@@>z4Qybg,1{7yCcU9'`yynจsj۞zᵑko>]Nx'ɗ[o^}G< }3KrBjv{w<C$X wiw&y`$`?:_NrJ{2OϝHW_E{쁓vp)ՅF<1(X)DhGǷۻ;f4yE>I 9ޓ.<<(koo~=^O^]y!V$cG>:g7~h9F]?ۻ0Ͽћ~|>ԃ|#}]7"DQG௾䜅݋߹0R }sN_E[6L IENDB`dep-0.3.2/docs/img/DigbyShadowsScene2.svg000066400000000000000000002242131317166637100201570ustar00rootroot00000000000000BoyerShadowsScene2dep-0.3.2/docs/img/StatusGraph.png000066400000000000000000000455071317166637100167710ustar00rootroot00000000000000PNG  IHDREcvbKGD IDATxy\T?,ƎlVWܽuq-$\Ji.$J-.ih.7T-7@qEMf޿?q 0,Ù||yߞe c.0Ƙ.cJ(2ƘX_-v ƴgϞԩV- --***ĎV9۷oƬwb SQQ;wbbGaL+\9ESE1ƔpQd1%\cL ESE1ƔpQd1%\cL ESE1ƔpQd1%\cL ESE1ƔpQdM*??_5V999HHHEDYpQdBXXXX}mQQQKǧQ[zz: ;V^3f_~ӧ4oP11^cĈضm[K(2t&&&*mYYYCBBpʕFS*"44Zm߾GW̙3h"|hNy|+)y\ѽ{wDFF6z>4c3220vXѣGZ)ڵkFG,Dx̘1Ch[n JaeeTJ>c.WcUO9m9<233{ mYYYprrx_uz|֬Y L2mڴD"~r90n8e";;'O6cȐ!N> 믅@AA"##Uڔ]~FϞ=qZKQQ,X L6 Bpd2 82L+-..F\\Fooo:u pqqArr2;;;t gΜ!>> ۇɓ'ɓ'XM<EEEHOOСC1c 3}ŋk_uA1W)ƪ&8v>ct w܁/uȀXvܩW&%"ŋd47o$ԵkW(NDԵkW@s̡ ڷo޽{ ӸRͮj[|BCC)))֯_Offfd``@.\P>חH.QLL ={PAAܹs>999F;wr  Z|9=~Ν;GW%\.'ڱcJzUniiIQ4󪹚b嬫_vv68qLMM -^:DTXXX}`ذa4l0.-L}b@@I$*--%"K.Q(*r9ؐii{~~EhرjGdd$k׮ mC=3g{JX@aaa5׎;S(dggG*:vSqqJxa\]]I*G]6MƼj95NÇ.|~;y޿au100ӧOB{`` 55Uǎ8:: mR|q 3<үPɓԿת}$ lmm]A;33:ߛL&C@@֮]Eu׶j󪹚j~E:u*6n܈`L>~)͛Mų> pvvVzNNCSY4233ҲQʰk.5Jw puuٳѶmF->5VE|2RRR_Ĝ9s lԩK(--( aI~u*?v/`ѢEP(B{ff&~'aor| P,)) 0p@;v,1h 2+ACW\+mqց9yNq޼yJ6mЉ'(--˅i uAhҥ ͛7:T;XVy"=00ЬY(==V\I8@ԭ[7sN LB&BADD .$+++ "7n~Qtt4͚5&NHrÃTyM6$Թsgv @IIIGRRR֭[jWzkj*...BUIʱe|K}bRRk׎Qbb"QxxIN۷D|raP*,,e˖ m2JJJ(--zEfffGiiiCAAA}v*))$'___?~Qvv6}'СCtA244$Bzj}-[233̌92/^I&H$""& ٳ':uʊL*KDÊ+h֬YIаZ7nPHHUVѣGjWTTDL0Ν;ZIEQBT1 ;;w뜖77r9޽Gb#3V/vBB6fҊ-[  8881qV,99~zx9#..Nhb+Sbptt7 g"..bGds+fkk5k`͚5bGaLg"c)cJ(2Ƙ.1"c)cJ(2Ƙ.1"c)cJ(2Ƙ.1"c)@)))~,)c"++ NNNZ?VªUϘּZ7q:"ѣI#C޽CTH-Sdݻw#11Qo "t1|&y4E*lݺK,ڵkѯ_?ԛ݋G>?S{(/99'NDDD&L vիv܉;v`biϬE@޽]v@lقꫯ0yd4gr`ptt֭[[DAnBHHt???#(Z [r ~78::IƍxĎRju2VEhh(?6m/bGj1('** ׯG|||bGjvK,9spaG_^II ~ؑDAD>|8~W={bGG|7"Bpp0qV[HCEYYؑEΝ]v!!!b3<OŎ(2 b͚5xŎ3v튍7bڵHHH;sL/~-tI8/0޽{W^={`hh(v$TRR///<38~8fB />Ν… Ŏ7(2!1zhbϞ=h۶ؑt-[b |FHH6oތGK8z… ;.g֬Yk"&& b=UQ|qtE~gd2,Z#G;^dž G3iW^7ylٲE8zoĈHII˗3ψGGrE޽G|iFHz/77?v؁ݻwsAԒuΝ;XlQtES1o<^ ;NթS'̚5 ˖-í[ĎS3g&Mʕ+Ŏ╕G¶mĎ+3 w܁^|EݻLvލaÆ_k&v]E>>>ɓ'aii)vVEEE8y$$qZ p}8p VXӧOcbG \YXv-nܸQ]&!)) =EHGxx8>}*vqQdZwEL:6oތիWcݻ … ClܸQ(ȴ.&&(,,Āe?~~!ϟѣGk߾=Ə+VT8 -L*펎Ŷm侎w\]]I&G,|iמ={_޽{sX:CxxVh.L6mڤ3r?3zꅬ,1u"""xܹsP(5N#Jacccǎ{͘$88Ǐǵk JŎi֭[fD"Ǐ:$""ؽ{QD{Lkt邿Kkx7W_s͜Ã믿"ӎ_Ƃh``gggO8pDG!99Ν;Jȴʌ`bbٳgի4hHX]ݻcbGiv\Y+**Ν;uTW(HУG}h4m``  zVAn.Z 2ǏŎ,(2jo?QEXoCh.: 2GGĎu\cu!'vɢNb·l999HHHEmumbd|||ZŇ(zyy!,,WX}ֶ˨ҥKӨ-==;JSWb1bmۦeim6gxqf-;wJCBBpʕF}P*"44zU۷h߾֗qyD@sfoݻ#22Yٜc˗ŎUZw؁ gdd<^)ڵkQFi}YUAMmjMڤٜ4/;VvNǃĊΟ?L{Z]u\Y300qQa͚5 ”)SЦMH$G.#!!ƍC߾}[lAjj*1yj> xxxZ/ 22RMkkkGa ´i단(LB&!//P\\85 8u<==d!00vvv֭Μ9S-C||< ++F/==CŌ30f/^qTm#"㏘8q"q=zBAvvvdii2cǎ9:v/22tuuUuT]E{k׎k^׶阪T{ִ_<|Z\mS9SJJJۻwocTUcB +++ZvmDI &ŸB{`` 55Uǎ8:: mR|q 3<үɓ'UH$VZ||}?<ڏ> H鉳g62[ũSbƍ駟b޼y?~S̾<ggg\::33S|--- vj+;^xbh۶m[YM64k׮UjznȘ׵m>|(..ZsS9ҖI\.˗/?#̙=li^K^B!!Q-,饗-B333O? { {=U;`ze8p`lر(//WI:z){]FcT[뫱Y1Jݶ[n…e5OSsww?uC9̛7\]]iӦMt:qQyy0MAA:m]t!333y֡Cj[* (00ЬY(==V\I8@ԭ[7= LB&BADD .$+++ "7n~Qtt4͚5&NHrÃT7M6}TS TUl2DDD 77Wh344|||E0=Fdbb BWK -׫lΝCxx8xh,,,PXX(v htQԩSyf8::Æ ٳgo- JJJĎ>|Ś5kf͚Z6Z\uی1VVVcccchEX=}b .z+..1n!"pwwGNN_睴///3g΄= %KcǎM)--E^^}햆b `󰶶F^^<==6iOw7nfΜ شi^~e={?B䀈Md IDAT< -͛7`L4 kkkL03gÇիLW7n0w&~wLWܾ}Zz\[oxU'O`ӦMMToweddW^yvjl`jjEk׮]D"Y ذa 囮… j~_zJ Ϭ.wi6l͛xׄv9'Nݻw@8Tyg茌 nh]@hؽ2|2ych E=2i$899aݺuBƍW*P~1$ q c8t ѡCEΞ=b.zطonܸ2wgǏ|gMih^zaСx ɓ'P(ׯFw^g+"vᢨgƏsssDGG~P[yJgCApY?%߿~odbZKEQXZZb񈉉Ν; 3~|[|_CUUTT0ӧItÇ奵.zhڴi(**pQHDDk^wذaf͚%\M^h텧52Q-dk/TVK'}PΝ)ST{>>C8;;#==}Ə/Lcff s~ W\|777m_j_F?RI'l0b-Sff&bccahhᑣLw5u0c <|P{:u_kE~)24P^^#GEƘ=<E(2w]t;qQdJP`Ϟ=2dQEXq={bGi\cϣ{bGi\c5""|-ÇoQ(_AYYYٳuw[jEW^9r$ryX cc}=}W_}UmwwwtA1X?/_L&v@eeepppL&CDDq.>aM7ҥK{5О={#Y"ӚI&a8q^xzzP(p4]\֔covډiݻpqqA\\F!vćL{CCC 2bGbZnlll(vfEi-݋K.abax ֯_?mڴ;Nȴ{رcmۆ+W!66?1.Yi@DXf Ǝj+wff~:i~\v v;h3kV|EZw϶y̚_]Ù3g0g(^W_}.z{Ď#&Sd+ҺǙ3g=E&/3f?*r9<==ѭ[7$$$Glg&."-o׮]"_Oaa!vaÆ/;.sL||EZ</FIII⬌" 旙(̝;b|t ߵ :.]˗add$v]ZnQ_֒`ؿ?*xO$k}:6mڄWCb5|+RH7?_~%VXtG锗  D"v$]Zn?^x" .DZZ.gݍwy,YK.qt>3W={%?>3t /VBΝŎ"ॗ^7Ŏ/sL]FDT*ņ ĎW(2Wk_رclllĎW(25}t?׿pҥjEZZĕ3f?Ŏw"k5}GzG>}pqSjk777|hӦ ѣGxWc޽|L=|{F~`۶m "H$dddEM̙3ٳ' лwoٳx뭷pU={vvvbG|?[[[|pzoKRlݺUMo022Bӧ/cԩ8vvxO.]믿Ǐ\5GGGܺu|ӧh׮6T T,_\tz;p^}UU+pm8qBdڑb aժUزe8Z.LEEEӧOQQQv##!ﯿZB | B!P^^;vɓ'KkO}/TI.u떈)xAv###O?ō70vs] \Y+o`eerH-Jm65Ά T ~~~v.]mۊ)+77yr ##Crrr \`100@ΝvZ"kQs岳æM͛7qI֭[!ahh ^׮]エ#233QG-X222p%t ]v;R(,,+zccc#=GGGuB芄1Æ ;J&˫]7oބ,--Ŏ"dee!%%j?J$$$r'D>cJ(2Ƙ.1"c)cJ(2A~~N͇11pQlV+V@߾}akkeTTT`ҥi|ĖCCCdggޚ;{]ە t&&&*mYYYCBBpʕF}F*"44z۷h߾֗jkTsfoW`tΝ;V_E>>>*m]vm7|ĠP(ݝ6oެe[4՜ٵǣ.{Ko2o߆^i瑙;V[]/͕]1zfaʔ)hӦ $#ˑqơo߾-[ 55٘}pA6"?'yyy7nlmmѣGjSήɶɘDvO>#̞=RM2333H$,]TxPٷ~ ccc֚[cZ7e֐իWŋ d2a7oڵVwΙ3222h߾}z-LZ-cնRRR_.\}/\.'"@{졂rsss }rrr͍:wLyyy$,,,h߾}t@...|rz1;wJ\Nc#WWWYZZG@MPPVVZp!effҶmիDuoimmWnnndmmM N999M2>s@/_VXkުj;|梨#RH"Pii)]t0BWQ,JrlllԴ4U=??_h"4vX#22еkׄrG̙3 ݽ{W_ll,kǎU) #KKKy;vֱͩt~OD+IRuM{k׎k^׶D"\N.]\j۶- m/{֚ڊ">1???+-*'l``{{{<}A,,,RSSN{1߮T*|kkkA!dllL!ͥիW kٲeIffftmrWcW˿]cJ(2Ƙ.1?Ø"BLL <www=zm޼?ѥK>>>jGZVV>}hpQd°a0o<k&cȑ8q"޽ VkccP;Sɓ(++ 4ÚEjL4 NNNXnжqF#=#5_U9s&bbb/kԇ5=.066Fhh(ۇ7n iii#?VWώ;oCU5o|K.EEE5kO>O? oVs )Sg~!> Ǐ133c5ɓ}Zm/nܸєoi裡#~5"ci"c)cJ(2Ƙ.1"c)cJ(2Ƙ.1#*Opcy(MSs[ؽ{7rQX=:u VBBBQX={EQg;6L$9ESE1ƔpQd1%\cL ESE1ƔpQd1%\cL ESE1ƔpQd1%\cL ESE1ƔpQd1%\cL ESE1ƔpQd1%\cL ESE1ƔpQd1%\cL ESE1ƔpQd1%\cL ESE1ƔpQd1%R0O^}Udee *}Ghx pQdp]J;wT~722jX 3c0vX:D"ȑ#)kj\#F@PN3Ezh߾=SޢD"رc9kJ\1c!C) .Ӑ!C``P!x ڊ5.Փ|MH "5.5@PPrJDJĚ E`055~J D۶mELŚE!m\_"bM"c 4zhڶm7xCD)pQd`ii u5.5F ŸLI7B&aժUb`zH*ȑ#ӧQ4tm2L(L >;FpQdqrr°aĎ9ESE1ƔpQd1%\cL ESE鴜$$$`ѢEbGaE^cĈضmqUzz: ,pQd:{;(oߎ}ҏELLLĎ5jTc(2cΟ?L{ҏȴfaʔ)hӦ $ Cxx8d2LZ睞Cbƌ3f 郋/?bĉpttD^^ƍ[[[gΜW>uj,q1|ԩܹ___8;;#//OecРA… D<|aaaprr֭[U)ӧO }fϞ TB K.EEEo1bcckcu6l 6^}V^MKDD/&$ɈhܹBrssΝ;S^^v*sϑ+%yxxB,277'pB̤m۶իԩ+svv68qLMM -^:DTXX2r9988Ў;"޽;uܙJJJ( TF֤P(hᔓCDD9˗/ ߼y5)szYEVŀH$TZZJDD.]"EDD3g$t]~„E122bJRTxݝW(Ԯ];2668:f\Ç5&DDǎ#sss*..Vᅮ!ݛbbbeSΎPTTrtQnnߜg IDAT.mۖ/^L{ը(3 ???L8qgQ׷o_ɓ'kL&C@@֮]ET8PW"eeeSG̕˷QNewށJߞ={bƌZ6u֭[m?F^PTT -BBBuVܹsD_~oF[4q2 ST(qFO?Lͣr""ׯK.{ zKhC=~:uD?uUeϰʧ-_eZ%\N#F gggѣ?J7=xO?ӧOSDDDkzEթ!EBCC4w\@K.UiOKK#rJjQڵ+988ܗ&E|7sMEeݻkeK,;wÇ ͘1~gOTƍhԶm[3f ]~EH )#WWWڴi8pN8AiiiB)..&rppP9G7m42a:"LcaaA())ޞPJJ ݺu\\\T$Qǎ 0ߺ-\(##^+_XXX15jM0X:uF)>e200cǎԔ=zDD_PDDt=266&__ E"5(&%%Qvʏ%&&WsϏd2C7nPHHwժU#& ٳ':uJ8~cZj6c zFV\IΔ%2,„ t9$66ȑ#*㘘Hvvv4yd-""%YFm? '-YFMo6_զ{i֭ _.EoQT(yf̊ uƒ6bjL|:&EEEԥKjW>E~F kr˖-CDDrss6CCC899"'ڵkRjwkaM.99~z"p9#..NhɧKc_|=֭[ɓ'7۲Ebcc1uTl޼ưapYãӥ1177GAA 6m4۲HL > ro$ v)lCz`)2Ƙ.1"M~~jvpQdͪK.lmmŎ֊+зo_Ǵ"kVRHMM\.;Z!!!rIVVZ.ٙ]vbǨ ŎQ/=z1ZF cz׻=[]{LTׯ_G@@ѳgO=zg43Z`aڴiETT~l2dlllӧO^QFN'\\\4ݺuSJ5=3e˖-HMMEvvʷS>}e˖!88?1`\tm5 KN]*9JIII~z233#OH}9 E$kX5SETJ'C :t!Ŋ$JC-$B""  .>ayG]MQߞ,v~fv<>/i?277''O/J4+tvv._UUKWWrф1EQ@v!]]]ٽ{djjJFFF+ו(.K),9)"r gϞ={H8Nz|W &ELΞHEE$u=ZoD"zv@k~VҌF![nMB\j9:ٵk(d=S4͸e˪Н͘Y+gϏ~?ɟhv˗q\nٲ~߽{7IU{ԥ=]RRRعsgsŵ)/_$??{.Ӥ6Ln8t999TVV}' 37xN3AG"{֥5h4JjjoU[[˵kp\x<^j% 211AVVdggsm>~ӧ |>ۓ߿]juuuzOBmlmmmw199Iss3CCCxr}fgg{.|޽{~rrrr0M B=0 hjj\pw1<|`lQLZm3JPak|p-2?.SJ)'MJ)IQ) @o)*TvG IENDB`dep-0.3.2/hack/000077500000000000000000000000001317166637100132055ustar00rootroot00000000000000dep-0.3.2/hack/build-all.bash000077500000000000000000000022421317166637100157140ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2017 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 script will build dep and calculate hash for each # (DEP_BUILD_PLATFORMS, DEP_BUILD_ARCHS) pair. # DEP_BUILD_PLATFORMS="linux" DEP_BUILD_ARCHS="amd64" ./hack/build-all.sh # can be called to build only for linux-amd64 set -e VERSION=$(git describe --tags --dirty) COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null) DATE=$(date "+%Y-%m-%d") GO_BUILD_CMD="go build -a -installsuffix cgo" GO_BUILD_LDFLAGS="-s -w -X main.commitHash=$COMMIT_HASH -X main.buildDate=$DATE -X main.version=$VERSION" if [ -z "$DEP_BUILD_PLATFORMS" ]; then DEP_BUILD_PLATFORMS="linux windows darwin" fi if [ -z "$DEP_BUILD_ARCHS" ]; then DEP_BUILD_ARCHS="amd64" fi mkdir -p release for OS in ${DEP_BUILD_PLATFORMS[@]}; do for ARCH in ${DEP_BUILD_ARCHS[@]}; do echo "Building for $OS/$ARCH" GOARCH=$ARCH GOOS=$OS CGO_ENABLED=0 $GO_BUILD_CMD -ldflags "$GO_BUILD_LDFLAGS"\ -o "release/dep-$OS-$ARCH" ./cmd/dep/ shasum -a 256 "release/dep-$OS-$ARCH" > "release/dep-$OS-$ARCH".sha256 done done dep-0.3.2/hack/coverage.bash000077500000000000000000000007031317166637100156420ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2017 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 script will generate coverage.txt set -e PKGS=$(go list ./... | grep -v /vendor/) for pkg in $PKGS; do go test -race -coverprofile=profile.out -covermode=atomic $pkg if [[ -f profile.out ]]; then cat profile.out >> coverage.txt rm profile.out fi done dep-0.3.2/hack/licenseok/000077500000000000000000000000001317166637100151615ustar00rootroot00000000000000dep-0.3.2/hack/licenseok/main.go000066400000000000000000000102021317166637100164270ustar00rootroot00000000000000// Copyright 2017 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. // Checks if all files have the license header, a lot of this is based off // https://github.com/google/addlicense. package main import ( "bytes" "flag" "fmt" "io/ioutil" "log" "os" "path/filepath" "sync" "time" ) const helpText = `Usage: licenseok [flags] pattern [pattern ...] This program ensures source code files have copyright license headers by scanning directory patterns recursively. The pattern argument can be provided multiple times, and may also refer to single files. Flags: ` const tmpl = `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.` var ( update bool ) type file struct { path string mode os.FileMode } func init() { flag.BoolVar(&update, "u", false, "modifies all source files in place and avoids adding a license header to any file that already has one.") flag.Usage = func() { fmt.Fprintln(os.Stderr, helpText) flag.PrintDefaults() } flag.Parse() if flag.NArg() == 0 { flag.Usage() os.Exit(1) } } func main() { exitStatus := 0 // process at most 1000 files in parallel ch := make(chan *file, 1000) done := make(chan struct{}) go func() { var wg sync.WaitGroup for f := range ch { wg.Add(1) go func(f *file) { b, err := ioutil.ReadFile(f.path) if err != nil { log.Printf("%s: %v", f.path, err) exitStatus = 1 } if !hasLicense(b) { if !update { fmt.Fprintln(os.Stderr, f.path) exitStatus = 1 } else { fmt.Fprintln(os.Stdout, f.path) if err := addLicense(b, f.path, f.mode); err != nil { log.Printf("%s: %v", f.path, err) exitStatus = 1 } } } wg.Done() }(f) } wg.Wait() close(done) }() for _, d := range flag.Args() { walk(ch, d) } close(ch) <-done os.Exit(exitStatus) } func walk(ch chan<- *file, start string) { filepath.Walk(start, func(path string, fi os.FileInfo, err error) error { if err != nil { log.Printf("%s error: %v", path, err) return nil } if fi.IsDir() { return nil } ch <- &file{path, fi.Mode()} return nil }) } func addLicense(b []byte, path string, fmode os.FileMode) error { var lic []byte var err error switch filepath.Ext(path) { default: return nil case ".c", ".h": lic, err = prefix("/*", " * ", " */") case ".js", ".css": lic, err = prefix("/**", " * ", " */") case ".cc", ".cpp", ".cs", ".go", ".hh", ".hpp", ".java", ".m", ".mm", ".proto", ".rs", ".scala", ".swift", ".dart": lic, err = prefix("", "// ", "") case ".py", ".sh": lic, err = prefix("", "# ", "") case ".el", ".lisp": lic, err = prefix("", ";; ", "") case ".erl": lic, err = prefix("", "% ", "") case ".hs": lic, err = prefix("", "-- ", "") case ".html", ".xml": lic, err = prefix("") case ".php": lic, err = prefix("") } if err != nil || lic == nil { return err } line := hashBang(b) if len(line) > 0 { b = b[len(line):] if line[len(line)-1] != '\n' { line = append(line, '\n') } lic = append(line, lic...) } b = append(lic, b...) return ioutil.WriteFile(path, b, fmode) } func hashBang(b []byte) []byte { var line []byte for _, c := range b { line = append(line, c) if c == '\n' { break } } if bytes.HasPrefix(line, []byte("#!")) { return line } return nil } func hasLicense(b []byte) bool { n := 100 if len(b) < 100 { n = len(b) } return bytes.Contains(bytes.ToLower(b[:n]), []byte("copyright")) } // prefix will execute a license template and prefix the result with top, middle and bottom. func prefix(top, mid, bot string) ([]byte, error) { buf := bytes.NewBufferString(fmt.Sprintf("Copyright %d %s", time.Now().Year(), tmpl)) var out bytes.Buffer if top != "" { out.WriteString(top) out.WriteRune('\n') } out.WriteString(mid) for _, c := range buf.Bytes() { out.WriteByte(c) if c == '\n' { out.WriteString(mid) } } if bot != "" { out.WriteRune('\n') out.WriteString(bot) } out.Write([]byte{'\n', '\n'}) return out.Bytes(), nil } dep-0.3.2/hack/lint.bash000077500000000000000000000007031317166637100150150ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2017 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 script will validate code with various linters set -e PKGS=$(go list ./... | grep -vF /vendor/) go vet $PKGS golint $PKGS megacheck -unused.exported -ignore "github.com/golang/dep/internal/test/test.go:U1000 github.com/golang/dep/internal/gps/prune.go:U1000" $PKGS dep-0.3.2/hack/validate-gofmt.bash000077500000000000000000000017101317166637100167510ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2017 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 script will validate that `go fmt` has been ran # and is passing for certain directories in the project. # # Here we use `go list` to help determine which packages # we need to check for `go fmt` # # EXIT 0 - The check is successful # EXIT 1 - The check has failed PKGS=$(go list ./... | grep -v /vendor/) REPO_TLD="github.com/golang/dep" IGNORE_PKGS=". ./gps" for PKG in $PKGS; do RELATIVE_PATH="${PKG/$REPO_TLD/.}" i=0 for IGNORE_PKG in $IGNORE_PKGS; do if [ "${IGNORE_PKG}" == $RELATIVE_PATH ]; then i=1 fi done; if [ $i -eq 1 ]; then continue fi echo "Processing gofmt for: ${PKG}" gofmt -s -l $RELATIVE_PATH if [ $? -ne 0 ]; then echo "GO FMT FAILURE: ${PKG}" exit 1 fi done; exit 0 dep-0.3.2/hack/validate-licence.bash000077500000000000000000000006611317166637100172430ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2017 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 script will build licenseok and run it on all # source files to check licence set -e go build ./hack/licenseok find . -path ./vendor -prune -o -regex ".+\.pb\.go$" -prune -o -type f -regex ".*\.\(go\|proto\)$"\ -printf '%P\n' | xargs ./licenseok dep-0.3.2/hack/validate-vendor.bash000077500000000000000000000027471317166637100171450ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2017 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 script checks if we changed anything with regard to dependency management # for our repo and makes sure that it was done in a valid way. set -e -o pipefail if [ -z "$VALIDATE_UPSTREAM" ]; then VALIDATE_REPO='https://github.com/golang/dep.git' VALIDATE_BRANCH='master' VALIDATE_HEAD="$(git rev-parse --verify HEAD)" git fetch -q "$VALIDATE_REPO" "refs/heads/$VALIDATE_BRANCH" VALIDATE_UPSTREAM="$(git rev-parse --verify FETCH_HEAD)" VALIDATE_COMMIT_DIFF="$VALIDATE_UPSTREAM...$VALIDATE_HEAD" validate_diff() { if [ "$VALIDATE_UPSTREAM" != "$VALIDATE_HEAD" ]; then git diff "$VALIDATE_COMMIT_DIFF" "$@" fi } fi IFS=$'\n' files=( $(validate_diff --diff-filter=ACMR --name-only -- 'Gopkg.toml' 'Gopkg.lock' 'vendor/' || true) ) unset IFS if [ ${#files[@]} -gt 0 ]; then go build ./cmd/dep ./dep ensure -vendor-only ./dep prune # Let see if the working directory is clean diffs="$(git status --porcelain -- vendor Gopkg.toml Gopkg.lock 2>/dev/null)" if [ "$diffs" ]; then { echo 'The contents of vendor differ after "dep ensure && dep prune":' echo echo "$diffs" echo echo 'Make sure these commands have been run before committing.' echo } >&2 false else echo 'Congratulations! All vendoring changes are done the right way.' fi else echo 'No vendor changes in diff.' fi dep-0.3.2/internal/000077500000000000000000000000001317166637100141135ustar00rootroot00000000000000dep-0.3.2/internal/feedback/000077500000000000000000000000001317166637100156375ustar00rootroot00000000000000dep-0.3.2/internal/feedback/feedback.go000066400000000000000000000072371317166637100177230ustar00rootroot00000000000000// Copyright 2017 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 feedback import ( "encoding/hex" "fmt" "log" "github.com/golang/dep/internal/gps" ) const ( // ConsTypeConstraint represents a constraint ConsTypeConstraint = "constraint" // ConsTypeHint represents a constraint type hint ConsTypeHint = "hint" // DepTypeDirect represents a direct dependency DepTypeDirect = "direct dep" // DepTypeTransitive represents a transitive dependency, // or a dependency of a dependency DepTypeTransitive = "transitive dep" // DepTypeImported represents a dependency imported by an external tool DepTypeImported = "imported dep" ) // ConstraintFeedback holds project constraint feedback data type ConstraintFeedback struct { Constraint, LockedVersion, Revision, ConstraintType, DependencyType, ProjectPath string } // NewConstraintFeedback builds a feedback entry for a constraint in the manifest. func NewConstraintFeedback(pc gps.ProjectConstraint, depType string) *ConstraintFeedback { cf := &ConstraintFeedback{ Constraint: pc.Constraint.String(), ProjectPath: string(pc.Ident.ProjectRoot), DependencyType: depType, } if _, ok := pc.Constraint.(gps.Revision); ok { cf.ConstraintType = ConsTypeHint } else { cf.ConstraintType = ConsTypeConstraint } return cf } // NewLockedProjectFeedback builds a feedback entry for a project in the lock. func NewLockedProjectFeedback(lp gps.LockedProject, depType string) *ConstraintFeedback { cf := &ConstraintFeedback{ ProjectPath: string(lp.Ident().ProjectRoot), DependencyType: depType, } switch vt := lp.Version().(type) { case gps.PairedVersion: cf.LockedVersion = vt.String() cf.Revision = vt.Revision().String() case gps.UnpairedVersion: // Logically this should never occur, but handle for completeness sake cf.LockedVersion = vt.String() case gps.Revision: cf.Revision = vt.String() } return cf } // LogFeedback logs feedback on changes made to the manifest or lock. func (cf ConstraintFeedback) LogFeedback(logger *log.Logger) { if cf.Constraint != "" { logger.Printf(" %v", GetUsingFeedback(cf.Constraint, cf.ConstraintType, cf.DependencyType, cf.ProjectPath)) } if cf.Revision != "" { logger.Printf(" %v", GetLockingFeedback(cf.LockedVersion, cf.Revision, cf.DependencyType, cf.ProjectPath)) } } // GetUsingFeedback returns a dependency "using" feedback message. For example: // // Using ^1.0.0 as constraint for direct dep github.com/foo/bar // Using 1b8edb3 as hint for direct dep github.com/bar/baz func GetUsingFeedback(version, consType, depType, projectPath string) string { if depType == DepTypeImported { return fmt.Sprintf("Using %s as initial %s for %s %s", version, consType, depType, projectPath) } return fmt.Sprintf("Using %s as %s for %s %s", version, consType, depType, projectPath) } // GetLockingFeedback returns a dependency "locking" feedback message. For // example: // // Locking in v1.1.4 (bc29b4f) for direct dep github.com/foo/bar // Locking in master (436f39d) for transitive dep github.com/baz/qux func GetLockingFeedback(version, revision, depType, projectPath string) string { // Check if it's a valid SHA1 digest and trim to 7 characters. if len(revision) == 40 { if _, err := hex.DecodeString(revision); err == nil { // Valid SHA1 digest revision = revision[0:7] } } if depType == DepTypeImported { if version == "" { version = "*" } return fmt.Sprintf("Trying %s (%s) as initial lock for %s %s", version, revision, depType, projectPath) } return fmt.Sprintf("Locking in %s (%s) for %s %s", version, revision, depType, projectPath) } dep-0.3.2/internal/feedback/feedback_test.go000066400000000000000000000060671317166637100207620ustar00rootroot00000000000000// Copyright 2017 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 feedback import ( "bytes" log2 "log" "strings" "testing" "github.com/golang/dep/internal/gps" ) func TestFeedback_Constraint(t *testing.T) { ver, _ := gps.NewSemverConstraint("^1.0.0") rev := gps.Revision("1b8edb3") pi := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot("github.com/foo/bar")} cases := []struct { feedback *ConstraintFeedback want string }{ { feedback: NewConstraintFeedback(gps.ProjectConstraint{Constraint: ver, Ident: pi}, DepTypeDirect), want: "Using ^1.0.0 as constraint for direct dep github.com/foo/bar", }, { feedback: NewConstraintFeedback(gps.ProjectConstraint{Constraint: ver, Ident: pi}, DepTypeImported), want: "Using ^1.0.0 as initial constraint for imported dep github.com/foo/bar", }, { feedback: NewConstraintFeedback(gps.ProjectConstraint{Constraint: gps.Any(), Ident: pi}, DepTypeImported), want: "Using * as initial constraint for imported dep github.com/foo/bar", }, { feedback: NewConstraintFeedback(gps.ProjectConstraint{Constraint: rev, Ident: pi}, DepTypeDirect), want: "Using 1b8edb3 as hint for direct dep github.com/foo/bar", }, { feedback: NewConstraintFeedback(gps.ProjectConstraint{Constraint: rev, Ident: pi}, DepTypeImported), want: "Using 1b8edb3 as initial hint for imported dep github.com/foo/bar", }, } for _, c := range cases { buf := &bytes.Buffer{} log := log2.New(buf, "", 0) c.feedback.LogFeedback(log) got := strings.TrimSpace(buf.String()) if c.want != got { t.Errorf("Feedbacks are not expected: \n\t(GOT) '%s'\n\t(WNT) '%s'", got, c.want) } } } func TestFeedback_LockedProject(t *testing.T) { v := gps.NewVersion("v1.1.4").Pair("bc29b4f") b := gps.NewBranch("master").Pair("436f39d") pi := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot("github.com/foo/bar")} cases := []struct { feedback *ConstraintFeedback want string }{ { feedback: NewLockedProjectFeedback(gps.NewLockedProject(pi, v, nil), DepTypeDirect), want: "Locking in v1.1.4 (bc29b4f) for direct dep github.com/foo/bar", }, { feedback: NewLockedProjectFeedback(gps.NewLockedProject(pi, v, nil), DepTypeImported), want: "Trying v1.1.4 (bc29b4f) as initial lock for imported dep github.com/foo/bar", }, { feedback: NewLockedProjectFeedback(gps.NewLockedProject(pi, gps.NewVersion("").Pair("bc29b4f"), nil), DepTypeImported), want: "Trying * (bc29b4f) as initial lock for imported dep github.com/foo/bar", }, { feedback: NewLockedProjectFeedback(gps.NewLockedProject(pi, b, nil), DepTypeTransitive), want: "Locking in master (436f39d) for transitive dep github.com/foo/bar", }, } for _, c := range cases { buf := &bytes.Buffer{} log := log2.New(buf, "", 0) c.feedback.LogFeedback(log) got := strings.TrimSpace(buf.String()) if c.want != got { t.Errorf("Feedbacks are not expected: \n\t(GOT) '%s'\n\t(WNT) '%s'", got, c.want) } } } dep-0.3.2/internal/fs/000077500000000000000000000000001317166637100145235ustar00rootroot00000000000000dep-0.3.2/internal/fs/fs.go000066400000000000000000000462201317166637100154660ustar00rootroot00000000000000// 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 fs import ( "io" "io/ioutil" "os" "path/filepath" "runtime" "strings" "syscall" "unicode" "github.com/pkg/errors" ) // HasFilepathPrefix will determine if "path" starts with "prefix" from // the point of view of a filesystem. // // Unlike filepath.HasPrefix, this function is path-aware, meaning that // it knows that two directories /foo and /foobar are not the same // thing, and therefore HasFilepathPrefix("/foobar", "/foo") will return // false. // // This function also handles the case where the involved filesystems // are case-insensitive, meaning /foo/bar and /Foo/Bar correspond to the // same file. In that situation HasFilepathPrefix("/Foo/Bar", "/foo") // will return true. The implementation is *not* OS-specific, so a FAT32 // filesystem mounted on Linux will be handled correctly. func HasFilepathPrefix(path, prefix string) (bool, error) { // this function is more convoluted then ideal due to need for special // handling of volume name/drive letter on Windows. vnPath and vnPrefix // are first compared, and then used to initialize initial values of p and // d which will be appended to for incremental checks using // IsCaseSensitiveFilesystem and then equality. // no need to check IsCaseSensitiveFilesystem because VolumeName return // empty string on all non-Windows machines vnPath := strings.ToLower(filepath.VolumeName(path)) vnPrefix := strings.ToLower(filepath.VolumeName(prefix)) if vnPath != vnPrefix { return false, nil } // Because filepath.Join("c:","dir") returns "c:dir", we have to manually // add path separator to drive letters. Also, we need to set the path root // on *nix systems, since filepath.Join("", "dir") returns a relative path. vnPath += string(os.PathSeparator) vnPrefix += string(os.PathSeparator) var dn string if isDir, err := IsDir(path); err != nil { return false, errors.Wrap(err, "failed to check filepath prefix") } else if isDir { dn = path } else { dn = filepath.Dir(path) } dn = strings.TrimSuffix(dn, string(os.PathSeparator)) prefix = strings.TrimSuffix(prefix, string(os.PathSeparator)) // [1:] in the lines below eliminates empty string on *nix and volume name on Windows dirs := strings.Split(dn, string(os.PathSeparator))[1:] prefixes := strings.Split(prefix, string(os.PathSeparator))[1:] if len(prefixes) > len(dirs) { return false, nil } // d,p are initialized with "/" on *nix and volume name on Windows d := vnPath p := vnPrefix for i := range prefixes { // need to test each component of the path for // case-sensitiveness because on Unix we could have // something like ext4 filesystem mounted on FAT // mountpoint, mounted on ext4 filesystem, i.e. the // problematic filesystem is not the last one. caseSensitive, err := IsCaseSensitiveFilesystem(filepath.Join(d, dirs[i])) if err != nil { return false, errors.Wrap(err, "failed to check filepath prefix") } if caseSensitive { d = filepath.Join(d, dirs[i]) p = filepath.Join(p, prefixes[i]) } else { d = filepath.Join(d, strings.ToLower(dirs[i])) p = filepath.Join(p, strings.ToLower(prefixes[i])) } if p != d { return false, nil } } return true, nil } // EquivalentPaths compares the paths passed to check if they are equivalent. // It respects the case-sensitivity of the underlying filesysyems. func EquivalentPaths(p1, p2 string) (bool, error) { p1 = filepath.Clean(p1) p2 = filepath.Clean(p2) fi1, err := os.Stat(p1) if err != nil { return false, errors.Wrapf(err, "could not check for path equivalence") } fi2, err := os.Stat(p2) if err != nil { return false, errors.Wrapf(err, "could not check for path equivalence") } p1Filename, p2Filename := "", "" if !fi1.IsDir() { p1, p1Filename = filepath.Split(p1) } if !fi2.IsDir() { p2, p2Filename = filepath.Split(p2) } if isPrefix1, err := HasFilepathPrefix(p1, p2); err != nil { return false, errors.Wrap(err, "failed to check for path equivalence") } else if isPrefix2, err := HasFilepathPrefix(p2, p1); err != nil { return false, errors.Wrap(err, "failed to check for path equivalence") } else if !isPrefix1 || !isPrefix2 { return false, nil } if p1Filename != "" || p2Filename != "" { caseSensitive, err := IsCaseSensitiveFilesystem(filepath.Join(p1, p1Filename)) if err != nil { return false, errors.Wrap(err, "could not check for filesystem case-sensitivity") } if caseSensitive { if p1Filename != p2Filename { return false, nil } } else { if strings.ToLower(p1Filename) != strings.ToLower(p2Filename) { return false, nil } } } return true, nil } // RenameWithFallback attempts to rename a file or directory, but falls back to // copying in the event of a cross-device link error. If the fallback copy // succeeds, src is still removed, emulating normal rename behavior. func RenameWithFallback(src, dst string) error { _, err := os.Stat(src) if err != nil { return errors.Wrapf(err, "cannot stat %s", src) } err = os.Rename(src, dst) if err == nil { return nil } return renameFallback(err, src, dst) } // renameByCopy attempts to rename a file or directory by copying it to the // destination and then removing the src thus emulating the rename behavior. func renameByCopy(src, dst string) error { var cerr error if dir, _ := IsDir(src); dir { cerr = CopyDir(src, dst) if cerr != nil { cerr = errors.Wrap(cerr, "copying directory failed") } } else { cerr = copyFile(src, dst) if cerr != nil { cerr = errors.Wrap(cerr, "copying file failed") } } if cerr != nil { return errors.Wrapf(cerr, "rename fallback failed: cannot rename %s to %s", src, dst) } return errors.Wrapf(os.RemoveAll(src), "cannot delete %s", src) } // IsCaseSensitiveFilesystem determines if the filesystem where dir // exists is case sensitive or not. // // CAVEAT: this function works by taking the last component of the given // path and flipping the case of the first letter for which case // flipping is a reversible operation (/foo/Bar → /foo/bar), then // testing for the existence of the new filename. There are two // possibilities: // // 1. The alternate filename does not exist. We can conclude that the // filesystem is case sensitive. // // 2. The filename happens to exist. We have to test if the two files // are the same file (case insensitive file system) or different ones // (case sensitive filesystem). // // If the input directory is such that the last component is composed // exclusively of case-less codepoints (e.g. numbers), this function will // return false. func IsCaseSensitiveFilesystem(dir string) (bool, error) { alt := filepath.Join(filepath.Dir(dir), genTestFilename(filepath.Base(dir))) dInfo, err := os.Stat(dir) if err != nil { return false, errors.Wrap(err, "could not determine the case-sensitivity of the filesystem") } aInfo, err := os.Stat(alt) if err != nil { // If the file doesn't exists, assume we are on a case-sensitive filesystem. if os.IsNotExist(err) { return true, nil } return false, errors.Wrap(err, "could not determine the case-sensitivity of the filesystem") } return !os.SameFile(dInfo, aInfo), nil } // genTestFilename returns a string with at most one rune case-flipped. // // The transformation is applied only to the first rune that can be // reversibly case-flipped, meaning: // // * A lowercase rune for which it's true that lower(upper(r)) == r // * An uppercase rune for which it's true that upper(lower(r)) == r // // All the other runes are left intact. func genTestFilename(str string) string { flip := true return strings.Map(func(r rune) rune { if flip { if unicode.IsLower(r) { u := unicode.ToUpper(r) if unicode.ToLower(u) == r { r = u flip = false } } else if unicode.IsUpper(r) { l := unicode.ToLower(r) if unicode.ToUpper(l) == r { r = l flip = false } } } return r }, str) } var errPathNotDir = errors.New("given path is not a directory") // ReadActualFilenames is used to determine the actual file names in given directory. // // On case sensitive file systems like ext4, it will check if those files exist using // `os.Stat` and return a map with key and value as filenames which exist in the folder. // // Otherwise, it reads the contents of the directory and returns a map which has the // given file name as the key and actual filename as the value(if it was found). func ReadActualFilenames(dirPath string, names []string) (map[string]string, error) { actualFilenames := make(map[string]string, len(names)) if len(names) == 0 { // This isn't expected to happen for current usage. Adding edge case handling, // as it may be useful in future. return actualFilenames, nil } // First, check that the given path is valid and it is a directory dirStat, err := os.Stat(dirPath) if err != nil { return nil, errors.Wrap(err, "failed to read actual filenames") } if !dirStat.IsDir() { return nil, errPathNotDir } // Ideally, we would use `os.Stat` for getting the actual file names but that returns // the name we passed in as an argument and not the actual filename. So we are forced // to list the directory contents and check against that. Since this check is costly, // we do it only if absolutely necessary. caseSensitive, err := IsCaseSensitiveFilesystem(dirPath) if err != nil { return nil, errors.Wrap(err, "failed to read actual filenames") } if caseSensitive { // There will be no difference between actual filename and given filename. So // just check if those files exist. for _, name := range names { _, err := os.Stat(filepath.Join(dirPath, name)) if err == nil { actualFilenames[name] = name } else if !os.IsNotExist(err) { // Some unexpected err, wrap and return it. return nil, errors.Wrap(err, "failed to read actual filenames") } } return actualFilenames, nil } dir, err := os.Open(dirPath) if err != nil { return nil, errors.Wrap(err, "failed to read actual filenames") } defer dir.Close() // Pass -1 to read all filenames in directory filenames, err := dir.Readdirnames(-1) if err != nil { return nil, errors.Wrap(err, "failed to read actual filenames") } // namesMap holds the mapping from lowercase name to search name. Using this, we can // avoid repeatedly looping through names. namesMap := make(map[string]string, len(names)) for _, name := range names { namesMap[strings.ToLower(name)] = name } for _, filename := range filenames { searchName, ok := namesMap[strings.ToLower(filename)] if ok { // We are interested in this file, case insensitive match successful. actualFilenames[searchName] = filename if len(actualFilenames) == len(names) { // We found all that we were looking for. return actualFilenames, nil } } } return actualFilenames, nil } var ( errSrcNotDir = errors.New("source is not a directory") errDstExist = errors.New("destination already exists") ) // CopyDir recursively copies a directory tree, attempting to preserve permissions. // Source directory must exist, destination directory must *not* exist. func CopyDir(src, dst string) error { src = filepath.Clean(src) dst = filepath.Clean(dst) // We use os.Lstat() here to ensure we don't fall in a loop where a symlink // actually links to a one of its parent directories. fi, err := os.Lstat(src) if err != nil { return err } if !fi.IsDir() { return errSrcNotDir } _, err = os.Stat(dst) if err != nil && !os.IsNotExist(err) { return err } if err == nil { return errDstExist } if err = os.MkdirAll(dst, fi.Mode()); err != nil { return errors.Wrapf(err, "cannot mkdir %s", dst) } entries, err := ioutil.ReadDir(src) if err != nil { return errors.Wrapf(err, "cannot read directory %s", dst) } for _, entry := range entries { srcPath := filepath.Join(src, entry.Name()) dstPath := filepath.Join(dst, entry.Name()) if entry.IsDir() { if err = CopyDir(srcPath, dstPath); err != nil { return errors.Wrap(err, "copying directory failed") } } else { // This will include symlinks, which is what we want when // copying things. if err = copyFile(srcPath, dstPath); err != nil { return errors.Wrap(err, "copying file failed") } } } return nil } // copyFile copies the contents of the file named src to the file named // by dst. The file will be created if it does not already exist. If the // destination file exists, all its contents will be replaced by the contents // of the source file. The file mode will be copied from the source and // the copied data is synced/flushed to stable storage. func copyFile(src, dst string) (err error) { if sym, err := IsSymlink(src); err != nil { return errors.Wrap(err, "symlink check failed") } else if sym { if err := cloneSymlink(src, dst); err != nil { if runtime.GOOS == "windows" { // If cloning the symlink fails on Windows because the user // does not have the required privileges, ignore the error and // fall back to copying the file contents. // // ERROR_PRIVILEGE_NOT_HELD is 1314 (0x522): // https://msdn.microsoft.com/en-us/library/windows/desktop/ms681385(v=vs.85).aspx if lerr, ok := err.(*os.LinkError); ok && lerr.Err != syscall.Errno(1314) { return err } } else { return err } } else { return nil } } in, err := os.Open(src) if err != nil { return } defer in.Close() out, err := os.Create(dst) if err != nil { return } defer out.Close() if _, err = io.Copy(out, in); err != nil { return } if err = out.Sync(); err != nil { return } si, err := os.Stat(src) if err != nil { return } // Temporary fix for Go < 1.9 // // See: https://github.com/golang/dep/issues/774 // and https://github.com/golang/go/issues/20829 if runtime.GOOS == "windows" { dst = fixLongPath(dst) } err = os.Chmod(dst, si.Mode()) return } // cloneSymlink will create a new symlink that points to the resolved path of sl. // If sl is a relative symlink, dst will also be a relative symlink. func cloneSymlink(sl, dst string) error { resolved, err := os.Readlink(sl) if err != nil { return err } return os.Symlink(resolved, dst) } // IsDir determines is the path given is a directory or not. func IsDir(name string) (bool, error) { fi, err := os.Stat(name) if err != nil { return false, err } if !fi.IsDir() { return false, errors.Errorf("%q is not a directory", name) } return true, nil } // IsNonEmptyDir determines if the path given is a non-empty directory or not. func IsNonEmptyDir(name string) (bool, error) { isDir, err := IsDir(name) if err != nil && !os.IsNotExist(err) { return false, err } else if !isDir { return false, nil } // Get file descriptor f, err := os.Open(name) if err != nil { return false, err } defer f.Close() // Query only 1 child. EOF if no children. _, err = f.Readdirnames(1) switch err { case io.EOF: return false, nil case nil: return true, nil default: return false, err } } // IsRegular determines if the path given is a regular file or not. func IsRegular(name string) (bool, error) { fi, err := os.Stat(name) if os.IsNotExist(err) { return false, nil } if err != nil { return false, err } mode := fi.Mode() if mode&os.ModeType != 0 { return false, errors.Errorf("%q is a %v, expected a file", name, mode) } return true, nil } // IsSymlink determines if the given path is a symbolic link. func IsSymlink(path string) (bool, error) { l, err := os.Lstat(path) if err != nil { return false, err } return l.Mode()&os.ModeSymlink == os.ModeSymlink, nil } // fixLongPath returns the extended-length (\\?\-prefixed) form of // path when needed, in order to avoid the default 260 character file // path limit imposed by Windows. If path is not easily converted to // the extended-length form (for example, if path is a relative path // or contains .. elements), or is short enough, fixLongPath returns // path unmodified. // // See https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath func fixLongPath(path string) string { // Do nothing (and don't allocate) if the path is "short". // Empirically (at least on the Windows Server 2013 builder), // the kernel is arbitrarily okay with < 248 bytes. That // matches what the docs above say: // "When using an API to create a directory, the specified // path cannot be so long that you cannot append an 8.3 file // name (that is, the directory name cannot exceed MAX_PATH // minus 12)." Since MAX_PATH is 260, 260 - 12 = 248. // // The MSDN docs appear to say that a normal path that is 248 bytes long // will work; empirically the path must be less then 248 bytes long. if len(path) < 248 { // Don't fix. (This is how Go 1.7 and earlier worked, // not automatically generating the \\?\ form) return path } // The extended form begins with \\?\, as in // \\?\c:\windows\foo.txt or \\?\UNC\server\share\foo.txt. // The extended form disables evaluation of . and .. path // elements and disables the interpretation of / as equivalent // to \. The conversion here rewrites / to \ and elides // . elements as well as trailing or duplicate separators. For // simplicity it avoids the conversion entirely for relative // paths or paths containing .. elements. For now, // \\server\share paths are not converted to // \\?\UNC\server\share paths because the rules for doing so // are less well-specified. if len(path) >= 2 && path[:2] == `\\` { // Don't canonicalize UNC paths. return path } if !isAbs(path) { // Relative path return path } const prefix = `\\?` pathbuf := make([]byte, len(prefix)+len(path)+len(`\`)) copy(pathbuf, prefix) n := len(path) r, w := 0, len(prefix) for r < n { switch { case os.IsPathSeparator(path[r]): // empty block r++ case path[r] == '.' && (r+1 == n || os.IsPathSeparator(path[r+1])): // /./ r++ case r+1 < n && path[r] == '.' && path[r+1] == '.' && (r+2 == n || os.IsPathSeparator(path[r+2])): // /../ is currently unhandled return path default: pathbuf[w] = '\\' w++ for ; r < n && !os.IsPathSeparator(path[r]); r++ { pathbuf[w] = path[r] w++ } } } // A drive's root directory needs a trailing \ if w == len(`\\?\c:`) { pathbuf[w] = '\\' w++ } return string(pathbuf[:w]) } func isAbs(path string) (b bool) { v := volumeName(path) if v == "" { return false } path = path[len(v):] if path == "" { return false } return os.IsPathSeparator(path[0]) } func volumeName(path string) (v string) { if len(path) < 2 { return "" } // with drive letter c := path[0] if path[1] == ':' && ('0' <= c && c <= '9' || 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z') { return path[:2] } // is it UNC if l := len(path); l >= 5 && os.IsPathSeparator(path[0]) && os.IsPathSeparator(path[1]) && !os.IsPathSeparator(path[2]) && path[2] != '.' { // first, leading `\\` and next shouldn't be `\`. its server name. for n := 3; n < l-1; n++ { // second, next '\' shouldn't be repeated. if os.IsPathSeparator(path[n]) { n++ // third, following something characters. its share name. if !os.IsPathSeparator(path[n]) { if path[n] == '.' { break } for ; n < l; n++ { if os.IsPathSeparator(path[n]) { break } } return path[:n] } break } } } return "" } dep-0.3.2/internal/fs/fs_test.go000066400000000000000000000664701317166637100165360ustar00rootroot00000000000000// 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 fs import ( "io/ioutil" "os" "path/filepath" "reflect" "runtime" "strings" "testing" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) // This function tests HadFilepathPrefix. It should test it on both case // sensitive and insensitive situations. However, the only reliable way to test // case-insensitive behaviour is if using case-insensitive filesystem. This // cannot be guaranteed in an automated test. Therefore, the behaviour of the // tests is not to test case sensitivity on *nix and to assume that Windows is // case-insensitive. Please see link below for some background. // // https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem // // NOTE: NTFS can be made case-sensitive. However many Windows programs, // including Windows Explorer do not handle gracefully multiple files that // differ only in capitalization. It is possible that this can cause these tests // to fail on some setups. func TestHasFilepathPrefix(t *testing.T) { dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) // dir2 is the same as dir but with different capitalization on Windows to // test case insensitivity var dir2 string if runtime.GOOS == "windows" { dir = strings.ToLower(dir) dir2 = strings.ToUpper(dir) } else { dir2 = dir } cases := []struct { path string prefix string want bool }{ {filepath.Join(dir, "a", "b"), filepath.Join(dir2), true}, {filepath.Join(dir, "a", "b"), filepath.Join(dir2, "a"), true}, {filepath.Join(dir, "a", "b"), filepath.Join(dir2, "a", "b"), true}, {filepath.Join(dir, "a", "b"), filepath.Join(dir2, "c"), false}, {filepath.Join(dir, "a", "b"), filepath.Join(dir2, "a", "d", "b"), false}, {filepath.Join(dir, "a", "b"), filepath.Join(dir2, "a", "b2"), false}, {filepath.Join(dir), filepath.Join(dir2, "a", "b"), false}, {filepath.Join(dir, "ab"), filepath.Join(dir2, "a", "b"), false}, {filepath.Join(dir, "ab"), filepath.Join(dir2, "a"), false}, {filepath.Join(dir, "123"), filepath.Join(dir2, "123"), true}, {filepath.Join(dir, "123"), filepath.Join(dir2, "1"), false}, {filepath.Join(dir, "⌘"), filepath.Join(dir2, "⌘"), true}, {filepath.Join(dir, "a"), filepath.Join(dir2, "⌘"), false}, {filepath.Join(dir, "⌘"), filepath.Join(dir2, "a"), false}, } for _, c := range cases { if err := os.MkdirAll(c.path, 0755); err != nil { t.Fatal(err) } if err = os.MkdirAll(c.prefix, 0755); err != nil { t.Fatal(err) } got, err := HasFilepathPrefix(c.path, c.prefix) if err != nil { t.Fatalf("unexpected error: %s", err) } if c.want != got { t.Fatalf("dir: %q, prefix: %q, expected: %v, got: %v", c.path, c.prefix, c.want, got) } } } // This function tests HadFilepathPrefix. It should test it on both case // sensitive and insensitive situations. However, the only reliable way to test // case-insensitive behaviour is if using case-insensitive filesystem. This // cannot be guaranteed in an automated test. Therefore, the behaviour of the // tests is not to test case sensitivity on *nix and to assume that Windows is // case-insensitive. Please see link below for some background. // // https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem // // NOTE: NTFS can be made case-sensitive. However many Windows programs, // including Windows Explorer do not handle gracefully multiple files that // differ only in capitalization. It is possible that this can cause these tests // to fail on some setups. func TestHasFilepathPrefix_Files(t *testing.T) { dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) // dir2 is the same as dir but with different capitalization on Windows to // test case insensitivity var dir2 string if runtime.GOOS == "windows" { dir = strings.ToLower(dir) dir2 = strings.ToUpper(dir) } else { dir2 = dir } existingFile := filepath.Join(dir, "exists") if err = os.MkdirAll(existingFile, 0755); err != nil { t.Fatal(err) } nonExistingFile := filepath.Join(dir, "does_not_exists") cases := []struct { path string prefix string want bool err bool }{ {existingFile, filepath.Join(dir2), true, false}, {nonExistingFile, filepath.Join(dir2), false, true}, } for _, c := range cases { got, err := HasFilepathPrefix(c.path, c.prefix) if err != nil && !c.err { t.Fatalf("unexpected error: %s", err) } if c.want != got { t.Fatalf("dir: %q, prefix: %q, expected: %v, got: %v", c.path, c.prefix, c.want, got) } } } func TestEquivalentPaths(t *testing.T) { h := test.NewHelper(t) h.TempDir("dir") h.TempDir("dir2") h.TempFile("file", "") h.TempFile("file2", "") h.TempDir("DIR") h.TempFile("FILE", "") testcases := []struct { p1, p2 string caseSensitiveEquivalent bool caseInensitiveEquivalent bool err bool }{ {h.Path("dir"), h.Path("dir"), true, true, false}, {h.Path("file"), h.Path("file"), true, true, false}, {h.Path("dir"), h.Path("dir2"), false, false, false}, {h.Path("file"), h.Path("file2"), false, false, false}, {h.Path("dir"), h.Path("file"), false, false, false}, {h.Path("dir"), h.Path("DIR"), false, true, false}, {strings.ToLower(h.Path("dir")), strings.ToUpper(h.Path("dir")), false, true, true}, } caseSensitive, err := IsCaseSensitiveFilesystem(h.Path("dir")) if err != nil { t.Fatal("unexpcted error:", err) } for _, tc := range testcases { got, err := EquivalentPaths(tc.p1, tc.p2) if err != nil && !tc.err { t.Error("unexpected error:", err) } if caseSensitive { if tc.caseSensitiveEquivalent != got { t.Errorf("expected EquivalentPaths(%q, %q) to be %t on case-sensitive filesystem, got %t", tc.p1, tc.p2, tc.caseSensitiveEquivalent, got) } } else { if tc.caseInensitiveEquivalent != got { t.Errorf("expected EquivalentPaths(%q, %q) to be %t on case-insensitive filesystem, got %t", tc.p1, tc.p2, tc.caseInensitiveEquivalent, got) } } } } func TestRenameWithFallback(t *testing.T) { dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) if err = RenameWithFallback(filepath.Join(dir, "does_not_exists"), filepath.Join(dir, "dst")); err == nil { t.Fatal("expected an error for non existing file, but got nil") } srcpath := filepath.Join(dir, "src") if srcf, err := os.Create(srcpath); err != nil { t.Fatal(err) } else { srcf.Close() } if err = RenameWithFallback(srcpath, filepath.Join(dir, "dst")); err != nil { t.Fatal(err) } srcpath = filepath.Join(dir, "a") if err = os.MkdirAll(srcpath, 0777); err != nil { t.Fatal(err) } dstpath := filepath.Join(dir, "b") if err = os.MkdirAll(dstpath, 0777); err != nil { t.Fatal(err) } if err = RenameWithFallback(srcpath, dstpath); err == nil { t.Fatal("expected an error if dst is an existing directory, but got nil") } } func TestIsCaseSensitiveFilesystem(t *testing.T) { isLinux := runtime.GOOS == "linux" isWindows := runtime.GOOS == "windows" isMacOS := runtime.GOOS == "darwin" if !isLinux && !isWindows && !isMacOS { t.Skip("Run this test on Windows, Linux and macOS only") } dir, err := ioutil.TempDir("", "TestCaseSensitivity") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) var want bool if isLinux { want = true } else { want = false } got, err := IsCaseSensitiveFilesystem(dir) if err != nil { t.Fatalf("unexpected error message: \n\t(GOT) %+v", err) } if want != got { t.Fatalf("unexpected value returned: \n\t(GOT) %t\n\t(WNT) %t", got, want) } } func TestReadActualFilenames(t *testing.T) { // We are trying to skip this test on file systems which are case-sensiive. We could // have used `fs.IsCaseSensitiveFilesystem` for this check. However, the code we are // testing also relies on `fs.IsCaseSensitiveFilesystem`. So a bug in // `fs.IsCaseSensitiveFilesystem` could prevent this test from being run. This is the // only scenario where we prefer the OS heuristic over doing the actual work of // validating filesystem case sensitivity via `fs.IsCaseSensitiveFilesystem`. if runtime.GOOS != "windows" && runtime.GOOS != "darwin" { t.Skip("skip this test on non-Windows, non-macOS") } h := test.NewHelper(t) defer h.Cleanup() h.TempDir("") tmpPath := h.Path(".") // First, check the scenarios for which we expect an error. _, err := ReadActualFilenames(filepath.Join(tmpPath, "does_not_exists"), []string{""}) switch { case err == nil: t.Fatal("expected err for non-existing folder") // use `errors.Cause` because the error is wrapped and returned case !os.IsNotExist(errors.Cause(err)): t.Fatalf("unexpected error: %+v", err) } h.TempFile("tmpFile", "") _, err = ReadActualFilenames(h.Path("tmpFile"), []string{""}) switch { case err == nil: t.Fatal("expected err for passing file instead of directory") case err != errPathNotDir: t.Fatalf("unexpected error: %+v", err) } cases := []struct { createFiles []string names []string want map[string]string }{ // If we supply no filenames to the function, it should return an empty map. {nil, nil, map[string]string{}}, // If the directory contains the given file with different case, it should return // a map which has the given filename as the key and actual filename as the value. { []string{"test1.txt"}, []string{"Test1.txt"}, map[string]string{"Test1.txt": "test1.txt"}, }, // 1. If the given filename is same as the actual filename, map should have the // same key and value for the file. // 2. If the given filename is present with different case for file extension, // it should return a map which has the given filename as the key and actual // filename as the value. // 3. If the given filename is not present even with a different case, the map // returned should not have an entry for that filename. { []string{"test2.txt", "test3.TXT"}, []string{"test2.txt", "Test3.txt", "Test4.txt"}, map[string]string{ "test2.txt": "test2.txt", "Test3.txt": "test3.TXT", }, }, } for _, c := range cases { for _, file := range c.createFiles { h.TempFile(file, "") } got, err := ReadActualFilenames(tmpPath, c.names) if err != nil { t.Fatalf("unexpected error: %+v", err) } if !reflect.DeepEqual(c.want, got) { t.Fatalf("returned value does not match expected: \n\t(GOT) %v\n\t(WNT) %v", got, c.want) } } } func TestGenTestFilename(t *testing.T) { cases := []struct { str string want string }{ {"abc", "Abc"}, {"ABC", "aBC"}, {"AbC", "abC"}, {"αβγ", "Αβγ"}, {"123", "123"}, {"1a2", "1A2"}, {"12a", "12A"}, {"⌘", "⌘"}, } for _, c := range cases { got := genTestFilename(c.str) if c.want != got { t.Fatalf("str: %q, expected: %q, got: %q", c.str, c.want, got) } } } func BenchmarkGenTestFilename(b *testing.B) { cases := []string{ strings.Repeat("a", 128), strings.Repeat("A", 128), strings.Repeat("α", 128), strings.Repeat("1", 128), strings.Repeat("⌘", 128), } for i := 0; i < b.N; i++ { for _, str := range cases { genTestFilename(str) } } } func TestCopyDir(t *testing.T) { dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) srcdir := filepath.Join(dir, "src") if err := os.MkdirAll(srcdir, 0755); err != nil { t.Fatal(err) } files := []struct { path string contents string fi os.FileInfo }{ {path: "myfile", contents: "hello world"}, {path: filepath.Join("subdir", "file"), contents: "subdir file"}, } // Create structure indicated in 'files' for i, file := range files { fn := filepath.Join(srcdir, file.path) dn := filepath.Dir(fn) if err = os.MkdirAll(dn, 0755); err != nil { t.Fatal(err) } fh, err := os.Create(fn) if err != nil { t.Fatal(err) } if _, err = fh.Write([]byte(file.contents)); err != nil { t.Fatal(err) } fh.Close() files[i].fi, err = os.Stat(fn) if err != nil { t.Fatal(err) } } destdir := filepath.Join(dir, "dest") if err := CopyDir(srcdir, destdir); err != nil { t.Fatal(err) } // Compare copy against structure indicated in 'files' for _, file := range files { fn := filepath.Join(srcdir, file.path) dn := filepath.Dir(fn) dirOK, err := IsDir(dn) if err != nil { t.Fatal(err) } if !dirOK { t.Fatalf("expected %s to be a directory", dn) } got, err := ioutil.ReadFile(fn) if err != nil { t.Fatal(err) } if file.contents != string(got) { t.Fatalf("expected: %s, got: %s", file.contents, string(got)) } gotinfo, err := os.Stat(fn) if err != nil { t.Fatal(err) } if file.fi.Mode() != gotinfo.Mode() { t.Fatalf("expected %s: %#v\n to be the same mode as %s: %#v", file.path, file.fi.Mode(), fn, gotinfo.Mode()) } } } func TestCopyDirFail_SrcInaccessible(t *testing.T) { if runtime.GOOS == "windows" { // XXX: setting permissions works differently in // Microsoft Windows. Skipping this this until a // compatible implementation is provided. t.Skip("skipping on windows") } var srcdir, dstdir string cleanup := setupInaccessibleDir(t, func(dir string) error { srcdir = filepath.Join(dir, "src") return os.MkdirAll(srcdir, 0755) }) defer cleanup() dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) dstdir = filepath.Join(dir, "dst") if err = CopyDir(srcdir, dstdir); err == nil { t.Fatalf("expected error for CopyDir(%s, %s), got none", srcdir, dstdir) } } func TestCopyDirFail_DstInaccessible(t *testing.T) { if runtime.GOOS == "windows" { // XXX: setting permissions works differently in // Microsoft Windows. Skipping this this until a // compatible implementation is provided. t.Skip("skipping on windows") } var srcdir, dstdir string dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) srcdir = filepath.Join(dir, "src") if err = os.MkdirAll(srcdir, 0755); err != nil { t.Fatal(err) } cleanup := setupInaccessibleDir(t, func(dir string) error { dstdir = filepath.Join(dir, "dst") return nil }) defer cleanup() if err := CopyDir(srcdir, dstdir); err == nil { t.Fatalf("expected error for CopyDir(%s, %s), got none", srcdir, dstdir) } } func TestCopyDirFail_SrcIsNotDir(t *testing.T) { var srcdir, dstdir string dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) srcdir = filepath.Join(dir, "src") if _, err = os.Create(srcdir); err != nil { t.Fatal(err) } dstdir = filepath.Join(dir, "dst") if err = CopyDir(srcdir, dstdir); err == nil { t.Fatalf("expected error for CopyDir(%s, %s), got none", srcdir, dstdir) } if err != errSrcNotDir { t.Fatalf("expected %v error for CopyDir(%s, %s), got %s", errSrcNotDir, srcdir, dstdir, err) } } func TestCopyDirFail_DstExists(t *testing.T) { var srcdir, dstdir string dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) srcdir = filepath.Join(dir, "src") if err = os.MkdirAll(srcdir, 0755); err != nil { t.Fatal(err) } dstdir = filepath.Join(dir, "dst") if err = os.MkdirAll(dstdir, 0755); err != nil { t.Fatal(err) } if err = CopyDir(srcdir, dstdir); err == nil { t.Fatalf("expected error for CopyDir(%s, %s), got none", srcdir, dstdir) } if err != errDstExist { t.Fatalf("expected %v error for CopyDir(%s, %s), got %s", errDstExist, srcdir, dstdir, err) } } func TestCopyDirFailOpen(t *testing.T) { if runtime.GOOS == "windows" { // XXX: setting permissions works differently in // Microsoft Windows. os.Chmod(..., 0222) below is not // enough for the file to be readonly, and os.Chmod(..., // 0000) returns an invalid argument error. Skipping // this this until a compatible implementation is // provided. t.Skip("skipping on windows") } var srcdir, dstdir string dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) srcdir = filepath.Join(dir, "src") if err = os.MkdirAll(srcdir, 0755); err != nil { t.Fatal(err) } srcfn := filepath.Join(srcdir, "file") srcf, err := os.Create(srcfn) if err != nil { t.Fatal(err) } srcf.Close() // setup source file so that it cannot be read if err = os.Chmod(srcfn, 0222); err != nil { t.Fatal(err) } dstdir = filepath.Join(dir, "dst") if err = CopyDir(srcdir, dstdir); err == nil { t.Fatalf("expected error for CopyDir(%s, %s), got none", srcdir, dstdir) } } func TestCopyFile(t *testing.T) { dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) srcf, err := os.Create(filepath.Join(dir, "srcfile")) if err != nil { t.Fatal(err) } want := "hello world" if _, err := srcf.Write([]byte(want)); err != nil { t.Fatal(err) } srcf.Close() destf := filepath.Join(dir, "destf") if err := copyFile(srcf.Name(), destf); err != nil { t.Fatal(err) } got, err := ioutil.ReadFile(destf) if err != nil { t.Fatal(err) } if want != string(got) { t.Fatalf("expected: %s, got: %s", want, string(got)) } wantinfo, err := os.Stat(srcf.Name()) if err != nil { t.Fatal(err) } gotinfo, err := os.Stat(destf) if err != nil { t.Fatal(err) } if wantinfo.Mode() != gotinfo.Mode() { t.Fatalf("expected %s: %#v\n to be the same mode as %s: %#v", srcf.Name(), wantinfo.Mode(), destf, gotinfo.Mode()) } } func TestCopyFileSymlink(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir(".") testcases := map[string]string{ filepath.Join("./testdata/symlinks/file-symlink"): filepath.Join(h.Path("."), "dst-file"), filepath.Join("./testdata/symlinks/windows-file-symlink"): filepath.Join(h.Path("."), "windows-dst-file"), filepath.Join("./testdata/symlinks/dir-symlink"): filepath.Join(h.Path("."), "dst-dir"), filepath.Join("./testdata/symlinks/invalid-symlink"): filepath.Join(h.Path("."), "invalid-symlink"), } for symlink, dst := range testcases { t.Run(symlink, func(t *testing.T) { var err error if err = copyFile(symlink, dst); err != nil { t.Fatalf("failed to copy symlink: %s", err) } var want, got string if runtime.GOOS == "windows" { // Creating symlinks on Windows require an additional permission // regular users aren't granted usually. So we copy the file // content as a fall back instead of creating a real symlink. srcb, err := ioutil.ReadFile(symlink) h.Must(err) dstb, err := ioutil.ReadFile(dst) h.Must(err) want = string(srcb) got = string(dstb) } else { want, err = os.Readlink(symlink) h.Must(err) got, err = os.Readlink(dst) if err != nil { t.Fatalf("could not resolve symlink: %s", err) } } if want != got { t.Fatalf("resolved path is incorrect. expected %s, got %s", want, got) } }) } } func TestCopyFileLongFilePath(t *testing.T) { if runtime.GOOS != "windows" { // We want to ensure the temporary fix actually fixes the issue with // os.Chmod and long file paths. This is only applicable on Windows. t.Skip("skipping on non-windows") } h := test.NewHelper(t) h.TempDir(".") defer h.Cleanup() tmpPath := h.Path(".") // Create a directory with a long-enough path name to cause the bug in #774. dirName := "" for len(tmpPath+string(os.PathSeparator)+dirName) <= 300 { dirName += "directory" } h.TempDir(dirName) h.TempFile(dirName+string(os.PathSeparator)+"src", "") tmpDirPath := tmpPath + string(os.PathSeparator) + dirName + string(os.PathSeparator) err := copyFile(tmpDirPath+"src", tmpDirPath+"dst") if err != nil { t.Fatalf("unexpected error while copying file: %v", err) } } // C:\Users\appveyor\AppData\Local\Temp\1\gotest639065787\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890\dir4567890 func TestCopyFileFail(t *testing.T) { if runtime.GOOS == "windows" { // XXX: setting permissions works differently in // Microsoft Windows. Skipping this this until a // compatible implementation is provided. t.Skip("skipping on windows") } dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) srcf, err := os.Create(filepath.Join(dir, "srcfile")) if err != nil { t.Fatal(err) } srcf.Close() var dstdir string cleanup := setupInaccessibleDir(t, func(dir string) error { dstdir = filepath.Join(dir, "dir") return os.Mkdir(dstdir, 0777) }) defer cleanup() fn := filepath.Join(dstdir, "file") if err := copyFile(srcf.Name(), fn); err == nil { t.Fatalf("expected error for %s, got none", fn) } } // setupInaccessibleDir creates a temporary location with a single // directory in it, in such a way that that directory is not accessible // after this function returns. // // op is called with the directory as argument, so that it can create // files or other test artifacts. // // If setupInaccessibleDir fails in its preparation, or op fails, t.Fatal // will be invoked. // // This function returns a cleanup function that removes all the temporary // files this function creates. It is the caller's responsibility to call // this function before the test is done running, whether there's an error or not. func setupInaccessibleDir(t *testing.T, op func(dir string) error) func() { dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) return nil // keep compiler happy } subdir := filepath.Join(dir, "dir") cleanup := func() { if err := os.Chmod(subdir, 0777); err != nil { t.Error(err) } if err := os.RemoveAll(dir); err != nil { t.Error(err) } } if err := os.Mkdir(subdir, 0777); err != nil { cleanup() t.Fatal(err) return nil } if err := op(subdir); err != nil { cleanup() t.Fatal(err) return nil } if err := os.Chmod(subdir, 0666); err != nil { cleanup() t.Fatal(err) return nil } return cleanup } func TestIsRegular(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatal(err) } var fn string cleanup := setupInaccessibleDir(t, func(dir string) error { fn = filepath.Join(dir, "file") fh, err := os.Create(fn) if err != nil { return err } return fh.Close() }) defer cleanup() tests := map[string]struct { exists bool err bool }{ wd: {false, true}, filepath.Join(wd, "testdata"): {false, true}, filepath.Join(wd, "testdata", "test.file"): {true, false}, filepath.Join(wd, "this_file_does_not_exist.thing"): {false, false}, fn: {false, true}, } if runtime.GOOS == "windows" { // This test doesn't work on Microsoft Windows because // of the differences in how file permissions are // implemented. For this to work, the directory where // the file exists should be inaccessible. delete(tests, fn) } for f, want := range tests { got, err := IsRegular(f) if err != nil { if want.exists != got { t.Fatalf("expected %t for %s, got %t", want.exists, f, got) } if !want.err { t.Fatalf("expected no error, got %v", err) } } else { if want.err { t.Fatalf("expected error for %s, got none", f) } } if got != want.exists { t.Fatalf("expected %t for %s, got %t", want, f, got) } } } func TestIsDir(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatal(err) } var dn string cleanup := setupInaccessibleDir(t, func(dir string) error { dn = filepath.Join(dir, "dir") return os.Mkdir(dn, 0777) }) defer cleanup() tests := map[string]struct { exists bool err bool }{ wd: {true, false}, filepath.Join(wd, "testdata"): {true, false}, filepath.Join(wd, "main.go"): {false, true}, filepath.Join(wd, "this_file_does_not_exist.thing"): {false, true}, dn: {false, true}, } if runtime.GOOS == "windows" { // This test doesn't work on Microsoft Windows because // of the differences in how file permissions are // implemented. For this to work, the directory where // the directory exists should be inaccessible. delete(tests, dn) } for f, want := range tests { got, err := IsDir(f) if err != nil && !want.err { t.Fatalf("expected no error, got %v", err) } if got != want.exists { t.Fatalf("expected %t for %s, got %t", want.exists, f, got) } } } func TestIsNonEmptyDir(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatal(err) } h := test.NewHelper(t) defer h.Cleanup() h.TempDir("empty") testCases := []struct { path string empty bool err bool }{ {wd, true, false}, {"testdata", true, false}, {filepath.Join(wd, "fs.go"), false, true}, {filepath.Join(wd, "this_file_does_not_exist.thing"), false, false}, {h.Path("empty"), false, false}, } // This test case doesn't work on Microsoft Windows because of the // differences in how file permissions are implemented. if runtime.GOOS != "windows" { var inaccessibleDir string cleanup := setupInaccessibleDir(t, func(dir string) error { inaccessibleDir = filepath.Join(dir, "empty") return os.Mkdir(inaccessibleDir, 0777) }) defer cleanup() testCases = append(testCases, struct { path string empty bool err bool }{inaccessibleDir, false, true}) } for _, want := range testCases { got, err := IsNonEmptyDir(want.path) if want.err && err == nil { if got { t.Fatalf("wanted false with error for %v, but got true", want.path) } t.Fatalf("wanted an error for %v, but it was nil", want.path) } if got != want.empty { t.Fatalf("wanted %t for %v, but got %t", want.empty, want.path, got) } } } func TestIsSymlink(t *testing.T) { dir, err := ioutil.TempDir("", "dep") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) dirPath := filepath.Join(dir, "directory") if err = os.MkdirAll(dirPath, 0777); err != nil { t.Fatal(err) } filePath := filepath.Join(dir, "file") f, err := os.Create(filePath) if err != nil { t.Fatal(err) } f.Close() dirSymlink := filepath.Join(dir, "dirSymlink") fileSymlink := filepath.Join(dir, "fileSymlink") if err = os.Symlink(dirPath, dirSymlink); err != nil { t.Fatal(err) } if err = os.Symlink(filePath, fileSymlink); err != nil { t.Fatal(err) } var ( inaccessibleFile string inaccessibleSymlink string ) cleanup := setupInaccessibleDir(t, func(dir string) error { inaccessibleFile = filepath.Join(dir, "file") if fh, err := os.Create(inaccessibleFile); err != nil { return err } else if err = fh.Close(); err != nil { return err } inaccessibleSymlink = filepath.Join(dir, "symlink") return os.Symlink(inaccessibleFile, inaccessibleSymlink) }) defer cleanup() tests := map[string]struct{ expected, err bool }{ dirPath: {false, false}, filePath: {false, false}, dirSymlink: {true, false}, fileSymlink: {true, false}, inaccessibleFile: {false, true}, inaccessibleSymlink: {false, true}, } if runtime.GOOS == "windows" { // XXX: setting permissions works differently in Windows. Skipping // these cases until a compatible implementation is provided. delete(tests, inaccessibleFile) delete(tests, inaccessibleSymlink) } for path, want := range tests { got, err := IsSymlink(path) if err != nil { if !want.err { t.Errorf("expected no error, got %v", err) } } if got != want.expected { t.Errorf("expected %t for %s, got %t", want.expected, path, got) } } } dep-0.3.2/internal/fs/rename.go000066400000000000000000000015661317166637100163310ustar00rootroot00000000000000// 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 !windows package fs import ( "os" "syscall" "github.com/pkg/errors" ) // renameFallback attempts to determine the appropriate fallback to failed rename // operation depending on the resulting error. func renameFallback(err error, src, dst string) error { // Rename may fail if src and dst are on different devices; fall back to // copy if we detect that case. syscall.EXDEV is the common name for the // cross device link error which has varying output text across different // operating systems. terr, ok := err.(*os.LinkError) if !ok { return err } else if terr.Err != syscall.EXDEV { return errors.Wrapf(terr, "link error: cannot rename %s to %s", src, dst) } return renameByCopy(src, dst) } dep-0.3.2/internal/fs/rename_windows.go000066400000000000000000000023501317166637100200730ustar00rootroot00000000000000// 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 windows package fs import ( "os" "syscall" "github.com/pkg/errors" ) // renameFallback attempts to determine the appropriate fallback to failed rename // operation depending on the resulting error. func renameFallback(err error, src, dst string) error { // Rename may fail if src and dst are on different devices; fall back to // copy if we detect that case. syscall.EXDEV is the common name for the // cross device link error which has varying output text across different // operating systems. terr, ok := err.(*os.LinkError) if !ok { return err } if terr.Err != syscall.EXDEV { // In windows it can drop down to an operating system call that // returns an operating system error with a different number and // message. Checking for that as a fall back. noerr, ok := terr.Err.(syscall.Errno) // 0x11 (ERROR_NOT_SAME_DEVICE) is the windows error. // See https://msdn.microsoft.com/en-us/library/cc231199.aspx if ok && noerr != 0x11 { return errors.Wrapf(terr, "link error: cannot rename %s to %s", src, dst) } } return renameByCopy(src, dst) } dep-0.3.2/internal/fs/testdata/000077500000000000000000000000001317166637100163345ustar00rootroot00000000000000dep-0.3.2/internal/fs/testdata/symlinks/000077500000000000000000000000001317166637100202055ustar00rootroot00000000000000dep-0.3.2/internal/fs/testdata/symlinks/dir-symlink000077700000000000000000000000001317166637100245472../../testdataustar00rootroot00000000000000dep-0.3.2/internal/fs/testdata/symlinks/file-symlink000077700000000000000000000000001317166637100245612../test.fileustar00rootroot00000000000000dep-0.3.2/internal/fs/testdata/symlinks/invalid-symlink000077700000000000000000000000001317166637100266022/non/existing/fileustar00rootroot00000000000000dep-0.3.2/internal/fs/testdata/symlinks/windows-file-symlink000077700000000000000000000000001317166637100423352C:/Users/ibrahim/go/src/github.com/golang/dep/internal/fs/testdata/test.fileustar00rootroot00000000000000dep-0.3.2/internal/fs/testdata/test.file000066400000000000000000000000001317166637100201420ustar00rootroot00000000000000dep-0.3.2/internal/gps/000077500000000000000000000000001317166637100147045ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/000077500000000000000000000000001317166637100166545ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/badrepo/000077500000000000000000000000001317166637100202705ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/badrepo/README.md000066400000000000000000000007071317166637100215530ustar00rootroot00000000000000### Test Data This directory contains artifacts that represent malformed repo archives. Its purpose is to ensure `dep` can recover from such corrupted repositories in specific test scenarios. - `corrupt_dot_git_directory.tar`: is a repo with a corrupt `.git` directory. Dep can put a directory in such malformed state when a user hits `Ctrl+C` in the middle of a `dep init` process or others. `TestNewCtxRepoRecovery` uses this file to ensure recovery. dep-0.3.2/internal/gps/_testdata/badrepo/corrupt_dot_git_directory.tar000066400000000000000000000007131317166637100262740ustar00rootroot00000000000000%Yj0}S !mڲ%PS Jk5gd+oMC-AJKȈяI#;/0ںs4UW%/˒7m 2O-& S=M4ƅ0\]L+* Œ&9'I v>fxU-OA^Xu&)XwJ_ſxI`?ۦ")xǿ? 맽3FXF?SLdL1oCvSv~XV[>!NW35p2%H`àF-H8Z3 |fBsOf< ~*DԡeT8Je{ ( SCכ     R @(dep-0.3.2/internal/gps/_testdata/cmd/000077500000000000000000000000001317166637100174175ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/cmd/echosleep/000077500000000000000000000000001317166637100213665ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/cmd/echosleep/echosleep.go000066400000000000000000000006321317166637100236650ustar00rootroot00000000000000// Copyright 2017 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 main import ( "flag" "fmt" "time" ) func main() { n := flag.Int("n", 1, "number of iterations before stopping") flag.Parse() for i := 0; i < *n; i++ { fmt.Println("foo") time.Sleep(time.Duration(i) * 250 * time.Millisecond) } } dep-0.3.2/internal/gps/_testdata/cmd/stdout_stderr/000077500000000000000000000000001317166637100223245ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/cmd/stdout_stderr/stdout_stderr.go000066400000000000000000000004221317166637100255560ustar00rootroot00000000000000// Copyright 2017 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 main import ( "os" ) func main() { os.Stdout.WriteString("stdout") os.Stderr.WriteString("stderr") } dep-0.3.2/internal/gps/_testdata/digest/000077500000000000000000000000001317166637100201335ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/000077500000000000000000000000001317166637100221725ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/alice/000077500000000000000000000000001317166637100232475ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/alice/match/000077500000000000000000000000001317166637100243435ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/alice/match/match.go000066400000000000000000000002561317166637100257710ustar00rootroot00000000000000// Copyright 2017 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 match dep-0.3.2/internal/gps/_testdata/digest/github.com/alice/mismatch/000077500000000000000000000000001317166637100250545ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/alice/mismatch/mismatch.go000066400000000000000000000002611317166637100272070ustar00rootroot00000000000000// Copyright 2017 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 mismatch dep-0.3.2/internal/gps/_testdata/digest/github.com/alice/notInLock/000077500000000000000000000000001317166637100251475ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/alice/notInLock/notInLock.go000066400000000000000000000002621317166637100273760ustar00rootroot00000000000000// Copyright 2017 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 notInLock dep-0.3.2/internal/gps/_testdata/digest/github.com/bob/000077500000000000000000000000001317166637100227345ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/bob/emptyDigest/000077500000000000000000000000001317166637100252325ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/bob/emptyDigest/emptyDigest.go000066400000000000000000000002641317166637100300610ustar00rootroot00000000000000// Copyright 2017 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 emptyDigest dep-0.3.2/internal/gps/_testdata/digest/github.com/bob/match/000077500000000000000000000000001317166637100240305ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/github.com/bob/match/match.go000066400000000000000000000002561317166637100254560ustar00rootroot00000000000000// Copyright 2017 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 match dep-0.3.2/internal/gps/_testdata/digest/launchpad.net/000077500000000000000000000000001317166637100226575ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/launchpad.net/match/000077500000000000000000000000001317166637100237535ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/digest/launchpad.net/match/match.go000066400000000000000000000002561317166637100254010ustar00rootroot00000000000000// Copyright 2017 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 match dep-0.3.2/internal/gps/_testdata/src/000077500000000000000000000000001317166637100174435ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/bad/000077500000000000000000000000001317166637100201715ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/bad/bad.go000066400000000000000000000004211317166637100212430ustar00rootroot00000000000000// Copyright 2017 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 ill-formed Go source file is here to ensure the tool is robust // against bad packages in the workspace. dep-0.3.2/internal/gps/_testdata/src/buildtag/000077500000000000000000000000001317166637100212365ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/buildtag/invalid.go000066400000000000000000000004241317166637100232130ustar00rootroot00000000000000// Copyright 2017 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. // Hello // Not a valid +build ignore // No Really package buildtag import ( "sort" ) var ( _ = sort.Strings ) dep-0.3.2/internal/gps/_testdata/src/canon_confl/000077500000000000000000000000001317166637100217225ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/canon_confl/a.go000066400000000000000000000003301317166637100224650ustar00rootroot00000000000000// Copyright 2017 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 canonical // import "vanity1" var ( A = "A" ) dep-0.3.2/internal/gps/_testdata/src/canon_confl/b.go000066400000000000000000000003301317166637100224660ustar00rootroot00000000000000// Copyright 2017 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 canonical // import "vanity2" var ( B = "B" ) dep-0.3.2/internal/gps/_testdata/src/canonical/000077500000000000000000000000001317166637100213725ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/canonical/main.go000066400000000000000000000003241317166637100226440ustar00rootroot00000000000000// Copyright 2017 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 pkg // import "canonical" var ( A = "A" ) dep-0.3.2/internal/gps/_testdata/src/canonical/sub/000077500000000000000000000000001317166637100221635ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/canonical/sub/sub.go000066400000000000000000000003151317166637100233020ustar00rootroot00000000000000// Copyright 2017 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 sub // import "canonical/subpackage" dep-0.3.2/internal/gps/_testdata/src/cycle/000077500000000000000000000000001317166637100205425ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/cycle/a.go000066400000000000000000000004211317166637100213060ustar00rootroot00000000000000// Copyright 2017 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 cycle import ( "cycle/one" "github.com/golang/dep/internal/gps" ) var ( A = gps.Solve B = one.A ) dep-0.3.2/internal/gps/_testdata/src/cycle/one/000077500000000000000000000000001317166637100213235ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/cycle/one/a.go000066400000000000000000000004171317166637100220740ustar00rootroot00000000000000// Copyright 2017 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 one import ( "cycle/two" "github.com/golang/dep/internal/gps" ) var ( A = gps.Solve B = two.A ) dep-0.3.2/internal/gps/_testdata/src/cycle/two/000077500000000000000000000000001317166637100213535ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/cycle/two/a.go000066400000000000000000000004151317166637100221220ustar00rootroot00000000000000// Copyright 2017 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 two import ( "cycle" "github.com/golang/dep/internal/gps" ) var ( A = gps.Solve B = cycle.A ) dep-0.3.2/internal/gps/_testdata/src/disallow/000077500000000000000000000000001317166637100212615ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/disallow/a.go000066400000000000000000000004731317166637100220340ustar00rootroot00000000000000// Copyright 2017 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 disallow import ( "disallow/testdata" "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve _ = testdata.H ) dep-0.3.2/internal/gps/_testdata/src/disallow/testdata/000077500000000000000000000000001317166637100230725ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/disallow/testdata/another.go000066400000000000000000000003301317166637100250550ustar00rootroot00000000000000// Copyright 2017 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 testdata import "hash" var ( H = hash.Hash ) dep-0.3.2/internal/gps/_testdata/src/dotgodir/000077500000000000000000000000001317166637100212565ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/dotgodir/.go/000077500000000000000000000000001317166637100217415ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/dotgodir/.go/.gitkeep000066400000000000000000000000001317166637100233600ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/dotgodir/.go/dot.go000066400000000000000000000003041317166637100230530ustar00rootroot00000000000000// Copyright 2017 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 dot // nothing to see here dep-0.3.2/internal/gps/_testdata/src/dotgodir/.m1p/000077500000000000000000000000001317166637100220315ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/dotgodir/.m1p/a.go000066400000000000000000000004211317166637100225750ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings S = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/dotgodir/.m1p/b.go000066400000000000000000000003671317166637100226070ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/dotgodir/foo.go/000077500000000000000000000000001317166637100224455ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/dotgodir/foo.go/.gitkeep000066400000000000000000000000001317166637100240640ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/dotgodir/foo.go/foo.go000066400000000000000000000005251317166637100235610ustar00rootroot00000000000000// Copyright 2017 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 foo import "sort" var _ = sort.Strings // yes, this is dumb, don't use ".go" in your directory names // See https://github.com/golang/dep/issues/550 for more information dep-0.3.2/internal/gps/_testdata/src/doublenest/000077500000000000000000000000001317166637100216075ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/doublenest/a.go000066400000000000000000000004331317166637100223560ustar00rootroot00000000000000// Copyright 2017 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 base import ( "go/parser" "github.com/golang/dep/internal/gps" ) var ( _ = parser.ParseFile _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/doublenest/namemismatch/000077500000000000000000000000001317166637100242555ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/doublenest/namemismatch/m1p/000077500000000000000000000000001317166637100247525ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/doublenest/namemismatch/m1p/a.go000066400000000000000000000004211317166637100255160ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/doublenest/namemismatch/m1p/b.go000066400000000000000000000003671317166637100255300ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/doublenest/namemismatch/nm.go000066400000000000000000000004201317166637100252120ustar00rootroot00000000000000// Copyright 2017 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 nm import ( "os" "github.com/Masterminds/semver" ) var ( V = os.FileInfo _ = semver.Constraint ) dep-0.3.2/internal/gps/_testdata/src/empty/000077500000000000000000000000001317166637100206015ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/empty/.gitkeep000066400000000000000000000000001317166637100222200ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/000077500000000000000000000000001317166637100215025ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/example/000077500000000000000000000000001317166637100231355ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/000077500000000000000000000000001317166637100244075ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/locals.go000066400000000000000000000005401317166637100262120ustar00rootroot00000000000000// Copyright 2017 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 main import ( "github.com/example/varied/namemismatch" "github.com/example/varied/otherpath" "github.com/example/varied/simple" ) var ( _ = simple.S _ = nm.V _ = otherpath.O ) dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/m1p/000077500000000000000000000000001317166637100251045ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/m1p/a.go000066400000000000000000000004211317166637100256500ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "sort" "github.com/golang/dep/internal/gps" ) var ( M = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/m1p/b.go000066400000000000000000000003671317166637100256620ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/main.go000066400000000000000000000003371317166637100256650ustar00rootroot00000000000000// Copyright 2017 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 main import ( "net/http" ) var ( _ = http.Client ) dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/namemismatch/000077500000000000000000000000001317166637100270555ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/namemismatch/nm.go000066400000000000000000000004201317166637100300120ustar00rootroot00000000000000// Copyright 2017 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 nm import ( "os" "github.com/Masterminds/semver" ) var ( V = os.FileInfo _ = semver.Constraint ) dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/otherpath/000077500000000000000000000000001317166637100264055ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/otherpath/otherpath_test.go000066400000000000000000000003511317166637100317700ustar00rootroot00000000000000// Copyright 2017 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 otherpath import "github.com/example/varied/m1p" var O = m1p.M dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/simple/000077500000000000000000000000001317166637100257005ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/simple/another/000077500000000000000000000000001317166637100273405ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/simple/another/another.go000066400000000000000000000003271317166637100313310ustar00rootroot00000000000000// Copyright 2017 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 another import "hash" var ( H = hash.Hash ) dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/simple/another/another_test.go000066400000000000000000000003511317166637100323650ustar00rootroot00000000000000// Copyright 2017 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 another import "encoding/binary" var ( _ = binary.PutVarint ) dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/simple/another/locals.go000066400000000000000000000003471317166637100311500ustar00rootroot00000000000000// Copyright 2017 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 another import "github.com/example/varied/m1p" var _ = m1p.M dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/simple/locals.go000066400000000000000000000003721317166637100275060ustar00rootroot00000000000000// Copyright 2017 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 simple import "github.com/example/varied/simple/another" var ( _ = another.H ) dep-0.3.2/internal/gps/_testdata/src/github.com/example/varied/simple/simple.go000066400000000000000000000004371317166637100275240ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "go/parser" "github.com/golang/dep/internal/gps" ) var ( _ = parser.ParseFile S = gps.Prepare ) dep-0.3.2/internal/gps/_testdata/src/igmain/000077500000000000000000000000001317166637100207075ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/igmain/a.go000066400000000000000000000004241317166637100214560ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/igmain/igmain.go000066400000000000000000000003451317166637100225040ustar00rootroot00000000000000// Copyright 2017 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 package main import "unicode" var _ = unicode.In dep-0.3.2/internal/gps/_testdata/src/igmainfirst/000077500000000000000000000000001317166637100217575ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/igmainfirst/igmain.go000066400000000000000000000003451317166637100235540ustar00rootroot00000000000000// Copyright 2017 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 package main import "unicode" var _ = unicode.In dep-0.3.2/internal/gps/_testdata/src/igmainfirst/z.go000066400000000000000000000004241317166637100225570ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/igmainlong/000077500000000000000000000000001317166637100215675ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/igmainlong/a.go000066400000000000000000000004241317166637100223360ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/igmainlong/igmain.go000066400000000000000000000004631317166637100233650ustar00rootroot00000000000000// Copyright 2017 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. // Another comment, which the parser should ignore and still see builds tags // +build ignore package main import "unicode" var _ = unicode.In dep-0.3.2/internal/gps/_testdata/src/igmaint/000077500000000000000000000000001317166637100210735ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/igmaint/a.go000066400000000000000000000004241317166637100216420ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/igmaint/igmain.go000066400000000000000000000003451317166637100226700ustar00rootroot00000000000000// Copyright 2017 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 package main import "unicode" var _ = unicode.In dep-0.3.2/internal/gps/_testdata/src/igmaint/t_test.go000066400000000000000000000004011317166637100227170ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "math/rand" "strconv" ) var ( _ = rand.Int() _ = strconv.Unquote ) dep-0.3.2/internal/gps/_testdata/src/m1p/000077500000000000000000000000001317166637100201405ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/m1p/a.go000066400000000000000000000004211317166637100207040ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/m1p/b.go000066400000000000000000000003671317166637100207160ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/missing/000077500000000000000000000000001317166637100211145ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/missing/a.go000066400000000000000000000004711317166637100216650ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "missing/missing" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve _ = missing.Foo ) dep-0.3.2/internal/gps/_testdata/src/missing/m1p/000077500000000000000000000000001317166637100216115ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/missing/m1p/a.go000066400000000000000000000004211317166637100223550ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/missing/m1p/b.go000066400000000000000000000003671317166637100223670ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/nest/000077500000000000000000000000001317166637100204145ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/nest/a.go000066400000000000000000000004241317166637100211630ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/nest/m1p/000077500000000000000000000000001317166637100211115ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/nest/m1p/a.go000066400000000000000000000004211317166637100216550ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/nest/m1p/b.go000066400000000000000000000003671317166637100216670ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/relimport/000077500000000000000000000000001317166637100214605ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/relimport/a.go000066400000000000000000000003411317166637100222250ustar00rootroot00000000000000// Copyright 2017 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 relimport import ( "sort" ) var ( A = sort.Strings ) dep-0.3.2/internal/gps/_testdata/src/relimport/dot/000077500000000000000000000000001317166637100222465ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/relimport/dot/a.go000066400000000000000000000003401317166637100230120ustar00rootroot00000000000000// Copyright 2017 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 dot import ( "." "sort" ) var ( A = sort.Strings ) dep-0.3.2/internal/gps/_testdata/src/relimport/dotdot/000077500000000000000000000000001317166637100227555ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/relimport/dotdot/a.go000066400000000000000000000003451317166637100235260ustar00rootroot00000000000000// Copyright 2017 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 dotdot import ( relimport ".." ) var ( A = relimport.A ) dep-0.3.2/internal/gps/_testdata/src/relimport/dotdotslash/000077500000000000000000000000001317166637100240105ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/relimport/dotdotslash/a.go000066400000000000000000000003771317166637100245660ustar00rootroot00000000000000// Copyright 2017 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 dotslash import ( "../github.com/golang/dep/internal/gps" ) var ( A = gps.Solver ) dep-0.3.2/internal/gps/_testdata/src/relimport/dotslash/000077500000000000000000000000001317166637100233015ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/relimport/dotslash/a.go000066400000000000000000000003401317166637100240450ustar00rootroot00000000000000// Copyright 2017 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 dotslash import ( "./simple" ) var ( A = simple.A ) dep-0.3.2/internal/gps/_testdata/src/ren/000077500000000000000000000000001317166637100202275ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/ren/m1p/000077500000000000000000000000001317166637100207245ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/ren/m1p/a.go000066400000000000000000000004211317166637100214700ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/ren/m1p/b.go000066400000000000000000000003671317166637100215020ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/ren/simple/000077500000000000000000000000001317166637100215205ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/ren/simple/a.go000066400000000000000000000004241317166637100222670ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/simple/000077500000000000000000000000001317166637100207345ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/simple/a.go000066400000000000000000000004241317166637100215030ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/simpleallt/000077500000000000000000000000001317166637100216115ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/simpleallt/a.go000066400000000000000000000004241317166637100223600ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/simpleallt/a_test.go000066400000000000000000000004031317166637100234140ustar00rootroot00000000000000// Copyright 2017 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 simple_test import ( "sort" "strconv" ) var ( _ = sort.Strings _ = strconv.Unquote ) dep-0.3.2/internal/gps/_testdata/src/simpleallt/t_test.go000066400000000000000000000004011317166637100234350ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "math/rand" "strconv" ) var ( _ = rand.Int() _ = strconv.Unquote ) dep-0.3.2/internal/gps/_testdata/src/simplet/000077500000000000000000000000001317166637100211205ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/simplet/a.go000066400000000000000000000004241317166637100216670ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/simplet/t_test.go000066400000000000000000000004011317166637100227440ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "math/rand" "strconv" ) var ( _ = rand.Int() _ = strconv.Unquote ) dep-0.3.2/internal/gps/_testdata/src/simplext/000077500000000000000000000000001317166637100213105ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/simplext/a.go000066400000000000000000000004241317166637100220570ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/simplext/a_test.go000066400000000000000000000004031317166637100231130ustar00rootroot00000000000000// Copyright 2017 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 simple_test import ( "sort" "strconv" ) var ( _ = sort.Strings _ = strconv.Unquote ) dep-0.3.2/internal/gps/_testdata/src/skip_/000077500000000000000000000000001317166637100205505ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/skip_/_a.go000066400000000000000000000003671317166637100214640ustar00rootroot00000000000000// Copyright 2017 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 skip import ( "bytes" "sort" ) var ( _ = sort.Strings _ = bytes.Buffer ) dep-0.3.2/internal/gps/_testdata/src/skip_/a.go000066400000000000000000000004221317166637100213150ustar00rootroot00000000000000// Copyright 2017 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 skip import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/t/000077500000000000000000000000001317166637100177065ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/t/t_test.go000066400000000000000000000004011317166637100215320ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "math/rand" "strconv" ) var ( _ = rand.Int() _ = strconv.Unquote ) dep-0.3.2/internal/gps/_testdata/src/twopkgs/000077500000000000000000000000001317166637100211415ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/twopkgs/a.go000066400000000000000000000004241317166637100217100ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "sort" "github.com/golang/dep/internal/gps" ) var ( _ = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/twopkgs/b.go000066400000000000000000000003671317166637100217170ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/varied/000077500000000000000000000000001317166637100207155ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied/locals.go000066400000000000000000000004471317166637100225260ustar00rootroot00000000000000// Copyright 2017 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 main import ( "varied/namemismatch" "varied/otherpath" "varied/simple" ) var ( _ = simple.S _ = nm.V _ = otherpath.O ) dep-0.3.2/internal/gps/_testdata/src/varied/m1p/000077500000000000000000000000001317166637100214125ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied/m1p/a.go000066400000000000000000000004211317166637100221560ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "sort" "github.com/golang/dep/internal/gps" ) var ( M = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/varied/m1p/b.go000066400000000000000000000003671317166637100221700ustar00rootroot00000000000000// Copyright 2017 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 m1p import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/varied/main.go000066400000000000000000000003371317166637100221730ustar00rootroot00000000000000// Copyright 2017 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 main import ( "net/http" ) var ( _ = http.Client ) dep-0.3.2/internal/gps/_testdata/src/varied/namemismatch/000077500000000000000000000000001317166637100233635ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied/namemismatch/nm.go000066400000000000000000000004201317166637100243200ustar00rootroot00000000000000// Copyright 2017 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 nm import ( "os" "github.com/Masterminds/semver" ) var ( V = os.FileInfo _ = semver.Constraint ) dep-0.3.2/internal/gps/_testdata/src/varied/otherpath/000077500000000000000000000000001317166637100227135ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied/otherpath/otherpath_test.go000066400000000000000000000003261317166637100263000ustar00rootroot00000000000000// Copyright 2017 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 otherpath import "varied/m1p" var O = m1p.M dep-0.3.2/internal/gps/_testdata/src/varied/simple/000077500000000000000000000000001317166637100222065ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied/simple/another/000077500000000000000000000000001317166637100236465ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied/simple/another/another.go000066400000000000000000000003271317166637100256370ustar00rootroot00000000000000// Copyright 2017 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 another import "hash" var ( H = hash.Hash ) dep-0.3.2/internal/gps/_testdata/src/varied/simple/another/another_test.go000066400000000000000000000003511317166637100266730ustar00rootroot00000000000000// Copyright 2017 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 another import "encoding/binary" var ( _ = binary.PutVarint ) dep-0.3.2/internal/gps/_testdata/src/varied/simple/another/locals.go000066400000000000000000000003241317166637100254510ustar00rootroot00000000000000// Copyright 2017 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 another import "varied/m1p" var _ = m1p.M dep-0.3.2/internal/gps/_testdata/src/varied/simple/locals.go000066400000000000000000000003471317166637100240160ustar00rootroot00000000000000// Copyright 2017 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 simple import "varied/simple/another" var ( _ = another.H ) dep-0.3.2/internal/gps/_testdata/src/varied/simple/simple.go000066400000000000000000000004371317166637100240320ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "go/parser" "github.com/golang/dep/internal/gps" ) var ( _ = parser.ParseFile S = gps.Prepare ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/000077500000000000000000000000001317166637100222305ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/.onlyfromtests/000077500000000000000000000000001317166637100252365ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/.onlyfromtests/a.go000066400000000000000000000004651317166637100260120ustar00rootroot00000000000000// Copyright 2017 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 onlyfromtests import ( "sort" _ "varied/_secondorder" "github.com/golang/dep/internal/gps" ) var ( M = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/.onlyfromtests/b.go000066400000000000000000000004011317166637100260010ustar00rootroot00000000000000// Copyright 2017 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 onlyfromtests import ( "os" "sort" ) var ( _ = sort.Strings _ = os.PathSeparator ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/_frommain/000077500000000000000000000000001317166637100241775ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/_frommain/a.go000066400000000000000000000004261317166637100247500ustar00rootroot00000000000000// Copyright 2017 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 frommain import ( "sort" "github.com/golang/dep/internal/gps" ) var ( M = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/_never/000077500000000000000000000000001317166637100235065ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/_never/a.go000066400000000000000000000004231317166637100242540ustar00rootroot00000000000000// Copyright 2017 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 never import ( "sort" "github.com/golang/dep/internal/gps" ) var ( M = sort.Strings _ = gps.Solve ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/_secondorder/000077500000000000000000000000001317166637100246765ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/_secondorder/secondorder.go000066400000000000000000000003331317166637100275330ustar00rootroot00000000000000// Copyright 2017 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 secondorder import "hash" var ( H = hash.Hash ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/always/000077500000000000000000000000001317166637100235305ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/always/always_test.go000066400000000000000000000003211317166637100264120ustar00rootroot00000000000000// Copyright 2017 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 always import _ "varied/.onlyfromtests" dep-0.3.2/internal/gps/_testdata/src/varied_hidden/dotdotslash/000077500000000000000000000000001317166637100245605ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/dotdotslash/a.go000066400000000000000000000003771317166637100253360ustar00rootroot00000000000000// Copyright 2017 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 dotslash import ( "../github.com/golang/dep/internal/gps" ) var ( A = gps.Solver ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/locals.go000066400000000000000000000003671317166637100240420ustar00rootroot00000000000000// Copyright 2017 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 main import ( _ "varied/_frommain" "varied/simple" ) var ( _ = simple.S ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/main.go000066400000000000000000000003371317166637100235060ustar00rootroot00000000000000// Copyright 2017 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 main import ( "net/http" ) var ( _ = http.Client ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/simple/000077500000000000000000000000001317166637100235215ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/simple/locals.go000066400000000000000000000003511317166637100253240ustar00rootroot00000000000000// Copyright 2017 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 simple import "varied/simple/testdata" var ( _ = testdata.H ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/simple/simple.go000066400000000000000000000004371317166637100253450ustar00rootroot00000000000000// Copyright 2017 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 simple import ( "go/parser" "github.com/golang/dep/internal/gps" ) var ( _ = parser.ParseFile S = gps.Prepare ) dep-0.3.2/internal/gps/_testdata/src/varied_hidden/simple/testdata/000077500000000000000000000000001317166637100253325ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/varied_hidden/simple/testdata/another.go000066400000000000000000000003201317166637100273140ustar00rootroot00000000000000// Copyright 2017 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 testdata import _ "varied/dotdotslash" dep-0.3.2/internal/gps/_testdata/src/xt/000077500000000000000000000000001317166637100200765ustar00rootroot00000000000000dep-0.3.2/internal/gps/_testdata/src/xt/a_test.go000066400000000000000000000004031317166637100217010ustar00rootroot00000000000000// Copyright 2017 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 simple_test import ( "sort" "strconv" ) var ( _ = sort.Strings _ = strconv.Unquote ) dep-0.3.2/internal/gps/bridge.go000066400000000000000000000152571317166637100165010ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "os" "path/filepath" "sync/atomic" "github.com/golang/dep/internal/gps/pkgtree" ) // sourceBridge is an adapter to SourceManagers that tailor operations for a // single solve run. type sourceBridge interface { // sourceBridge includes all the methods in the SourceManager interface except // for Release(). SourceExists(ProjectIdentifier) (bool, error) SyncSourceFor(ProjectIdentifier) error RevisionPresentIn(ProjectIdentifier, Revision) (bool, error) ListPackages(ProjectIdentifier, Version) (pkgtree.PackageTree, error) GetManifestAndLock(ProjectIdentifier, Version, ProjectAnalyzer) (Manifest, Lock, error) ExportProject(ProjectIdentifier, Version, string) error DeduceProjectRoot(ip string) (ProjectRoot, error) //sourceExists(ProjectIdentifier) (bool, error) //syncSourceFor(ProjectIdentifier) error listVersions(ProjectIdentifier) ([]Version, error) //revisionPresentIn(ProjectIdentifier, Revision) (bool, error) //listPackages(ProjectIdentifier, Version) (pkgtree.PackageTree, error) //getManifestAndLock(ProjectIdentifier, Version, ProjectAnalyzer) (Manifest, Lock, error) //exportProject(ProjectIdentifier, Version, string) error //deduceProjectRoot(ip string) (ProjectRoot, error) verifyRootDir(path string) error vendorCodeExists(ProjectIdentifier) (bool, error) breakLock() } // bridge is an adapter around a proper SourceManager. It provides localized // caching that's tailored to the requirements of a particular solve run. // // Finally, it provides authoritative version/constraint operations, ensuring // that any possible approach to a match - even those not literally encoded in // the inputs - is achieved. type bridge struct { // The underlying, adapted-to SourceManager sm SourceManager // The solver which we're assisting. // // The link between solver and bridge is circular, which is typically a bit // awkward, but the bridge needs access to so many of the input arguments // held by the solver that it ends up being easier and saner to do this. s *solver // Map of project root name to their available version list. This cache is // layered on top of the proper SourceManager's cache; the only difference // is that this keeps the versions sorted in the direction required by the // current solve run. vlists map[ProjectIdentifier][]Version // Indicates whether lock breaking has already been run lockbroken int32 // Whether to sort version lists for downgrade. down bool } // mkBridge creates a bridge func mkBridge(s *solver, sm SourceManager, down bool) *bridge { return &bridge{ sm: sm, s: s, down: down, vlists: make(map[ProjectIdentifier][]Version), } } func (b *bridge) GetManifestAndLock(id ProjectIdentifier, v Version, an ProjectAnalyzer) (Manifest, Lock, error) { if b.s.rd.isRoot(id.ProjectRoot) { return b.s.rd.rm, b.s.rd.rl, nil } b.s.mtr.push("b-gmal") m, l, e := b.sm.GetManifestAndLock(id, v, an) b.s.mtr.pop() return m, l, e } func (b *bridge) listVersions(id ProjectIdentifier) ([]Version, error) { if vl, exists := b.vlists[id]; exists { return vl, nil } b.s.mtr.push("b-list-versions") pvl, err := b.sm.ListVersions(id) if err != nil { b.s.mtr.pop() return nil, err } vl := hidePair(pvl) if b.down { SortForDowngrade(vl) } else { SortForUpgrade(vl) } b.vlists[id] = vl b.s.mtr.pop() return vl, nil } func (b *bridge) RevisionPresentIn(id ProjectIdentifier, r Revision) (bool, error) { b.s.mtr.push("b-rev-present-in") i, e := b.sm.RevisionPresentIn(id, r) b.s.mtr.pop() return i, e } func (b *bridge) SourceExists(id ProjectIdentifier) (bool, error) { b.s.mtr.push("b-source-exists") i, e := b.sm.SourceExists(id) b.s.mtr.pop() return i, e } func (b *bridge) vendorCodeExists(id ProjectIdentifier) (bool, error) { fi, err := os.Stat(filepath.Join(b.s.rd.dir, "vendor", string(id.ProjectRoot))) if err != nil { return false, err } else if fi.IsDir() { return true, nil } return false, nil } // listPackages lists all the packages contained within the given project at a // particular version. // // The root project is handled separately, as the source manager isn't // responsible for that code. func (b *bridge) ListPackages(id ProjectIdentifier, v Version) (pkgtree.PackageTree, error) { if b.s.rd.isRoot(id.ProjectRoot) { return b.s.rd.rpt, nil } b.s.mtr.push("b-list-pkgs") pt, err := b.sm.ListPackages(id, v) b.s.mtr.pop() return pt, err } func (b *bridge) ExportProject(id ProjectIdentifier, v Version, path string) error { panic("bridge should never be used to ExportProject") } // verifyRoot ensures that the provided path to the project root is in good // working condition. This check is made only once, at the beginning of a solve // run. func (b *bridge) verifyRootDir(path string) error { if fi, err := os.Stat(path); err != nil { return badOptsFailure(fmt.Sprintf("could not read project root (%s): %s", path, err)) } else if !fi.IsDir() { return badOptsFailure(fmt.Sprintf("project root (%s) is a file, not a directory", path)) } return nil } func (b *bridge) DeduceProjectRoot(ip string) (ProjectRoot, error) { b.s.mtr.push("b-deduce-proj-root") pr, e := b.sm.DeduceProjectRoot(ip) b.s.mtr.pop() return pr, e } // breakLock is called when the solver has to break a version recorded in the // lock file. It prefetches all the projects in the solver's lock, so that the // information is already on hand if/when the solver needs it. // // Projects that have already been selected are skipped, as it's generally unlikely that the // solver will have to backtrack through and fully populate their version queues. func (b *bridge) breakLock() { // No real conceivable circumstance in which multiple calls are made to // this, but being that this is the entrance point to a bunch of async work, // protect it with an atomic CAS in case things change in the future. // // We avoid using a sync.Once here, as there's no reason for other callers // to block until completion. if !atomic.CompareAndSwapInt32(&b.lockbroken, 0, 1) { return } for _, lp := range b.s.rd.rl.Projects() { if _, is := b.s.sel.selected(lp.pi); !is { pi, v := lp.pi, lp.Version() go func() { // Sync first b.sm.SyncSourceFor(pi) // Preload the package info for the locked version, too, as // we're more likely to need that b.sm.ListPackages(pi, v) }() } } } func (b *bridge) SyncSourceFor(id ProjectIdentifier) error { // we don't track metrics here b/c this is often called in its own goroutine // by the solver, and the metrics design is for wall time on a single thread return b.sm.SyncSourceFor(id) } dep-0.3.2/internal/gps/cmd.go000066400000000000000000000005171317166637100160010ustar00rootroot00000000000000// Copyright 2017 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 gps func (c cmd) Args() []string { return c.Cmd.Args } func (c cmd) SetDir(dir string) { c.Cmd.Dir = dir } func (c cmd) SetEnv(env []string) { c.Cmd.Env = env } dep-0.3.2/internal/gps/cmd_unix.go000066400000000000000000000045261317166637100170500ustar00rootroot00000000000000// Copyright 2017 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 !windows package gps import ( "bytes" "context" "os" "os/exec" "syscall" "time" "github.com/pkg/errors" ) type cmd struct { // ctx is provided by the caller; SIGINT is sent when it is cancelled. ctx context.Context // cancel is called when the graceful shutdown timeout expires. cancel context.CancelFunc Cmd *exec.Cmd } func commandContext(ctx context.Context, name string, arg ...string) cmd { // Create a one-off cancellable context for use by the CommandContext, in // the event that we have to force a Process.Kill(). ctx2, cancel := context.WithCancel(context.Background()) c := cmd{ Cmd: exec.CommandContext(ctx2, name, arg...), cancel: cancel, ctx: ctx, } // Force subprocesses into their own process group, rather than being in the // same process group as the dep process. Because Ctrl-C sent from a // terminal will send the signal to the entire currently running process // group, this allows us to directly manage the issuance of signals to // subprocesses. c.Cmd.SysProcAttr = &syscall.SysProcAttr{ Setpgid: true, Pgid: 0, } return c } // CombinedOutput is like (*os/exec.Cmd).CombinedOutput except that it // terminates subprocesses gently (via os.Interrupt), but resorts to Kill if // the subprocess fails to exit after 1 minute. func (c cmd) CombinedOutput() ([]byte, error) { // Adapted from (*os/exec.Cmd).CombinedOutput if c.Cmd.Stdout != nil { return nil, errors.New("exec: Stdout already set") } if c.Cmd.Stderr != nil { return nil, errors.New("exec: Stderr already set") } var b bytes.Buffer c.Cmd.Stdout = &b c.Cmd.Stderr = &b if err := c.Cmd.Start(); err != nil { return nil, err } // Adapted from (*os/exec.Cmd).Start waitDone := make(chan struct{}) defer close(waitDone) go func() { select { case <-c.ctx.Done(): if err := c.Cmd.Process.Signal(os.Interrupt); err != nil { // If an error comes back from attempting to signal, proceed // immediately to hard kill. c.cancel() } else { stopCancel := time.AfterFunc(time.Minute, c.cancel).Stop <-waitDone stopCancel() } case <-waitDone: } }() if err := c.Cmd.Wait(); err != nil { return nil, err } return b.Bytes(), nil } dep-0.3.2/internal/gps/cmd_windows.go000066400000000000000000000005651317166637100175560ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "os/exec" ) type cmd struct { *exec.Cmd } func commandContext(ctx context.Context, name string, arg ...string) cmd { return cmd{Cmd: exec.CommandContext(ctx, name, arg...)} } dep-0.3.2/internal/gps/constraint_test.go000066400000000000000000000734071317166637100204710ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "testing" "github.com/golang/dep/internal/gps/internal/pb" "github.com/golang/protobuf/proto" "github.com/pkg/errors" ) // gu - helper func for stringifying what we assume is a VersionPair (otherwise // will panic), but is given as a Constraint func gu(v Constraint) string { return fmt.Sprintf("%q at rev %q", v, v.(PairedVersion).Revision()) } func TestBranchConstraintOps(t *testing.T) { v1 := NewBranch("master").(branchVersion) v2 := NewBranch("test").(branchVersion) if !v1.MatchesAny(any) { t.Errorf("Branches should always match the any constraint") } if v1.Intersect(any) != v1 { t.Errorf("Branches should always return self when intersecting the any constraint, but got %s", v1.Intersect(any)) } if v1.MatchesAny(none) { t.Errorf("Branches should never match the none constraint") } if v1.Intersect(none) != none { t.Errorf("Branches should always return none when intersecting the none constraint, but got %s", v1.Intersect(none)) } if v1.Matches(v2) { t.Errorf("%s should not match %s", v1, v2) } if v1.MatchesAny(v2) { t.Errorf("%s should not allow any matches when combined with %s", v1, v2) } if v1.Intersect(v2) != none { t.Errorf("Intersection of %s with %s should result in empty set", v1, v2) } // Add rev to one snuffster := Revision("snuffleupagus") v3 := v1.Pair(snuffster).(versionPair) if v2.Matches(v3) { t.Errorf("%s should not match %s", v2, gu(v3)) } if v3.Matches(v2) { t.Errorf("%s should not match %s", gu(v3), v2) } if v2.MatchesAny(v3) { t.Errorf("%s should not allow any matches when combined with %s", v2, gu(v3)) } if v3.MatchesAny(v2) { t.Errorf("%s should not allow any matches when combined with %s", v2, gu(v3)) } if v2.Intersect(v3) != none { t.Errorf("Intersection of %s with %s should result in empty set", v2, gu(v3)) } if v3.Intersect(v2) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v3), v2) } // Add different rev to the other v4 := v2.Pair(Revision("cookie monster")).(versionPair) if v4.Matches(v3) { t.Errorf("%s should not match %s", gu(v4), gu(v3)) } if v3.Matches(v4) { t.Errorf("%s should not match %s", gu(v3), gu(v4)) } if v4.MatchesAny(v3) { t.Errorf("%s should not allow any matches when combined with %s", gu(v4), gu(v3)) } if v3.MatchesAny(v4) { t.Errorf("%s should not allow any matches when combined with %s", gu(v4), gu(v3)) } if v4.Intersect(v3) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v4), gu(v3)) } if v3.Intersect(v4) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v3), gu(v4)) } // Now add same rev to different branches v5 := v2.Pair(Revision("snuffleupagus")).(versionPair) if !v5.Matches(v3) { t.Errorf("%s should match %s", gu(v5), gu(v3)) } if !v3.Matches(v5) { t.Errorf("%s should match %s", gu(v3), gu(v5)) } if !v5.MatchesAny(v3) { t.Errorf("%s should allow some matches when combined with %s", gu(v5), gu(v3)) } if !v3.MatchesAny(v5) { t.Errorf("%s should allow some matches when combined with %s", gu(v5), gu(v3)) } if v5.Intersect(v3) != snuffster { t.Errorf("Intersection of %s with %s should return underlying rev", gu(v5), gu(v3)) } if v3.Intersect(v5) != snuffster { t.Errorf("Intersection of %s with %s should return underlying rev", gu(v3), gu(v5)) } // Set up for cross-type constraint ops cookie := Revision("cookie monster") o1 := NewVersion("master").(plainVersion) o2 := NewVersion("1.0.0").(semVersion) o3 := o1.Pair(cookie).(versionPair) o4 := o2.Pair(cookie).(versionPair) v6 := v1.Pair(cookie).(versionPair) if v1.Matches(o1) { t.Errorf("%s (branch) should not match %s (version) across types", v1, o1) } if v1.MatchesAny(o1) { t.Errorf("%s (branch) should not allow any matches when combined with %s (version)", v1, o1) } if v1.Intersect(o1) != none { t.Errorf("Intersection of %s (branch) with %s (version) should result in empty set", v1, o1) } if v1.Matches(o2) { t.Errorf("%s (branch) should not match %s (semver) across types", v1, o2) } if v1.MatchesAny(o2) { t.Errorf("%s (branch) should not allow any matches when combined with %s (semver)", v1, o2) } if v1.Intersect(o2) != none { t.Errorf("Intersection of %s (branch) with %s (semver) should result in empty set", v1, o2) } if v1.Matches(o3) { t.Errorf("%s (branch) should not match %s (version) across types", v1, gu(o3)) } if v1.MatchesAny(o3) { t.Errorf("%s (branch) should not allow any matches when combined with %s (version)", v1, gu(o3)) } if v1.Intersect(o3) != none { t.Errorf("Intersection of %s (branch) with %s (version) should result in empty set", v1, gu(o3)) } if v1.Matches(o4) { t.Errorf("%s (branch) should not match %s (semver) across types", v1, gu(o4)) } if v1.MatchesAny(o4) { t.Errorf("%s (branch) should not allow any matches when combined with %s (semver)", v1, gu(o4)) } if v1.Intersect(o4) != none { t.Errorf("Intersection of %s (branch) with %s (semver) should result in empty set", v1, gu(o4)) } if !v6.Matches(o3) { t.Errorf("%s (branch) should match %s (version) across types due to shared rev", gu(v6), gu(o3)) } if !v6.MatchesAny(o3) { t.Errorf("%s (branch) should allow some matches when combined with %s (version) across types due to shared rev", gu(v6), gu(o3)) } if v6.Intersect(o3) != cookie { t.Errorf("Intersection of %s (branch) with %s (version) should return shared underlying rev", gu(v6), gu(o3)) } if !v6.Matches(o4) { t.Errorf("%s (branch) should match %s (version) across types due to shared rev", gu(v6), gu(o4)) } if !v6.MatchesAny(o4) { t.Errorf("%s (branch) should allow some matches when combined with %s (version) across types due to shared rev", gu(v6), gu(o4)) } if v6.Intersect(o4) != cookie { t.Errorf("Intersection of %s (branch) with %s (version) should return shared underlying rev", gu(v6), gu(o4)) } } func TestVersionConstraintOps(t *testing.T) { v1 := NewVersion("ab123").(plainVersion) v2 := NewVersion("b2a13").(plainVersion) if !v1.MatchesAny(any) { t.Errorf("Versions should always match the any constraint") } if v1.Intersect(any) != v1 { t.Errorf("Versions should always return self when intersecting the any constraint, but got %s", v1.Intersect(any)) } if v1.MatchesAny(none) { t.Errorf("Versions should never match the none constraint") } if v1.Intersect(none) != none { t.Errorf("Versions should always return none when intersecting the none constraint, but got %s", v1.Intersect(none)) } if v1.Matches(v2) { t.Errorf("%s should not match %s", v1, v2) } if v1.MatchesAny(v2) { t.Errorf("%s should not allow any matches when combined with %s", v1, v2) } if v1.Intersect(v2) != none { t.Errorf("Intersection of %s with %s should result in empty set", v1, v2) } // Add rev to one snuffster := Revision("snuffleupagus") v3 := v1.Pair(snuffster).(versionPair) if v2.Matches(v3) { t.Errorf("%s should not match %s", v2, gu(v3)) } if v3.Matches(v2) { t.Errorf("%s should not match %s", gu(v3), v2) } if v2.MatchesAny(v3) { t.Errorf("%s should not allow any matches when combined with %s", v2, gu(v3)) } if v3.MatchesAny(v2) { t.Errorf("%s should not allow any matches when combined with %s", v2, gu(v3)) } if v2.Intersect(v3) != none { t.Errorf("Intersection of %s with %s should result in empty set", v2, gu(v3)) } if v3.Intersect(v2) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v3), v2) } // Add different rev to the other v4 := v2.Pair(Revision("cookie monster")).(versionPair) if v4.Matches(v3) { t.Errorf("%s should not match %s", gu(v4), gu(v3)) } if v3.Matches(v4) { t.Errorf("%s should not match %s", gu(v3), gu(v4)) } if v4.MatchesAny(v3) { t.Errorf("%s should not allow any matches when combined with %s", gu(v4), gu(v3)) } if v3.MatchesAny(v4) { t.Errorf("%s should not allow any matches when combined with %s", gu(v4), gu(v3)) } if v4.Intersect(v3) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v4), gu(v3)) } if v3.Intersect(v4) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v3), gu(v4)) } // Now add same rev to different versions, and things should line up v5 := v2.Pair(Revision("snuffleupagus")).(versionPair) if !v5.Matches(v3) { t.Errorf("%s should match %s", gu(v5), gu(v3)) } if !v3.Matches(v5) { t.Errorf("%s should match %s", gu(v3), gu(v5)) } if !v5.MatchesAny(v3) { t.Errorf("%s should allow some matches when combined with %s", gu(v5), gu(v3)) } if !v3.MatchesAny(v5) { t.Errorf("%s should allow some matches when combined with %s", gu(v5), gu(v3)) } if v5.Intersect(v3) != snuffster { t.Errorf("Intersection of %s with %s should return underlying rev", gu(v5), gu(v3)) } if v3.Intersect(v5) != snuffster { t.Errorf("Intersection of %s with %s should return underlying rev", gu(v3), gu(v5)) } // Set up for cross-type constraint ops cookie := Revision("cookie monster") o1 := NewBranch("master").(branchVersion) o2 := NewVersion("1.0.0").(semVersion) o3 := o1.Pair(cookie).(versionPair) o4 := o2.Pair(cookie).(versionPair) v6 := v1.Pair(cookie).(versionPair) if v1.Matches(o1) { t.Errorf("%s (version) should not match %s (branch) across types", v1, o1) } if v1.MatchesAny(o1) { t.Errorf("%s (version) should not allow any matches when combined with %s (branch)", v1, o1) } if v1.Intersect(o1) != none { t.Errorf("Intersection of %s (version) with %s (branch) should result in empty set", v1, o1) } if v1.Matches(o2) { t.Errorf("%s (version) should not match %s (semver) across types", v1, o2) } if v1.MatchesAny(o2) { t.Errorf("%s (version) should not allow any matches when combined with %s (semver)", v1, o2) } if v1.Intersect(o2) != none { t.Errorf("Intersection of %s (version) with %s (semver) should result in empty set", v1, o2) } if v1.Matches(o3) { t.Errorf("%s (version) should not match %s (branch) across types", v1, gu(o3)) } if v1.MatchesAny(o3) { t.Errorf("%s (version) should not allow any matches when combined with %s (branch)", v1, gu(o3)) } if v1.Intersect(o3) != none { t.Errorf("Intersection of %s (version) with %s (branch) should result in empty set", v1, gu(o3)) } if v1.Matches(o4) { t.Errorf("%s (version) should not match %s (semver) across types", v1, gu(o4)) } if v1.MatchesAny(o4) { t.Errorf("%s (version) should not allow any matches when combined with %s (semver)", v1, gu(o4)) } if v1.Intersect(o4) != none { t.Errorf("Intersection of %s (version) with %s (semver) should result in empty set", v1, gu(o4)) } if !v6.Matches(o3) { t.Errorf("%s (version) should match %s (branch) across types due to shared rev", gu(v6), gu(o3)) } if !v6.MatchesAny(o3) { t.Errorf("%s (version) should allow some matches when combined with %s (branch) across types due to shared rev", gu(v6), gu(o3)) } if v6.Intersect(o3) != cookie { t.Errorf("Intersection of %s (version) with %s (branch) should return shared underlying rev", gu(v6), gu(o3)) } if !v6.Matches(o4) { t.Errorf("%s (version) should match %s (branch) across types due to shared rev", gu(v6), gu(o4)) } if !v6.MatchesAny(o4) { t.Errorf("%s (version) should allow some matches when combined with %s (branch) across types due to shared rev", gu(v6), gu(o4)) } if v6.Intersect(o4) != cookie { t.Errorf("Intersection of %s (version) with %s (branch) should return shared underlying rev", gu(v6), gu(o4)) } } func TestSemverVersionConstraintOps(t *testing.T) { v1 := NewVersion("1.0.0").(semVersion) v2 := NewVersion("2.0.0").(semVersion) if !v1.MatchesAny(any) { t.Errorf("Semvers should always match the any constraint") } if v1.Intersect(any) != v1 { t.Errorf("Semvers should always return self when intersecting the any constraint, but got %s", v1.Intersect(any)) } if v1.MatchesAny(none) { t.Errorf("Semvers should never match the none constraint") } if v1.Intersect(none) != none { t.Errorf("Semvers should always return none when intersecting the none constraint, but got %s", v1.Intersect(none)) } if v1.Matches(v2) { t.Errorf("%s should not match %s", v1, v2) } if v1.MatchesAny(v2) { t.Errorf("%s should not allow any matches when combined with %s", v1, v2) } if v1.Intersect(v2) != none { t.Errorf("Intersection of %s with %s should result in empty set", v1, v2) } // Add rev to one snuffster := Revision("snuffleupagus") v3 := v1.Pair(snuffster).(versionPair) if v2.Matches(v3) { t.Errorf("%s should not match %s", v2, gu(v3)) } if v3.Matches(v2) { t.Errorf("%s should not match %s", gu(v3), v2) } if v2.MatchesAny(v3) { t.Errorf("%s should not allow any matches when combined with %s", v2, gu(v3)) } if v3.MatchesAny(v2) { t.Errorf("%s should not allow any matches when combined with %s", v2, gu(v3)) } if v2.Intersect(v3) != none { t.Errorf("Intersection of %s with %s should result in empty set", v2, gu(v3)) } if v3.Intersect(v2) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v3), v2) } // Add different rev to the other v4 := v2.Pair(Revision("cookie monster")).(versionPair) if v4.Matches(v3) { t.Errorf("%s should not match %s", gu(v4), gu(v3)) } if v3.Matches(v4) { t.Errorf("%s should not match %s", gu(v3), gu(v4)) } if v4.MatchesAny(v3) { t.Errorf("%s should not allow any matches when combined with %s", gu(v4), gu(v3)) } if v3.MatchesAny(v4) { t.Errorf("%s should not allow any matches when combined with %s", gu(v4), gu(v3)) } if v4.Intersect(v3) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v4), gu(v3)) } if v3.Intersect(v4) != none { t.Errorf("Intersection of %s with %s should result in empty set", gu(v3), gu(v4)) } // Now add same rev to different versions, and things should line up v5 := v2.Pair(Revision("snuffleupagus")).(versionPair) if !v5.Matches(v3) { t.Errorf("%s should match %s", gu(v5), gu(v3)) } if !v3.Matches(v5) { t.Errorf("%s should match %s", gu(v3), gu(v5)) } if !v5.MatchesAny(v3) { t.Errorf("%s should allow some matches when combined with %s", gu(v5), gu(v3)) } if !v3.MatchesAny(v5) { t.Errorf("%s should allow some matches when combined with %s", gu(v5), gu(v3)) } if v5.Intersect(v3) != snuffster { t.Errorf("Intersection of %s with %s should return underlying rev", gu(v5), gu(v3)) } if v3.Intersect(v5) != snuffster { t.Errorf("Intersection of %s with %s should return underlying rev", gu(v3), gu(v5)) } // Set up for cross-type constraint ops cookie := Revision("cookie monster") o1 := NewBranch("master").(branchVersion) o2 := NewVersion("ab123").(plainVersion) o3 := o1.Pair(cookie).(versionPair) o4 := o2.Pair(cookie).(versionPair) v6 := v1.Pair(cookie).(versionPair) if v1.Matches(o1) { t.Errorf("%s (semver) should not match %s (branch) across types", v1, o1) } if v1.MatchesAny(o1) { t.Errorf("%s (semver) should not allow any matches when combined with %s (branch)", v1, o1) } if v1.Intersect(o1) != none { t.Errorf("Intersection of %s (semver) with %s (branch) should result in empty set", v1, o1) } if v1.Matches(o2) { t.Errorf("%s (semver) should not match %s (version) across types", v1, o2) } if v1.MatchesAny(o2) { t.Errorf("%s (semver) should not allow any matches when combined with %s (version)", v1, o2) } if v1.Intersect(o2) != none { t.Errorf("Intersection of %s (semver) with %s (version) should result in empty set", v1, o2) } if v1.Matches(o3) { t.Errorf("%s (semver) should not match %s (branch) across types", v1, gu(o3)) } if v1.MatchesAny(o3) { t.Errorf("%s (semver) should not allow any matches when combined with %s (branch)", v1, gu(o3)) } if v1.Intersect(o3) != none { t.Errorf("Intersection of %s (semver) with %s (branch) should result in empty set", v1, gu(o3)) } if v1.Matches(o4) { t.Errorf("%s (semver) should not match %s (version) across types", v1, gu(o4)) } if v1.MatchesAny(o4) { t.Errorf("%s (semver) should not allow any matches when combined with %s (version)", v1, gu(o4)) } if v1.Intersect(o4) != none { t.Errorf("Intersection of %s (semver) with %s (version) should result in empty set", v1, gu(o4)) } if !v6.Matches(o3) { t.Errorf("%s (semver) should match %s (branch) across types due to shared rev", gu(v6), gu(o3)) } if !v6.MatchesAny(o3) { t.Errorf("%s (semver) should allow some matches when combined with %s (branch) across types due to shared rev", gu(v6), gu(o3)) } if v6.Intersect(o3) != cookie { t.Errorf("Intersection of %s (semver) with %s (branch) should return shared underlying rev", gu(v6), gu(o3)) } if !v6.Matches(o4) { t.Errorf("%s (semver) should match %s (branch) across types due to shared rev", gu(v6), gu(o4)) } if !v6.MatchesAny(o4) { t.Errorf("%s (semver) should allow some matches when combined with %s (branch) across types due to shared rev", gu(v6), gu(o4)) } if v6.Intersect(o4) != cookie { t.Errorf("Intersection of %s (semver) with %s (branch) should return shared underlying rev", gu(v6), gu(o4)) } // Regression check - make sure that semVersion -> semverConstraint works // the same as verified in the other test c1, _ := NewSemverConstraint("=1.0.0") if !v1.MatchesAny(c1) { t.Errorf("%s (semver) should allow some matches - itself - when combined with an equivalent semverConstraint", gu(v1)) } if v1.Intersect(c1) != v1 { t.Errorf("Intersection of %s (semver) with equivalent semver constraint should return self, got %s", gu(v1), v1.Intersect(c1)) } if !v6.MatchesAny(c1) { t.Errorf("%s (semver pair) should allow some matches - itself - when combined with an equivalent semverConstraint", gu(v6)) } if v6.Intersect(c1) != v6 { t.Errorf("Intersection of %s (semver pair) with equivalent semver constraint should return self, got %s", gu(v6), v6.Intersect(c1)) } } // The other test is about the semverVersion, this is about semverConstraint func TestSemverConstraintOps(t *testing.T) { v1 := NewBranch("master").(branchVersion) v2 := NewVersion("ab123").(plainVersion) v3 := NewVersion("1.0.0").(semVersion) fozzie := Revision("fozzie bear") v4 := v1.Pair(fozzie).(versionPair) v5 := v2.Pair(fozzie).(versionPair) v6 := v3.Pair(fozzie).(versionPair) // TODO(sdboyer) we can't use the same range as below b/c semver.rangeConstraint is // still an incomparable type c1, err := NewSemverConstraint("=1.0.0") if err != nil { t.Fatalf("Failed to create constraint: %s", err) } if !c1.MatchesAny(any) { t.Errorf("Semver constraints should always match the any constraint") } if c1.Intersect(any) != c1 { t.Errorf("Semver constraints should always return self when intersecting the any constraint, but got %s", c1.Intersect(any)) } if c1.MatchesAny(none) { t.Errorf("Semver constraints should never match the none constraint") } if c1.Intersect(none) != none { t.Errorf("Semver constraints should always return none when intersecting the none constraint, but got %s", c1.Intersect(none)) } c1, err = NewSemverConstraint(">= 1.0.0") if err != nil { t.Fatalf("Failed to create constraint: %s", err) } if c1.Matches(v1) { t.Errorf("Semver constraint should not match simple branch") } if c1.Matches(v2) { t.Errorf("Semver constraint should not match simple version") } if !c1.Matches(v3) { t.Errorf("Semver constraint should match a simple semver version in its range") } if c1.Matches(v4) { t.Errorf("Semver constraint should not match paired branch") } if c1.Matches(v5) { t.Errorf("Semver constraint should not match paired version") } if !c1.Matches(v6) { t.Errorf("Semver constraint should match a paired semver version in its range") } if c1.MatchesAny(v1) { t.Errorf("Semver constraint should not allow any when intersected with simple branch") } if c1.MatchesAny(v2) { t.Errorf("Semver constraint should not allow any when intersected with simple version") } if !c1.MatchesAny(v3) { t.Errorf("Semver constraint should allow some when intersected with a simple semver version in its range") } if c1.MatchesAny(v4) { t.Errorf("Semver constraint should not allow any when intersected with paired branch") } if c1.MatchesAny(v5) { t.Errorf("Semver constraint should not allow any when intersected with paired version") } if !c1.MatchesAny(v6) { t.Errorf("Semver constraint should allow some when intersected with a paired semver version in its range") } if c1.Intersect(v1) != none { t.Errorf("Semver constraint should return none when intersected with a simple branch") } if c1.Intersect(v2) != none { t.Errorf("Semver constraint should return none when intersected with a simple version") } if c1.Intersect(v3) != v3 { t.Errorf("Semver constraint should return input when intersected with a simple semver version in its range") } if c1.Intersect(v4) != none { t.Errorf("Semver constraint should return none when intersected with a paired branch") } if c1.Intersect(v5) != none { t.Errorf("Semver constraint should return none when intersected with a paired version") } if c1.Intersect(v6) != v6 { t.Errorf("Semver constraint should return input when intersected with a paired semver version in its range") } } func TestSemverConstraint_ImpliedCaret(t *testing.T) { c, _ := NewSemverConstraintIC("1.0.0") wantS := "^1.0.0" gotS := c.String() if wantS != gotS { t.Errorf("Expected string %s, got %s", wantS, gotS) } wantI := "1.0.0" gotI := c.ImpliedCaretString() if wantI != gotI { t.Errorf("Expected implied string %s, got %s", wantI, gotI) } wantT := "svc-^1.0.0" gotT := c.typedString() if wantT != gotT { t.Errorf("Expected type string %s, got %s", wantT, gotT) } } // Test that certain types of cross-version comparisons work when they are // expressed as a version union (but that others don't). func TestVersionUnion(t *testing.T) { rev := Revision("flooboofoobooo") v1 := NewBranch("master") v2 := NewBranch("test") v3 := NewVersion("1.0.0").Pair(rev) v4 := NewVersion("1.0.1") v5 := NewVersion("v2.0.5").Pair(Revision("notamatch")) uv1 := versionTypeUnion{v1, v4, rev} uv2 := versionTypeUnion{v2, v3} if uv1.MatchesAny(none) { t.Errorf("Union can't match none") } if none.MatchesAny(uv1) { t.Errorf("Union can't match none") } if !uv1.MatchesAny(any) { t.Errorf("Union must match any") } if !any.MatchesAny(uv1) { t.Errorf("Union must match any") } // Basic matching if !uv1.Matches(v4) { t.Errorf("Union should match on branch to branch") } if !v4.Matches(uv1) { t.Errorf("Union should reverse-match on branch to branch") } if !uv1.Matches(v3) { t.Errorf("Union should match on rev to paired rev") } if !v3.Matches(uv1) { t.Errorf("Union should reverse-match on rev to paired rev") } if uv1.Matches(v2) { t.Errorf("Union should not match on anything in disjoint unpaired") } if v2.Matches(uv1) { t.Errorf("Union should not reverse-match on anything in disjoint unpaired") } if uv1.Matches(v5) { t.Errorf("Union should not match on anything in disjoint pair") } if v5.Matches(uv1) { t.Errorf("Union should not reverse-match on anything in disjoint pair") } if !uv1.Matches(uv2) { t.Errorf("Union should succeed on matching comparison to other union with some overlap") } // MatchesAny - repeat Matches for safety, but add more, too if !uv1.MatchesAny(v4) { t.Errorf("Union should match on branch to branch") } if !v4.MatchesAny(uv1) { t.Errorf("Union should reverse-match on branch to branch") } if !uv1.MatchesAny(v3) { t.Errorf("Union should match on rev to paired rev") } if !v3.MatchesAny(uv1) { t.Errorf("Union should reverse-match on rev to paired rev") } if uv1.MatchesAny(v2) { t.Errorf("Union should not match on anything in disjoint unpaired") } if v2.MatchesAny(uv1) { t.Errorf("Union should not reverse-match on anything in disjoint unpaired") } if uv1.MatchesAny(v5) { t.Errorf("Union should not match on anything in disjoint pair") } if v5.MatchesAny(uv1) { t.Errorf("Union should not reverse-match on anything in disjoint pair") } c1, _ := NewSemverConstraint("~1.0.0") c2, _ := NewSemverConstraint("~2.0.0") if !uv1.MatchesAny(c1) { t.Errorf("Union should have some overlap due to containing 1.0.1 version") } if !c1.MatchesAny(uv1) { t.Errorf("Union should have some overlap due to containing 1.0.1 version") } if uv1.MatchesAny(c2) { t.Errorf("Union should have no overlap with ~2.0.0 semver range") } if c2.MatchesAny(uv1) { t.Errorf("Union should have no overlap with ~2.0.0 semver range") } if !uv1.MatchesAny(uv2) { t.Errorf("Union should succeed on MatchAny against other union with some overlap") } // Intersect - repeat all previous if uv1.Intersect(v4) != v4 { t.Errorf("Union intersection on contained version should return that version") } if v4.Intersect(uv1) != v4 { t.Errorf("Union reverse-intersection on contained version should return that version") } if uv1.Intersect(v3) != rev { t.Errorf("Union intersection on paired version w/matching rev should return rev, got %s", uv1.Intersect(v3)) } if v3.Intersect(uv1) != rev { t.Errorf("Union reverse-intersection on paired version w/matching rev should return rev, got %s", v3.Intersect(uv1)) } if uv1.Intersect(v2) != none { t.Errorf("Union should not intersect with anything in disjoint unpaired") } if v2.Intersect(uv1) != none { t.Errorf("Union should not reverse-intersect with anything in disjoint unpaired") } if uv1.Intersect(v5) != none { t.Errorf("Union should not intersect with anything in disjoint pair") } if v5.Intersect(uv1) != none { t.Errorf("Union should not reverse-intersect with anything in disjoint pair") } if uv1.Intersect(c1) != v4 { t.Errorf("Union intersecting with semver range should return 1.0.1 version, got %s", uv1.Intersect(c1)) } if c1.Intersect(uv1) != v4 { t.Errorf("Union reverse-intersecting with semver range should return 1.0.1 version, got %s", c1.Intersect(uv1)) } if uv1.Intersect(c2) != none { t.Errorf("Union intersecting with non-overlapping semver range should return none, got %s", uv1.Intersect(c2)) } if c2.Intersect(uv1) != none { t.Errorf("Union reverse-intersecting with non-overlapping semver range should return none, got %s", uv1.Intersect(c2)) } if uv1.Intersect(uv2) != rev { t.Errorf("Unions should intersect down to rev, but got %s", uv1.Intersect(uv2)) } } func TestVersionUnionPanicOnType(t *testing.T) { // versionTypeUnions need to panic if Type() gets called defer func() { if err := recover(); err == nil { t.Error("versionTypeUnion did not panic on Type() call") } }() _ = versionTypeUnion{}.Type() } func TestVersionUnionPanicOnString(t *testing.T) { // versionStringUnions need to panic if String() gets called defer func() { if err := recover(); err == nil { t.Error("versionStringUnion did not panic on String() call") } }() _ = versionTypeUnion{}.String() } func TestTypedConstraintString(t *testing.T) { // Also tests typedVersionString(), as this nests down into that rev := Revision("flooboofoobooo") v1 := NewBranch("master") v2 := NewBranch("test").Pair(rev) v3 := NewVersion("1.0.1") v4 := NewVersion("v2.0.5") v5 := NewVersion("2.0.5.2") table := []struct { in Constraint out string }{ { in: anyConstraint{}, out: "any-*", }, { in: noneConstraint{}, out: "none-", }, { in: mkSVC("^1.0.0"), out: "svc-^1.0.0", }, { in: v1, out: "b-master", }, { in: v2, out: "b-test-r-" + string(rev), }, { in: v3, out: "sv-1.0.1", }, { in: v4, out: "sv-v2.0.5", }, { in: v5, out: "pv-2.0.5.2", }, } for _, fix := range table { got := fix.in.typedString() if got != fix.out { t.Errorf("Typed string for %v (%T) was not expected %q; got %q", fix.in, fix.in, fix.out, got) } } } func TestConstraintsIdentical(t *testing.T) { for _, test := range []struct { a, b Constraint eq bool }{ {Any(), Any(), true}, {none, noneConstraint{}, true}, {NewVersion("test"), NewVersion("test"), true}, {NewVersion("test"), NewVersion("test2"), false}, {NewBranch("test"), NewBranch("test"), true}, {NewBranch("test"), newDefaultBranch("test"), false}, {newDefaultBranch("test"), newDefaultBranch("test"), true}, {Revision("test"), Revision("test"), true}, {Revision("test"), Revision("test2"), false}, {testSemverConstraint(t, "v2.10.7"), testSemverConstraint(t, "v2.10.7"), true}, {versionTypeUnion{NewVersion("test"), NewBranch("branch")}, versionTypeUnion{NewBranch("branch"), NewVersion("test")}, true}, } { if test.eq != test.a.identical(test.b) { want := "identical" if !test.eq { want = "not " + want } t.Errorf("expected %s:\n\t(a) %#v\n\t(b) %#v", want, test.a, test.b) } } } func testSemverConstraint(t *testing.T, body string) Constraint { c, err := NewSemverConstraint(body) if err != nil { t.Fatal(errors.Wrapf(err, "failed to create semver constraint: %s", body)) } return c } func TestConstraintEncoding(t *testing.T) { for _, test := range []struct { name string c Constraint }{ {"defaultBranch", newDefaultBranch("test")}, {"branch", NewBranch("test")}, {"ver", NewVersion("test")}, {"semver", testSemverConstraint(t, "^1.0.0")}, {"rev", Revision("test")}, } { t.Run(test.name, func(t *testing.T) { var msg pb.Constraint test.c.copyTo(&msg) b, err := proto.Marshal(&msg) if err != nil { t.Fatal(err) } if err := proto.Unmarshal(b, &msg); err != nil { t.Fatal(err) } got, err := constraintFromCache(&msg) if err != nil { t.Error("failed to decode:", err) } else if !got.identical(test.c) { t.Errorf("decoded non-identical Constraint:\n\t(GOT): %#v\n\t(WNT): %#v", got, test.c) } if _, ok := test.c.(UnpairedVersion); ok { got, err := unpairedVersionFromCache(&msg) if err != nil { t.Error("failed to decode:", err) } else if !got.identical(test.c) { t.Errorf("decoded non-identical UnpairedVersion:\n\t(GOT): %#v\n\t(WNT): %#v", got, test.c) } } }) } } dep-0.3.2/internal/gps/constraints.go000066400000000000000000000304411317166637100176040ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "sort" "github.com/Masterminds/semver" "github.com/golang/dep/internal/gps/internal/pb" ) var ( none = noneConstraint{} any = anyConstraint{} ) // A Constraint provides structured limitations on the versions that are // admissible for a given project. // // As with Version, it has a private method because the gps's internal // implementation of the problem is complete, and the system relies on type // magic to operate. type Constraint interface { fmt.Stringer // ImpliedCaretString converts the Constraint to a string in the same manner // as String(), but treats the empty operator as equivalent to ^, rather // than =. // // In the same way that String() is the inverse of NewConstraint(), this // method is the inverse of NewSemverConstraintIC(). ImpliedCaretString() string // Matches indicates if the provided Version is allowed by the Constraint. Matches(Version) bool // MatchesAny indicates if the intersection of the Constraint with the // provided Constraint would yield a Constraint that could allow *any* // Version. MatchesAny(Constraint) bool // Intersect computes the intersection of the Constraint with the provided // Constraint. Intersect(Constraint) Constraint // typedString emits the normal stringified representation of the provided // constraint, prefixed with a string that uniquely identifies the type of // the constraint. // // It also forces Constraint to be a private/sealed interface, which is a // design goal of the system. typedString() string // copyTo copies fields into a serializable representation which can be // converted back into an identical Constraint with constraintFromCache. copyTo(*pb.Constraint) // identical returns true if the constraints are identical. // // Identical Constraints behave identically for all methods defined by the // interface. A Constraint is always identical to itself. // // Constraints serialized for caching are de-serialized into identical instances. identical(Constraint) bool } // constraintFromCache returns a Constraint identical to the one which produced m. func constraintFromCache(m *pb.Constraint) (Constraint, error) { switch m.Type { case pb.Constraint_Revision: return Revision(m.Value), nil case pb.Constraint_Branch: return NewBranch(m.Value), nil case pb.Constraint_DefaultBranch: return newDefaultBranch(m.Value), nil case pb.Constraint_Version: return plainVersion(m.Value), nil case pb.Constraint_Semver: return NewSemverConstraint(m.Value) default: return nil, fmt.Errorf("unrecognized Constraint type: %#v", m) } } // unpairedVersionFromCache returns an UnpairedVersion identical to the one which produced m. func unpairedVersionFromCache(m *pb.Constraint) (UnpairedVersion, error) { switch m.Type { case pb.Constraint_Branch: return NewBranch(m.Value), nil case pb.Constraint_DefaultBranch: return newDefaultBranch(m.Value), nil case pb.Constraint_Version: return plainVersion(m.Value), nil case pb.Constraint_Semver: sv, err := semver.NewVersion(m.Value) if err != nil { return nil, err } return semVersion{sv: sv}, nil default: return nil, fmt.Errorf("unrecognized UnpairedVersion type: %#v", m) } } // NewSemverConstraint attempts to construct a semver Constraint object from the // input string. // // If the input string cannot be made into a valid semver Constraint, an error // is returned. func NewSemverConstraint(body string) (Constraint, error) { c, err := semver.NewConstraint(body) if err != nil { return nil, err } // If we got a simple semver.Version, simplify by returning our // corresponding type if sv, ok := c.(semver.Version); ok { return semVersion{sv: sv}, nil } return semverConstraint{c: c}, nil } // NewSemverConstraintIC attempts to construct a semver Constraint object from the // input string, defaulting to a caret, ^, when no operator is specified. Put // differently, ^ is the default operator for NewSemverConstraintIC, while = // is the default operator for NewSemverConstraint. // // If the input string cannot be made into a valid semver Constraint, an error // is returned. func NewSemverConstraintIC(body string) (Constraint, error) { c, err := semver.NewConstraintIC(body) if err != nil { return nil, err } // If we got a simple semver.Version, simplify by returning our // corresponding type if sv, ok := c.(semver.Version); ok { return semVersion{sv: sv}, nil } return semverConstraint{c: c}, nil } type semverConstraint struct { c semver.Constraint } func (c semverConstraint) String() string { return c.c.String() } // ImpliedCaretString converts the Constraint to a string in the same manner // as String(), but treats the empty operator as equivalent to ^, rather // than =. // // In the same way that String() is the inverse of NewConstraint(), this // method is the inverse of NewSemverConstraintIC(). func (c semverConstraint) ImpliedCaretString() string { return c.c.ImpliedCaretString() } func (c semverConstraint) typedString() string { return fmt.Sprintf("svc-%s", c.c.String()) } func (c semverConstraint) Matches(v Version) bool { switch tv := v.(type) { case versionTypeUnion: for _, elem := range tv { if c.Matches(elem) { return true } } case semVersion: return c.c.Matches(tv.sv) == nil case versionPair: if tv2, ok := tv.v.(semVersion); ok { return c.c.Matches(tv2.sv) == nil } } return false } func (c semverConstraint) MatchesAny(c2 Constraint) bool { return c.Intersect(c2) != none } func (c semverConstraint) Intersect(c2 Constraint) Constraint { switch tc := c2.(type) { case anyConstraint: return c case versionTypeUnion: for _, elem := range tc { if rc := c.Intersect(elem); rc != none { return rc } } case semverConstraint: rc := c.c.Intersect(tc.c) if !semver.IsNone(rc) { return semverConstraint{c: rc} } case semVersion: rc := c.c.Intersect(tc.sv) if !semver.IsNone(rc) { // If single version intersected with constraint, we know the result // must be the single version, so just return it back out return c2 } case versionPair: if tc2, ok := tc.v.(semVersion); ok { rc := c.c.Intersect(tc2.sv) if !semver.IsNone(rc) { // same reasoning as previous case return c2 } } } return none } func (c semverConstraint) identical(c2 Constraint) bool { sc2, ok := c2.(semverConstraint) if !ok { return false } return c.c.String() == sc2.c.String() } func (c semverConstraint) copyTo(msg *pb.Constraint) { msg.Type = pb.Constraint_Semver msg.Value = c.String() } // IsAny indicates if the provided constraint is the wildcard "Any" constraint. func IsAny(c Constraint) bool { _, ok := c.(anyConstraint) return ok } // Any returns a constraint that will match anything. func Any() Constraint { return anyConstraint{} } // anyConstraint is an unbounded constraint - it matches all other types of // constraints. It mirrors the behavior of the semver package's any type. type anyConstraint struct{} func (anyConstraint) String() string { return "*" } func (anyConstraint) ImpliedCaretString() string { return "*" } func (anyConstraint) typedString() string { return "any-*" } func (anyConstraint) Matches(Version) bool { return true } func (anyConstraint) MatchesAny(Constraint) bool { return true } func (anyConstraint) Intersect(c Constraint) Constraint { return c } func (anyConstraint) identical(c Constraint) bool { return IsAny(c) } func (anyConstraint) copyTo(*pb.Constraint) { panic("anyConstraint should never be serialized; it is solver internal-only") } // noneConstraint is the empty set - it matches no versions. It mirrors the // behavior of the semver package's none type. type noneConstraint struct{} func (noneConstraint) String() string { return "" } func (noneConstraint) ImpliedCaretString() string { return "" } func (noneConstraint) typedString() string { return "none-" } func (noneConstraint) Matches(Version) bool { return false } func (noneConstraint) MatchesAny(Constraint) bool { return false } func (noneConstraint) Intersect(Constraint) Constraint { return none } func (noneConstraint) identical(c Constraint) bool { _, ok := c.(noneConstraint) return ok } func (noneConstraint) copyTo(*pb.Constraint) { panic("noneConstraint should never be serialized; it is solver internal-only") } // A ProjectConstraint combines a ProjectIdentifier with a Constraint. It // indicates that, if packages contained in the ProjectIdentifier enter the // depgraph, they must do so at a version that is allowed by the Constraint. type ProjectConstraint struct { Ident ProjectIdentifier Constraint Constraint } // ProjectConstraints is a map of projects, as identified by their import path // roots (ProjectRoots) to the corresponding ProjectProperties. // // They are the standard form in which Manifests declare their required // dependency properties - constraints and network locations - as well as the // form in which RootManifests declare their overrides. type ProjectConstraints map[ProjectRoot]ProjectProperties type workingConstraint struct { Ident ProjectIdentifier Constraint Constraint overrNet, overrConstraint bool } func pcSliceToMap(l []ProjectConstraint, r ...[]ProjectConstraint) ProjectConstraints { final := make(ProjectConstraints) for _, pc := range l { final[pc.Ident.ProjectRoot] = ProjectProperties{ Source: pc.Ident.Source, Constraint: pc.Constraint, } } for _, pcs := range r { for _, pc := range pcs { if pp, exists := final[pc.Ident.ProjectRoot]; exists { // Technically this should be done through a bridge for // cross-version-type matching...but this is a one off for root and // that's just ridiculous for this. pp.Constraint = pp.Constraint.Intersect(pc.Constraint) final[pc.Ident.ProjectRoot] = pp } else { final[pc.Ident.ProjectRoot] = ProjectProperties{ Source: pc.Ident.Source, Constraint: pc.Constraint, } } } } return final } func (m ProjectConstraints) asSortedSlice() []ProjectConstraint { pcs := make([]ProjectConstraint, len(m)) k := 0 for pr, pp := range m { pcs[k] = ProjectConstraint{ Ident: ProjectIdentifier{ ProjectRoot: pr, Source: pp.Source, }, Constraint: pp.Constraint, } k++ } sort.SliceStable(pcs, func(i, j int) bool { return pcs[i].Ident.Less(pcs[j].Ident) }) return pcs } // overrideAll treats the receiver ProjectConstraints map as a set of override // instructions, and applies overridden values to the ProjectConstraints. // // A slice of workingConstraint is returned, allowing differentiation between // values that were or were not overridden. func (m ProjectConstraints) overrideAll(pcm ProjectConstraints) (out []workingConstraint) { out = make([]workingConstraint, len(pcm)) k := 0 for pr, pp := range pcm { out[k] = m.override(pr, pp) k++ } sort.SliceStable(out, func(i, j int) bool { return out[i].Ident.Less(out[j].Ident) }) return } // override replaces a single ProjectConstraint with a workingConstraint, // overriding its values if a corresponding entry exists in the // ProjectConstraints map. func (m ProjectConstraints) override(pr ProjectRoot, pp ProjectProperties) workingConstraint { wc := workingConstraint{ Ident: ProjectIdentifier{ ProjectRoot: pr, Source: pp.Source, }, Constraint: pp.Constraint, } if opp, has := m[pr]; has { // The rule for overrides is that *any* non-zero value for the prop // should be considered an override, even if it's equal to what's // already there. if opp.Constraint != nil { wc.Constraint = opp.Constraint wc.overrConstraint = true } // This may appear incorrect, because the solver encodes meaning into // the empty string for NetworkName (it means that it would use the // import path by default, but could be coerced into using an alternate // URL). However, that 'coercion' can only happen if there's a // disagreement between projects on where a dependency should be sourced // from. Such disagreement is exactly what overrides preclude, so // there's no need to preserve the meaning of "" here - thus, we can // treat it as a zero value and ignore it, rather than applying it. if opp.Source != "" { wc.Ident.Source = opp.Source wc.overrNet = true } } return wc } dep-0.3.2/internal/gps/deduce.go000066400000000000000000000621131317166637100164670ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "fmt" "io" "net/http" "net/url" "path" "regexp" "strconv" "strings" "sync" radix "github.com/armon/go-radix" "github.com/pkg/errors" ) var ( gitSchemes = []string{"https", "ssh", "git", "http"} bzrSchemes = []string{"https", "bzr+ssh", "bzr", "http"} hgSchemes = []string{"https", "ssh", "http"} svnSchemes = []string{"https", "http", "svn", "svn+ssh"} gopkginSchemes = []string{"https", "http"} ) const gopkgUnstableSuffix = "-unstable" func validateVCSScheme(scheme, typ string) bool { // everything allows plain ssh if scheme == "ssh" { return true } var schemes []string switch typ { case "git": schemes = gitSchemes case "bzr": schemes = bzrSchemes case "hg": schemes = hgSchemes case "svn": schemes = svnSchemes default: panic(fmt.Sprint("unsupported vcs type", scheme)) } for _, valid := range schemes { if scheme == valid { return true } } return false } // Regexes for the different known import path flavors var ( // This regex allows some usernames that github currently disallows. They // have allowed them in the past. ghRegex = regexp.MustCompile(`^(?Pgithub\.com(/[A-Za-z0-9][-A-Za-z0-9]*/[A-Za-z0-9_.\-]+))((?:/[A-Za-z0-9_.\-]+)*)$`) gpinNewRegex = regexp.MustCompile(`^(?Pgopkg\.in(?:(/[a-zA-Z0-9][-a-zA-Z0-9]+)?)(/[a-zA-Z][-.a-zA-Z0-9]*)\.((?:v0|v[1-9][0-9]*)(?:\.0|\.[1-9][0-9]*){0,2}(?:-unstable)?)(?:\.git)?)((?:/[a-zA-Z0-9][-.a-zA-Z0-9]*)*)$`) //gpinOldRegex = regexp.MustCompile(`^(?Pgopkg\.in/(?:([a-z0-9][-a-z0-9]+)/)?((?:v0|v[1-9][0-9]*)(?:\.0|\.[1-9][0-9]*){0,2}(-unstable)?)/([a-zA-Z][-a-zA-Z0-9]*)(?:\.git)?)((?:/[a-zA-Z][-a-zA-Z0-9]*)*)$`) bbRegex = regexp.MustCompile(`^(?Pbitbucket\.org(?P/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+))((?:/[A-Za-z0-9_.\-]+)*)$`) //lpRegex = regexp.MustCompile(`^(?Plaunchpad\.net/([A-Za-z0-9-._]+)(/[A-Za-z0-9-._]+)?)(/.+)?`) lpRegex = regexp.MustCompile(`^(?Plaunchpad\.net(/[A-Za-z0-9-._]+))((?:/[A-Za-z0-9_.\-]+)*)?`) //glpRegex = regexp.MustCompile(`^(?Pgit\.launchpad\.net/([A-Za-z0-9_.\-]+)|~[A-Za-z0-9_.\-]+/(\+git|[A-Za-z0-9_.\-]+)/[A-Za-z0-9_.\-]+)$`) glpRegex = regexp.MustCompile(`^(?Pgit\.launchpad\.net(/[A-Za-z0-9_.\-]+))((?:/[A-Za-z0-9_.\-]+)*)$`) //gcRegex = regexp.MustCompile(`^(?Pcode\.google\.com/[pr]/(?P[a-z0-9\-]+)(\.(?P[a-z0-9\-]+))?)(/[A-Za-z0-9_.\-]+)*$`) jazzRegex = regexp.MustCompile(`^(?Phub\.jazz\.net(/git/[a-z0-9]+/[A-Za-z0-9_.\-]+))((?:/[A-Za-z0-9_.\-]+)*)$`) apacheRegex = regexp.MustCompile(`^(?Pgit\.apache\.org(/[a-z0-9_.\-]+\.git))((?:/[A-Za-z0-9_.\-]+)*)$`) vcsExtensionRegex = regexp.MustCompile(`^(?P([a-z0-9.\-]+\.)+[a-z0-9.\-]+(:[0-9]+)?/[A-Za-z0-9_.\-/~]*?\.(?Pbzr|git|hg|svn))((?:/[A-Za-z0-9_.\-]+)*)$`) ) // Other helper regexes var ( scpSyntaxRe = regexp.MustCompile(`^([a-zA-Z0-9_]+)@([a-zA-Z0-9._-]+):(.*)$`) pathvld = regexp.MustCompile(`^([A-Za-z0-9-]+)(\.[A-Za-z0-9-]+)+(/[A-Za-z0-9-_.~]+)*$`) ) func pathDeducerTrie() *deducerTrie { dxt := newDeducerTrie() dxt.Insert("github.com/", githubDeducer{regexp: ghRegex}) dxt.Insert("gopkg.in/", gopkginDeducer{regexp: gpinNewRegex}) dxt.Insert("bitbucket.org/", bitbucketDeducer{regexp: bbRegex}) dxt.Insert("launchpad.net/", launchpadDeducer{regexp: lpRegex}) dxt.Insert("git.launchpad.net/", launchpadGitDeducer{regexp: glpRegex}) dxt.Insert("hub.jazz.net/", jazzDeducer{regexp: jazzRegex}) dxt.Insert("git.apache.org/", apacheDeducer{regexp: apacheRegex}) return dxt } type pathDeducer interface { deduceRoot(string) (string, error) deduceSource(string, *url.URL) (maybeSource, error) } type githubDeducer struct { regexp *regexp.Regexp } func (m githubDeducer) deduceRoot(path string) (string, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return "", fmt.Errorf("%s is not a valid path for a source on github.com", path) } return "github.com" + v[2], nil } func (m githubDeducer) deduceSource(path string, u *url.URL) (maybeSource, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return nil, fmt.Errorf("%s is not a valid path for a source on github.com", path) } u.Host = "github.com" u.Path = v[2] if u.Scheme == "ssh" && u.User != nil && u.User.Username() != "git" { return nil, fmt.Errorf("github ssh must be accessed via the 'git' user; %s was provided", u.User.Username()) } else if u.Scheme != "" { if !validateVCSScheme(u.Scheme, "git") { return nil, fmt.Errorf("%s is not a valid scheme for accessing a git repository", u.Scheme) } if u.Scheme == "ssh" { u.User = url.User("git") } return maybeGitSource{url: u}, nil } mb := make(maybeSources, len(gitSchemes)) for k, scheme := range gitSchemes { u2 := *u if scheme == "ssh" { u2.User = url.User("git") } u2.Scheme = scheme mb[k] = maybeGitSource{url: &u2} } return mb, nil } type bitbucketDeducer struct { regexp *regexp.Regexp } func (m bitbucketDeducer) deduceRoot(path string) (string, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return "", fmt.Errorf("%s is not a valid path for a source on bitbucket.org", path) } return "bitbucket.org" + v[2], nil } func (m bitbucketDeducer) deduceSource(path string, u *url.URL) (maybeSource, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return nil, fmt.Errorf("%s is not a valid path for a source on bitbucket.org", path) } u.Host = "bitbucket.org" u.Path = v[2] // This isn't definitive, but it'll probably catch most isgit := strings.HasSuffix(u.Path, ".git") || (u.User != nil && u.User.Username() == "git") ishg := strings.HasSuffix(u.Path, ".hg") || (u.User != nil && u.User.Username() == "hg") // TODO(sdboyer) resolve scm ambiguity if needed by querying bitbucket's REST API if u.Scheme != "" { validgit, validhg := validateVCSScheme(u.Scheme, "git"), validateVCSScheme(u.Scheme, "hg") if isgit { if !validgit { // This is unreachable for now, as the git schemes are a // superset of the hg schemes return nil, fmt.Errorf("%s is not a valid scheme for accessing a git repository", u.Scheme) } return maybeGitSource{url: u}, nil } else if ishg { if !validhg { return nil, fmt.Errorf("%s is not a valid scheme for accessing an hg repository", u.Scheme) } return maybeHgSource{url: u}, nil } else if !validgit && !validhg { return nil, fmt.Errorf("%s is not a valid scheme for accessing either a git or hg repository", u.Scheme) } // No other choice, make an option for both git and hg return maybeSources{ maybeHgSource{url: u}, maybeGitSource{url: u}, }, nil } mb := make(maybeSources, 0) // git is probably more common, even on bitbucket. however, bitbucket // appears to fail _extremely_ slowly on git pings (ls-remote) when the // underlying repository is actually an hg repository, so it's better // to try hg first. if !isgit { for _, scheme := range hgSchemes { u2 := *u if scheme == "ssh" { u2.User = url.User("hg") } u2.Scheme = scheme mb = append(mb, maybeHgSource{url: &u2}) } } if !ishg { for _, scheme := range gitSchemes { u2 := *u if scheme == "ssh" { u2.User = url.User("git") } u2.Scheme = scheme mb = append(mb, maybeGitSource{url: &u2}) } } return mb, nil } type gopkginDeducer struct { regexp *regexp.Regexp } func (m gopkginDeducer) deduceRoot(p string) (string, error) { v, err := m.parseAndValidatePath(p) if err != nil { return "", err } return v[1], nil } func (m gopkginDeducer) parseAndValidatePath(p string) ([]string, error) { v := m.regexp.FindStringSubmatch(p) if v == nil { return nil, fmt.Errorf("%s is not a valid path for a source on gopkg.in", p) } // We duplicate some logic from the gopkg.in server in order to validate the // import path string without having to make a network request if strings.Contains(v[4], ".") { return nil, fmt.Errorf("%s is not a valid import path; gopkg.in only allows major versions (%q instead of %q)", p, v[4][:strings.Index(v[4], ".")], v[4]) } return v, nil } func (m gopkginDeducer) deduceSource(p string, u *url.URL) (maybeSource, error) { // Reuse root detection logic for initial validation v, err := m.parseAndValidatePath(p) if err != nil { return nil, err } // Putting a scheme on gopkg.in would be really weird, disallow it if u.Scheme != "" { return nil, fmt.Errorf("specifying alternate schemes on gopkg.in imports is not permitted") } // gopkg.in is always backed by github u.Host = "github.com" if v[2] == "" { elem := v[3][1:] u.Path = path.Join("/go-"+elem, elem) } else { u.Path = path.Join(v[2], v[3]) } unstable := false majorStr := v[4] if strings.HasSuffix(majorStr, gopkgUnstableSuffix) { unstable = true majorStr = strings.TrimSuffix(majorStr, gopkgUnstableSuffix) } major, err := strconv.ParseUint(majorStr[1:], 10, 64) if err != nil { // this should only be reachable if there's an error in the regex return nil, fmt.Errorf("could not parse %q as a gopkg.in major version", majorStr[1:]) } mb := make(maybeSources, len(gopkginSchemes)) for k, scheme := range gopkginSchemes { u2 := *u u2.Scheme = scheme mb[k] = maybeGopkginSource{ opath: v[1], url: &u2, major: major, unstable: unstable, } } return mb, nil } type launchpadDeducer struct { regexp *regexp.Regexp } func (m launchpadDeducer) deduceRoot(path string) (string, error) { // TODO(sdboyer) lp handling is nasty - there's ambiguities which can only really // be resolved with a metadata request. See https://github.com/golang/go/issues/11436 v := m.regexp.FindStringSubmatch(path) if v == nil { return "", fmt.Errorf("%s is not a valid path for a source on launchpad.net", path) } return "launchpad.net" + v[2], nil } func (m launchpadDeducer) deduceSource(path string, u *url.URL) (maybeSource, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return nil, fmt.Errorf("%s is not a valid path for a source on launchpad.net", path) } u.Host = "launchpad.net" u.Path = v[2] if u.Scheme != "" { if !validateVCSScheme(u.Scheme, "bzr") { return nil, fmt.Errorf("%s is not a valid scheme for accessing a bzr repository", u.Scheme) } return maybeBzrSource{url: u}, nil } mb := make(maybeSources, len(bzrSchemes)) for k, scheme := range bzrSchemes { u2 := *u u2.Scheme = scheme mb[k] = maybeBzrSource{url: &u2} } return mb, nil } type launchpadGitDeducer struct { regexp *regexp.Regexp } func (m launchpadGitDeducer) deduceRoot(path string) (string, error) { // TODO(sdboyer) same ambiguity issues as with normal bzr lp v := m.regexp.FindStringSubmatch(path) if v == nil { return "", fmt.Errorf("%s is not a valid path for a source on git.launchpad.net", path) } return "git.launchpad.net" + v[2], nil } func (m launchpadGitDeducer) deduceSource(path string, u *url.URL) (maybeSource, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return nil, fmt.Errorf("%s is not a valid path for a source on git.launchpad.net", path) } u.Host = "git.launchpad.net" u.Path = v[2] if u.Scheme != "" { if !validateVCSScheme(u.Scheme, "git") { return nil, fmt.Errorf("%s is not a valid scheme for accessing a git repository", u.Scheme) } return maybeGitSource{url: u}, nil } mb := make(maybeSources, len(gitSchemes)) for k, scheme := range gitSchemes { u2 := *u u2.Scheme = scheme mb[k] = maybeGitSource{url: &u2} } return mb, nil } type jazzDeducer struct { regexp *regexp.Regexp } func (m jazzDeducer) deduceRoot(path string) (string, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return "", fmt.Errorf("%s is not a valid path for a source on hub.jazz.net", path) } return "hub.jazz.net" + v[2], nil } func (m jazzDeducer) deduceSource(path string, u *url.URL) (maybeSource, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return nil, fmt.Errorf("%s is not a valid path for a source on hub.jazz.net", path) } u.Host = "hub.jazz.net" u.Path = v[2] switch u.Scheme { case "": u.Scheme = "https" fallthrough case "https": return maybeGitSource{url: u}, nil default: return nil, fmt.Errorf("IBM's jazz hub only supports https, %s is not allowed", u.String()) } } type apacheDeducer struct { regexp *regexp.Regexp } func (m apacheDeducer) deduceRoot(path string) (string, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return "", fmt.Errorf("%s is not a valid path for a source on git.apache.org", path) } return "git.apache.org" + v[2], nil } func (m apacheDeducer) deduceSource(path string, u *url.URL) (maybeSource, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return nil, fmt.Errorf("%s is not a valid path for a source on git.apache.org", path) } u.Host = "git.apache.org" u.Path = v[2] if u.Scheme != "" { if !validateVCSScheme(u.Scheme, "git") { return nil, fmt.Errorf("%s is not a valid scheme for accessing a git repository", u.Scheme) } return maybeGitSource{url: u}, nil } mb := make(maybeSources, len(gitSchemes)) for k, scheme := range gitSchemes { u2 := *u u2.Scheme = scheme mb[k] = maybeGitSource{url: &u2} } return mb, nil } type vcsExtensionDeducer struct { regexp *regexp.Regexp } func (m vcsExtensionDeducer) deduceRoot(path string) (string, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return "", fmt.Errorf("%s contains no vcs extension hints for matching", path) } return v[1], nil } func (m vcsExtensionDeducer) deduceSource(path string, u *url.URL) (maybeSource, error) { v := m.regexp.FindStringSubmatch(path) if v == nil { return nil, fmt.Errorf("%s contains no vcs extension hints for matching", path) } switch v[4] { case "git", "hg", "bzr": x := strings.SplitN(v[1], "/", 2) // TODO(sdboyer) is this actually correct for bzr? u.Host = x[0] u.Path = "/" + x[1] if u.Scheme != "" { if !validateVCSScheme(u.Scheme, v[4]) { return nil, fmt.Errorf("%s is not a valid scheme for accessing %s repositories (path %s)", u.Scheme, v[4], path) } switch v[4] { case "git": return maybeGitSource{url: u}, nil case "bzr": return maybeBzrSource{url: u}, nil case "hg": return maybeHgSource{url: u}, nil } } var schemes []string var mb maybeSources var f func(k int, u *url.URL) switch v[4] { case "git": schemes = gitSchemes f = func(k int, u *url.URL) { mb[k] = maybeGitSource{url: u} } case "bzr": schemes = bzrSchemes f = func(k int, u *url.URL) { mb[k] = maybeBzrSource{url: u} } case "hg": schemes = hgSchemes f = func(k int, u *url.URL) { mb[k] = maybeHgSource{url: u} } } mb = make(maybeSources, len(schemes)) for k, scheme := range schemes { u2 := *u u2.Scheme = scheme f(k, &u2) } return mb, nil default: return nil, fmt.Errorf("unknown repository type: %q", v[4]) } } // A deducer takes an import path and inspects it to determine where the // corresponding project root should be. It applies a number of matching // techniques, eventually falling back to an HTTP request for go-get metadata if // none of the explicit rules succeed. // // The only real implementation is deductionCoordinator. The interface is // primarily intended for testing purposes. type deducer interface { deduceRootPath(ctx context.Context, path string) (pathDeduction, error) } type deductionCoordinator struct { suprvsr *supervisor mut sync.RWMutex rootxt *radix.Tree deducext *deducerTrie } func newDeductionCoordinator(superv *supervisor) *deductionCoordinator { dc := &deductionCoordinator{ suprvsr: superv, rootxt: radix.New(), deducext: pathDeducerTrie(), } return dc } // deduceRootPath takes an import path and attempts to deduce various // metadata about it - what type of source should handle it, and where its // "root" is (for vcs repositories, the repository root). // // If no errors are encountered, the returned pathDeduction will contain both // the root path and a list of maybeSources, which can be subsequently used to // create a handler that will manage the particular source. func (dc *deductionCoordinator) deduceRootPath(ctx context.Context, path string) (pathDeduction, error) { if err := dc.suprvsr.ctx.Err(); err != nil { return pathDeduction{}, err } // First, check the rootxt to see if there's a prefix match - if so, we // can return that and move on. dc.mut.RLock() prefix, data, has := dc.rootxt.LongestPrefix(path) dc.mut.RUnlock() if has && isPathPrefixOrEqual(prefix, path) { switch d := data.(type) { case maybeSource: return pathDeduction{root: prefix, mb: d}, nil case *httpMetadataDeducer: // Multiple calls have come in for a similar path shape during // the window in which the HTTP request to retrieve go get // metadata is in flight. Fold this request in with the existing // one(s) by calling the deduction method, which will avoid // duplication of work through a sync.Once. return d.deduce(ctx, path) } panic(fmt.Sprintf("unexpected %T in deductionCoordinator.rootxt: %v", data, data)) } // No match. Try known path deduction first. pd, err := dc.deduceKnownPaths(path) if err == nil { // Deduction worked; store it in the rootxt, send on retchan and // terminate. // FIXME(sdboyer) deal with changing path vs. root. Probably needs // to be predeclared and reused in the hmd returnFunc dc.mut.Lock() dc.rootxt.Insert(pd.root, pd.mb) dc.mut.Unlock() return pd, nil } if err != errNoKnownPathMatch { return pathDeduction{}, err } // The err indicates no known path matched. It's still possible that // retrieving go get metadata might do the trick. hmd := &httpMetadataDeducer{ basePath: path, suprvsr: dc.suprvsr, // The vanity deducer will call this func with a completed // pathDeduction if it succeeds in finding one. We process it // back through the action channel to ensure serialized // access to the rootxt map. returnFunc: func(pd pathDeduction) { dc.mut.Lock() dc.rootxt.Insert(pd.root, pd.mb) dc.mut.Unlock() }, } // Save the hmd in the rootxt so that calls checking on similar // paths made while the request is in flight can be folded together. dc.mut.Lock() dc.rootxt.Insert(path, hmd) dc.mut.Unlock() // Trigger the HTTP-backed deduction process for this requestor. return hmd.deduce(ctx, path) } // pathDeduction represents the results of a successful import path deduction - // a root path, plus a maybeSource that can be used to attempt to connect to // the source. type pathDeduction struct { root string mb maybeSource } var errNoKnownPathMatch = errors.New("no known path match") func (dc *deductionCoordinator) deduceKnownPaths(path string) (pathDeduction, error) { u, path, err := normalizeURI(path) if err != nil { return pathDeduction{}, err } // First, try the root path-based matches if _, mtch, has := dc.deducext.LongestPrefix(path); has { root, err := mtch.deduceRoot(path) if err != nil { return pathDeduction{}, err } mb, err := mtch.deduceSource(path, u) if err != nil { return pathDeduction{}, err } return pathDeduction{ root: root, mb: mb, }, nil } // Next, try the vcs extension-based (infix) matcher exm := vcsExtensionDeducer{regexp: vcsExtensionRegex} if root, err := exm.deduceRoot(path); err == nil { mb, err := exm.deduceSource(path, u) if err != nil { return pathDeduction{}, err } return pathDeduction{ root: root, mb: mb, }, nil } return pathDeduction{}, errNoKnownPathMatch } type httpMetadataDeducer struct { once sync.Once deduced pathDeduction deduceErr error basePath string returnFunc func(pathDeduction) suprvsr *supervisor } func (hmd *httpMetadataDeducer) deduce(ctx context.Context, path string) (pathDeduction, error) { hmd.once.Do(func() { opath := path u, path, err := normalizeURI(path) if err != nil { err = errors.Wrapf(err, "unable to normalize URI") hmd.deduceErr = err return } pd := pathDeduction{} // Make the HTTP call to attempt to retrieve go-get metadata var root, vcs, reporoot string err = hmd.suprvsr.do(ctx, path, ctHTTPMetadata, func(ctx context.Context) error { root, vcs, reporoot, err = getMetadata(ctx, path, u.Scheme) if err != nil { err = errors.Wrapf(err, "unable to read metadata") } return err }) if err != nil { err = errors.Wrapf(err, "unable to deduce repository and source type for %q", opath) hmd.deduceErr = err return } pd.root = root // If we got something back at all, then it supersedes the actual input for // the real URL to hit repoURL, err := url.Parse(reporoot) if err != nil { err = errors.Wrapf(err, "server returned bad URL in go-get metadata, reporoot=%q", reporoot) hmd.deduceErr = err return } // If the input path specified a scheme, then try to honor it. if u.Scheme != "" && repoURL.Scheme != u.Scheme { // If the input scheme was http, but the go-get metadata // nevertheless indicated https should be used for the repo, then // trust the metadata and use https. // // To err on the secure side, do NOT allow the same in the other // direction (https -> http). if u.Scheme != "http" || repoURL.Scheme != "https" { hmd.deduceErr = errors.Errorf("scheme mismatch for %q: input asked for %q, but go-get metadata specified %q", path, u.Scheme, repoURL.Scheme) return } } switch vcs { case "git": pd.mb = maybeGitSource{url: repoURL} case "bzr": pd.mb = maybeBzrSource{url: repoURL} case "hg": pd.mb = maybeHgSource{url: repoURL} default: hmd.deduceErr = errors.Errorf("unsupported vcs type %s in go-get metadata from %s", vcs, path) return } hmd.deduced = pd // All data is assigned for other goroutines that may be waiting. Now, // send the pathDeduction back to the deductionCoordinator by calling // the returnFunc. This will also remove the reference to this hmd in // the coordinator's trie. // // When this call finishes, it is guaranteed the coordinator will have // at least begun running the action to insert the path deduction, which // means no other deduction request will be able to interleave and // request the same path before the pathDeduction can be processed, but // after this hmd has been dereferenced from the trie. hmd.returnFunc(pd) }) return hmd.deduced, hmd.deduceErr } func normalizeURI(p string) (u *url.URL, newpath string, err error) { if m := scpSyntaxRe.FindStringSubmatch(p); m != nil { // Match SCP-like syntax and convert it to a URL. // Eg, "git@github.com:user/repo" becomes // "ssh://git@github.com/user/repo". u = &url.URL{ Scheme: "ssh", User: url.User(m[1]), Host: m[2], Path: "/" + m[3], // TODO(sdboyer) This is what stdlib sets; grok why better //RawPath: m[3], } } else { u, err = url.Parse(p) if err != nil { return nil, "", errors.Errorf("%q is not a valid URI", p) } } // If no scheme was passed, then the entire path will have been put into // u.Path. Either way, construct the normalized path correctly. if u.Host == "" { newpath = p } else { newpath = path.Join(u.Host, u.Path) } if !pathvld.MatchString(newpath) { return nil, "", errors.Errorf("%q is not a valid import path", newpath) } return } // fetchMetadata fetches the remote metadata for path. func fetchMetadata(ctx context.Context, path, scheme string) (rc io.ReadCloser, err error) { if scheme == "http" { rc, err = doFetchMetadata(ctx, "http", path) return } rc, err = doFetchMetadata(ctx, "https", path) if err == nil { return } rc, err = doFetchMetadata(ctx, "http", path) return } func doFetchMetadata(ctx context.Context, scheme, path string) (io.ReadCloser, error) { url := fmt.Sprintf("%s://%s?go-get=1", scheme, path) switch scheme { case "https", "http": req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, errors.Wrapf(err, "unable to build HTTP request for URL %q", url) } resp, err := http.DefaultClient.Do(req.WithContext(ctx)) if err != nil { return nil, errors.Wrapf(err, "failed HTTP request to URL %q", url) } return resp.Body, nil default: return nil, errors.Errorf("unknown remote protocol scheme: %q", scheme) } } // getMetadata fetches and decodes remote metadata for path. // // scheme is optional. If it's http, only http will be attempted for fetching. // Any other scheme (including none) will first try https, then fall back to // http. func getMetadata(ctx context.Context, path, scheme string) (string, string, string, error) { rc, err := fetchMetadata(ctx, path, scheme) if err != nil { return "", "", "", errors.Wrapf(err, "unable to fetch raw metadata") } defer rc.Close() imports, err := parseMetaGoImports(rc) if err != nil { return "", "", "", errors.Wrapf(err, "unable to parse go-import metadata") } match := -1 for i, im := range imports { if !strings.HasPrefix(path, im.Prefix) { continue } if match != -1 { return "", "", "", errors.Errorf("multiple meta tags match import path %q", path) } match = i } if match == -1 { return "", "", "", errors.Errorf("go-import metadata not found") } return imports[match].Prefix, imports[match].VCS, imports[match].RepoRoot, nil } dep-0.3.2/internal/gps/deduce_test.go000066400000000000000000000557611317166637100175410ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "context" "errors" "fmt" "net/url" "reflect" "testing" ) type pathDeductionFixture struct { in string root string rerr error mb maybeSource srcerr error } // helper func to generate testing *url.URLs, panicking on err func mkurl(s string) (u *url.URL) { var err error u, err = url.Parse(s) if err != nil { panic(fmt.Sprint("string is not a valid URL:", s)) } return } var pathDeductionFixtures = map[string][]pathDeductionFixture{ "github": { { in: "github.com/sdboyer/gps", root: "github.com/sdboyer/gps", mb: maybeSources{ maybeGitSource{url: mkurl("https://github.com/sdboyer/gps")}, maybeGitSource{url: mkurl("ssh://git@github.com/sdboyer/gps")}, maybeGitSource{url: mkurl("git://github.com/sdboyer/gps")}, maybeGitSource{url: mkurl("http://github.com/sdboyer/gps")}, }, }, { in: "github.com/sdboyer/gps/foo", root: "github.com/sdboyer/gps", mb: maybeSources{ maybeGitSource{url: mkurl("https://github.com/sdboyer/gps")}, maybeGitSource{url: mkurl("ssh://git@github.com/sdboyer/gps")}, maybeGitSource{url: mkurl("git://github.com/sdboyer/gps")}, maybeGitSource{url: mkurl("http://github.com/sdboyer/gps")}, }, }, { // TODO(sdboyer) is this a problem for enforcing uniqueness? do we // need to collapse these extensions? in: "github.com/sdboyer/gps.git/foo", root: "github.com/sdboyer/gps.git", mb: maybeSources{ maybeGitSource{url: mkurl("https://github.com/sdboyer/gps.git")}, maybeGitSource{url: mkurl("ssh://git@github.com/sdboyer/gps.git")}, maybeGitSource{url: mkurl("git://github.com/sdboyer/gps.git")}, maybeGitSource{url: mkurl("http://github.com/sdboyer/gps.git")}, }, }, { in: "git@github.com:sdboyer/gps", root: "github.com/sdboyer/gps", mb: maybeGitSource{url: mkurl("ssh://git@github.com/sdboyer/gps")}, }, { in: "https://github.com/sdboyer/gps", root: "github.com/sdboyer/gps", mb: maybeGitSource{url: mkurl("https://github.com/sdboyer/gps")}, }, { in: "https://github.com/sdboyer/gps/foo/bar", root: "github.com/sdboyer/gps", mb: maybeGitSource{url: mkurl("https://github.com/sdboyer/gps")}, }, { in: "github.com/sdboyer-/gps/foo", root: "github.com/sdboyer-/gps", mb: maybeSources{ maybeGitSource{url: mkurl("https://github.com/sdboyer-/gps")}, maybeGitSource{url: mkurl("ssh://git@github.com/sdboyer-/gps")}, maybeGitSource{url: mkurl("git://github.com/sdboyer-/gps")}, maybeGitSource{url: mkurl("http://github.com/sdboyer-/gps")}, }, }, { in: "github.com/a/gps/foo", root: "github.com/a/gps", mb: maybeSources{ maybeGitSource{url: mkurl("https://github.com/a/gps")}, maybeGitSource{url: mkurl("ssh://git@github.com/a/gps")}, maybeGitSource{url: mkurl("git://github.com/a/gps")}, maybeGitSource{url: mkurl("http://github.com/a/gps")}, }, }, // some invalid github username patterns { in: "github.com/-sdboyer/gps/foo", rerr: errors.New("github.com/-sdboyer/gps/foo is not a valid path for a source on github.com"), }, { in: "github.com/sdbo.yer/gps/foo", rerr: errors.New("github.com/sdbo.yer/gps/foo is not a valid path for a source on github.com"), }, { in: "github.com/sdbo_yer/gps/foo", rerr: errors.New("github.com/sdbo_yer/gps/foo is not a valid path for a source on github.com"), }, // Regression - gh does allow two-letter usernames { in: "github.com/kr/pretty", root: "github.com/kr/pretty", mb: maybeSources{ maybeGitSource{url: mkurl("https://github.com/kr/pretty")}, maybeGitSource{url: mkurl("ssh://git@github.com/kr/pretty")}, maybeGitSource{url: mkurl("git://github.com/kr/pretty")}, maybeGitSource{url: mkurl("http://github.com/kr/pretty")}, }, }, }, "gopkg.in": { { in: "gopkg.in/sdboyer/gps.v0", root: "gopkg.in/sdboyer/gps.v0", mb: maybeSources{ maybeGopkginSource{opath: "gopkg.in/sdboyer/gps.v0", url: mkurl("https://github.com/sdboyer/gps"), major: 0}, maybeGopkginSource{opath: "gopkg.in/sdboyer/gps.v0", url: mkurl("http://github.com/sdboyer/gps"), major: 0}, }, }, { in: "gopkg.in/sdboyer/gps.v0/foo", root: "gopkg.in/sdboyer/gps.v0", mb: maybeSources{ maybeGopkginSource{opath: "gopkg.in/sdboyer/gps.v0", url: mkurl("https://github.com/sdboyer/gps"), major: 0}, maybeGopkginSource{opath: "gopkg.in/sdboyer/gps.v0", url: mkurl("http://github.com/sdboyer/gps"), major: 0}, }, }, { in: "gopkg.in/sdboyer/gps.v1/foo/bar", root: "gopkg.in/sdboyer/gps.v1", mb: maybeSources{ maybeGopkginSource{opath: "gopkg.in/sdboyer/gps.v1", url: mkurl("https://github.com/sdboyer/gps"), major: 1}, maybeGopkginSource{opath: "gopkg.in/sdboyer/gps.v1", url: mkurl("http://github.com/sdboyer/gps"), major: 1}, }, }, { in: "gopkg.in/yaml.v1", root: "gopkg.in/yaml.v1", mb: maybeSources{ maybeGopkginSource{opath: "gopkg.in/yaml.v1", url: mkurl("https://github.com/go-yaml/yaml"), major: 1}, maybeGopkginSource{opath: "gopkg.in/yaml.v1", url: mkurl("http://github.com/go-yaml/yaml"), major: 1}, }, }, { in: "gopkg.in/yaml.v1/foo/bar", root: "gopkg.in/yaml.v1", mb: maybeSources{ maybeGopkginSource{opath: "gopkg.in/yaml.v1", url: mkurl("https://github.com/go-yaml/yaml"), major: 1}, maybeGopkginSource{opath: "gopkg.in/yaml.v1", url: mkurl("http://github.com/go-yaml/yaml"), major: 1}, }, }, { in: "gopkg.in/inf.v0", root: "gopkg.in/inf.v0", mb: maybeSources{ maybeGopkginSource{opath: "gopkg.in/inf.v0", url: mkurl("https://github.com/go-inf/inf"), major: 0}, maybeGopkginSource{opath: "gopkg.in/inf.v0", url: mkurl("http://github.com/go-inf/inf"), major: 0}, }, }, { // gopkg.in only allows specifying major version in import path in: "gopkg.in/yaml.v1.2", rerr: errors.New("gopkg.in/yaml.v1.2 is not a valid import path; gopkg.in only allows major versions (\"v1\" instead of \"v1.2\")"), }, }, "jazz": { // IBM hub devops services - fixtures borrowed from go get { in: "hub.jazz.net/git/user1/pkgname", root: "hub.jazz.net/git/user1/pkgname", mb: maybeGitSource{url: mkurl("https://hub.jazz.net/git/user1/pkgname")}, }, { in: "hub.jazz.net/git/user1/pkgname/submodule/submodule/submodule", root: "hub.jazz.net/git/user1/pkgname", mb: maybeGitSource{url: mkurl("https://hub.jazz.net/git/user1/pkgname")}, }, { in: "hub.jazz.net/someotherprefix", rerr: errors.New("hub.jazz.net/someotherprefix is not a valid path for a source on hub.jazz.net"), }, { in: "hub.jazz.net/someotherprefix/user1/packagename", rerr: errors.New("hub.jazz.net/someotherprefix/user1/packagename is not a valid path for a source on hub.jazz.net"), }, // Spaces are not valid in user names or package names { in: "hub.jazz.net/git/User 1/pkgname", rerr: errors.New("hub.jazz.net/git/User 1/pkgname is not a valid path for a source on hub.jazz.net"), }, { in: "hub.jazz.net/git/user1/pkg name", rerr: errors.New("hub.jazz.net/git/user1/pkg name is not a valid path for a source on hub.jazz.net"), }, // Dots are not valid in user names { in: "hub.jazz.net/git/user.1/pkgname", rerr: errors.New("hub.jazz.net/git/user.1/pkgname is not a valid path for a source on hub.jazz.net"), }, { in: "hub.jazz.net/git/user1/pkg.name", root: "hub.jazz.net/git/user1/pkg.name", mb: maybeGitSource{url: mkurl("https://hub.jazz.net/git/user1/pkg.name")}, }, // User names cannot have uppercase letters { in: "hub.jazz.net/git/USER/pkgname", rerr: errors.New("hub.jazz.net/git/USER/pkgname is not a valid path for a source on hub.jazz.net"), }, }, "bitbucket": { { in: "bitbucket.org/sdboyer/reporoot", root: "bitbucket.org/sdboyer/reporoot", mb: maybeSources{ maybeHgSource{url: mkurl("https://bitbucket.org/sdboyer/reporoot")}, maybeHgSource{url: mkurl("ssh://hg@bitbucket.org/sdboyer/reporoot")}, maybeHgSource{url: mkurl("http://bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("https://bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("ssh://git@bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("git://bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("http://bitbucket.org/sdboyer/reporoot")}, }, }, { in: "bitbucket.org/sdboyer/reporoot/foo/bar", root: "bitbucket.org/sdboyer/reporoot", mb: maybeSources{ maybeHgSource{url: mkurl("https://bitbucket.org/sdboyer/reporoot")}, maybeHgSource{url: mkurl("ssh://hg@bitbucket.org/sdboyer/reporoot")}, maybeHgSource{url: mkurl("http://bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("https://bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("ssh://git@bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("git://bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("http://bitbucket.org/sdboyer/reporoot")}, }, }, { in: "https://bitbucket.org/sdboyer/reporoot/foo/bar", root: "bitbucket.org/sdboyer/reporoot", mb: maybeSources{ maybeHgSource{url: mkurl("https://bitbucket.org/sdboyer/reporoot")}, maybeGitSource{url: mkurl("https://bitbucket.org/sdboyer/reporoot")}, }, }, // Less standard behaviors possible due to the hg/git ambiguity { in: "bitbucket.org/sdboyer/reporoot.git", root: "bitbucket.org/sdboyer/reporoot.git", mb: maybeSources{ maybeGitSource{url: mkurl("https://bitbucket.org/sdboyer/reporoot.git")}, maybeGitSource{url: mkurl("ssh://git@bitbucket.org/sdboyer/reporoot.git")}, maybeGitSource{url: mkurl("git://bitbucket.org/sdboyer/reporoot.git")}, maybeGitSource{url: mkurl("http://bitbucket.org/sdboyer/reporoot.git")}, }, }, { in: "git@bitbucket.org:sdboyer/reporoot.git", root: "bitbucket.org/sdboyer/reporoot.git", mb: maybeGitSource{url: mkurl("ssh://git@bitbucket.org/sdboyer/reporoot.git")}, }, { in: "bitbucket.org/sdboyer/reporoot.hg", root: "bitbucket.org/sdboyer/reporoot.hg", mb: maybeSources{ maybeHgSource{url: mkurl("https://bitbucket.org/sdboyer/reporoot.hg")}, maybeHgSource{url: mkurl("ssh://hg@bitbucket.org/sdboyer/reporoot.hg")}, maybeHgSource{url: mkurl("http://bitbucket.org/sdboyer/reporoot.hg")}, }, }, { in: "hg@bitbucket.org:sdboyer/reporoot", root: "bitbucket.org/sdboyer/reporoot", mb: maybeHgSource{url: mkurl("ssh://hg@bitbucket.org/sdboyer/reporoot")}, }, { in: "git://bitbucket.org/sdboyer/reporoot.hg", root: "bitbucket.org/sdboyer/reporoot.hg", srcerr: errors.New("git is not a valid scheme for accessing an hg repository"), }, }, "launchpad": { // tests for launchpad, mostly bazaar // TODO(sdboyer) need more tests to deal w/launchpad's oddities { in: "launchpad.net/govcstestbzrrepo", root: "launchpad.net/govcstestbzrrepo", mb: maybeSources{ maybeBzrSource{url: mkurl("https://launchpad.net/govcstestbzrrepo")}, maybeBzrSource{url: mkurl("bzr+ssh://launchpad.net/govcstestbzrrepo")}, maybeBzrSource{url: mkurl("bzr://launchpad.net/govcstestbzrrepo")}, maybeBzrSource{url: mkurl("http://launchpad.net/govcstestbzrrepo")}, }, }, { in: "launchpad.net/govcstestbzrrepo/foo/bar", root: "launchpad.net/govcstestbzrrepo", mb: maybeSources{ maybeBzrSource{url: mkurl("https://launchpad.net/govcstestbzrrepo")}, maybeBzrSource{url: mkurl("bzr+ssh://launchpad.net/govcstestbzrrepo")}, maybeBzrSource{url: mkurl("bzr://launchpad.net/govcstestbzrrepo")}, maybeBzrSource{url: mkurl("http://launchpad.net/govcstestbzrrepo")}, }, }, { in: "launchpad.net/repo root", rerr: errors.New("launchpad.net/repo root is not a valid path for a source on launchpad.net"), }, }, "git.launchpad": { { in: "git.launchpad.net/reporoot", root: "git.launchpad.net/reporoot", mb: maybeSources{ maybeGitSource{url: mkurl("https://git.launchpad.net/reporoot")}, maybeGitSource{url: mkurl("ssh://git.launchpad.net/reporoot")}, maybeGitSource{url: mkurl("git://git.launchpad.net/reporoot")}, maybeGitSource{url: mkurl("http://git.launchpad.net/reporoot")}, }, }, { in: "git.launchpad.net/reporoot/foo/bar", root: "git.launchpad.net/reporoot", mb: maybeSources{ maybeGitSource{url: mkurl("https://git.launchpad.net/reporoot")}, maybeGitSource{url: mkurl("ssh://git.launchpad.net/reporoot")}, maybeGitSource{url: mkurl("git://git.launchpad.net/reporoot")}, maybeGitSource{url: mkurl("http://git.launchpad.net/reporoot")}, }, }, { in: "git.launchpad.net/repo root", rerr: errors.New("git.launchpad.net/repo root is not a valid path for a source on launchpad.net"), }, }, "apache": { { in: "git.apache.org/package-name.git", root: "git.apache.org/package-name.git", mb: maybeSources{ maybeGitSource{url: mkurl("https://git.apache.org/package-name.git")}, maybeGitSource{url: mkurl("ssh://git.apache.org/package-name.git")}, maybeGitSource{url: mkurl("git://git.apache.org/package-name.git")}, maybeGitSource{url: mkurl("http://git.apache.org/package-name.git")}, }, }, { in: "git.apache.org/package-name.git/foo/bar", root: "git.apache.org/package-name.git", mb: maybeSources{ maybeGitSource{url: mkurl("https://git.apache.org/package-name.git")}, maybeGitSource{url: mkurl("ssh://git.apache.org/package-name.git")}, maybeGitSource{url: mkurl("git://git.apache.org/package-name.git")}, maybeGitSource{url: mkurl("http://git.apache.org/package-name.git")}, }, }, }, "vcsext": { // VCS extension-based syntax { in: "foobar.com/baz.git", root: "foobar.com/baz.git", mb: maybeSources{ maybeGitSource{url: mkurl("https://foobar.com/baz.git")}, maybeGitSource{url: mkurl("ssh://foobar.com/baz.git")}, maybeGitSource{url: mkurl("git://foobar.com/baz.git")}, maybeGitSource{url: mkurl("http://foobar.com/baz.git")}, }, }, { in: "foobar.com/baz.git/extra/path", root: "foobar.com/baz.git", mb: maybeSources{ maybeGitSource{url: mkurl("https://foobar.com/baz.git")}, maybeGitSource{url: mkurl("ssh://foobar.com/baz.git")}, maybeGitSource{url: mkurl("git://foobar.com/baz.git")}, maybeGitSource{url: mkurl("http://foobar.com/baz.git")}, }, }, { in: "foobar.com/baz.bzr", root: "foobar.com/baz.bzr", mb: maybeSources{ maybeBzrSource{url: mkurl("https://foobar.com/baz.bzr")}, maybeBzrSource{url: mkurl("bzr+ssh://foobar.com/baz.bzr")}, maybeBzrSource{url: mkurl("bzr://foobar.com/baz.bzr")}, maybeBzrSource{url: mkurl("http://foobar.com/baz.bzr")}, }, }, { in: "foo-bar.com/baz.hg", root: "foo-bar.com/baz.hg", mb: maybeSources{ maybeHgSource{url: mkurl("https://foo-bar.com/baz.hg")}, maybeHgSource{url: mkurl("ssh://foo-bar.com/baz.hg")}, maybeHgSource{url: mkurl("http://foo-bar.com/baz.hg")}, }, }, { in: "git@foobar.com:baz.git", root: "foobar.com/baz.git", mb: maybeGitSource{url: mkurl("ssh://git@foobar.com/baz.git")}, }, { in: "bzr+ssh://foobar.com/baz.bzr", root: "foobar.com/baz.bzr", mb: maybeBzrSource{url: mkurl("bzr+ssh://foobar.com/baz.bzr")}, }, { in: "ssh://foobar.com/baz.bzr", root: "foobar.com/baz.bzr", mb: maybeBzrSource{url: mkurl("ssh://foobar.com/baz.bzr")}, }, { in: "https://foobar.com/baz.hg", root: "foobar.com/baz.hg", mb: maybeHgSource{url: mkurl("https://foobar.com/baz.hg")}, }, { in: "git://foobar.com/baz.hg", root: "foobar.com/baz.hg", srcerr: errors.New("git is not a valid scheme for accessing hg repositories (path foobar.com/baz.hg)"), }, // who knows why anyone would do this, but having a second vcs ext // shouldn't throw us off - only the first one counts { in: "foobar.com/baz.git/quark/quizzle.bzr/quorum", root: "foobar.com/baz.git", mb: maybeSources{ maybeGitSource{url: mkurl("https://foobar.com/baz.git")}, maybeGitSource{url: mkurl("ssh://foobar.com/baz.git")}, maybeGitSource{url: mkurl("git://foobar.com/baz.git")}, maybeGitSource{url: mkurl("http://foobar.com/baz.git")}, }, }, }, "vanity": { // Vanity imports { in: "golang.org/x/exp", root: "golang.org/x/exp", mb: maybeGitSource{url: mkurl("https://go.googlesource.com/exp")}, }, { in: "golang.org/x/exp/inotify", root: "golang.org/x/exp", mb: maybeGitSource{url: mkurl("https://go.googlesource.com/exp")}, }, { in: "golang.org/x/net/html", root: "golang.org/x/net", mb: maybeGitSource{url: mkurl("https://go.googlesource.com/net")}, }, }, } func TestDeduceFromPath(t *testing.T) { do := func(typ string, fixtures []pathDeductionFixture, t *testing.T) { t.Run(typ, func(t *testing.T) { t.Parallel() var deducer pathDeducer switch typ { case "github": deducer = githubDeducer{regexp: ghRegex} case "gopkg.in": deducer = gopkginDeducer{regexp: gpinNewRegex} case "jazz": deducer = jazzDeducer{regexp: jazzRegex} case "bitbucket": deducer = bitbucketDeducer{regexp: bbRegex} case "launchpad": deducer = launchpadDeducer{regexp: lpRegex} case "git.launchpad": deducer = launchpadGitDeducer{regexp: glpRegex} case "apache": deducer = apacheDeducer{regexp: apacheRegex} case "vcsext": deducer = vcsExtensionDeducer{regexp: vcsExtensionRegex} default: // Should just be the vanity imports, which we do elsewhere t.Log("skipping") t.SkipNow() } var printmb func(mb maybeSource, t *testing.T) string printmb = func(mb maybeSource, t *testing.T) string { switch tmb := mb.(type) { case maybeSources: var buf bytes.Buffer fmt.Fprintf(&buf, "%v maybeSources:", len(tmb)) for _, elem := range tmb { fmt.Fprintf(&buf, "\n\t\t%s", printmb(elem, t)) } return buf.String() case maybeGitSource: return fmt.Sprintf("%T: %s", tmb, ufmt(tmb.url)) case maybeBzrSource: return fmt.Sprintf("%T: %s", tmb, ufmt(tmb.url)) case maybeHgSource: return fmt.Sprintf("%T: %s", tmb, ufmt(tmb.url)) case maybeGopkginSource: return fmt.Sprintf("%T: %s (v%v) %s ", tmb, tmb.opath, tmb.major, ufmt(tmb.url)) default: t.Errorf("Unknown maybeSource type: %T", mb) } return "" } for _, fix := range fixtures { fix := fix t.Run(fix.in, func(t *testing.T) { t.Parallel() u, in, uerr := normalizeURI(fix.in) if uerr != nil { if fix.rerr == nil { t.Errorf("bad input URI %s", uerr) } t.SkipNow() } root, rerr := deducer.deduceRoot(in) if fix.rerr != nil { if rerr == nil { t.Errorf("Expected error on deducing root, got none:\n\t(WNT) %s", fix.rerr) } else if fix.rerr.Error() != rerr.Error() { t.Errorf("Got unexpected error on deducing root:\n\t(GOT) %s\n\t(WNT) %s", rerr, fix.rerr) } } else if rerr != nil { t.Errorf("Got unexpected error on deducing root:\n\t(GOT) %s", rerr) } else if root != fix.root { t.Errorf("Deducer did not return expected root:\n\t(GOT) %s\n\t(WNT) %s", root, fix.root) } mb, mberr := deducer.deduceSource(in, u) if fix.srcerr != nil { if mberr == nil { t.Errorf("Expected error on deducing source, got none:\n\t(WNT) %s", fix.srcerr) } else if fix.srcerr.Error() != mberr.Error() { t.Errorf("Got unexpected error on deducing source:\n\t(GOT) %s\n\t(WNT) %s", mberr, fix.srcerr) } } else if mberr != nil { // don't complain the fix already expected an rerr if fix.rerr == nil { t.Errorf("Got unexpected error on deducing source:\n\t(GOT) %s", mberr) } } else if !reflect.DeepEqual(mb, fix.mb) { if mb == nil { t.Errorf("Deducer returned source maybes, but none expected:\n\t(GOT) (none)\n\t(WNT) %s", printmb(fix.mb, t)) } else if fix.mb == nil { t.Errorf("Deducer returned source maybes, but none expected:\n\t(GOT) %s\n\t(WNT) (none)", printmb(mb, t)) } else { t.Errorf("Deducer did not return expected source:\n\t(GOT) %s\n\t(WNT) %s", printmb(mb, t), printmb(fix.mb, t)) } } else { gotURLs, wantURLs := mb.possibleURLs(), fix.mb.possibleURLs() if !reflect.DeepEqual(gotURLs, wantURLs) { t.Errorf("Deducer did not return expected source:\n\t(GOT) %s\n\t(WNT) %s", gotURLs, wantURLs) } } }) } }) } runSet := func(t *testing.T) { for typ, fixtures := range pathDeductionFixtures { do(typ, fixtures, t) } } t.Run("first", runSet) // Run the test set twice to ensure results are correct for both cached // and uncached deductions. t.Run("second", runSet) } func TestVanityDeduction(t *testing.T) { if testing.Short() { t.Skip("Skipping slow test in short mode") } sm, clean := mkNaiveSM(t) defer clean() vanities := pathDeductionFixtures["vanity"] // group to avoid sourcemanager cleanup ctx := context.Background() do := func(t *testing.T) { for _, fix := range vanities { fix := fix t.Run(fix.in, func(t *testing.T) { t.Parallel() pr, err := sm.DeduceProjectRoot(fix.in) if err != nil { t.Errorf("Unexpected err on deducing project root: %s", err) return } else if string(pr) != fix.root { t.Errorf("Deducer did not return expected root:\n\t(GOT) %s\n\t(WNT) %s", pr, fix.root) } pd, err := sm.deduceCoord.deduceRootPath(ctx, fix.in) if err != nil { t.Errorf("Unexpected err on deducing source: %s", err) return } goturl, wanturl := pd.mb.(maybeGitSource).url.String(), fix.mb.(maybeGitSource).url.String() if goturl != wanturl { t.Errorf("Deduced repo ident does not match fixture:\n\t(GOT) %s\n\t(WNT) %s", goturl, wanturl) } urls, err := sm.SourceURLsForPath(fix.in) if err != nil { t.Errorf("Unexpected err on deducing source urls: %s", err) return } if len(urls) != 1 { t.Errorf("Deduced source URLs count for a vanity import should be 1, got %d", len(urls)) } goturl = urls[0].String() if goturl != wanturl { t.Errorf("Deduced source URL does not match fixture:\n\t(GOT) %s\n\t(WNT) %s", goturl, wanturl) } }) } } // Run twice, to ensure correctness of cache t.Run("first", do) t.Run("second", do) } func TestVanityDeductionSchemeMismatch(t *testing.T) { if testing.Short() { t.Skip("Skipping slow test in short mode") } ctx := context.Background() cm := newSupervisor(ctx) dc := newDeductionCoordinator(cm) _, err := dc.deduceRootPath(ctx, "ssh://golang.org/exp") if err == nil { t.Error("should have errored on scheme mismatch between input and go-get metadata") } } // borrow from stdlib // more useful string for debugging than fmt's struct printer func ufmt(u *url.URL) string { var user, pass interface{} if u.User != nil { user = u.User.Username() if p, ok := u.User.Password(); ok { pass = p } } return fmt.Sprintf("host=%q, path=%q, opaque=%q, scheme=%q, user=%#v, pass=%#v, rawpath=%q, rawq=%q, frag=%q", u.Host, u.Path, u.Opaque, u.Scheme, user, pass, u.RawPath, u.RawQuery, u.Fragment) } dep-0.3.2/internal/gps/discovery.go000066400000000000000000000044171317166637100172500ustar00rootroot00000000000000// 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 gps // This code is taken from cmd/go/discovery.go; it is the logic go get itself // uses to interpret meta imports information. import ( "encoding/xml" "fmt" "io" "strings" ) // charsetReader returns a reader for the given charset. Currently // it only supports UTF-8 and ASCII. Otherwise, it returns a meaningful // error which is printed by go get, so the user can find why the package // wasn't downloaded if the encoding is not supported. Note that, in // order to reduce potential errors, ASCII is treated as UTF-8 (i.e. characters // greater than 0x7f are not rejected). func charsetReader(charset string, input io.Reader) (io.Reader, error) { switch strings.ToLower(charset) { case "ascii": return input, nil default: return nil, fmt.Errorf("can't decode XML document using charset %q", charset) } } type metaImport struct { Prefix, VCS, RepoRoot string } // parseMetaGoImports returns meta imports from the HTML in r. // Parsing ends at the end of the section or the beginning of the . func parseMetaGoImports(r io.Reader) (imports []metaImport, err error) { d := xml.NewDecoder(r) d.CharsetReader = charsetReader d.Strict = false var t xml.Token for { t, err = d.RawToken() if err != nil { if err == io.EOF || len(imports) > 0 { err = nil } return } if e, ok := t.(xml.StartElement); ok && strings.EqualFold(e.Name.Local, "body") { return } if e, ok := t.(xml.EndElement); ok && strings.EqualFold(e.Name.Local, "head") { return } e, ok := t.(xml.StartElement) if !ok || !strings.EqualFold(e.Name.Local, "meta") { continue } if attrValue(e.Attr, "name") != "go-import" { continue } if f := strings.Fields(attrValue(e.Attr, "content")); len(f) == 3 { imports = append(imports, metaImport{ Prefix: f[0], VCS: f[1], RepoRoot: f[2], }) } } } // attrValue returns the attribute value for the case-insensitive key // `name', or the empty string if nothing is found. func attrValue(attrs []xml.Attr, name string) string { for _, a := range attrs { if strings.EqualFold(a.Name.Local, name) { return a.Value } } return "" } dep-0.3.2/internal/gps/example.go000066400000000000000000000053771317166637100167020ustar00rootroot00000000000000// Copyright 2017 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 package main import ( "go/build" "io/ioutil" "log" "os" "path/filepath" "strings" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/pkgtree" ) // This is probably the simplest possible implementation of gps. It does the // substantive work that `go get` does, except: // 1. It drops the resulting tree into vendor instead of GOPATH // 2. It prefers semver tags (if available) over branches // 3. It removes any vendor directories nested within dependencies // // This will compile and work...and then blow away any vendor directory present // in the cwd. Be careful! func main() { // Assume the current directory is correctly placed on a GOPATH, and that it's the // root of the project. root, _ := os.Getwd() srcprefix := filepath.Join(build.Default.GOPATH, "src") + string(filepath.Separator) importroot := filepath.ToSlash(strings.TrimPrefix(root, srcprefix)) // Set up params, including tracing params := gps.SolveParameters{ RootDir: root, TraceLogger: log.New(os.Stdout, "", 0), ProjectAnalyzer: NaiveAnalyzer{}, } // Perform static analysis on the current project to find all of its imports. params.RootPackageTree, _ = pkgtree.ListPackages(root, importroot) // Set up a SourceManager. This manages interaction with sources (repositories). tempdir, _ := ioutil.TempDir("", "gps-repocache") sourcemgr, _ := gps.NewSourceManager(gps.SourceManagerConfig{Cachedir: filepath.Join(tempdir)}) defer sourcemgr.Release() // Prep and run the solver solver, _ := gps.Prepare(params, sourcemgr) solution, err := solver.Solve() if err == nil { // If no failure, blow away the vendor dir and write a new one out, // stripping nested vendor directories as we go. os.RemoveAll(filepath.Join(root, "vendor")) gps.WriteDepTree(filepath.Join(root, "vendor"), solution, sourcemgr, true) } } // NaiveAnalyzer is a project analyzer that implements gps.ProjectAnalyzer interface. type NaiveAnalyzer struct{} // DeriveManifestAndLock is called when the solver needs manifest/lock data // for a particular dependency project (identified by the gps.ProjectRoot // parameter) at a particular version. That version will be checked out in a // directory rooted at path. func (a NaiveAnalyzer) DeriveManifestAndLock(path string, n gps.ProjectRoot) (gps.Manifest, gps.Lock, error) { return nil, nil, nil } // Info reports the name and version of the analyzer. This is used internally as part // of gps' hashing memoization scheme. func (a NaiveAnalyzer) Info() gps.ProjectAnalyzerInfo { return gps.ProjectAnalyzerInfo{ Name: "example-analyzer", Version: 1, } } dep-0.3.2/internal/gps/filesystem_test.go000066400000000000000000000074241317166637100204650ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "os" "path/filepath" "testing" ) // This file contains utilities for running tests around file system state. // fspath represents a file system path in an OS-agnostic way. type fsPath []string func (f fsPath) String() string { return filepath.Join(f...) } func (f fsPath) prepend(prefix string) fsPath { p := fsPath{filepath.FromSlash(prefix)} return append(p, f...) } type fsTestCase struct { before, after filesystemState } // filesystemState represents the state of a file system. It has a setup method // which inflates its state to the actual host file system, and an assert // method which checks that the actual file system matches the described state. type filesystemState struct { root string dirs []fsPath files []fsPath links []fsLink } // assert makes sure that the fs state matches the state of the actual host // file system func (fs filesystemState) assert(t *testing.T) { dirMap := make(map[string]bool) fileMap := make(map[string]bool) linkMap := make(map[string]bool) for _, d := range fs.dirs { dirMap[d.prepend(fs.root).String()] = true } for _, f := range fs.files { fileMap[f.prepend(fs.root).String()] = true } for _, l := range fs.links { linkMap[l.path.prepend(fs.root).String()] = true } err := filepath.Walk(fs.root, func(path string, info os.FileInfo, err error) error { if err != nil { t.Errorf("filepath.Walk path=%q err=%q", path, err) return err } if path == fs.root { return nil } // Careful! Have to check whether the path is a symlink first because, on // windows, a symlink to a directory will return 'true' for info.IsDir(). if (info.Mode() & os.ModeSymlink) != 0 { if linkMap[path] { delete(linkMap, path) } else { t.Errorf("unexpected symlink exists %q", path) } return nil } if info.IsDir() { if dirMap[path] { delete(dirMap, path) } else { t.Errorf("unexpected directory exists %q", path) } return nil } if fileMap[path] { delete(fileMap, path) } else { t.Errorf("unexpected file exists %q", path) } return nil }) if err != nil { t.Errorf("filesystem.Walk err=%q", err) } for d := range dirMap { t.Errorf("could not find expected directory %q", d) } for f := range fileMap { t.Errorf("could not find expected file %q", f) } for l := range linkMap { t.Errorf("could not find expected symlink %q", l) } } // fsLink represents a symbolic link. type fsLink struct { path fsPath to string } // setup inflates fs onto the actual host file system func (fs filesystemState) setup(t *testing.T) { fs.setupDirs(t) fs.setupFiles(t) fs.setupLinks(t) } func (fs filesystemState) setupDirs(t *testing.T) { for _, dir := range fs.dirs { p := dir.prepend(fs.root) if err := os.MkdirAll(p.String(), 0777); err != nil { t.Fatalf("os.MkdirAll(%q, 0777) err=%q", p, err) } } } func (fs filesystemState) setupFiles(t *testing.T) { for _, file := range fs.files { p := file.prepend(fs.root) f, err := os.Create(p.String()) if err != nil { t.Fatalf("os.Create(%q) err=%q", p, err) } if err := f.Close(); err != nil { t.Fatalf("file %q Close() err=%q", p, err) } } } func (fs filesystemState) setupLinks(t *testing.T) { for _, link := range fs.links { p := link.path.prepend(fs.root) // On Windows, relative symlinks confuse filepath.Walk. This is golang/go // issue 17540. So, we'll just sigh and do absolute links, assuming they are // relative to the directory of link.path. dir := filepath.Dir(p.String()) to := filepath.Join(dir, link.to) if err := os.Symlink(to, p.String()); err != nil { t.Fatalf("os.Symlink(%q, %q) err=%q", to, p, err) } } } dep-0.3.2/internal/gps/hash.go000066400000000000000000000076121317166637100161640ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "crypto/sha256" "io" "sort" "strconv" "strings" ) // string headers used to demarcate sections in hash input creation const ( hhConstraints = "-CONSTRAINTS-" hhImportsReqs = "-IMPORTS/REQS-" hhIgnores = "-IGNORES-" hhOverrides = "-OVERRIDES-" hhAnalyzer = "-ANALYZER-" ) // HashInputs computes a hash digest of all data in SolveParams and the // RootManifest that act as function inputs to Solve(). // // The digest returned from this function is the same as the digest that would // be included with a Solve() Result. As such, it's appropriate for comparison // against the digest stored in a lock file, generated by a previous Solve(): if // the digests match, then manifest and lock are in sync, and a Solve() is // unnecessary. // // (Basically, this is for memoization.) func (s *solver) HashInputs() (digest []byte) { h := sha256.New() s.writeHashingInputs(h) hd := h.Sum(nil) digest = hd[:] return } func (s *solver) writeHashingInputs(w io.Writer) { writeString := func(s string) { // Skip zero-length string writes; it doesn't affect the real hash // calculation, and keeps misleading newlines from showing up in the // debug output. if s != "" { // All users of writeHashingInputs cannot error on Write(), so just // ignore it w.Write([]byte(s)) } } // We write "section headers" into the hash purely to ease scanning when // debugging this input-constructing algorithm; as long as the headers are // constant, then they're effectively a no-op. writeString(hhConstraints) // getApplicableConstraints will apply overrides, incorporate requireds, // apply local ignores, drop stdlib imports, and finally trim out // ineffectual constraints. for _, pd := range s.rd.getApplicableConstraints(s.stdLibFn) { writeString(string(pd.Ident.ProjectRoot)) writeString(pd.Ident.Source) writeString(pd.Constraint.typedString()) } // Write out each discrete import, including those derived from requires. writeString(hhImportsReqs) imports := s.rd.externalImportList(s.stdLibFn) sort.Strings(imports) for _, im := range imports { writeString(im) } // Add ignores, skipping any that point under the current project root; // those will have already been implicitly incorporated by the import // lister. writeString(hhIgnores) ig := s.rd.ir.ToSlice() sort.Strings(ig) for _, igp := range ig { // Typical prefix comparison checks will erroneously fail if the wildcard // is present. Trim it off, if present. tigp := strings.TrimSuffix(igp, "*") if !strings.HasPrefix(tigp, s.rd.rpt.ImportRoot) || !isPathPrefixOrEqual(s.rd.rpt.ImportRoot, tigp) { writeString(igp) } } // Overrides *also* need their own special entry distinct from basic // constraints, to represent the unique effects they can have on the entire // solving process beyond root's immediate scope. writeString(hhOverrides) for _, pc := range s.rd.ovr.asSortedSlice() { writeString(string(pc.Ident.ProjectRoot)) if pc.Ident.Source != "" { writeString(pc.Ident.Source) } if pc.Constraint != nil { writeString(pc.Constraint.typedString()) } } writeString(hhAnalyzer) ai := s.rd.an.Info() writeString(ai.Name) writeString(strconv.Itoa(ai.Version)) } // bytes.Buffer wrapper that injects newlines after each call to Write(). type nlbuf bytes.Buffer func (buf *nlbuf) Write(p []byte) (n int, err error) { n, _ = (*bytes.Buffer)(buf).Write(p) (*bytes.Buffer)(buf).WriteByte('\n') return n + 1, nil } // HashingInputsAsString returns the raw input data used by Solver.HashInputs() // as a string. // // This is primarily intended for debugging purposes. func HashingInputsAsString(s Solver) string { ts := s.(*solver) buf := new(nlbuf) ts.writeHashingInputs(buf) return (*bytes.Buffer)(buf).String() } dep-0.3.2/internal/gps/hash_test.go000066400000000000000000000323251317166637100172220ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "crypto/sha256" "fmt" "strings" "testing" "text/tabwriter" "github.com/golang/dep/internal/gps/pkgtree" ) func TestHashInputs(t *testing.T) { fix := basicFixtures["shared dependency with overlapping constraints"] params := SolveParameters{ RootDir: string(fix.ds[0].n), RootPackageTree: fix.rootTree(), Manifest: fix.rootmanifest(), ProjectAnalyzer: naiveAnalyzer{}, stdLibFn: func(string) bool { return false }, mkBridgeFn: overrideMkBridge, } s, err := Prepare(params, newdepspecSM(fix.ds, nil)) if err != nil { t.Fatalf("Unexpected error while prepping solver: %s", err) } dig := s.HashInputs() h := sha256.New() elems := []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, hhOverrides, hhAnalyzer, "naive-analyzer", "1", } for _, v := range elems { h.Write([]byte(v)) } correct := h.Sum(nil) if !bytes.Equal(dig, correct) { t.Errorf("Hashes are not equal. Inputs:\n%s", diffHashingInputs(s, elems)) } else if strings.Join(elems, "\n")+"\n" != HashingInputsAsString(s) { t.Errorf("Hashes are equal, but hashing input strings are not:\n%s", diffHashingInputs(s, elems)) } } func TestHashInputsReqsIgs(t *testing.T) { fix := basicFixtures["shared dependency with overlapping constraints"] rm := fix.rootmanifest().(simpleRootManifest).dup() rm.ig = pkgtree.NewIgnoredRuleset([]string{"foo", "bar"}) params := SolveParameters{ RootDir: string(fix.ds[0].n), RootPackageTree: fix.rootTree(), Manifest: rm, ProjectAnalyzer: naiveAnalyzer{}, stdLibFn: func(string) bool { return false }, mkBridgeFn: overrideMkBridge, } s, err := Prepare(params, newdepspecSM(fix.ds, nil)) if err != nil { t.Fatalf("Unexpected error while prepping solver: %s", err) } dig := s.HashInputs() h := sha256.New() elems := []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, "bar", "foo", hhOverrides, hhAnalyzer, "naive-analyzer", "1", } for _, v := range elems { h.Write([]byte(v)) } correct := h.Sum(nil) if !bytes.Equal(dig, correct) { t.Errorf("Hashes are not equal. Inputs:\n%s", diffHashingInputs(s, elems)) } // Add requires rm.req = map[string]bool{ "baz": true, "qux": true, } params.Manifest = rm s, err = Prepare(params, newdepspecSM(fix.ds, nil)) if err != nil { t.Fatalf("Unexpected error while prepping solver: %s", err) } dig = s.HashInputs() h = sha256.New() elems = []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", "baz", "qux", hhIgnores, "bar", "foo", hhOverrides, hhAnalyzer, "naive-analyzer", "1", } for _, v := range elems { h.Write([]byte(v)) } correct = h.Sum(nil) if !bytes.Equal(dig, correct) { t.Errorf("Hashes are not equal. Inputs:\n%s", diffHashingInputs(s, elems)) } // remove ignores, just test requires alone rm.ig = nil params.Manifest = rm s, err = Prepare(params, newdepspecSM(fix.ds, nil)) if err != nil { t.Fatalf("Unexpected error while prepping solver: %s", err) } dig = s.HashInputs() h = sha256.New() elems = []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", "baz", "qux", hhIgnores, hhOverrides, hhAnalyzer, "naive-analyzer", "1", } for _, v := range elems { h.Write([]byte(v)) } correct = h.Sum(nil) if !bytes.Equal(dig, correct) { t.Errorf("Hashes are not equal. Inputs:\n%s", diffHashingInputs(s, elems)) } } func TestHashInputsOverrides(t *testing.T) { basefix := basicFixtures["shared dependency with overlapping constraints"] // Set up base state that we'll mutate over the course of each test rm := basefix.rootmanifest().(simpleRootManifest).dup() params := SolveParameters{ RootDir: string(basefix.ds[0].n), RootPackageTree: basefix.rootTree(), Manifest: rm, ProjectAnalyzer: naiveAnalyzer{}, stdLibFn: func(string) bool { return false }, mkBridgeFn: overrideMkBridge, } table := []struct { name string mut func() elems []string }{ { name: "override source; not imported, no deps pp", mut: func() { // First case - override just source, on something without // corresponding project properties in the dependencies from // root rm.ovr = map[ProjectRoot]ProjectProperties{ "c": { Source: "car", }, } }, elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, hhOverrides, "c", "car", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "override source; required, no deps pp", mut: func() { // Put c into the requires list, which should make it show up under // constraints rm.req = map[string]bool{ "c": true, } }, elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", "c", "car", "any-*", // Any isn't included under the override, but IS for the constraint b/c it's equivalent hhImportsReqs, "a", "b", "c", hhIgnores, hhOverrides, "c", "car", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "override source; required & imported, no deps pp", mut: func() { // Put c in the root's imports poe := params.RootPackageTree.Packages["root"] poe.P.Imports = []string{"a", "b", "c"} params.RootPackageTree.Packages["root"] = poe }, elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", "c", "car", "any-*", // Any isn't included under the override, but IS for the constraint b/c it's equivalent hhImportsReqs, "a", "b", "c", hhIgnores, hhOverrides, "c", "car", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "override source; imported, no deps pp", mut: func() { // Take c out of requires list - now it's only imported rm.req = nil }, elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", "c", "car", "any-*", hhImportsReqs, "a", "b", "c", hhIgnores, hhOverrides, "c", "car", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "other override constraint; not imported, no deps pp", mut: func() { // Override not in root, just with constraint rm.ovr["d"] = ProjectProperties{ Constraint: NewBranch("foobranch"), } }, elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", "c", "car", "any-*", hhImportsReqs, "a", "b", "c", hhIgnores, hhOverrides, "c", "car", "d", "b-foobranch", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "override constraint; not imported, no deps pp", mut: func() { // Remove the "c" pkg from imports for remainder of tests poe := params.RootPackageTree.Packages["root"] poe.P.Imports = []string{"a", "b"} params.RootPackageTree.Packages["root"] = poe }, elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, hhOverrides, "c", "car", "d", "b-foobranch", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "override both; not imported, no deps pp", mut: func() { // Override not in root, both constraint and network name rm.ovr["c"] = ProjectProperties{ Source: "groucho", Constraint: NewBranch("plexiglass"), } }, elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, hhOverrides, "c", "groucho", "b-plexiglass", "d", "b-foobranch", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "override constraint; imported, with constraint", mut: func() { // Override dep present in root, just constraint rm.ovr["a"] = ProjectProperties{ Constraint: NewVersion("fluglehorn"), } }, elems: []string{ hhConstraints, "a", "pv-fluglehorn", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, hhOverrides, "a", "pv-fluglehorn", "c", "groucho", "b-plexiglass", "d", "b-foobranch", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "override source; imported, with constraint", mut: func() { // Override in root, only network name rm.ovr["a"] = ProjectProperties{ Source: "nota", } }, elems: []string{ hhConstraints, "a", "nota", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, hhOverrides, "a", "nota", "c", "groucho", "b-plexiglass", "d", "b-foobranch", hhAnalyzer, "naive-analyzer", "1", }, }, { name: "override both; imported, with constraint", mut: func() { // Override in root, network name and constraint rm.ovr["a"] = ProjectProperties{ Source: "nota", Constraint: NewVersion("fluglehorn"), } }, elems: []string{ hhConstraints, "a", "nota", "pv-fluglehorn", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, hhOverrides, "a", "nota", "pv-fluglehorn", "c", "groucho", "b-plexiglass", "d", "b-foobranch", hhAnalyzer, "naive-analyzer", "1", }, }, } for _, fix := range table { fix.mut() params.Manifest = rm s, err := Prepare(params, newdepspecSM(basefix.ds, nil)) if err != nil { t.Errorf("(fix: %q) Unexpected error while prepping solver: %s", fix.name, err) continue } h := sha256.New() for _, v := range fix.elems { h.Write([]byte(v)) } if !bytes.Equal(s.HashInputs(), h.Sum(nil)) { t.Errorf("(fix: %q) Hashes are not equal. Inputs:\n%s", fix.name, diffHashingInputs(s, fix.elems)) } } } func diffHashingInputs(s Solver, wnt []string) string { actual := HashingInputsAsString(s) got := strings.Split(actual, "\n") // got has a trailing empty, add that to wnt wnt = append(wnt, "") lg, lw := len(got), len(wnt) var buf bytes.Buffer tw := tabwriter.NewWriter(&buf, 4, 4, 2, ' ', 0) fmt.Fprintln(tw, " (GOT) \t (WANT) \t") lmiss, rmiss := ">>>>>>>>>>", "<<<<<<<<<<" if lg == lw { // same length makes the loop pretty straightforward for i := 0; i < lg; i++ { fmt.Fprintf(tw, "%s\t%s\t\n", got[i], wnt[i]) } } else if lg > lw { offset := 0 for i := 0; i < lg; i++ { if lw <= i-offset { fmt.Fprintf(tw, "%s\t%s\t\n", got[i], rmiss) } else if got[i] != wnt[i-offset] && i+1 < lg && got[i+1] == wnt[i-offset] { // if the next slot is a match, realign by skipping this one and // bumping the offset fmt.Fprintf(tw, "%s\t%s\t\n", got[i], rmiss) offset++ } else { fmt.Fprintf(tw, "%s\t%s\t\n", got[i], wnt[i-offset]) } } } else { offset := 0 for i := 0; i < lw; i++ { if lg <= i-offset { fmt.Fprintf(tw, "%s\t%s\t\n", lmiss, wnt[i]) } else if got[i-offset] != wnt[i] && i+1 < lw && got[i-offset] == wnt[i+1] { // if the next slot is a match, realign by skipping this one and // bumping the offset fmt.Fprintf(tw, "%s\t%s\t\n", lmiss, wnt[i]) offset++ } else { fmt.Fprintf(tw, "%s\t%s\t\n", got[i-offset], wnt[i]) } } } tw.Flush() return buf.String() } func TestHashInputsIneffectualWildcardIgs(t *testing.T) { fix := basicFixtures["shared dependency with overlapping constraints"] rm := fix.rootmanifest().(simpleRootManifest).dup() params := SolveParameters{ RootDir: string(fix.ds[0].n), RootPackageTree: fix.rootTree(), Manifest: rm, ProjectAnalyzer: naiveAnalyzer{}, stdLibFn: func(string) bool { return false }, mkBridgeFn: overrideMkBridge, } cases := []struct { name string ignoreMap []string elems []string }{ { name: "no wildcard ignores", elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, hhOverrides, hhAnalyzer, "naive-analyzer", "1", }, }, { name: "different wildcard ignores", ignoreMap: []string{ "foobar*", "foobarbaz*", "foozapbar*", }, elems: []string{ hhConstraints, "a", "sv-1.0.0", "b", "sv-1.0.0", hhImportsReqs, "a", "b", hhIgnores, "foobar*", "foozapbar*", hhOverrides, hhAnalyzer, "naive-analyzer", "1", }, }, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { rm.ig = pkgtree.NewIgnoredRuleset(c.ignoreMap) params.Manifest = rm s, err := Prepare(params, newdepspecSM(fix.ds, nil)) if err != nil { t.Fatalf("Unexpected error while prepping solver: %s", err) } dig := s.HashInputs() h := sha256.New() for _, v := range c.elems { h.Write([]byte(v)) } correct := h.Sum(nil) if !bytes.Equal(dig, correct) { t.Errorf("Hashes are not equal. Inputs:\n%s", diffHashingInputs(s, c.elems)) } }) } } dep-0.3.2/internal/gps/identifier.go000066400000000000000000000161331317166637100173610ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "math/rand" "strconv" ) // ProjectRoot is the topmost import path in a tree of other import paths - the // root of the tree. In gps' current design, ProjectRoots have to correspond to // a repository root (mostly), but their real purpose is to identify the root // import path of a "project", logically encompassing all child packages. // // Projects are a crucial unit of operation in gps. Constraints are declared by // a project's manifest, and apply to all packages in a ProjectRoot's tree. // Solving itself mostly proceeds on a project-by-project basis. // // Aliasing string types is usually a bit of an anti-pattern. gps does it here // as a means of clarifying API intent. This is important because Go's package // management domain has lots of different path-ish strings floating around: // // actual directories: // /home/sdboyer/go/src/github.com/sdboyer/gps/example // URLs: // https://github.com/sdboyer/gps // import paths: // github.com/sdboyer/gps/example // portions of import paths that refer to a package: // example // portions that could not possibly refer to anything sane: // github.com/sdboyer // portions that correspond to a repository root: // github.com/sdboyer/gps // // While not a panacea, having ProjectRoot allows gps to clearly indicate via // the type system when a path-ish string must have particular semantics. type ProjectRoot string // A ProjectIdentifier provides the name and source location of a dependency. It // is related to, but differs in two key ways from, a plain import path. // // First, ProjectIdentifiers do not identify a single package. Rather, they // encompass the whole tree of packages, including tree's root - the // ProjectRoot. In gps' current design, this ProjectRoot almost always // corresponds to the root of a repository. // // Second, ProjectIdentifiers can optionally carry a Source, which // identifies where the underlying source code can be located on the network. // These can be either a full URL, including protocol, or plain import paths. // So, these are all valid data for Source: // // github.com/sdboyer/gps // github.com/fork/gps // git@github.com:sdboyer/gps // https://github.com/sdboyer/gps // // With plain import paths, network addresses are derived purely through an // algorithm. By having an explicit network name, it becomes possible to, for // example, transparently substitute a fork for the original upstream source // repository. // // Note that gps makes no guarantees about the actual import paths contained in // a repository aligning with ImportRoot. If tools, or their users, specify an // alternate Source that contains a repository with incompatible internal // import paths, gps' solving operations will error. (gps does no import // rewriting.) // // Also note that if different projects' manifests report a different // Source for a given ImportRoot, it is a solve failure. Everyone has to // agree on where a given import path should be sourced from. // // If Source is not explicitly set, gps will derive the network address from // the ImportRoot using a similar algorithm to that utilized by `go get`. type ProjectIdentifier struct { ProjectRoot ProjectRoot Source string } // Less compares by ProjectRoot then normalized Source. func (i ProjectIdentifier) Less(j ProjectIdentifier) bool { if i.ProjectRoot < j.ProjectRoot { return true } if j.ProjectRoot < i.ProjectRoot { return false } return i.normalizedSource() < j.normalizedSource() } func (i ProjectIdentifier) eq(j ProjectIdentifier) bool { if i.ProjectRoot != j.ProjectRoot { return false } if i.Source == j.Source { return true } if (i.Source == "" && j.Source == string(j.ProjectRoot)) || (j.Source == "" && i.Source == string(i.ProjectRoot)) { return true } return false } // equiv will check if the two identifiers are "equivalent," under special // rules. // // Given that the ProjectRoots are equal (==), equivalency occurs if: // // 1. The Sources are equal (==), OR // 2. The LEFT (the receiver) Source is non-empty, and the right // Source is empty. // // *This is asymmetry in this binary relation is intentional.* It facilitates // the case where we allow for a ProjectIdentifier with an explicit Source // to match one without. func (i ProjectIdentifier) equiv(j ProjectIdentifier) bool { if i.ProjectRoot != j.ProjectRoot { return false } if i.Source == j.Source { return true } if i.Source != "" && j.Source == "" { return true } return false } func (i ProjectIdentifier) normalizedSource() string { if i.Source == "" { return string(i.ProjectRoot) } return i.Source } func (i ProjectIdentifier) String() string { if i.Source == "" || i.Source == string(i.ProjectRoot) { return string(i.ProjectRoot) } return fmt.Sprintf("%s (from %s)", i.ProjectRoot, i.Source) } func (i ProjectIdentifier) normalize() ProjectIdentifier { if i.Source == "" { i.Source = string(i.ProjectRoot) } return i } // ProjectProperties comprise the properties that can be attached to a // ProjectRoot. // // In general, these are declared in the context of a map of ProjectRoot to its // ProjectProperties; they make little sense without their corresponding // ProjectRoot. type ProjectProperties struct { Source string Constraint Constraint } // bimodalIdentifiers are used to track work to be done in the unselected queue. type bimodalIdentifier struct { id ProjectIdentifier // List of packages required within/under the ProjectIdentifier pl []string // prefv is used to indicate a 'preferred' version. This is expected to be // derived from a dep's lock data, or else is empty. prefv Version // Indicates that the bmi came from the root project originally fromRoot bool } type atom struct { id ProjectIdentifier v Version } // With a random revision and no name, collisions are...unlikely var nilpa = atom{ v: Revision(strconv.FormatInt(rand.Int63(), 36)), } type atomWithPackages struct { a atom pl []string } // bmi converts an atomWithPackages into a bimodalIdentifier. // // This is mostly intended for (read-only) trace use, so the package list slice // is not copied. It is the callers responsibility to not modify the pl slice, // lest that backpropagate and cause inconsistencies. func (awp atomWithPackages) bmi() bimodalIdentifier { return bimodalIdentifier{ id: awp.a.id, pl: awp.pl, } } // completeDep (name hopefully to change) provides the whole picture of a // dependency - the root (repo and project, since currently we assume the two // are the same) name, a constraint, and the actual packages needed that are // under that root. type completeDep struct { // The base workingConstraint workingConstraint // The specific packages required from the ProjectDep pl []string } // dependency represents an incomplete edge in the depgraph. It has a // fully-realized atom as the depender (the tail/source of the edge), and a set // of requirements that any atom to be attached at the head/target must satisfy. type dependency struct { depender atom dep completeDep } dep-0.3.2/internal/gps/internal/000077500000000000000000000000001317166637100165205ustar00rootroot00000000000000dep-0.3.2/internal/gps/internal/pb/000077500000000000000000000000001317166637100171215ustar00rootroot00000000000000dep-0.3.2/internal/gps/internal/pb/pb.go000066400000000000000000000004521317166637100200520ustar00rootroot00000000000000// Copyright 2017 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 pb provides generated Protocol Buffers for cache serialization. package pb //go:generate protoc --go_out=. source_cache.proto dep-0.3.2/internal/gps/internal/pb/source_cache.pb.go000066400000000000000000000155551317166637100225060ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // source: source_cache.proto /* Package pb is a generated protocol buffer package. It is generated from these files: source_cache.proto It has these top-level messages: Constraint ProjectProperties LockedProject */ package pb import proto "github.com/golang/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.ProtoPackageIsVersion2 // please upgrade the proto package type Constraint_Type int32 const ( Constraint_Revision Constraint_Type = 0 Constraint_Branch Constraint_Type = 1 Constraint_DefaultBranch Constraint_Type = 2 Constraint_Version Constraint_Type = 3 Constraint_Semver Constraint_Type = 4 ) var Constraint_Type_name = map[int32]string{ 0: "Revision", 1: "Branch", 2: "DefaultBranch", 3: "Version", 4: "Semver", } var Constraint_Type_value = map[string]int32{ "Revision": 0, "Branch": 1, "DefaultBranch": 2, "Version": 3, "Semver": 4, } func (x Constraint_Type) String() string { return proto.EnumName(Constraint_Type_name, int32(x)) } func (Constraint_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } // Constraint is a serializable representation of a gps.Constraint or gps.UnpairedVersion. type Constraint struct { Type Constraint_Type `protobuf:"varint,1,opt,name=type,enum=pb.Constraint_Type" json:"type,omitempty"` Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` } func (m *Constraint) Reset() { *m = Constraint{} } func (m *Constraint) String() string { return proto.CompactTextString(m) } func (*Constraint) ProtoMessage() {} func (*Constraint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } func (m *Constraint) GetType() Constraint_Type { if m != nil { return m.Type } return Constraint_Revision } func (m *Constraint) GetValue() string { if m != nil { return m.Value } return "" } // ProjectProperties is a serializable representation of gps.ProjectRoot and gps.ProjectProperties. type ProjectProperties struct { Root string `protobuf:"bytes,1,opt,name=root" json:"root,omitempty"` Source string `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"` Constraint *Constraint `protobuf:"bytes,3,opt,name=constraint" json:"constraint,omitempty"` } func (m *ProjectProperties) Reset() { *m = ProjectProperties{} } func (m *ProjectProperties) String() string { return proto.CompactTextString(m) } func (*ProjectProperties) ProtoMessage() {} func (*ProjectProperties) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } func (m *ProjectProperties) GetRoot() string { if m != nil { return m.Root } return "" } func (m *ProjectProperties) GetSource() string { if m != nil { return m.Source } return "" } func (m *ProjectProperties) GetConstraint() *Constraint { if m != nil { return m.Constraint } return nil } // LockedProject is a serializable representation of gps.LockedProject. type LockedProject struct { Root string `protobuf:"bytes,1,opt,name=root" json:"root,omitempty"` Source string `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"` UnpairedVersion *Constraint `protobuf:"bytes,3,opt,name=unpairedVersion" json:"unpairedVersion,omitempty"` Revision string `protobuf:"bytes,4,opt,name=revision" json:"revision,omitempty"` Packages []string `protobuf:"bytes,5,rep,name=packages" json:"packages,omitempty"` } func (m *LockedProject) Reset() { *m = LockedProject{} } func (m *LockedProject) String() string { return proto.CompactTextString(m) } func (*LockedProject) ProtoMessage() {} func (*LockedProject) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } func (m *LockedProject) GetRoot() string { if m != nil { return m.Root } return "" } func (m *LockedProject) GetSource() string { if m != nil { return m.Source } return "" } func (m *LockedProject) GetUnpairedVersion() *Constraint { if m != nil { return m.UnpairedVersion } return nil } func (m *LockedProject) GetRevision() string { if m != nil { return m.Revision } return "" } func (m *LockedProject) GetPackages() []string { if m != nil { return m.Packages } return nil } func init() { proto.RegisterType((*Constraint)(nil), "pb.Constraint") proto.RegisterType((*ProjectProperties)(nil), "pb.ProjectProperties") proto.RegisterType((*LockedProject)(nil), "pb.LockedProject") proto.RegisterEnum("pb.Constraint_Type", Constraint_Type_name, Constraint_Type_value) } func init() { proto.RegisterFile("source_cache.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 294 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0x4f, 0x4f, 0xc2, 0x40, 0x14, 0xc4, 0x5d, 0x28, 0x08, 0x0f, 0x41, 0x78, 0x1a, 0xd3, 0x78, 0x6a, 0x7a, 0x91, 0x53, 0x0f, 0x78, 0xf1, 0xac, 0x1e, 0x39, 0x90, 0x6a, 0xbc, 0x9a, 0xed, 0xf2, 0x94, 0x0a, 0x76, 0x37, 0xaf, 0xdb, 0x26, 0x7c, 0x14, 0x3f, 0x84, 0xdf, 0xd1, 0x74, 0x59, 0xf1, 0x4f, 0xe2, 0xc1, 0x5b, 0xa7, 0xf3, 0xcb, 0xce, 0xcc, 0x2e, 0x60, 0xa9, 0x2b, 0x56, 0xf4, 0xa8, 0xa4, 0x5a, 0x51, 0x62, 0x58, 0x5b, 0x8d, 0x2d, 0x93, 0xc5, 0x6f, 0x02, 0xe0, 0x46, 0x17, 0xa5, 0x65, 0x99, 0x17, 0x16, 0x2f, 0x20, 0xb0, 0x5b, 0x43, 0xa1, 0x88, 0xc4, 0x74, 0x34, 0x3b, 0x49, 0x4c, 0x96, 0x7c, 0xb9, 0xc9, 0xfd, 0xd6, 0x50, 0xea, 0x00, 0x3c, 0x85, 0x4e, 0x2d, 0x37, 0x15, 0x85, 0xad, 0x48, 0x4c, 0xfb, 0xe9, 0x4e, 0xc4, 0x73, 0x08, 0x1a, 0x06, 0x8f, 0xa0, 0x97, 0x52, 0x9d, 0x97, 0xb9, 0x2e, 0xc6, 0x07, 0x08, 0xd0, 0xbd, 0x66, 0x59, 0xa8, 0xd5, 0x58, 0xe0, 0x04, 0x86, 0xb7, 0xf4, 0x24, 0xab, 0x8d, 0xf5, 0xbf, 0x5a, 0x38, 0x80, 0xc3, 0x07, 0x62, 0xc7, 0xb6, 0x1b, 0xf6, 0x8e, 0x5e, 0x6b, 0xe2, 0x71, 0x10, 0x6b, 0x98, 0x2c, 0x58, 0xbf, 0x90, 0xb2, 0x0b, 0xd6, 0x86, 0xd8, 0xe6, 0x54, 0x22, 0x42, 0xc0, 0x5a, 0x5b, 0xd7, 0xb0, 0x9f, 0xba, 0x6f, 0x3c, 0x83, 0xee, 0x6e, 0x9e, 0x6f, 0xe3, 0x15, 0x26, 0x00, 0x6a, 0xdf, 0x3e, 0x6c, 0x47, 0x62, 0x3a, 0x98, 0x8d, 0x7e, 0x6e, 0x4a, 0xbf, 0x11, 0xf1, 0xbb, 0x80, 0xe1, 0x5c, 0xab, 0x35, 0x2d, 0x7d, 0xee, 0xbf, 0xd2, 0xae, 0xe0, 0xb8, 0x2a, 0x8c, 0xcc, 0x99, 0x96, 0x7e, 0xcf, 0x1f, 0x91, 0xbf, 0x31, 0x3c, 0x87, 0x1e, 0xfb, 0xeb, 0x0a, 0x03, 0x77, 0xe6, 0x5e, 0x37, 0x9e, 0x91, 0x6a, 0x2d, 0x9f, 0xa9, 0x0c, 0x3b, 0x51, 0xbb, 0xf1, 0x3e, 0x75, 0xd6, 0x75, 0xef, 0x78, 0xf9, 0x11, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x52, 0x77, 0xb3, 0xdd, 0x01, 0x00, 0x00, } dep-0.3.2/internal/gps/internal/pb/source_cache.proto000066400000000000000000000015751317166637100226410ustar00rootroot00000000000000// Copyright 2017 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. syntax = "proto3"; package pb; // Constraint is a serializable representation of a gps.Constraint or gps.UnpairedVersion. message Constraint { enum Type { Revision = 0; Branch = 1; DefaultBranch = 2; Version = 3; Semver = 4; } Type type = 1; string value = 2; //TODO strongly typed Semver field } // ProjectProperties is a serializable representation of gps.ProjectRoot and gps.ProjectProperties. message ProjectProperties { string root = 1; string source = 2; Constraint constraint = 3; } // LockedProject is a serializable representation of gps.LockedProject. message LockedProject { string root = 1; string source = 2; Constraint unpairedVersion = 3; string revision = 4; repeated string packages = 5; } dep-0.3.2/internal/gps/lock.go000066400000000000000000000141551317166637100161710ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "fmt" "sort" ) // Lock represents data from a lock file (or however the implementing tool // chooses to store it) at a particular version that is relevant to the // satisfiability solving process. // // In general, the information produced by gps on finding a successful // solution is all that would be necessary to constitute a lock file, though // tools can include whatever other information they want in their storage. type Lock interface { // The hash digest of inputs to gps that resulted in this lock data. InputsDigest() []byte // Projects returns the list of LockedProjects contained in the lock data. Projects() []LockedProject } // LocksAreEq checks if two locks are equivalent. This checks that // all contained LockedProjects are equal, and optionally (if the third // parameter is true) whether the locks' input hashes are equal. func LocksAreEq(l1, l2 Lock, checkHash bool) bool { // Cheapest ops first if checkHash && !bytes.Equal(l1.InputsDigest(), l2.InputsDigest()) { return false } p1, p2 := l1.Projects(), l2.Projects() if len(p1) != len(p2) { return false } p1 = sortedLockedProjects(p1) p2 = sortedLockedProjects(p2) for k, lp := range p1 { if !lp.Eq(p2[k]) { return false } } return true } // sortedLockedProjects returns a sorted copy of lps, or itself if already sorted. func sortedLockedProjects(lps []LockedProject) []LockedProject { if len(lps) <= 1 || sort.SliceIsSorted(lps, func(i, j int) bool { return lps[i].Ident().Less(lps[j].Ident()) }) { return lps } cp := make([]LockedProject, len(lps)) copy(cp, lps) sort.Slice(cp, func(i, j int) bool { return cp[i].Ident().Less(cp[j].Ident()) }) return cp } // LockedProject is a single project entry from a lock file. It expresses the // project's name, one or both of version and underlying revision, the network // URI for accessing it, the path at which it should be placed within a vendor // directory, and the packages that are used in it. type LockedProject struct { pi ProjectIdentifier v UnpairedVersion r Revision pkgs []string } // SimpleLock is a helper for tools to easily describe lock data when they know // that no hash, or other complex information, is available. type SimpleLock []LockedProject var _ Lock = SimpleLock{} // InputsDigest always returns an empty string for SimpleLock. This makes it useless // as a stable lock to be written to disk, but still useful for some ephemeral // purposes. func (SimpleLock) InputsDigest() []byte { return nil } // Projects returns the entire contents of the SimpleLock. func (l SimpleLock) Projects() []LockedProject { return l } // NewLockedProject creates a new LockedProject struct with a given // ProjectIdentifier (name and optional upstream source URL), version. and list // of packages required from the project. // // Note that passing a nil version will cause a panic. This is a correctness // measure to ensure that the solver is never exposed to a version-less lock // entry. Such a case would be meaningless - the solver would have no choice but // to simply dismiss that project. By creating a hard failure case via panic // instead, we are trying to avoid inflicting the resulting pain on the user by // instead forcing a decision on the Analyzer implementation. func NewLockedProject(id ProjectIdentifier, v Version, pkgs []string) LockedProject { if v == nil { panic("must provide a non-nil version to create a LockedProject") } lp := LockedProject{ pi: id, pkgs: pkgs, } switch tv := v.(type) { case Revision: lp.r = tv case branchVersion: lp.v = tv case semVersion: lp.v = tv case plainVersion: lp.v = tv case versionPair: lp.r = tv.r lp.v = tv.v } return lp } // Ident returns the identifier describing the project. This includes both the // local name (the root name by which the project is referenced in import paths) // and the network name, where the upstream source lives. func (lp LockedProject) Ident() ProjectIdentifier { return lp.pi } // Version assembles together whatever version and/or revision data is // available into a single Version. func (lp LockedProject) Version() Version { if lp.r == "" { return lp.v } if lp.v == nil { return lp.r } return lp.v.Pair(lp.r) } // Eq checks if two LockedProject instances are equal. func (lp LockedProject) Eq(lp2 LockedProject) bool { if lp.pi != lp2.pi { return false } if lp.r != lp2.r { return false } if len(lp.pkgs) != len(lp2.pkgs) { return false } for k, v := range lp.pkgs { if lp2.pkgs[k] != v { return false } } v1n := lp.v == nil v2n := lp2.v == nil if v1n != v2n { return false } if !v1n && !lp.v.Matches(lp2.v) { return false } return true } // Packages returns the list of packages from within the LockedProject that are // actually used in the import graph. Some caveats: // // * The names given are relative to the root import path for the project. If // the root package itself is imported, it's represented as ".". // * Just because a package path isn't included in this list doesn't mean it's // safe to remove - it could contain C files, or other assets, that can't be // safely removed. // * The slice is not a copy. If you need to modify it, copy it first. func (lp LockedProject) Packages() []string { return lp.pkgs } func (lp LockedProject) String() string { return fmt.Sprintf("%s@%s with packages: %v", lp.Ident(), lp.Version(), lp.pkgs) } type safeLock struct { h []byte p []LockedProject } func (sl safeLock) InputsDigest() []byte { return sl.h } func (sl safeLock) Projects() []LockedProject { return sl.p } // prepLock ensures a lock is prepared and safe for use by the solver. This is // mostly about defensively ensuring that no outside routine can modify the lock // while the solver is in-flight. // // This is achieved by copying the lock's data into a new safeLock. func prepLock(l Lock) safeLock { pl := l.Projects() rl := safeLock{ h: l.InputsDigest(), p: make([]LockedProject, len(pl)), } copy(rl.p, pl) return rl } dep-0.3.2/internal/gps/lock_test.go000066400000000000000000000136661317166637100172360ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "reflect" "sort" "testing" ) func TestLockedProjectSorting(t *testing.T) { // version doesn't matter here lps := []LockedProject{ NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), nil), NewLockedProject(mkPI("foo"), NewVersion("nada"), nil), NewLockedProject(mkPI("bar"), NewVersion("zip"), nil), NewLockedProject(mkPI("qux"), NewVersion("zilch"), nil), } lps2 := make([]LockedProject, len(lps)) copy(lps2, lps) sort.SliceStable(lps2, func(i, j int) bool { return lps2[i].Ident().Less(lps2[j].Ident()) }) // only the two should have switched positions lps[0], lps[2] = lps[2], lps[0] if !reflect.DeepEqual(lps, lps2) { t.Errorf("SortLockedProject did not sort as expected:\n\t(GOT) %s\n\t(WNT) %s", lps2, lps) } } func TestLockedProjectsEq(t *testing.T) { lps := []LockedProject{ NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{"gps"}), NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), nil), NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{"gps", "flugle"}), NewLockedProject(mkPI("foo"), NewVersion("nada"), []string{"foo"}), NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{"flugle", "gps"}), NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0").Pair("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}), NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.11.0"), []string{"gps"}), NewLockedProject(mkPI("github.com/sdboyer/gps"), Revision("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}), } fix := map[string]struct { l1, l2 int shouldeq bool err string }{ "with self": {0, 0, true, "lp does not eq self"}, "with different revision": {0, 5, false, "should not eq with different rev"}, "with different versions": {0, 6, false, "should not eq with different version"}, "with same revsion": {5, 5, true, "should eq with same rev"}, "with empty pkg": {0, 1, false, "should not eq when other pkg list is empty"}, "with long pkg list": {0, 2, false, "should not eq when other pkg list is longer"}, "with different orders": {2, 4, false, "should not eq when pkg lists are out of order"}, "with different lp": {0, 3, false, "should not eq totally different lp"}, "with only rev": {7, 7, true, "should eq with only rev"}, "when only rev matches": {5, 7, false, "should not eq when only rev matches"}, } for k, f := range fix { k, f := k, f t.Run(k, func(t *testing.T) { if f.shouldeq { if !lps[f.l1].Eq(lps[f.l2]) { t.Error(f.err) } if !lps[f.l2].Eq(lps[f.l1]) { t.Error(f.err + (" (reversed)")) } } else { if lps[f.l1].Eq(lps[f.l2]) { t.Error(f.err) } if lps[f.l2].Eq(lps[f.l1]) { t.Error(f.err + (" (reversed)")) } } }) } } func TestLocksAreEq(t *testing.T) { gpl := NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0").Pair("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}) svpl := NewLockedProject(mkPI("github.com/Masterminds/semver"), NewVersion("v2.0.0"), []string{"semver"}) bbbt := NewLockedProject(mkPI("github.com/beeblebrox/browntown"), NewBranch("master").Pair("63fc17eb7966a6f4cc0b742bf42731c52c4ac740"), []string{"browntown", "smoochies"}) l1 := solution{ hd: []byte("foo"), p: []LockedProject{ gpl, bbbt, svpl, }, } l2 := solution{ p: []LockedProject{ svpl, gpl, }, } if LocksAreEq(l1, l2, true) { t.Fatal("should have failed on hash check") } if LocksAreEq(l1, l2, false) { t.Fatal("should have failed on length check") } l2.p = append(l2.p, bbbt) if !LocksAreEq(l1, l2, false) { t.Fatal("should be eq, must have failed on individual lp check") } // ensure original input sort order is maintained if !l1.p[0].Eq(gpl) { t.Error("checking equality resorted l1") } if !l2.p[0].Eq(svpl) { t.Error("checking equality resorted l2") } l1.p[0] = NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.11.0"), []string{"gps"}) if LocksAreEq(l1, l2, false) { t.Error("should fail when individual lp were not eq") } } func TestLockedProjectsString(t *testing.T) { tt := []struct { name string lp LockedProject want string }{ { name: "full info", lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{"gps"}), want: "github.com/sdboyer/gps@v0.10.0 with packages: [gps]", }, { name: "empty package list", lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{}), want: "github.com/sdboyer/gps@v0.10.0 with packages: []", }, { name: "nil package", lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), nil), want: "github.com/sdboyer/gps@v0.10.0 with packages: []", }, { name: "with source", lp: NewLockedProject( ProjectIdentifier{ProjectRoot: "github.com/sdboyer/gps", Source: "github.com/another/repo"}, NewVersion("v0.10.0"), []string{"."}), want: "github.com/sdboyer/gps (from github.com/another/repo)@v0.10.0 with packages: [.]", }, { name: "version pair", lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0").Pair("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}), want: "github.com/sdboyer/gps@v0.10.0 with packages: [gps]", }, { name: "revision only", lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), Revision("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}), want: "github.com/sdboyer/gps@278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0 with packages: [gps]", }, } for _, tc := range tt { t.Run(tc.name, func(t *testing.T) { s := tc.lp.String() if tc.want != s { t.Fatalf("want %s, got %s", tc.want, s) } }) } } dep-0.3.2/internal/gps/lockdiff.go000066400000000000000000000142711317166637100170210ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "encoding/hex" "fmt" "sort" "strings" ) // StringDiff represents a modified string value. // * Added: Previous = nil, Current != nil // * Deleted: Previous != nil, Current = nil // * Modified: Previous != nil, Current != nil // * No Change: Previous = Current, or a nil pointer type StringDiff struct { Previous string Current string } func (diff *StringDiff) String() string { if diff == nil { return "" } if diff.Previous == "" && diff.Current != "" { return fmt.Sprintf("+ %s", diff.Current) } if diff.Previous != "" && diff.Current == "" { return fmt.Sprintf("- %s", diff.Previous) } if diff.Previous != diff.Current { return fmt.Sprintf("%s -> %s", diff.Previous, diff.Current) } return diff.Current } // LockDiff is the set of differences between an existing lock file and an updated lock file. // Fields are only populated when there is a difference, otherwise they are empty. type LockDiff struct { HashDiff *StringDiff Add []LockedProjectDiff Remove []LockedProjectDiff Modify []LockedProjectDiff } // LockedProjectDiff contains the before and after snapshot of a project reference. // Fields are only populated when there is a difference, otherwise they are empty. type LockedProjectDiff struct { Name ProjectRoot Source *StringDiff Version *StringDiff Branch *StringDiff Revision *StringDiff Packages []StringDiff } // DiffLocks compares two locks and identifies the differences between them. // Returns nil if there are no differences. func DiffLocks(l1 Lock, l2 Lock) *LockDiff { // Default nil locks to empty locks, so that we can still generate a diff if l1 == nil { l1 = &SimpleLock{} } if l2 == nil { l2 = &SimpleLock{} } p1, p2 := l1.Projects(), l2.Projects() p1 = sortedLockedProjects(p1) p2 = sortedLockedProjects(p2) diff := LockDiff{} h1 := hex.EncodeToString(l1.InputsDigest()) h2 := hex.EncodeToString(l2.InputsDigest()) if h1 != h2 { diff.HashDiff = &StringDiff{Previous: h1, Current: h2} } var i2next int for i1 := 0; i1 < len(p1); i1++ { lp1 := p1[i1] pr1 := lp1.pi.ProjectRoot var matched bool for i2 := i2next; i2 < len(p2); i2++ { lp2 := p2[i2] pr2 := lp2.pi.ProjectRoot switch strings.Compare(string(pr1), string(pr2)) { case 0: // Found a matching project matched = true pdiff := DiffProjects(lp1, lp2) if pdiff != nil { diff.Modify = append(diff.Modify, *pdiff) } i2next = i2 + 1 // Don't evaluate to this again case +1: // Found a new project add := buildLockedProjectDiff(lp2) diff.Add = append(diff.Add, add) i2next = i2 + 1 // Don't evaluate to this again continue // Keep looking for a matching project case -1: // Project has been removed, handled below continue } break // Done evaluating this project, move onto the next } if !matched { remove := buildLockedProjectDiff(lp1) diff.Remove = append(diff.Remove, remove) } } // Anything that still hasn't been evaluated are adds for i2 := i2next; i2 < len(p2); i2++ { lp2 := p2[i2] add := buildLockedProjectDiff(lp2) diff.Add = append(diff.Add, add) } if diff.HashDiff == nil && len(diff.Add) == 0 && len(diff.Remove) == 0 && len(diff.Modify) == 0 { return nil // The locks are the equivalent } return &diff } func buildLockedProjectDiff(lp LockedProject) LockedProjectDiff { s2 := lp.pi.Source r2, b2, v2 := VersionComponentStrings(lp.Version()) var rev, version, branch, source *StringDiff if s2 != "" { source = &StringDiff{Previous: s2, Current: s2} } if r2 != "" { rev = &StringDiff{Previous: r2, Current: r2} } if b2 != "" { branch = &StringDiff{Previous: b2, Current: b2} } if v2 != "" { version = &StringDiff{Previous: v2, Current: v2} } add := LockedProjectDiff{ Name: lp.pi.ProjectRoot, Source: source, Revision: rev, Version: version, Branch: branch, Packages: make([]StringDiff, len(lp.Packages())), } for i, pkg := range lp.Packages() { add.Packages[i] = StringDiff{Previous: pkg, Current: pkg} } return add } // DiffProjects compares two projects and identifies the differences between them. // Returns nil if there are no differences func DiffProjects(lp1 LockedProject, lp2 LockedProject) *LockedProjectDiff { diff := LockedProjectDiff{Name: lp1.pi.ProjectRoot} s1 := lp1.pi.Source s2 := lp2.pi.Source if s1 != s2 { diff.Source = &StringDiff{Previous: s1, Current: s2} } r1, b1, v1 := VersionComponentStrings(lp1.Version()) r2, b2, v2 := VersionComponentStrings(lp2.Version()) if r1 != r2 { diff.Revision = &StringDiff{Previous: r1, Current: r2} } if b1 != b2 { diff.Branch = &StringDiff{Previous: b1, Current: b2} } if v1 != v2 { diff.Version = &StringDiff{Previous: v1, Current: v2} } p1 := lp1.Packages() p2 := lp2.Packages() if !sort.StringsAreSorted(p1) { p1 = make([]string, len(p1)) copy(p1, lp1.Packages()) sort.Strings(p1) } if !sort.StringsAreSorted(p2) { p2 = make([]string, len(p2)) copy(p2, lp2.Packages()) sort.Strings(p2) } var i2next int for i1 := 0; i1 < len(p1); i1++ { pkg1 := p1[i1] var matched bool for i2 := i2next; i2 < len(p2); i2++ { pkg2 := p2[i2] switch strings.Compare(pkg1, pkg2) { case 0: // Found matching package matched = true i2next = i2 + 1 // Don't evaluate to this again case +1: // Found a new package add := StringDiff{Current: pkg2} diff.Packages = append(diff.Packages, add) i2next = i2 + 1 // Don't evaluate to this again continue // Keep looking for a match case -1: // Package has been removed (handled below) continue } break // Done evaluating this package, move onto the next } if !matched { diff.Packages = append(diff.Packages, StringDiff{Previous: pkg1}) } } // Anything that still hasn't been evaluated are adds for i2 := i2next; i2 < len(p2); i2++ { pkg2 := p2[i2] add := StringDiff{Current: pkg2} diff.Packages = append(diff.Packages, add) } if diff.Source == nil && diff.Version == nil && diff.Revision == nil && len(diff.Packages) == 0 { return nil // The projects are equivalent } return &diff } dep-0.3.2/internal/gps/lockdiff_test.go000066400000000000000000000321541317166637100200600ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "encoding/hex" "testing" ) func TestStringDiff_NoChange(t *testing.T) { diff := StringDiff{Previous: "foo", Current: "foo"} want := "foo" got := diff.String() if got != want { t.Fatalf("Expected '%s', got '%s'", want, got) } } func TestStringDiff_Add(t *testing.T) { diff := StringDiff{Current: "foo"} got := diff.String() if got != "+ foo" { t.Fatalf("Expected '+ foo', got '%s'", got) } } func TestStringDiff_Remove(t *testing.T) { diff := StringDiff{Previous: "foo"} want := "- foo" got := diff.String() if got != want { t.Fatalf("Expected '%s', got '%s'", want, got) } } func TestStringDiff_Modify(t *testing.T) { diff := StringDiff{Previous: "foo", Current: "bar"} want := "foo -> bar" got := diff.String() if got != want { t.Fatalf("Expected '%s', got '%s'", want, got) } } func TestDiffProjects_NoChange(t *testing.T) { p1 := NewLockedProject(mkPI("github.com/golang/dep/internal/gps"), NewVersion("v0.10.0"), []string{"gps"}) p2 := NewLockedProject(mkPI("github.com/golang/dep/internal/gps"), NewVersion("v0.10.0"), []string{"gps"}) diff := DiffProjects(p1, p2) if diff != nil { t.Fatal("Expected the diff to be nil") } } func TestDiffProjects_Modify(t *testing.T) { p1 := LockedProject{ pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewBranch("master"), r: "abc123", pkgs: []string{"baz", "qux"}, } p2 := LockedProject{ pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar", Source: "https://github.com/mcfork/gps.git"}, v: NewVersion("v1.0.0"), r: "def456", pkgs: []string{"baz", "derp"}, } diff := DiffProjects(p1, p2) if diff == nil { t.Fatal("Expected the diff to be populated") } wantSource := "+ https://github.com/mcfork/gps.git" gotSource := diff.Source.String() if gotSource != wantSource { t.Fatalf("Expected diff.Source to be '%s', got '%s'", wantSource, diff.Source) } wantVersion := "+ v1.0.0" gotVersion := diff.Version.String() if gotVersion != wantVersion { t.Fatalf("Expected diff.Version to be '%s', got '%s'", wantVersion, gotVersion) } wantRevision := "abc123 -> def456" gotRevision := diff.Revision.String() if gotRevision != wantRevision { t.Fatalf("Expected diff.Revision to be '%s', got '%s'", wantRevision, gotRevision) } wantBranch := "- master" gotBranch := diff.Branch.String() if gotBranch != wantBranch { t.Fatalf("Expected diff.Branch to be '%s', got '%s'", wantBranch, gotBranch) } fmtPkgs := func(pkgs []StringDiff) string { b := bytes.NewBufferString("[") for _, pkg := range pkgs { b.WriteString(pkg.String()) b.WriteString(",") } b.WriteString("]") return b.String() } wantPackages := "[+ derp,- qux,]" gotPackages := fmtPkgs(diff.Packages) if gotPackages != wantPackages { t.Fatalf("Expected diff.Packages to be '%s', got '%s'", wantPackages, gotPackages) } } func TestDiffProjects_AddPackages(t *testing.T) { p1 := LockedProject{ pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewBranch("master"), r: "abc123", pkgs: []string{"foobar"}, } p2 := LockedProject{ pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar", Source: "https://github.com/mcfork/gps.git"}, v: NewVersion("v1.0.0"), r: "def456", pkgs: []string{"bazqux", "foobar", "zugzug"}, } diff := DiffProjects(p1, p2) if diff == nil { t.Fatal("Expected the diff to be populated") } if len(diff.Packages) != 2 { t.Fatalf("Expected diff.Packages to have 2 packages, got %d", len(diff.Packages)) } want0 := "+ bazqux" got0 := diff.Packages[0].String() if got0 != want0 { t.Fatalf("Expected diff.Packages[0] to contain %s, got %s", want0, got0) } want1 := "+ zugzug" got1 := diff.Packages[1].String() if got1 != want1 { t.Fatalf("Expected diff.Packages[1] to contain %s, got %s", want1, got1) } } func TestDiffProjects_RemovePackages(t *testing.T) { p1 := LockedProject{ pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewBranch("master"), r: "abc123", pkgs: []string{"athing", "foobar"}, } p2 := LockedProject{ pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar", Source: "https://github.com/mcfork/gps.git"}, v: NewVersion("v1.0.0"), r: "def456", pkgs: []string{"bazqux"}, } diff := DiffProjects(p1, p2) if diff == nil { t.Fatal("Expected the diff to be populated") } if len(diff.Packages) > 3 { t.Fatalf("Expected diff.Packages to have 3 packages, got %d", len(diff.Packages)) } want0 := "- athing" got0 := diff.Packages[0].String() if got0 != want0 { t.Fatalf("Expected diff.Packages[0] to contain %s, got %s", want0, got0) } // diff.Packages[1] is '+ bazqux' want2 := "- foobar" got2 := diff.Packages[2].String() if got2 != want2 { t.Fatalf("Expected diff.Packages[2] to contain %s, got %s", want2, got2) } } func TestDiffLocks_NoChange(t *testing.T) { l1 := safeLock{ h: []byte("abc123"), p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, }, } l2 := safeLock{ h: []byte("abc123"), p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, }, } diff := DiffLocks(l1, l2) if diff != nil { t.Fatal("Expected the diff to be nil") } } func TestDiffLocks_AddProjects(t *testing.T) { l1 := safeLock{ h: []byte("abc123"), p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, }, } l2 := safeLock{ h: []byte("abc123"), p: []LockedProject{ { pi: ProjectIdentifier{ProjectRoot: "github.com/baz/qux", Source: "https://github.com/mcfork/bazqux.git"}, v: NewVersion("v0.5.0"), r: "def456", pkgs: []string{"p1", "p2"}, }, {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, {pi: ProjectIdentifier{ProjectRoot: "github.com/zug/zug"}, v: NewVersion("v1.0.0")}, }, } diff := DiffLocks(l1, l2) if diff == nil { t.Fatal("Expected the diff to be populated") } if len(diff.Add) != 2 { t.Fatalf("Expected diff.Add to have 2 projects, got %d", len(diff.Add)) } want0 := "github.com/baz/qux" got0 := string(diff.Add[0].Name) if got0 != want0 { t.Fatalf("Expected diff.Add[0] to contain %s, got %s", want0, got0) } want1 := "github.com/zug/zug" got1 := string(diff.Add[1].Name) if got1 != want1 { t.Fatalf("Expected diff.Add[1] to contain %s, got %s", want1, got1) } add0 := diff.Add[0] wantSource := "https://github.com/mcfork/bazqux.git" gotSource := add0.Source.String() if gotSource != wantSource { t.Fatalf("Expected diff.Add[0].Source to be '%s', got '%s'", wantSource, add0.Source) } wantVersion := "v0.5.0" gotVersion := add0.Version.String() if gotVersion != wantVersion { t.Fatalf("Expected diff.Add[0].Version to be '%s', got '%s'", wantVersion, gotVersion) } wantRevision := "def456" gotRevision := add0.Revision.String() if gotRevision != wantRevision { t.Fatalf("Expected diff.Add[0].Revision to be '%s', got '%s'", wantRevision, gotRevision) } wantBranch := "" gotBranch := add0.Branch.String() if gotBranch != wantBranch { t.Fatalf("Expected diff.Add[0].Branch to be '%s', got '%s'", wantBranch, gotBranch) } fmtPkgs := func(pkgs []StringDiff) string { b := bytes.NewBufferString("[") for _, pkg := range pkgs { b.WriteString(pkg.String()) b.WriteString(",") } b.WriteString("]") return b.String() } wantPackages := "[p1,p2,]" gotPackages := fmtPkgs(add0.Packages) if gotPackages != wantPackages { t.Fatalf("Expected diff.Add[0].Packages to be '%s', got '%s'", wantPackages, gotPackages) } } func TestDiffLocks_RemoveProjects(t *testing.T) { l1 := safeLock{ h: []byte("abc123"), p: []LockedProject{ { pi: ProjectIdentifier{ProjectRoot: "github.com/a/thing", Source: "https://github.com/mcfork/athing.git"}, v: NewBranch("master"), r: "def456", pkgs: []string{"p1", "p2"}, }, {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, }, } l2 := safeLock{ h: []byte("abc123"), p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/baz/qux"}, v: NewVersion("v1.0.0")}, }, } diff := DiffLocks(l1, l2) if diff == nil { t.Fatal("Expected the diff to be populated") } if len(diff.Remove) != 2 { t.Fatalf("Expected diff.Remove to have 2 projects, got %d", len(diff.Remove)) } want0 := "github.com/a/thing" got0 := string(diff.Remove[0].Name) if got0 != want0 { t.Fatalf("Expected diff.Remove[0] to contain %s, got %s", want0, got0) } want1 := "github.com/foo/bar" got1 := string(diff.Remove[1].Name) if got1 != want1 { t.Fatalf("Expected diff.Remove[1] to contain %s, got %s", want1, got1) } remove0 := diff.Remove[0] wantSource := "https://github.com/mcfork/athing.git" gotSource := remove0.Source.String() if gotSource != wantSource { t.Fatalf("Expected diff.Remove[0].Source to be '%s', got '%s'", wantSource, remove0.Source) } wantVersion := "" gotVersion := remove0.Version.String() if gotVersion != wantVersion { t.Fatalf("Expected diff.Remove[0].Version to be '%s', got '%s'", wantVersion, gotVersion) } wantRevision := "def456" gotRevision := remove0.Revision.String() if gotRevision != wantRevision { t.Fatalf("Expected diff.Remove[0].Revision to be '%s', got '%s'", wantRevision, gotRevision) } wantBranch := "master" gotBranch := remove0.Branch.String() if gotBranch != wantBranch { t.Fatalf("Expected diff.Remove[0].Branch to be '%s', got '%s'", wantBranch, gotBranch) } fmtPkgs := func(pkgs []StringDiff) string { b := bytes.NewBufferString("[") for _, pkg := range pkgs { b.WriteString(pkg.String()) b.WriteString(",") } b.WriteString("]") return b.String() } wantPackages := "[p1,p2,]" gotPackages := fmtPkgs(remove0.Packages) if gotPackages != wantPackages { t.Fatalf("Expected diff.Remove[0].Packages to be '%s', got '%s'", wantPackages, gotPackages) } } func TestDiffLocks_ModifyProjects(t *testing.T) { l1 := safeLock{ h: []byte("abc123"), p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bu"}, v: NewVersion("v1.0.0")}, {pi: ProjectIdentifier{ProjectRoot: "github.com/zig/zag"}, v: NewVersion("v1.0.0")}, }, } l2 := safeLock{ h: []byte("abc123"), p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/baz/qux"}, v: NewVersion("v1.0.0")}, {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v2.0.0")}, {pi: ProjectIdentifier{ProjectRoot: "github.com/zig/zag"}, v: NewVersion("v2.0.0")}, {pi: ProjectIdentifier{ProjectRoot: "github.com/zug/zug"}, v: NewVersion("v1.0.0")}, }, } diff := DiffLocks(l1, l2) if diff == nil { t.Fatal("Expected the diff to be populated") } if len(diff.Modify) != 2 { t.Fatalf("Expected diff.Remove to have 2 projects, got %d", len(diff.Remove)) } want0 := "github.com/foo/bar" got0 := string(diff.Modify[0].Name) if got0 != want0 { t.Fatalf("Expected diff.Modify[0] to contain %s, got %s", want0, got0) } want1 := "github.com/zig/zag" got1 := string(diff.Modify[1].Name) if got1 != want1 { t.Fatalf("Expected diff.Modify[1] to contain %s, got %s", want1, got1) } } func TestDiffLocks_ModifyHash(t *testing.T) { h1, _ := hex.DecodeString("abc123") l1 := safeLock{ h: h1, p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, }, } h2, _ := hex.DecodeString("def456") l2 := safeLock{ h: h2, p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, }, } diff := DiffLocks(l1, l2) if diff == nil { t.Fatal("Expected the diff to be populated") } want := "abc123 -> def456" got := diff.HashDiff.String() if got != want { t.Fatalf("Expected diff.HashDiff to be '%s', got '%s'", want, got) } } func TestDiffLocks_EmptyInitialLock(t *testing.T) { h2, _ := hex.DecodeString("abc123") l2 := safeLock{ h: h2, p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, }, } diff := DiffLocks(nil, l2) wantHash := "+ abc123" gotHash := diff.HashDiff.String() if gotHash != wantHash { t.Fatalf("Expected diff.HashDiff to be '%s', got '%s'", wantHash, gotHash) } if len(diff.Add) != 1 { t.Fatalf("Expected diff.Add to contain 1 project, got %d", len(diff.Add)) } } func TestDiffLocks_EmptyFinalLock(t *testing.T) { h1, _ := hex.DecodeString("abc123") l1 := safeLock{ h: h1, p: []LockedProject{ {pi: ProjectIdentifier{ProjectRoot: "github.com/foo/bar"}, v: NewVersion("v1.0.0")}, }, } diff := DiffLocks(l1, nil) wantHash := "- abc123" gotHash := diff.HashDiff.String() if gotHash != wantHash { t.Fatalf("Expected diff.HashDiff to be '%s', got '%s'", wantHash, gotHash) } if len(diff.Remove) != 1 { t.Fatalf("Expected diff.Remove to contain 1 project, got %d", len(diff.Remove)) } } func TestDiffLocks_EmptyLocks(t *testing.T) { diff := DiffLocks(nil, nil) if diff != nil { t.Fatal("Expected the diff to be empty") } } dep-0.3.2/internal/gps/manager_test.go000066400000000000000000000742221317166637100177130ustar00rootroot00000000000000// 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 gps import ( "bytes" "context" "fmt" "io/ioutil" "log" "os" "path" "path/filepath" "runtime" "sort" "sync" "sync/atomic" "testing" "text/tabwriter" "time" "github.com/golang/dep/internal/test" ) // An analyzer that passes nothing back, but doesn't error. This is the naive // case - no constraints, no lock, and no errors. The SourceManager will // interpret this as open/Any constraints on everything in the import graph. type naiveAnalyzer struct{} func (naiveAnalyzer) DeriveManifestAndLock(string, ProjectRoot) (Manifest, Lock, error) { return nil, nil, nil } func (a naiveAnalyzer) Info() ProjectAnalyzerInfo { return ProjectAnalyzerInfo{ Name: "naive-analyzer", Version: 1, } } func mkNaiveSM(t *testing.T) (*SourceMgr, func()) { cpath, err := ioutil.TempDir("", "smcache") if err != nil { t.Fatalf("Failed to create temp dir: %s", err) } sm, err := NewSourceManager(SourceManagerConfig{ Cachedir: cpath, Logger: log.New(test.Writer{TB: t}, "", 0), }) if err != nil { t.Fatalf("Unexpected error on SourceManager creation: %s", err) } return sm, func() { sm.Release() err := os.RemoveAll(cpath) if err != nil { t.Errorf("removeAll failed: %s", err) } } } func remakeNaiveSM(osm *SourceMgr, t *testing.T) (*SourceMgr, func()) { cpath := osm.cachedir osm.Release() sm, err := NewSourceManager(SourceManagerConfig{ Cachedir: cpath, Logger: log.New(test.Writer{TB: t}, "", 0), }) if err != nil { t.Fatalf("unexpected error on SourceManager recreation: %s", err) } return sm, func() { sm.Release() err := os.RemoveAll(cpath) if err != nil { t.Errorf("removeAll failed: %s", err) } } } func TestSourceManagerInit(t *testing.T) { cpath, err := ioutil.TempDir("", "smcache") if err != nil { t.Errorf("Failed to create temp dir: %s", err) } cfg := SourceManagerConfig{ Cachedir: cpath, Logger: log.New(test.Writer{TB: t}, "", 0), } sm, err := NewSourceManager(cfg) if err != nil { t.Errorf("Unexpected error on SourceManager creation: %s", err) } _, err = NewSourceManager(cfg) if err == nil { t.Errorf("Creating second SourceManager should have failed due to file lock contention") } else if te, ok := err.(CouldNotCreateLockError); !ok { t.Errorf("Should have gotten CouldNotCreateLockError error type, but got %T", te) } if _, err = os.Stat(path.Join(cpath, "sm.lock")); err != nil { t.Errorf("Global cache lock file not created correctly") } sm.Release() err = os.RemoveAll(cpath) if err != nil { t.Errorf("removeAll failed: %s", err) } if _, err = os.Stat(path.Join(cpath, "sm.lock")); !os.IsNotExist(err) { t.Fatalf("Global cache lock file not cleared correctly on Release()") } // Set another one up at the same spot now, just to be sure sm, err = NewSourceManager(cfg) if err != nil { t.Errorf("Creating a second SourceManager should have succeeded when the first was released, but failed with err %s", err) } sm.Release() err = os.RemoveAll(cpath) if err != nil { t.Errorf("removeAll failed: %s", err) } } func TestSourceInit(t *testing.T) { // This test is a bit slow, skip it on -short if testing.Short() { t.Skip("Skipping project manager init test in short mode") } cpath, err := ioutil.TempDir("", "smcache") if err != nil { t.Fatalf("Failed to create temp dir: %s", err) } sm, err := NewSourceManager(SourceManagerConfig{ Cachedir: cpath, Logger: log.New(test.Writer{TB: t}, "", 0), }) if err != nil { t.Fatalf("Unexpected error on SourceManager creation: %s", err) } defer func() { sm.Release() err := os.RemoveAll(cpath) if err != nil { t.Errorf("removeAll failed: %s", err) } }() id := mkPI("github.com/sdboyer/gpkt").normalize() pvl, err := sm.ListVersions(id) if err != nil { t.Errorf("Unexpected error during initial project setup/fetching %s", err) } if len(pvl) != 7 { t.Errorf("Expected seven version results from the test repo, got %v", len(pvl)) } else { expected := []PairedVersion{ NewVersion("v2.0.0").Pair(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")), NewVersion("v1.1.0").Pair(Revision("b2cb48dda625f6640b34d9ffb664533359ac8b91")), NewVersion("v1.0.0").Pair(Revision("bf85021c0405edbc4f3648b0603818d641674f72")), newDefaultBranch("master").Pair(Revision("bf85021c0405edbc4f3648b0603818d641674f72")), NewBranch("v1").Pair(Revision("e3777f683305eafca223aefe56b4e8ecf103f467")), NewBranch("v1.1").Pair(Revision("f1fbc520489a98306eb28c235204e39fa8a89c84")), NewBranch("v3").Pair(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")), } // SourceManager itself doesn't guarantee ordering; sort them here so we // can dependably check output SortPairedForUpgrade(pvl) for k, e := range expected { if !pvl[k].Matches(e) { t.Errorf("Expected version %s in position %v but got %s", e, k, pvl[k]) } } } // Two birds, one stone - make sure the internal ProjectManager vlist cache // works (or at least doesn't not work) by asking for the versions again, // and do it through smcache to ensure its sorting works, as well. smc := &bridge{ sm: sm, vlists: make(map[ProjectIdentifier][]Version), s: &solver{mtr: newMetrics()}, } vl, err := smc.listVersions(id) if err != nil { t.Errorf("Unexpected error during initial project setup/fetching %s", err) } if len(vl) != 7 { t.Errorf("Expected seven version results from the test repo, got %v", len(vl)) } else { expected := []Version{ NewVersion("v2.0.0").Pair(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")), NewVersion("v1.1.0").Pair(Revision("b2cb48dda625f6640b34d9ffb664533359ac8b91")), NewVersion("v1.0.0").Pair(Revision("bf85021c0405edbc4f3648b0603818d641674f72")), newDefaultBranch("master").Pair(Revision("bf85021c0405edbc4f3648b0603818d641674f72")), NewBranch("v1").Pair(Revision("e3777f683305eafca223aefe56b4e8ecf103f467")), NewBranch("v1.1").Pair(Revision("f1fbc520489a98306eb28c235204e39fa8a89c84")), NewBranch("v3").Pair(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")), } for k, e := range expected { if !vl[k].Matches(e) { t.Errorf("Expected version %s in position %v but got %s", e, k, vl[k]) } } if !vl[3].(versionPair).v.(branchVersion).isDefault { t.Error("Expected master branch version to have isDefault flag, but it did not") } if vl[4].(versionPair).v.(branchVersion).isDefault { t.Error("Expected v1 branch version not to have isDefault flag, but it did") } if vl[5].(versionPair).v.(branchVersion).isDefault { t.Error("Expected v1.1 branch version not to have isDefault flag, but it did") } if vl[6].(versionPair).v.(branchVersion).isDefault { t.Error("Expected v3 branch version not to have isDefault flag, but it did") } } present, err := smc.RevisionPresentIn(id, Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")) if err != nil { t.Errorf("Should have found revision in source, but got err: %s", err) } else if !present { t.Errorf("Should have found revision in source, but did not") } // SyncSourceFor will ensure we have everything err = smc.SyncSourceFor(id) if err != nil { t.Errorf("SyncSourceFor failed with unexpected error: %s", err) } // Ensure that the appropriate cache dirs and files exist _, err = os.Stat(filepath.Join(cpath, "sources", "https---github.com-sdboyer-gpkt", ".git")) if err != nil { t.Error("Cache repo does not exist in expected location") } os.Stat(filepath.Join(cpath, "metadata", "github.com", "sdboyer", "gpkt", "cache.json")) // TODO(sdboyer) disabled until we get caching working //_, err = os.Stat(filepath.Join(cpath, "metadata", "github.com", "sdboyer", "gpkt", "cache.json")) //if err != nil { //t.Error("Metadata cache json file does not exist in expected location") //} // Ensure source existence values are what we expect var exists bool exists, err = sm.SourceExists(id) if err != nil { t.Errorf("Error on checking SourceExists: %s", err) } if !exists { t.Error("Source should exist after non-erroring call to ListVersions") } } func TestDefaultBranchAssignment(t *testing.T) { if testing.Short() { t.Skip("Skipping default branch assignment test in short mode") } sm, clean := mkNaiveSM(t) defer clean() id := mkPI("github.com/sdboyer/test-multibranch") v, err := sm.ListVersions(id) if err != nil { t.Errorf("Unexpected error during initial project setup/fetching %s", err) } if len(v) != 3 { t.Errorf("Expected three version results from the test repo, got %v", len(v)) } else { brev := Revision("fda020843ac81352004b9dca3fcccdd517600149") mrev := Revision("9f9c3a591773d9b28128309ac7a9a72abcab267d") expected := []PairedVersion{ NewBranch("branchone").Pair(brev), NewBranch("otherbranch").Pair(brev), NewBranch("master").Pair(mrev), } SortPairedForUpgrade(v) for k, e := range expected { if !v[k].Matches(e) { t.Errorf("Expected version %s in position %v but got %s", e, k, v[k]) } } if !v[0].(versionPair).v.(branchVersion).isDefault { t.Error("Expected branchone branch version to have isDefault flag, but it did not") } if !v[0].(versionPair).v.(branchVersion).isDefault { t.Error("Expected otherbranch branch version to have isDefault flag, but it did not") } if v[2].(versionPair).v.(branchVersion).isDefault { t.Error("Expected master branch version not to have isDefault flag, but it did") } } } func TestMgrMethodsFailWithBadPath(t *testing.T) { // a symbol will always bork it up bad := mkPI("foo/##&^").normalize() sm, clean := mkNaiveSM(t) defer clean() var err error if _, err = sm.SourceExists(bad); err == nil { t.Error("SourceExists() did not error on bad input") } if err = sm.SyncSourceFor(bad); err == nil { t.Error("SyncSourceFor() did not error on bad input") } if _, err = sm.ListVersions(bad); err == nil { t.Error("ListVersions() did not error on bad input") } if _, err = sm.RevisionPresentIn(bad, Revision("")); err == nil { t.Error("RevisionPresentIn() did not error on bad input") } if _, err = sm.ListPackages(bad, nil); err == nil { t.Error("ListPackages() did not error on bad input") } if _, _, err = sm.GetManifestAndLock(bad, nil, naiveAnalyzer{}); err == nil { t.Error("GetManifestAndLock() did not error on bad input") } if err = sm.ExportProject(context.Background(), bad, nil, ""); err == nil { t.Error("ExportProject() did not error on bad input") } } type sourceCreationTestFixture struct { roots []ProjectIdentifier namecount, srccount int } func (f sourceCreationTestFixture) run(t *testing.T) { t.Parallel() sm, clean := mkNaiveSM(t) defer clean() for _, pi := range f.roots { _, err := sm.SourceExists(pi) if err != nil { t.Fatal(err) } } if len(sm.srcCoord.nameToURL) != f.namecount { t.Errorf("want %v names in the name->url map, but got %v. contents: \n%v", f.namecount, len(sm.srcCoord.nameToURL), sm.srcCoord.nameToURL) } if len(sm.srcCoord.srcs) != f.srccount { t.Errorf("want %v gateways in the sources map, but got %v", f.srccount, len(sm.srcCoord.srcs)) } var keys []string for k := range sm.srcCoord.nameToURL { keys = append(keys, k) } sort.Strings(keys) var buf bytes.Buffer w := tabwriter.NewWriter(&buf, 0, 4, 2, ' ', 0) fmt.Fprint(w, "NAME\tMAPPED URL\n") for _, r := range keys { fmt.Fprintf(w, "%s\t%s\n", r, sm.srcCoord.nameToURL[r]) } w.Flush() t.Log("\n", buf.String()) t.Log("SRC KEYS") for k := range sm.srcCoord.srcs { t.Log(k) } } // This test is primarily about making sure that the logic around folding // together different ways of referencing the same underlying resource - whether // that be intentionally folding them, or intentionally keeping them separate - // work as intended. func TestSourceCreationCounts(t *testing.T) { if testing.Short() { t.Skip("Skipping slow test in short mode") } fixtures := map[string]sourceCreationTestFixture{ "gopkgin uniqueness": { roots: []ProjectIdentifier{ mkPI("gopkg.in/sdboyer/gpkt.v1"), mkPI("gopkg.in/sdboyer/gpkt.v2"), mkPI("gopkg.in/sdboyer/gpkt.v3"), }, namecount: 6, srccount: 3, }, "gopkgin separation from github": { roots: []ProjectIdentifier{ mkPI("gopkg.in/sdboyer/gpkt.v1"), mkPI("github.com/sdboyer/gpkt"), }, namecount: 4, srccount: 2, }, "case variance across path and URL-based access": { roots: []ProjectIdentifier{ ProjectIdentifier{ProjectRoot: ProjectRoot("github.com/sdboyer/gpkt"), Source: "https://github.com/Sdboyer/gpkt"}, ProjectIdentifier{ProjectRoot: ProjectRoot("github.com/sdboyer/gpkt"), Source: "https://github.com/SdbOyer/gpkt"}, mkPI("github.com/sdboyer/gpkt"), ProjectIdentifier{ProjectRoot: ProjectRoot("github.com/sdboyer/gpkt"), Source: "https://github.com/sdboyeR/gpkt"}, mkPI("github.com/sdboyeR/gpkt"), }, namecount: 6, srccount: 1, }, } for name, fix := range fixtures { t.Run(name, fix.run) } } func TestGetSources(t *testing.T) { // This test is a tad slow, skip it on -short if testing.Short() { t.Skip("Skipping source setup test in short mode") } requiresBins(t, "git", "hg", "bzr") sm, clean := mkNaiveSM(t) pil := []ProjectIdentifier{ mkPI("github.com/Masterminds/VCSTestRepo").normalize(), mkPI("bitbucket.org/mattfarina/testhgrepo").normalize(), mkPI("launchpad.net/govcstestbzrrepo").normalize(), } ctx := context.Background() // protects against premature release of sm t.Run("inner", func(t *testing.T) { for _, pi := range pil { lpi := pi t.Run(lpi.normalizedSource(), func(t *testing.T) { t.Parallel() srcg, err := sm.srcCoord.getSourceGatewayFor(ctx, lpi) if err != nil { t.Errorf("unexpected error setting up source: %s", err) return } // Re-get the same, make sure they are the same srcg2, err := sm.srcCoord.getSourceGatewayFor(ctx, lpi) if err != nil { t.Errorf("unexpected error re-getting source: %s", err) } else if srcg != srcg2 { t.Error("first and second sources are not eq") } // All of them _should_ select https, so this should work lpi.Source = "https://" + lpi.Source srcg3, err := sm.srcCoord.getSourceGatewayFor(ctx, lpi) if err != nil { t.Errorf("unexpected error getting explicit https source: %s", err) } else if srcg != srcg3 { t.Error("explicit https source should reuse autodetected https source") } // Now put in http, and they should differ lpi.Source = "http://" + string(lpi.ProjectRoot) srcg4, err := sm.srcCoord.getSourceGatewayFor(ctx, lpi) if err != nil { t.Errorf("unexpected error getting explicit http source: %s", err) } else if srcg == srcg4 { t.Error("explicit http source should create a new src") } }) } }) // nine entries (of which three are dupes): for each vcs, raw import path, // the https url, and the http url. also three more from case folding of // github.com/Masterminds/VCSTestRepo -> github.com/masterminds/vcstestrepo if len(sm.srcCoord.nameToURL) != 12 { t.Errorf("Should have twelve discrete entries in the nameToURL map, got %v", len(sm.srcCoord.nameToURL)) } clean() } func TestFSCaseSensitivityConvergesSources(t *testing.T) { if testing.Short() { t.Skip("Skipping slow test in short mode") } f := func(name string, pi1, pi2 ProjectIdentifier) { t.Run(name, func(t *testing.T) { t.Parallel() sm, clean := mkNaiveSM(t) defer clean() sm.SyncSourceFor(pi1) sg1, err := sm.srcCoord.getSourceGatewayFor(context.Background(), pi1) if err != nil { t.Fatal(err) } sm.SyncSourceFor(pi2) sg2, err := sm.srcCoord.getSourceGatewayFor(context.Background(), pi2) if err != nil { t.Fatal(err) } path1 := sg1.src.(*gitSource).repo.LocalPath() t.Log("path1:", path1) stat1, err := os.Stat(path1) if err != nil { t.Fatal(err) } path2 := sg2.src.(*gitSource).repo.LocalPath() t.Log("path2:", path2) stat2, err := os.Stat(path2) if err != nil { t.Fatal(err) } same, count := os.SameFile(stat1, stat2), len(sm.srcCoord.srcs) if same && count != 1 { t.Log("are same, count", count) t.Fatal("on case-insensitive filesystem, case-varying sources should have been folded together but were not") } if !same && count != 2 { t.Log("not same, count", count) t.Fatal("on case-sensitive filesystem, case-varying sources should not have been folded together, but were") } }) } folded := mkPI("github.com/sdboyer/deptest").normalize() casevar1 := mkPI("github.com/Sdboyer/deptest").normalize() casevar2 := mkPI("github.com/SdboyeR/deptest").normalize() f("folded first", folded, casevar1) f("folded second", casevar1, folded) f("both unfolded", casevar1, casevar2) } // Regression test for #32 func TestGetInfoListVersionsOrdering(t *testing.T) { // This test is quite slow, skip it on -short if testing.Short() { t.Skip("Skipping slow test in short mode") } sm, clean := mkNaiveSM(t) defer clean() // setup done, now do the test id := mkPI("github.com/sdboyer/gpkt").normalize() _, _, err := sm.GetManifestAndLock(id, NewVersion("v1.0.0"), naiveAnalyzer{}) if err != nil { t.Errorf("Unexpected error from GetInfoAt %s", err) } v, err := sm.ListVersions(id) if err != nil { t.Errorf("Unexpected error from ListVersions %s", err) } if len(v) != 7 { t.Errorf("Expected seven results from ListVersions, got %v", len(v)) } } func TestDeduceProjectRoot(t *testing.T) { sm, clean := mkNaiveSM(t) defer clean() in := "github.com/sdboyer/gps" pr, err := sm.DeduceProjectRoot(in) if err != nil { t.Errorf("Problem while detecting root of %q %s", in, err) } if string(pr) != in { t.Errorf("Wrong project root was deduced;\n\t(GOT) %s\n\t(WNT) %s", pr, in) } if sm.deduceCoord.rootxt.Len() != 1 { t.Errorf("Root path trie should have one element after one deduction, has %v", sm.deduceCoord.rootxt.Len()) } pr, err = sm.DeduceProjectRoot(in) if err != nil { t.Errorf("Problem while detecting root of %q %s", in, err) } else if string(pr) != in { t.Errorf("Wrong project root was deduced;\n\t(GOT) %s\n\t(WNT) %s", pr, in) } if sm.deduceCoord.rootxt.Len() != 1 { t.Errorf("Root path trie should still have one element after performing the same deduction twice; has %v", sm.deduceCoord.rootxt.Len()) } // Now do a subpath sub := path.Join(in, "foo") pr, err = sm.DeduceProjectRoot(sub) if err != nil { t.Errorf("Problem while detecting root of %q %s", sub, err) } else if string(pr) != in { t.Errorf("Wrong project root was deduced;\n\t(GOT) %s\n\t(WNT) %s", pr, in) } if sm.deduceCoord.rootxt.Len() != 1 { t.Errorf("Root path trie should still have one element, as still only one unique root has gone in; has %v", sm.deduceCoord.rootxt.Len()) } // Now do a fully different root, but still on github in2 := "github.com/bagel/lox" sub2 := path.Join(in2, "cheese") pr, err = sm.DeduceProjectRoot(sub2) if err != nil { t.Errorf("Problem while detecting root of %q %s", sub2, err) } else if string(pr) != in2 { t.Errorf("Wrong project root was deduced;\n\t(GOT) %s\n\t(WNT) %s", pr, in) } if sm.deduceCoord.rootxt.Len() != 2 { t.Errorf("Root path trie should have two elements, one for each unique root; has %v", sm.deduceCoord.rootxt.Len()) } // Ensure that our prefixes are bounded by path separators in4 := "github.com/bagel/loxx" pr, err = sm.DeduceProjectRoot(in4) if err != nil { t.Errorf("Problem while detecting root of %q %s", in4, err) } else if string(pr) != in4 { t.Errorf("Wrong project root was deduced;\n\t(GOT) %s\n\t(WNT) %s", pr, in) } if sm.deduceCoord.rootxt.Len() != 3 { t.Errorf("Root path trie should have three elements, one for each unique root; has %v", sm.deduceCoord.rootxt.Len()) } // Ensure that vcs extension-based matching comes through in5 := "ffffrrrraaaaaapppppdoesnotresolve.com/baz.git" pr, err = sm.DeduceProjectRoot(in5) if err != nil { t.Errorf("Problem while detecting root of %q %s", in5, err) } else if string(pr) != in5 { t.Errorf("Wrong project root was deduced;\n\t(GOT) %s\n\t(WNT) %s", pr, in) } if sm.deduceCoord.rootxt.Len() != 4 { t.Errorf("Root path trie should have four elements, one for each unique root; has %v", sm.deduceCoord.rootxt.Len()) } } func TestMultiFetchThreadsafe(t *testing.T) { // This test is quite slow, skip it on -short if testing.Short() { t.Skip("Skipping slow test in short mode") } projects := []ProjectIdentifier{ mkPI("github.com/sdboyer/gps"), mkPI("github.com/sdboyer/gpkt"), { ProjectRoot: ProjectRoot("github.com/sdboyer/gpkt"), Source: "https://github.com/sdboyer/gpkt", }, mkPI("github.com/sdboyer/gogl"), mkPI("github.com/sdboyer/gliph"), mkPI("github.com/sdboyer/frozone"), mkPI("gopkg.in/sdboyer/gpkt.v1"), mkPI("gopkg.in/sdboyer/gpkt.v2"), mkPI("github.com/Masterminds/VCSTestRepo"), mkPI("github.com/go-yaml/yaml"), mkPI("github.com/sirupsen/logrus"), mkPI("github.com/Masterminds/semver"), mkPI("github.com/Masterminds/vcs"), //mkPI("bitbucket.org/sdboyer/withbm"), //mkPI("bitbucket.org/sdboyer/nobm"), } do := func(name string, sm SourceManager) { t.Run(name, func(t *testing.T) { // This gives us ten calls per op, per project, which should be(?) // decently likely to reveal underlying concurrency problems ops := 4 cnum := len(projects) * ops * 10 for i := 0; i < cnum; i++ { // Trigger all four ops on each project, then move on to the next // project. id, op := projects[(i/ops)%len(projects)], i%ops // The count of times this op has been been invoked on this project // (after the upcoming invocation) opcount := i/(ops*len(projects)) + 1 switch op { case 0: t.Run(fmt.Sprintf("deduce:%v:%s", opcount, id), func(t *testing.T) { t.Parallel() if _, err := sm.DeduceProjectRoot(string(id.ProjectRoot)); err != nil { t.Error(err) } }) case 1: t.Run(fmt.Sprintf("sync:%v:%s", opcount, id), func(t *testing.T) { t.Parallel() err := sm.SyncSourceFor(id) if err != nil { t.Error(err) } }) case 2: t.Run(fmt.Sprintf("listVersions:%v:%s", opcount, id), func(t *testing.T) { t.Parallel() vl, err := sm.ListVersions(id) if err != nil { t.Fatal(err) } if len(vl) == 0 { t.Error("no versions returned") } }) case 3: t.Run(fmt.Sprintf("exists:%v:%s", opcount, id), func(t *testing.T) { t.Parallel() y, err := sm.SourceExists(id) if err != nil { t.Fatal(err) } if !y { t.Error("said source does not exist") } }) default: panic(fmt.Sprintf("wtf, %s %v", id, op)) } } }) } sm, _ := mkNaiveSM(t) do("first", sm) // Run the thing twice with a remade sm so that we cover both the cases of // pre-existing and new clones. // // This triggers a release of the first sm, which is much of what we're // testing here - that the release is complete and clean, and can be // immediately followed by a new sm coming in. sm2, clean := remakeNaiveSM(sm, t) do("second", sm2) clean() } // Ensure that we don't see concurrent map writes when calling ListVersions. // Regression test for https://github.com/sdboyer/gps/issues/156. // // Ideally this would be caught by TestMultiFetchThreadsafe, but perhaps the // high degree of parallelism pretty much eliminates that as a realistic // possibility? func TestListVersionsRacey(t *testing.T) { // This test is quite slow, skip it on -short if testing.Short() { t.Skip("Skipping slow test in short mode") } sm, clean := mkNaiveSM(t) defer clean() wg := &sync.WaitGroup{} id := mkPI("github.com/sdboyer/gps") for i := 0; i < 20; i++ { wg.Add(1) go func() { _, err := sm.ListVersions(id) if err != nil { t.Errorf("listing versions failed with err %s", err.Error()) } wg.Done() }() } wg.Wait() } func TestErrAfterRelease(t *testing.T) { sm, clean := mkNaiveSM(t) clean() id := ProjectIdentifier{} _, err := sm.SourceExists(id) if err == nil { t.Errorf("SourceExists did not error after calling Release()") } else if terr, ok := err.(smIsReleased); !ok { t.Errorf("SourceExists errored after Release(), but with unexpected error: %T %s", terr, terr.Error()) } err = sm.SyncSourceFor(id) if err == nil { t.Errorf("SyncSourceFor did not error after calling Release()") } else if terr, ok := err.(smIsReleased); !ok { t.Errorf("SyncSourceFor errored after Release(), but with unexpected error: %T %s", terr, terr.Error()) } _, err = sm.ListVersions(id) if err == nil { t.Errorf("ListVersions did not error after calling Release()") } else if terr, ok := err.(smIsReleased); !ok { t.Errorf("ListVersions errored after Release(), but with unexpected error: %T %s", terr, terr.Error()) } _, err = sm.RevisionPresentIn(id, "") if err == nil { t.Errorf("RevisionPresentIn did not error after calling Release()") } else if terr, ok := err.(smIsReleased); !ok { t.Errorf("RevisionPresentIn errored after Release(), but with unexpected error: %T %s", terr, terr.Error()) } _, err = sm.ListPackages(id, nil) if err == nil { t.Errorf("ListPackages did not error after calling Release()") } else if terr, ok := err.(smIsReleased); !ok { t.Errorf("ListPackages errored after Release(), but with unexpected error: %T %s", terr, terr.Error()) } _, _, err = sm.GetManifestAndLock(id, nil, naiveAnalyzer{}) if err == nil { t.Errorf("GetManifestAndLock did not error after calling Release()") } else if terr, ok := err.(smIsReleased); !ok { t.Errorf("GetManifestAndLock errored after Release(), but with unexpected error: %T %s", terr, terr.Error()) } err = sm.ExportProject(context.Background(), id, nil, "") if err == nil { t.Errorf("ExportProject did not error after calling Release()") } else if terr, ok := err.(smIsReleased); !ok { t.Errorf("ExportProject errored after Release(), but with unexpected error: %T %s", terr, terr.Error()) } _, err = sm.DeduceProjectRoot("") if err == nil { t.Errorf("DeduceProjectRoot did not error after calling Release()") } else if terr, ok := err.(smIsReleased); !ok { t.Errorf("DeduceProjectRoot errored after Release(), but with unexpected error: %T %s", terr, terr.Error()) } } func TestSignalHandling(t *testing.T) { if testing.Short() { t.Skip("Skipping slow test in short mode") } sm, clean := mkNaiveSM(t) sigch := make(chan os.Signal) sm.HandleSignals(sigch) sigch <- os.Interrupt <-time.After(10 * time.Millisecond) if atomic.LoadInt32(&sm.releasing) != 1 { t.Error("Releasing flag did not get set") } clean() // Test again, this time with a running call sm, clean = mkNaiveSM(t) sm.HandleSignals(sigch) errchan := make(chan error) go func() { _, callerr := sm.DeduceProjectRoot("k8s.io/kubernetes") errchan <- callerr }() go func() { sigch <- os.Interrupt }() runtime.Gosched() callerr := <-errchan if callerr == nil { t.Error("network call could not have completed before cancellation, should have gotten an error") } if atomic.LoadInt32(&sm.releasing) != 1 { t.Error("Releasing flag did not get set") } clean() sm, clean = mkNaiveSM(t) // Ensure that handling also works after stopping and restarting itself, // and that Release happens only once. sm.UseDefaultSignalHandling() sm.StopSignalHandling() sm.HandleSignals(sigch) go func() { _, callerr := sm.DeduceProjectRoot("k8s.io/kubernetes") errchan <- callerr }() go func() { sigch <- os.Interrupt sm.Release() }() runtime.Gosched() after := time.After(2 * time.Second) select { case <-sm.qch: case <-after: t.Error("did not shut down in reasonable time") } clean() } func TestUnreachableSource(t *testing.T) { // If a git remote is unreachable (maybe the server is only accessible behind a VPN, or // something), we should return a clear error, not a panic. if testing.Short() { t.Skip("Skipping slow test in short mode") } sm, clean := mkNaiveSM(t) defer clean() id := mkPI("github.com/golang/notexist").normalize() err := sm.SyncSourceFor(id) if err == nil { t.Error("expected err when listing versions of a bogus source, but got nil") } } func TestSupervisor(t *testing.T) { bgc := context.Background() ctx, cancelFunc := context.WithCancel(bgc) superv := newSupervisor(ctx) ci := callInfo{ name: "foo", typ: 0, } _, err := superv.start(ci) if err != nil { t.Fatal("unexpected err on setUpCall:", err) } tc, exists := superv.running[ci] if !exists { t.Fatal("running call not recorded in map") } if tc.count != 1 { t.Fatalf("wrong count of running ci: wanted 1 got %v", tc.count) } // run another, but via do block, wait := make(chan struct{}), make(chan struct{}) errchan := make(chan error) go func() { wait <- struct{}{} err := superv.do(bgc, "foo", 0, func(ctx context.Context) error { <-block return nil }) errchan <- err //if err != nil { // t.Fatal("unexpected err on do() completion:", err) //} close(wait) }() <-wait superv.mu.Lock() tc, exists = superv.running[ci] if !exists { t.Fatal("running call not recorded in map") } // TODO (kris-nova) We need to disable this bypass here, and in the .travis.yml // as soon as dep#501 is fixed bypass := os.Getenv("DEPTESTBYPASS501") if bypass != "" { t.Log("bypassing tc.count check for running ci") } else if tc.count != 2 { t.Fatalf("wrong count of running ci: wanted 2 got %v", tc.count) } superv.mu.Unlock() close(block) possibleConcurrentError := <-errchan if possibleConcurrentError != nil { t.Fatal("unexpected err on do() completion:", err) } <-wait superv.mu.Lock() if len(superv.ran) != 0 { t.Fatal("should not record metrics until last one drops") } tc, exists = superv.running[ci] if !exists { t.Fatal("running call not recorded in map") } if tc.count != 1 { t.Fatalf("wrong count of running ci: wanted 1 got %v", tc.count) } superv.mu.Unlock() superv.done(ci) superv.mu.Lock() ran, exists := superv.ran[0] if !exists { t.Fatal("should have metrics after closing last of a ci, but did not") } if ran.count != 1 { t.Fatalf("wrong count of serial runs of a call: wanted 1 got %v", ran.count) } superv.mu.Unlock() cancelFunc() _, err = superv.start(ci) if err == nil { t.Fatal("should have errored on cm.run() after canceling cm's input context") } superv.do(bgc, "foo", 0, func(ctx context.Context) error { t.Fatal("calls should not be initiated by do() after main context is cancelled") return nil }) } dep-0.3.2/internal/gps/manifest.go000066400000000000000000000121731317166637100170450ustar00rootroot00000000000000// Copyright 2017 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 gps import "github.com/golang/dep/internal/gps/pkgtree" // Manifest represents manifest-type data for a project at a particular version. // The constraints expressed in a manifest determine the set of versions that // are acceptable to try for a given project. // // Expressing a constraint in a manifest does not guarantee that a particular // dependency will be present. It only guarantees that if packages in the // project specified by the dependency are discovered through static analysis of // the (transitive) import graph, then they will conform to the constraint. // // This does entail that manifests can express constraints on projects they do // not themselves import. This is by design, but its implications are complex. // See the gps docs for more information: https://github.com/sdboyer/gps/wiki type Manifest interface { // Returns a list of project-level constraints. DependencyConstraints() ProjectConstraints } // RootManifest extends Manifest to add special controls over solving that are // only afforded to the root project. type RootManifest interface { Manifest // Overrides returns a list of ProjectConstraints that will unconditionally // supersede any ProjectConstraint declarations made in either the root // manifest, or in any dependency's manifest. // // Overrides are a special control afforded only to root manifests. Tool // users should be encouraged to use them only as a last resort; they do not // "play well with others" (that is their express goal), and overreliance on // them can harm the ecosystem as a whole. Overrides() ProjectConstraints // IngoredPackages returns a pkgtree.IgnoredRuleset, which comprises a set // of import paths, or import path patterns, that are to be ignored during // solving. These ignored import paths can be within the root project, or // part of other projects. Ignoring a package means that both it and its // (unique) imports will be disregarded by all relevant solver operations. // // It is an error to include a package in both the ignored and required // sets. IgnoredPackages() *pkgtree.IgnoredRuleset // RequiredPackages returns a set of import paths to require. These packages // are required to be present in any solution. The list can include main // packages. // // It is meaningless to specify packages that are within the // PackageTree of the ProjectRoot (though not an error, because the // RootManifest itself does not report a ProjectRoot). // // It is an error to include a package in both the ignored and required // sets. RequiredPackages() map[string]bool } // SimpleManifest is a helper for tools to enumerate manifest data. It's // generally intended for ephemeral manifests, such as those Analyzers create on // the fly for projects with no manifest metadata, or metadata through a foreign // tool's idioms. type SimpleManifest struct { Deps ProjectConstraints } var _ Manifest = SimpleManifest{} // DependencyConstraints returns the project's dependencies. func (m SimpleManifest) DependencyConstraints() ProjectConstraints { return m.Deps } // simpleRootManifest exists so that we have a safe value to swap into solver // params when a nil Manifest is provided. type simpleRootManifest struct { c, ovr ProjectConstraints ig *pkgtree.IgnoredRuleset req map[string]bool } func (m simpleRootManifest) DependencyConstraints() ProjectConstraints { return m.c } func (m simpleRootManifest) Overrides() ProjectConstraints { return m.ovr } func (m simpleRootManifest) IgnoredPackages() *pkgtree.IgnoredRuleset { return m.ig } func (m simpleRootManifest) RequiredPackages() map[string]bool { return m.req } func (m simpleRootManifest) dup() simpleRootManifest { m2 := simpleRootManifest{ c: make(ProjectConstraints, len(m.c)), ovr: make(ProjectConstraints, len(m.ovr)), req: make(map[string]bool, len(m.req)), } for k, v := range m.c { m2.c[k] = v } for k, v := range m.ovr { m2.ovr[k] = v } for k, v := range m.req { m2.req[k] = v } // IgnoredRulesets are immutable, and safe to reuse. m2.ig = m.ig return m2 } // prepManifest ensures a manifest is prepared and safe for use by the solver. // This is mostly about ensuring that no outside routine can modify the manifest // while the solver is in-flight, but it also filters out any empty // ProjectProperties. // // This is achieved by copying the manifest's data into a new SimpleManifest. func prepManifest(m Manifest) SimpleManifest { if m == nil { return SimpleManifest{} } deps := m.DependencyConstraints() rm := SimpleManifest{ Deps: make(ProjectConstraints, len(deps)), } for k, d := range deps { // A zero-value ProjectProperties is equivalent to one with an // anyConstraint{} in terms of how the solver will treat it. However, we // normalize between these two by omitting such instances entirely, as // it negates some possibility for false mismatches in input hashing. if d.Constraint == nil { if d.Source == "" { continue } d.Constraint = anyConstraint{} } rm.Deps[k] = d } return rm } dep-0.3.2/internal/gps/manifest_test.go000066400000000000000000000014061317166637100201010ustar00rootroot00000000000000// Copyright 2017 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 gps import "testing" // Test that prep manifest sanitizes manifests appropriately func TestPrepManifest(t *testing.T) { m := SimpleManifest{ Deps: ProjectConstraints{ ProjectRoot("foo"): ProjectProperties{}, ProjectRoot("bar"): ProjectProperties{ Source: "whatever", }, }, } prepped := prepManifest(m) d := prepped.DependencyConstraints() if len(d) != 1 { t.Error("prepManifest did not eliminate empty ProjectProperties from deps map") } if d[ProjectRoot("bar")].Constraint != any { t.Error("prepManifest did not normalize nil constraint to anyConstraint in deps map") } } dep-0.3.2/internal/gps/maybe_source.go000066400000000000000000000151741317166637100177200ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "context" "fmt" "net/url" "path/filepath" "github.com/Masterminds/vcs" "github.com/pkg/errors" ) // A maybeSource represents a set of information that, given some // typically-expensive network effort, could be transformed into a proper source. // // Wrapping these up as their own type achieves two goals: // // * Allows control over when deduction logic triggers network activity // * Makes it easy to attempt multiple URLs for a given import path type maybeSource interface { try(ctx context.Context, cachedir string, c singleSourceCache, superv *supervisor) (source, sourceState, error) possibleURLs() []*url.URL } type errorSlice []error func (errs *errorSlice) Error() string { var buf bytes.Buffer for _, err := range *errs { fmt.Fprintf(&buf, "\n\t%s", err) } return buf.String() } type maybeSources []maybeSource func (mbs maybeSources) try(ctx context.Context, cachedir string, c singleSourceCache, superv *supervisor) (source, sourceState, error) { var errs errorSlice for _, mb := range mbs { src, state, err := mb.try(ctx, cachedir, c, superv) if err == nil { return src, state, nil } urls := "" for _, url := range mb.possibleURLs() { urls += url.String() + "\n" } errs = append(errs, errors.Wrapf(err, "failed to set up sources from the following URLs:\n%s", urls)) } return nil, 0, errors.Wrap(&errs, "no valid source could be created") } // This really isn't generally intended to be used - the interface is for // maybeSources to be able to interrogate its members, not other things to // interrogate a maybeSources. func (mbs maybeSources) possibleURLs() []*url.URL { urlslice := make([]*url.URL, 0, len(mbs)) for _, mb := range mbs { urlslice = append(urlslice, mb.possibleURLs()...) } return urlslice } // sourceCachePath returns a url-sanitized source cache dir path. func sourceCachePath(cacheDir, sourceURL string) string { return filepath.Join(cacheDir, "sources", sanitizer.Replace(sourceURL)) } type maybeGitSource struct { url *url.URL } func (m maybeGitSource) try(ctx context.Context, cachedir string, c singleSourceCache, superv *supervisor) (source, sourceState, error) { ustr := m.url.String() r, err := newCtxRepo(vcs.Git, ustr, sourceCachePath(cachedir, ustr)) if err != nil { return nil, 0, unwrapVcsErr(err) } src := &gitSource{ baseVCSSource: baseVCSSource{ repo: r, }, } // Pinging invokes the same action as calling listVersions, so just do that. var vl []PairedVersion if err := superv.do(ctx, "git:lv:maybe", ctListVersions, func(ctx context.Context) error { var err error vl, err = src.listVersions(ctx) return errors.Wrapf(err, "remote repository at %s does not exist, or is inaccessible", ustr) }); err != nil { return nil, 0, err } c.setVersionMap(vl) state := sourceIsSetUp | sourceExistsUpstream | sourceHasLatestVersionList if r.CheckLocal() { state |= sourceExistsLocally } return src, state, nil } func (m maybeGitSource) possibleURLs() []*url.URL { return []*url.URL{m.url} } type maybeGopkginSource struct { // the original gopkg.in import path. this is used to create the on-disk // location to avoid duplicate resource management - e.g., if instances of // a gopkg.in project are accessed via different schemes, or if the // underlying github repository is accessed directly. opath string // the actual upstream URL - always github url *url.URL // the major version to apply for filtering major uint64 // whether or not the source package is "unstable" unstable bool } func (m maybeGopkginSource) try(ctx context.Context, cachedir string, c singleSourceCache, superv *supervisor) (source, sourceState, error) { // We don't actually need a fully consistent transform into the on-disk path // - just something that's unique to the particular gopkg.in domain context. // So, it's OK to just dumb-join the scheme with the path. aliasURL := m.url.Scheme + "://" + m.opath path := sourceCachePath(cachedir, aliasURL) ustr := m.url.String() r, err := newCtxRepo(vcs.Git, ustr, path) if err != nil { return nil, 0, unwrapVcsErr(err) } src := &gopkginSource{ gitSource: gitSource{ baseVCSSource: baseVCSSource{ repo: r, }, }, major: m.major, unstable: m.unstable, aliasURL: aliasURL, } var vl []PairedVersion if err := superv.do(ctx, "git:lv:maybe", ctListVersions, func(ctx context.Context) error { var err error vl, err = src.listVersions(ctx) return errors.Wrapf(err, "remote repository at %s does not exist, or is inaccessible", ustr) }); err != nil { return nil, 0, err } c.setVersionMap(vl) state := sourceIsSetUp | sourceExistsUpstream | sourceHasLatestVersionList if r.CheckLocal() { state |= sourceExistsLocally } return src, state, nil } func (m maybeGopkginSource) possibleURLs() []*url.URL { return []*url.URL{m.url} } type maybeBzrSource struct { url *url.URL } func (m maybeBzrSource) try(ctx context.Context, cachedir string, c singleSourceCache, superv *supervisor) (source, sourceState, error) { ustr := m.url.String() r, err := newCtxRepo(vcs.Bzr, ustr, sourceCachePath(cachedir, ustr)) if err != nil { return nil, 0, unwrapVcsErr(err) } if err := superv.do(ctx, "bzr:ping", ctSourcePing, func(ctx context.Context) error { if !r.Ping() { return fmt.Errorf("remote repository at %s does not exist, or is inaccessible", ustr) } return nil }); err != nil { return nil, 0, err } state := sourceIsSetUp | sourceExistsUpstream if r.CheckLocal() { state |= sourceExistsLocally } src := &bzrSource{ baseVCSSource: baseVCSSource{ repo: r, }, } return src, state, nil } func (m maybeBzrSource) possibleURLs() []*url.URL { return []*url.URL{m.url} } type maybeHgSource struct { url *url.URL } func (m maybeHgSource) try(ctx context.Context, cachedir string, c singleSourceCache, superv *supervisor) (source, sourceState, error) { ustr := m.url.String() r, err := newCtxRepo(vcs.Hg, ustr, sourceCachePath(cachedir, ustr)) if err != nil { return nil, 0, unwrapVcsErr(err) } if err := superv.do(ctx, "hg:ping", ctSourcePing, func(ctx context.Context) error { if !r.Ping() { return fmt.Errorf("remote repository at %s does not exist, or is inaccessible", ustr) } return nil }); err != nil { return nil, 0, err } state := sourceIsSetUp | sourceExistsUpstream if r.CheckLocal() { state |= sourceExistsLocally } src := &hgSource{ baseVCSSource: baseVCSSource{ repo: r, }, } return src, state, nil } func (m maybeHgSource) possibleURLs() []*url.URL { return []*url.URL{m.url} } dep-0.3.2/internal/gps/metrics.go000066400000000000000000000031101317166637100166740ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "fmt" "log" "sort" "text/tabwriter" "time" ) type metrics struct { stack []string times map[string]time.Duration last time.Time } func newMetrics() *metrics { return &metrics{ stack: []string{"other"}, times: map[string]time.Duration{ "other": 0, }, last: time.Now(), } } func (m *metrics) push(name string) { cn := m.stack[len(m.stack)-1] m.times[cn] = m.times[cn] + time.Since(m.last) m.stack = append(m.stack, name) m.last = time.Now() } func (m *metrics) pop() { on := m.stack[len(m.stack)-1] m.times[on] = m.times[on] + time.Since(m.last) m.stack = m.stack[:len(m.stack)-1] m.last = time.Now() } func (m *metrics) dump(l *log.Logger) { s := make(ndpairs, len(m.times)) k := 0 for n, d := range m.times { s[k] = ndpair{ n: n, d: d, } k++ } sort.Sort(sort.Reverse(s)) var tot time.Duration var buf bytes.Buffer w := tabwriter.NewWriter(&buf, 0, 0, 1, ' ', tabwriter.AlignRight) for _, nd := range s { tot += nd.d fmt.Fprintf(w, "\t%s:\t%v\t\n", nd.n, nd.d) } fmt.Fprintf(w, "\n\tTOTAL:\t%v\t\n", tot) w.Flush() l.Println("\nSolver wall times by segment:") l.Println((&buf).String()) } type ndpair struct { n string d time.Duration } type ndpairs []ndpair func (s ndpairs) Less(i, j int) bool { return s[i].d < s[j].d } func (s ndpairs) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s ndpairs) Len() int { return len(s) } dep-0.3.2/internal/gps/paths/000077500000000000000000000000001317166637100160235ustar00rootroot00000000000000dep-0.3.2/internal/gps/paths/paths.go000066400000000000000000000013341317166637100174720ustar00rootroot00000000000000// Copyright 2017 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 paths import "strings" // IsStandardImportPath reports whether $GOROOT/src/path should be considered // part of the standard distribution. For historical reasons we allow people to add // their own code to $GOROOT instead of using $GOPATH, but we assume that // code will start with a domain name (dot in the first element). // This was loving taken from src/cmd/go/pkg.go in Go's code (isStandardImportPath). func IsStandardImportPath(path string) bool { i := strings.Index(path, "/") if i < 0 { i = len(path) } return !strings.Contains(path[:i], ".") } dep-0.3.2/internal/gps/paths/paths_test.go000066400000000000000000000012421317166637100205270ustar00rootroot00000000000000// Copyright 2017 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 paths import "testing" func TestIsStandardImportPath(t *testing.T) { fix := []struct { ip string is bool }{ {"appengine", true}, {"net/http", true}, {"github.com/anything", false}, {"github.com", false}, {"foo", true}, {".", false}, } for _, f := range fix { r := IsStandardImportPath(f.ip) if r != f.is { if r { t.Errorf("%s was marked stdlib but should not have been", f.ip) } else { t.Errorf("%s was not marked stdlib but should have been", f.ip) } } } } dep-0.3.2/internal/gps/pkgtree/000077500000000000000000000000001317166637100163455ustar00rootroot00000000000000dep-0.3.2/internal/gps/pkgtree/digest.go000066400000000000000000000452371317166637100201660ustar00rootroot00000000000000// Copyright 2017 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 pkgtree import ( "bytes" "crypto/sha256" "encoding/binary" "hash" "io" "os" "path/filepath" "strconv" "github.com/pkg/errors" ) const osPathSeparator = string(filepath.Separator) // lineEndingReader is a `io.Reader` that converts CRLF sequences to LF. // // When cloning or checking out repositories, some Version Control Systems, // VCSs, on some supported Go Operating System architectures, GOOS, will // automatically convert line endings that end in a single line feed byte, LF, // to line endings that end in a two byte sequence of carriage return, CR, // followed by LF. This LF to CRLF conversion would cause otherwise identical // versioned files to have different on disk contents simply based on which VCS // and GOOS are involved. Different file contents for the same file would cause // the resultant hashes to differ. In order to ensure file contents normalize // and produce the same hash, this structure wraps an io.Reader that modifies // the file's contents when it is read, translating all CRLF sequences to LF. type lineEndingReader struct { src io.Reader // source io.Reader from which this reads prevReadEndedCR bool // used to track whether final byte of previous Read was CR } // newLineEndingReader returns a new lineEndingReader that reads from the // specified source io.Reader. func newLineEndingReader(src io.Reader) *lineEndingReader { return &lineEndingReader{src: src} } var crlf = []byte("\r\n") // Read consumes bytes from the structure's source io.Reader to fill the // specified slice of bytes. It converts all CRLF byte sequences to LF, and // handles cases where CR and LF straddle across two Read operations. func (f *lineEndingReader) Read(buf []byte) (int, error) { buflen := len(buf) if f.prevReadEndedCR { // Read one fewer bytes so we have room if the first byte of the // upcoming Read is not a LF, in which case we will need to insert // trailing CR from previous read. buflen-- } nr, er := f.src.Read(buf[:buflen]) if nr > 0 { if f.prevReadEndedCR && buf[0] != '\n' { // Having a CRLF split across two Read operations is rare, so the // performance impact of copying entire buffer to the right by one // byte, while suboptimal, will at least will not happen very // often. This negative performance impact is mitigated somewhat on // many Go compilation architectures, GOARCH, because the `copy` // builtin uses a machine opcode for performing the memory copy on // possibly overlapping regions of memory. This machine opcodes is // not instantaneous and does require multiple CPU cycles to // complete, but is significantly faster than the application // looping through bytes. copy(buf[1:nr+1], buf[:nr]) // shift data to right one byte buf[0] = '\r' // insert the previous skipped CR byte at start of buf nr++ // pretend we read one more byte } // Remove any CRLF sequences in the buffer using `bytes.Index` because, // like the `copy` builtin on many GOARCHs, it also takes advantage of a // machine opcode to search for byte patterns. var searchOffset int // index within buffer from whence the search will commence for each loop; set to the index of the end of the previous loop. var shiftCount int // each subsequenct shift operation needs to shift bytes to the left by one more position than the shift that preceded it. previousIndex := -1 // index of previously found CRLF; -1 means no previous index for { index := bytes.Index(buf[searchOffset:nr], crlf) if index == -1 { break } index += searchOffset // convert relative index to absolute if previousIndex != -1 { // shift substring between previous index and this index copy(buf[previousIndex-shiftCount:], buf[previousIndex+1:index]) shiftCount++ // next shift needs to be 1 byte to the left } previousIndex = index searchOffset = index + 2 // start next search after len(crlf) } if previousIndex != -1 { // handle final shift copy(buf[previousIndex-shiftCount:], buf[previousIndex+1:nr]) shiftCount++ } nr -= shiftCount // shorten byte read count by number of shifts executed // When final byte from a read operation is CR, do not emit it until // ensure first byte on next read is not LF. if f.prevReadEndedCR = buf[nr-1] == '\r'; f.prevReadEndedCR { nr-- // pretend byte was never read from source } } else if f.prevReadEndedCR { // Reading from source returned nothing, but this struct is sitting on a // trailing CR from previous Read, so let's give it to client now. buf[0] = '\r' nr = 1 er = nil f.prevReadEndedCR = false // prevent infinite loop } return nr, er } // writeBytesWithNull appends the specified data to the specified hash, followed by // the NULL byte, in order to make accidental hash collisions less likely. func writeBytesWithNull(h hash.Hash, data []byte) { // Ignore return values from writing to the hash, because hash write always // returns nil error. _, _ = h.Write(append(data, 0)) } // dirWalkClosure is used to reduce number of allocation involved in closing // over these variables. type dirWalkClosure struct { someCopyBufer []byte // allocate once and reuse for each file copy someModeBytes []byte // allocate once and reuse for each node someDirLen int someHash hash.Hash } // DigestFromDirectory returns a hash of the specified directory contents, which // will match the hash computed for any directory on any supported Go platform // whose contents exactly match the specified directory. // // This function ignores any file system node named `vendor`, `.bzr`, `.git`, // `.hg`, and `.svn`, as these are typically used as Version Control System // (VCS) directories. // // Other than the `vendor` and VCS directories mentioned above, the calculated // hash includes the pathname to every discovered file system node, whether it // is an empty directory, a non-empty directory, empty file, non-empty file, or // symbolic link. If a symbolic link, the referent name is included. If a // non-empty file, the file's contents are included. If a non-empty directory, // the contents of the directory are included. // // While filepath.Walk could have been used, that standard library function // skips symbolic links, and for now, we want the hash to include the symbolic // link referents. func DigestFromDirectory(osDirname string) ([]byte, error) { osDirname = filepath.Clean(osDirname) // Create a single hash instance for the entire operation, rather than a new // hash for each node we encounter. closure := dirWalkClosure{ someCopyBufer: make([]byte, 4*1024), // only allocate a single page someModeBytes: make([]byte, 4), // scratch place to store encoded os.FileMode (uint32) someDirLen: len(osDirname) + len(osPathSeparator), someHash: sha256.New(), } err := DirWalk(osDirname, func(osPathname string, info os.FileInfo, err error) error { if err != nil { return err // DirWalk received an error during initial Lstat } var osRelative string if len(osPathname) > closure.someDirLen { osRelative = osPathname[closure.someDirLen:] } switch filepath.Base(osRelative) { case "vendor", ".bzr", ".git", ".hg", ".svn": return filepath.SkipDir } // We could make our own enum-like data type for encoding the file type, // but Go's runtime already gives us architecture independent file // modes, as discussed in `os/types.go`: // // Go's runtime FileMode type has same definition on all systems, so // that information about files can be moved from one system to // another portably. var mt os.FileMode // We only care about the bits that identify the type of a file system // node, and can ignore append, exclusive, temporary, setuid, setgid, // permission bits, and sticky bits, which are coincident to bits which // declare type of the file system node. modeType := info.Mode() & os.ModeType var shouldSkip bool // skip some types of file system nodes switch { case modeType&os.ModeDir > 0: mt = os.ModeDir // DirWalkFunc itself does not need to enumerate children, because // DirWalk will do that for us. shouldSkip = true case modeType&os.ModeSymlink > 0: mt = os.ModeSymlink case modeType&os.ModeNamedPipe > 0: mt = os.ModeNamedPipe shouldSkip = true case modeType&os.ModeSocket > 0: mt = os.ModeSocket shouldSkip = true case modeType&os.ModeDevice > 0: mt = os.ModeDevice shouldSkip = true } // Write the relative pathname to hash because the hash is a function of // the node names, node types, and node contents. Added benefit is that // empty directories, named pipes, sockets, devices, and symbolic links // will also affect final hash value. Use `filepath.ToSlash` to ensure // relative pathname is os-agnostic. writeBytesWithNull(closure.someHash, []byte(filepath.ToSlash(osRelative))) binary.LittleEndian.PutUint32(closure.someModeBytes, uint32(mt)) // encode the type of mode writeBytesWithNull(closure.someHash, closure.someModeBytes) // and write to hash if shouldSkip { return nil // nothing more to do for some of the node types } if mt == os.ModeSymlink { // okay to check for equivalence because we set to this value osRelative, err = os.Readlink(osPathname) // read the symlink referent if err != nil { return errors.Wrap(err, "cannot Readlink") } writeBytesWithNull(closure.someHash, []byte(filepath.ToSlash(osRelative))) // write referent to hash return nil // proceed to next node in queue } // If we get here, node is a regular file. fh, err := os.Open(osPathname) if err != nil { return errors.Wrap(err, "cannot Open") } var bytesWritten int64 bytesWritten, err = io.CopyBuffer(closure.someHash, newLineEndingReader(fh), closure.someCopyBufer) // fast copy of file contents to hash err = errors.Wrap(err, "cannot Copy") // errors.Wrap only wraps non-nil, so skip extra check writeBytesWithNull(closure.someHash, []byte(strconv.FormatInt(bytesWritten, 10))) // 10: format file size as base 10 integer // Close the file handle to the open file without masking // possible previous error value. if er := fh.Close(); err == nil { err = errors.Wrap(er, "cannot Close") } return err }) if err != nil { return nil, err } return closure.someHash.Sum(nil), nil } // VendorStatus represents one of a handful of possible status conditions for a // particular file sytem node in the vendor directory tree. type VendorStatus uint8 const ( // NotInLock is used when a file system node exists for which there is no // corresponding dependency in the lock file. NotInLock VendorStatus = iota // NotInTree is used when a lock file dependency exists for which there is // no corresponding file system node. NotInTree // NoMismatch is used when the digest for a dependency listed in the // lockfile matches what is calculated from the file system. NoMismatch // EmptyDigestInLock is used when the digest for a dependency listed in the // lock file is the empty string. While this is a special case of // DigestMismatchInLock, keeping both cases discrete is a desired feature. EmptyDigestInLock // DigestMismatchInLock is used when the digest for a dependency listed in // the lock file does not match what is calculated from the file system. DigestMismatchInLock ) func (ls VendorStatus) String() string { switch ls { case NotInTree: return "not in tree" case NotInLock: return "not in lock" case NoMismatch: return "match" case EmptyDigestInLock: return "empty digest in lock" case DigestMismatchInLock: return "mismatch" } return "unknown" } // fsnode is used to track which file system nodes are required by the lock // file. When a directory is found whose name matches one of the declared // projects in the lock file, e.g., "github.com/alice/alice1", an fsnode is // created for that directory, but not for any of its children. All other file // system nodes encountered will result in a fsnode created to represent it. type fsnode struct { osRelative string // os-specific relative path of a resource under vendor root isRequiredAncestor bool // true iff this node or one of its descendants is in the lock file myIndex, parentIndex int // index of this node and its parent in the tree's slice } // VerifyDepTree verifies a dependency tree according to expected digest sums, // and returns an associative array of file system nodes and their respective // vendor status conditions. // // The keys to the expected digest sums associative array represent the // project's dependencies, and each is required to be expressed using the // solidus character, `/`, as its path separator. For example, even on a GOOS // platform where the file system path separator is a character other than // solidus, one particular dependency would be represented as // "github.com/alice/alice1". func VerifyDepTree(osDirname string, wantSums map[string][]byte) (map[string]VendorStatus, error) { osDirname = filepath.Clean(osDirname) // Ensure top level pathname is a directory fi, err := os.Stat(osDirname) if err != nil { return nil, errors.Wrap(err, "cannot Stat") } if !fi.IsDir() { return nil, errors.Errorf("cannot verify non directory: %q", osDirname) } // Initialize work queue with a node representing the specified directory // name by declaring its relative pathname under the directory name as the // empty string. currentNode := &fsnode{osRelative: "", parentIndex: -1, isRequiredAncestor: true} queue := []*fsnode{currentNode} // queue of directories that must be inspected // In order to identify all file system nodes that are not in the lock file, // represented by the specified expected sums parameter, and in order to // only report the top level of a subdirectory of file system nodes, rather // than every node internal to them, we will create a tree of nodes stored // in a slice. We do this because we cannot predict the depth at which // project roots occur. Some projects are fewer than and some projects more // than the typical three layer subdirectory under the vendor root // directory. // // For a following few examples, assume the below vendor root directory: // // github.com/alice/alice1/a1.go // github.com/alice/alice2/a2.go // github.com/bob/bob1/b1.go // github.com/bob/bob2/b2.go // launchpad.net/nifty/n1.go // // 1) If only the `alice1` and `alice2` projects were in the lock file, we'd // prefer the output to state that `github.com/bob` is `NotInLock`, and // `launchpad.net/nifty` is `NotInLock`. // // 2) If `alice1`, `alice2`, and `bob1` were in the lock file, we'd want to // report `github.com/bob/bob2` as `NotInLock`, and `launchpad.net/nifty` is // `NotInLock`. // // 3) If none of `alice1`, `alice2`, `bob1`, or `bob2` were in the lock // file, the entire `github.com` directory would be reported as `NotInLock`, // along with `launchpad.net/nifty` is `NotInLock`. // // Each node in our tree has the slice index of its parent node, so once we // can categorically state a particular directory is required because it is // in the lock file, we can mark all of its ancestors as also being // required. Then, when we finish walking the directory hierarchy, any nodes // which are not required but have a required parent will be marked as // `NotInLock`. nodes := []*fsnode{currentNode} // Create associative array to store the results of calling this function. slashStatus := make(map[string]VendorStatus) // Mark directories of expected projects as required. When each respective // project is later found while traversing the vendor root hierarchy, its // status will be updated to reflect whether its digest is empty, or, // whether or not it matches the expected digest. for slashPathname := range wantSums { slashStatus[slashPathname] = NotInTree } for len(queue) > 0 { // Pop node from the top of queue (depth first traversal, reverse // lexicographical order inside a directory), clearing the value stored // in the slice's backing array as we proceed. lq1 := len(queue) - 1 currentNode, queue[lq1], queue = queue[lq1], nil, queue[:lq1] slashPathname := filepath.ToSlash(currentNode.osRelative) osPathname := filepath.Join(osDirname, currentNode.osRelative) if expectedSum, ok := wantSums[slashPathname]; ok { ls := EmptyDigestInLock if len(expectedSum) > 0 { projectSum, err := DigestFromDirectory(osPathname) if err != nil { return nil, errors.Wrap(err, "cannot compute dependency hash") } if bytes.Equal(projectSum, expectedSum) { ls = NoMismatch } else { ls = DigestMismatchInLock } } slashStatus[slashPathname] = ls // Mark current nodes and all its parents as required. for i := currentNode.myIndex; i != -1; i = nodes[i].parentIndex { nodes[i].isRequiredAncestor = true } // Do not need to process this directory's contents because we // already accounted for its contents while calculating its digest. continue } osChildrenNames, err := sortedChildrenFromDirname(osPathname) if err != nil { return nil, errors.Wrap(err, "cannot get sorted list of directory children") } for _, osChildName := range osChildrenNames { switch osChildName { case ".", "..", "vendor", ".bzr", ".git", ".hg", ".svn": // skip default: osChildRelative := filepath.Join(currentNode.osRelative, osChildName) osChildPathname := filepath.Join(osDirname, osChildRelative) // Create a new fsnode for this file system node, with a parent // index set to the index of the current node. otherNode := &fsnode{osRelative: osChildRelative, myIndex: len(nodes), parentIndex: currentNode.myIndex} fi, err := os.Stat(osChildPathname) if err != nil { return nil, errors.Wrap(err, "cannot Stat") } nodes = append(nodes, otherNode) // Track all file system nodes... if fi.IsDir() { queue = append(queue, otherNode) // but only need to add directories to the work queue. } } } } // Ignoring first node in the list, walk nodes from last to first. Whenever // the current node is not required, but its parent is required, then the // current node ought to be marked as `NotInLock`. for len(nodes) > 1 { // Pop node from top of queue, clearing the value stored in the slice's // backing array as we proceed. ln1 := len(nodes) - 1 currentNode, nodes[ln1], nodes = nodes[ln1], nil, nodes[:ln1] if !currentNode.isRequiredAncestor && nodes[currentNode.parentIndex].isRequiredAncestor { slashStatus[filepath.ToSlash(currentNode.osRelative)] = NotInLock } } currentNode, nodes = nil, nil return slashStatus, nil } dep-0.3.2/internal/gps/pkgtree/digest_test.go000066400000000000000000000171401317166637100212150ustar00rootroot00000000000000// Copyright 2017 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 pkgtree import ( "bytes" "io" "os" "path/filepath" "testing" ) // crossBuffer is a test io.Reader that emits a few canned responses. type crossBuffer struct { readCount int iterations []string } func (cb *crossBuffer) Read(buf []byte) (int, error) { if cb.readCount == len(cb.iterations) { return 0, io.EOF } cb.readCount++ return copy(buf, cb.iterations[cb.readCount-1]), nil } func streamThruLineEndingReader(t *testing.T, iterations []string) []byte { dst := new(bytes.Buffer) n, err := io.Copy(dst, newLineEndingReader(&crossBuffer{iterations: iterations})) if got, want := err, error(nil); got != want { t.Errorf("(GOT): %v; (WNT): %v", got, want) } if got, want := n, int64(dst.Len()); got != want { t.Errorf("(GOT): %v; (WNT): %v", got, want) } return dst.Bytes() } func TestLineEndingReader(t *testing.T) { testCases := []struct { input []string output string }{ {[]string{"\r"}, "\r"}, {[]string{"\r\n"}, "\n"}, {[]string{"now is the time\r\n"}, "now is the time\n"}, {[]string{"now is the time\r\n(trailing data)"}, "now is the time\n(trailing data)"}, {[]string{"now is the time\n"}, "now is the time\n"}, {[]string{"now is the time\r"}, "now is the time\r"}, // trailing CR ought to convey {[]string{"\rnow is the time"}, "\rnow is the time"}, // CR not followed by LF ought to convey {[]string{"\rnow is the time\r"}, "\rnow is the time\r"}, // CR not followed by LF ought to convey // no line splits {[]string{"first", "second", "third"}, "firstsecondthird"}, // 1->2 and 2->3 both break across a CRLF {[]string{"first\r", "\nsecond\r", "\nthird"}, "first\nsecond\nthird"}, // 1->2 breaks across CRLF and 2->3 does not {[]string{"first\r", "\nsecond", "third"}, "first\nsecondthird"}, // 1->2 breaks across CRLF and 2 ends in CR but 3 does not begin LF {[]string{"first\r", "\nsecond\r", "third"}, "first\nsecond\rthird"}, // 1 ends in CR but 2 does not begin LF, and 2->3 breaks across CRLF {[]string{"first\r", "second\r", "\nthird"}, "first\rsecond\nthird"}, // 1 ends in CR but 2 does not begin LF, and 2->3 does not break across CRLF {[]string{"first\r", "second\r", "\nthird"}, "first\rsecond\nthird"}, // 1->2 and 2->3 both break across a CRLF, but 3->4 does not {[]string{"first\r", "\nsecond\r", "\nthird\r", "fourth"}, "first\nsecond\nthird\rfourth"}, {[]string{"first\r", "\nsecond\r", "\nthird\n", "fourth"}, "first\nsecond\nthird\nfourth"}, {[]string{"this is the result\r\nfrom the first read\r", "\nthis is the result\r\nfrom the second read\r"}, "this is the result\nfrom the first read\nthis is the result\nfrom the second read\r"}, {[]string{"now is the time\r\nfor all good engineers\r\nto improve their test coverage!\r\n"}, "now is the time\nfor all good engineers\nto improve their test coverage!\n"}, {[]string{"now is the time\r\nfor all good engineers\r", "\nto improve their test coverage!\r\n"}, "now is the time\nfor all good engineers\nto improve their test coverage!\n"}, } for _, testCase := range testCases { got := streamThruLineEndingReader(t, testCase.input) if want := []byte(testCase.output); !bytes.Equal(got, want) { t.Errorf("Input: %#v; (GOT): %#q; (WNT): %#q", testCase.input, got, want) } } } //////////////////////////////////////// func getTestdataVerifyRoot(t *testing.T) string { cwd, err := os.Getwd() if err != nil { t.Fatal(err) } return filepath.Join(filepath.Dir(cwd), "_testdata/digest") } func TestDigestFromDirectoryBailsUnlessDirectory(t *testing.T) { prefix := getTestdataVerifyRoot(t) relativePathname := "launchpad.net/match" _, err := DigestFromDirectory(filepath.Join(prefix, relativePathname)) if got, want := err, error(nil); got != want { t.Errorf("\n(GOT): %v; (WNT): %v", got, want) } } func TestDigestFromDirectory(t *testing.T) { relativePathname := "launchpad.net/match" want := []byte{0x7e, 0x10, 0x6, 0x2f, 0x8, 0x3, 0x3c, 0x76, 0xae, 0xbc, 0xa4, 0xc9, 0xec, 0x73, 0x67, 0x15, 0x70, 0x2b, 0x0, 0x89, 0x27, 0xbb, 0x61, 0x9d, 0xc7, 0xc3, 0x39, 0x46, 0x3, 0x91, 0xb7, 0x3b} // NOTE: Create the hash using both an absolute and a relative pathname to // ensure hash ignores prefix. t.Run("AbsolutePrefix", func(t *testing.T) { prefix := getTestdataVerifyRoot(t) got, err := DigestFromDirectory(filepath.Join(prefix, relativePathname)) if err != nil { t.Fatal(err) } if !bytes.Equal(got, want) { t.Errorf("\n(GOT):\n\t%#v\n(WNT):\n\t%#v", got, want) } }) t.Run("RelativePrefix", func(t *testing.T) { prefix := "../_testdata/digest" got, err := DigestFromDirectory(filepath.Join(prefix, relativePathname)) if err != nil { t.Fatal(err) } if !bytes.Equal(got, want) { t.Errorf("\n(GOT):\n\t%#v\n(WNT):\n\t%#v", got, want) } }) } func TestVerifyDepTree(t *testing.T) { vendorRoot := getTestdataVerifyRoot(t) wantSums := map[string][]byte{ "github.com/alice/match": []byte{0x7e, 0x10, 0x6, 0x2f, 0x8, 0x3, 0x3c, 0x76, 0xae, 0xbc, 0xa4, 0xc9, 0xec, 0x73, 0x67, 0x15, 0x70, 0x2b, 0x0, 0x89, 0x27, 0xbb, 0x61, 0x9d, 0xc7, 0xc3, 0x39, 0x46, 0x3, 0x91, 0xb7, 0x3b}, "github.com/alice/mismatch": []byte("some non-matching digest"), "github.com/bob/emptyDigest": nil, // empty hash result "github.com/bob/match": []byte{0x7e, 0x10, 0x6, 0x2f, 0x8, 0x3, 0x3c, 0x76, 0xae, 0xbc, 0xa4, 0xc9, 0xec, 0x73, 0x67, 0x15, 0x70, 0x2b, 0x0, 0x89, 0x27, 0xbb, 0x61, 0x9d, 0xc7, 0xc3, 0x39, 0x46, 0x3, 0x91, 0xb7, 0x3b}, "github.com/charlie/notInTree": nil, // not in tree result ought to superseede empty digest result // matching result at seldomly found directory level "launchpad.net/match": []byte{0x7e, 0x10, 0x6, 0x2f, 0x8, 0x3, 0x3c, 0x76, 0xae, 0xbc, 0xa4, 0xc9, 0xec, 0x73, 0x67, 0x15, 0x70, 0x2b, 0x0, 0x89, 0x27, 0xbb, 0x61, 0x9d, 0xc7, 0xc3, 0x39, 0x46, 0x3, 0x91, 0xb7, 0x3b}, } status, err := VerifyDepTree(vendorRoot, wantSums) if err != nil { t.Fatal(err) } if got, want := len(status), 7; got != want { t.Errorf("\n(GOT): %v; (WNT): %v", got, want) } checkStatus := func(t *testing.T, status map[string]VendorStatus, key string, want VendorStatus) { got, ok := status[key] if !ok { t.Errorf("Want key: %q", key) return } if got != want { t.Errorf("Key: %q; (GOT): %v; (WNT): %v", key, got, want) } } checkStatus(t, status, "github.com/alice/match", NoMismatch) checkStatus(t, status, "github.com/alice/mismatch", DigestMismatchInLock) checkStatus(t, status, "github.com/alice/notInLock", NotInLock) checkStatus(t, status, "github.com/bob/match", NoMismatch) checkStatus(t, status, "github.com/bob/emptyDigest", EmptyDigestInLock) checkStatus(t, status, "github.com/charlie/notInTree", NotInTree) checkStatus(t, status, "launchpad.net/match", NoMismatch) if t.Failed() { for k, want := range wantSums { got, err := DigestFromDirectory(filepath.Join(vendorRoot, k)) if err != nil { t.Error(err) } if !bytes.Equal(got, want) { t.Errorf("%q\n(GOT):\n\t%#v\n(WNT):\n\t%#v", k, got, want) } } } } func BenchmarkDigestFromDirectory(b *testing.B) { b.Skip("Eliding benchmark of user's Go source directory") prefix := filepath.Join(os.Getenv("GOPATH"), "src") for i := 0; i < b.N; i++ { _, err := DigestFromDirectory(prefix) if err != nil { b.Fatal(err) } } } func BenchmarkVerifyDepTree(b *testing.B) { b.Skip("Eliding benchmark of user's Go source directory") prefix := filepath.Join(os.Getenv("GOPATH"), "src") for i := 0; i < b.N; i++ { _, err := VerifyDepTree(prefix, nil) if err != nil { b.Fatal(err) } } } dep-0.3.2/internal/gps/pkgtree/dirwalk.go000066400000000000000000000114071317166637100203340ustar00rootroot00000000000000// Copyright 2017 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 pkgtree import ( "os" "path/filepath" "sort" "strings" "github.com/pkg/errors" ) // DirWalkFunc is the type of the function called for each file system node // visited by DirWalk. The path argument contains the argument to DirWalk as a // prefix; that is, if DirWalk is called with "dir", which is a directory // containing the file "a", the walk function will be called with the argument // "dir/a", using the correct os.PathSeparator for the Go Operating System // architecture, GOOS. The info argument is the os.FileInfo for the named path. // // If there was a problem walking to the file or directory named by path, the // incoming error will describe the problem and the function can decide how to // handle that error (and DirWalk will not descend into that directory). If an // error is returned, processing stops. The sole exception is when the function // returns the special value filepath.SkipDir. If the function returns // filepath.SkipDir when invoked on a directory, DirWalk skips the directory's // contents entirely. If the function returns filepath.SkipDir when invoked on a // non-directory file system node, DirWalk skips the remaining files in the // containing directory. type DirWalkFunc func(osPathname string, info os.FileInfo, err error) error // DirWalk walks the file tree rooted at osDirname, calling for each file system // node in the tree, including root. All errors that arise visiting nodes are // filtered by walkFn. The nodes are walked in lexical order, which makes the // output deterministic but means that for very large directories DirWalk can be // inefficient. Unlike filepath.Walk, DirWalk does follow symbolic links. func DirWalk(osDirname string, walkFn DirWalkFunc) error { osDirname = filepath.Clean(osDirname) // Ensure parameter is a directory fi, err := os.Stat(osDirname) if err != nil { return errors.Wrap(err, "cannot read node") } if !fi.IsDir() { return errors.Errorf("cannot walk non directory: %q", osDirname) } // Initialize a work queue with the empty string, which signifies the // starting directory itself. queue := []string{""} var osRelative string // os-specific relative pathname under directory name // As we enumerate over the queue and encounter a directory, its children // will be added to the work queue. for len(queue) > 0 { // Unshift a pathname from the queue (breadth-first traversal of // hierarchy) osRelative, queue = queue[0], queue[1:] osPathname := filepath.Join(osDirname, osRelative) // walkFn needs to choose how to handle symbolic links, therefore obtain // lstat rather than stat. fi, err = os.Lstat(osPathname) if err == nil { err = walkFn(osPathname, fi, nil) } else { err = walkFn(osPathname, nil, errors.Wrap(err, "cannot read node")) } if err != nil { if err == filepath.SkipDir { if fi.Mode()&os.ModeSymlink > 0 { // Resolve symbolic link referent to determine whether node // is directory or not. fi, err = os.Stat(osPathname) if err != nil { return errors.Wrap(err, "cannot visit node") } } // If current node is directory, then skip this // directory. Otherwise, skip all nodes in the same parent // directory. if !fi.IsDir() { // Consume nodes from queue while they have the same parent // as the current node. osParent := filepath.Dir(osPathname) + osPathSeparator for len(queue) > 0 && strings.HasPrefix(queue[0], osParent) { queue = queue[1:] // drop sibling from queue } } continue } return errors.Wrap(err, "DirWalkFunction") // wrap error returned by walkFn } if fi.IsDir() { osChildrenNames, err := sortedChildrenFromDirname(osPathname) if err != nil { return errors.Wrap(err, "cannot get list of directory children") } for _, osChildName := range osChildrenNames { switch osChildName { case ".", "..": // skip default: queue = append(queue, filepath.Join(osRelative, osChildName)) } } } } return nil } // sortedChildrenFromDirname returns a lexicographically sorted list of child // nodes for the specified directory. func sortedChildrenFromDirname(osDirname string) ([]string, error) { fh, err := os.Open(osDirname) if err != nil { return nil, errors.Wrap(err, "cannot Open") } osChildrenNames, err := fh.Readdirnames(0) // 0: read names of all children if err != nil { return nil, errors.Wrap(err, "cannot Readdirnames") } sort.Strings(osChildrenNames) // Close the file handle to the open directory without masking possible // previous error value. if er := fh.Close(); err == nil { err = errors.Wrap(er, "cannot Close") } return osChildrenNames, err } dep-0.3.2/internal/gps/pkgtree/ignored_ruleset.go000066400000000000000000000053111317166637100220660ustar00rootroot00000000000000// Copyright 2017 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 pkgtree import ( "sort" "strings" "github.com/armon/go-radix" ) // IgnoredRuleset comprises a set of rules for ignoring import paths. It can // manage both literal and prefix-wildcard matches. type IgnoredRuleset struct { t *radix.Tree } // NewIgnoredRuleset processes a set of strings into an IgnoredRuleset. Strings // that end in "*" are treated as wildcards, where any import path with a // matching prefix will be ignored. IgnoredRulesets are immutable once created. // // Duplicate and redundant (i.e. a literal path that has a prefix of a wildcard // path) declarations are discarded. Consequently, it is possible that the // returned IgnoredRuleset may have a smaller Len() than the input slice. func NewIgnoredRuleset(ig []string) *IgnoredRuleset { if len(ig) == 0 { return &IgnoredRuleset{} } ir := &IgnoredRuleset{ t: radix.New(), } // Sort the list of all the ignores in order to ensure that wildcard // precedence is recorded correctly in the trie. sort.Strings(ig) for _, i := range ig { // Skip global ignore and empty string. if i == "*" || i == "" { continue } _, wildi, has := ir.t.LongestPrefix(i) // We may not always have a value here, but if we do, then it's a bool. wild, _ := wildi.(bool) // Check if it's a wildcard ignore. if strings.HasSuffix(i, "*") { // Check if it is ineffectual. if has && wild { // Skip ineffectual wildcard ignore. continue } // Create the ignore prefix and insert in the radix tree. ir.t.Insert(i[:len(i)-1], true) } else if !has || !wild { ir.t.Insert(i, false) } } if ir.t.Len() == 0 { ir.t = nil } return ir } // IsIgnored indicates whether the provided path should be ignored, according to // the ruleset. func (ir *IgnoredRuleset) IsIgnored(path string) bool { if path == "" || ir == nil || ir.t == nil { return false } prefix, wildi, has := ir.t.LongestPrefix(path) return has && (wildi.(bool) || path == prefix) } // Len indicates the number of rules in the ruleset. func (ir *IgnoredRuleset) Len() int { if ir == nil || ir.t == nil { return 0 } return ir.t.Len() } // ToSlice converts the contents of the IgnoredRuleset to a string slice. // // This operation is symmetrically dual to NewIgnoredRuleset. func (ir *IgnoredRuleset) ToSlice() []string { irlen := ir.Len() if irlen == 0 { return nil } items := make([]string, 0, irlen) ir.t.Walk(func(s string, v interface{}) bool { if s != "" { if v.(bool) { items = append(items, s+"*") } else { items = append(items, s) } } return false }) return items } dep-0.3.2/internal/gps/pkgtree/ignored_ruleset_test.go000066400000000000000000000073771317166637100231430ustar00rootroot00000000000000// Copyright 2017 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 pkgtree import "testing" func TestIgnoredRuleset(t *testing.T) { type tfixm []struct { path string wild bool } cases := []struct { name string inputs []string wantInTree tfixm wantEmptyTree bool shouldIgnore []string shouldNotIgnore []string }{ { name: "only skip global ignore", inputs: []string{"*"}, wantEmptyTree: true, }, { name: "ignores without ignore suffix", inputs: []string{ "x/y/z", "*a/b/c", "gophers", }, wantInTree: tfixm{ {path: "x/y/z", wild: false}, {path: "*a/b/c", wild: false}, {path: "gophers", wild: false}, }, shouldIgnore: []string{ "x/y/z", "gophers", }, shouldNotIgnore: []string{ "x/y/z/q", "x/y", "gopher", "gopherss", }, }, { name: "ignores with ignore suffix", inputs: []string{ "x/y/z*", "a/b/c", "gophers", }, wantInTree: tfixm{ {path: "x/y/z", wild: true}, {path: "a/b/c", wild: false}, {path: "gophers", wild: false}, }, shouldIgnore: []string{ "x/y/z", "x/y/zz", "x/y/z/", "x/y/z/q", }, shouldNotIgnore: []string{ "x/y", "gopher", }, }, { name: "global ignore with other strings", inputs: []string{ "*", "gophers*", "x/y/z*", "a/b/c", }, wantInTree: tfixm{ {path: "x/y/z", wild: true}, {path: "a/b/c", wild: false}, {path: "gophers", wild: true}, }, shouldIgnore: []string{ "x/y/z", "x/y/z/", "x/y/z/q", "gophers", "gopherss", "gophers/foo", }, shouldNotIgnore: []string{ "x/y", "gopher", }, }, { name: "ineffectual ignore with wildcard", inputs: []string{ "a/b*", "a/b/c*", "a/b/x/y", "a/c*", }, wantInTree: tfixm{ {path: "a/c", wild: true}, {path: "a/b", wild: true}, }, shouldIgnore: []string{ "a/cb", }, shouldNotIgnore: []string{ "a/", "a/d", }, }, { name: "same path with and without wildcard", inputs: []string{ "a/b*", "a/b", }, wantInTree: tfixm{ {path: "a/b", wild: true}, }, shouldIgnore: []string{ "a/b", "a/bb", }, shouldNotIgnore: []string{ "a/", "a/d", }, }, { name: "empty paths", inputs: []string{ "", "a/b*", }, wantInTree: tfixm{ {path: "a/b", wild: true}, }, shouldNotIgnore: []string{ "", }, }, { name: "single wildcard", inputs: []string{ "a/b*", }, wantInTree: tfixm{ {path: "a/b", wild: true}, }, shouldIgnore: []string{ "a/b/c", }, }, } for _, c := range cases { igm := NewIgnoredRuleset(c.inputs) f := func(t *testing.T) { if c.wantEmptyTree { if igm.Len() != 0 { t.Fatalf("wanted empty tree, but had %v elements", igm.Len()) } } // Check if the wildcard suffix ignores are in the tree. for _, p := range c.wantInTree { wildi, has := igm.t.Get(p.path) if !has { t.Fatalf("expected %q to be in the tree", p.path) } else if wildi.(bool) != p.wild { if p.wild { t.Fatalf("expected %q to be a wildcard matcher, but it was not", p.path) } else { t.Fatalf("expected %q not to be a wildcard matcher, but it was", p.path) } } } for _, p := range c.shouldIgnore { if !igm.IsIgnored(p) { t.Fatalf("%q should be ignored, but it was not", p) } } for _, p := range c.shouldNotIgnore { if igm.IsIgnored(p) { t.Fatalf("%q should not be ignored, but it was", p) } } } t.Run(c.name, f) igm = NewIgnoredRuleset(igm.ToSlice()) t.Run(c.name+"/inandout", f) } } dep-0.3.2/internal/gps/pkgtree/pkgtree.go000066400000000000000000000776031317166637100203520ustar00rootroot00000000000000// Copyright 2017 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 pkgtree import ( "bytes" "fmt" "go/ast" "go/build" "go/parser" gscan "go/scanner" "go/token" "os" "path/filepath" "reflect" "sort" "strconv" "strings" "unicode" ) // Package represents a Go package. It contains a subset of the information // go/build.Package does. type Package struct { Name string // Package name, as declared in the package statement ImportPath string // Full import path, including the prefix provided to ListPackages() CommentPath string // Import path given in the comment on the package statement Imports []string // Imports from all go and cgo files TestImports []string // Imports from all go test files (in go/build parlance: both TestImports and XTestImports) } // vcsRoots is a set of directories we should not descend into in ListPackages when // searching for Go packages var vcsRoots = map[string]struct{}{ ".git": struct{}{}, ".bzr": struct{}{}, ".svn": struct{}{}, ".hg": struct{}{}, } // ListPackages reports Go package information about all directories in the tree // at or below the provided fileRoot. // // The importRoot parameter is prepended to the relative path when determining // the import path for each package. The obvious case is for something typical, // like: // // fileRoot = "/home/user/go/src/github.com/foo/bar" // importRoot = "github.com/foo/bar" // // where the fileRoot and importRoot align. However, if you provide: // // fileRoot = "/home/user/workspace/path/to/repo" // importRoot = "github.com/foo/bar" // // then the root package at path/to/repo will be ascribed import path // "github.com/foo/bar", and the package at // "/home/user/workspace/path/to/repo/baz" will be "github.com/foo/bar/baz". // // A PackageTree is returned, which contains the ImportRoot and map of import path // to PackageOrErr - each path under the root that exists will have either a // Package, or an error describing why the directory is not a valid package. func ListPackages(fileRoot, importRoot string) (PackageTree, error) { ptree := PackageTree{ ImportRoot: importRoot, Packages: make(map[string]PackageOrErr), } var err error fileRoot, err = filepath.Abs(fileRoot) if err != nil { return PackageTree{}, err } err = filepath.Walk(fileRoot, func(wp string, fi os.FileInfo, err error) error { if err != nil && err != filepath.SkipDir { if os.IsPermission(err) { return filepath.SkipDir } return err } if !fi.IsDir() { return nil } // Skip dirs that are known to hold non-local/dependency code. // // We don't skip _*, or testdata dirs because, while it may be poor // form, importing them is not a compilation error. switch fi.Name() { case "vendor", "Godeps": return filepath.SkipDir } // Skip dirs that are known to be VCS roots. // // Note that there are some pathological edge cases this doesn't cover, // such as a user using Git for version control, but having a package // named "svn" in a directory named ".svn". if _, ok := vcsRoots[fi.Name()]; ok { return filepath.SkipDir } { // For Go 1.9 and earlier: // // The entry error is nil when visiting a directory that itself is // untraversable, as it's still governed by the parent directory's // perms. We have to check readability of the dir here, because // otherwise we'll have an empty package entry when we fail to read any // of the dir's contents. // // If we didn't check here, then the next time this closure is called it // would have an err with the same path as is called this time, as only // then will filepath.Walk have attempted to descend into the directory // and encountered an error. var f *os.File f, err = os.Open(wp) if err != nil { if os.IsPermission(err) { return filepath.SkipDir } return err } f.Close() } // Compute the import path. Run the result through ToSlash(), so that // windows file paths are normalized to slashes, as is expected of // import paths. ip := filepath.ToSlash(filepath.Join(importRoot, strings.TrimPrefix(wp, fileRoot))) // Find all the imports, across all os/arch combos p := &build.Package{ Dir: wp, ImportPath: ip, } err = fillPackage(p) if err != nil { switch err.(type) { case gscan.ErrorList, *gscan.Error, *build.NoGoError, *ConflictingImportComments: // Assorted cases in which we've encounter malformed or // nonexistent Go source code. ptree.Packages[ip] = PackageOrErr{ Err: err, } return nil default: return err } } pkg := Package{ ImportPath: ip, CommentPath: p.ImportComment, Name: p.Name, Imports: p.Imports, TestImports: dedupeStrings(p.TestImports, p.XTestImports), } if pkg.CommentPath != "" && !strings.HasPrefix(pkg.CommentPath, importRoot) { ptree.Packages[ip] = PackageOrErr{ Err: &NonCanonicalImportRoot{ ImportRoot: importRoot, Canonical: pkg.CommentPath, }, } return nil } // This area has some...fuzzy rules, but check all the imports for // local/relative/dot-ness, and record an error for the package if we // see any. var lim []string for _, imp := range append(pkg.Imports, pkg.TestImports...) { if build.IsLocalImport(imp) { // Do allow the single-dot, at least for now if imp == "." { continue } lim = append(lim, imp) } } if len(lim) > 0 { ptree.Packages[ip] = PackageOrErr{ Err: &LocalImportsError{ Dir: wp, ImportPath: ip, LocalImports: lim, }, } } else { ptree.Packages[ip] = PackageOrErr{ P: pkg, } } return nil }) if err != nil { return PackageTree{}, err } return ptree, nil } // fillPackage full of info. Assumes p.Dir is set at a minimum func fillPackage(p *build.Package) error { var buildPrefix = "// +build " var buildFieldSplit = func(r rune) bool { return unicode.IsSpace(r) || r == ',' } gofiles, err := filepath.Glob(filepath.Join(p.Dir, "*.go")) if err != nil { return err } if len(gofiles) == 0 { return &build.NoGoError{Dir: p.Dir} } var testImports []string var imports []string var importComments []string for _, file := range gofiles { // Skip underscore-led or dot-led files, in keeping with the rest of the toolchain. bPrefix := filepath.Base(file)[0] if bPrefix == '_' || bPrefix == '.' { continue } // Skip any directories that happened to get caught by glob if stat, err := os.Stat(file); err == nil && stat.IsDir() { continue } pf, err := parser.ParseFile(token.NewFileSet(), file, nil, parser.ImportsOnly|parser.ParseComments) if err != nil { if os.IsPermission(err) { continue } return err } testFile := strings.HasSuffix(file, "_test.go") fname := filepath.Base(file) var ignored bool for _, c := range pf.Comments { ic := findImportComment(pf.Name, c) if ic != "" { importComments = append(importComments, ic) } if c.Pos() > pf.Package { // +build comment must come before package continue } var ct string for _, cl := range c.List { if strings.HasPrefix(cl.Text, buildPrefix) { ct = cl.Text break } } if ct == "" { continue } for _, t := range strings.FieldsFunc(ct[len(buildPrefix):], buildFieldSplit) { // hardcoded (for now) handling for the "ignore" build tag // We "soft" ignore the files tagged with ignore so that we pull in their imports. if t == "ignore" { ignored = true } } } if testFile { p.TestGoFiles = append(p.TestGoFiles, fname) if p.Name == "" && !ignored { p.Name = strings.TrimSuffix(pf.Name.Name, "_test") } } else { if p.Name == "" && !ignored { p.Name = pf.Name.Name } p.GoFiles = append(p.GoFiles, fname) } for _, is := range pf.Imports { name, err := strconv.Unquote(is.Path.Value) if err != nil { return err // can't happen? } if testFile { testImports = append(testImports, name) } else { imports = append(imports, name) } } } importComments = uniq(importComments) if len(importComments) > 1 { return &ConflictingImportComments{ ImportPath: p.ImportPath, ConflictingImportComments: importComments, } } if len(importComments) > 0 { p.ImportComment = importComments[0] } imports = uniq(imports) testImports = uniq(testImports) p.Imports = imports p.TestImports = testImports return nil } var ( slashSlash = []byte("//") slashStar = []byte("/*") starSlash = []byte("*/") importKwd = []byte("import ") ) func findImportComment(pkgName *ast.Ident, c *ast.CommentGroup) string { afterPkg := pkgName.NamePos + token.Pos(len(pkgName.Name)) + 1 commentSlash := c.List[0].Slash if afterPkg != commentSlash { return "" } text := []byte(c.List[0].Text) switch { case bytes.HasPrefix(text, slashSlash): eol := bytes.IndexByte(text, '\n') if eol < 0 { eol = len(text) } text = text[2:eol] case bytes.HasPrefix(text, slashStar): text = text[2:] end := bytes.Index(text, starSlash) if end < 0 { // malformed comment return "" } text = text[:end] if bytes.IndexByte(text, '\n') > 0 { // multiline comment, can't be an import comment return "" } } text = bytes.TrimSpace(text) if !bytes.HasPrefix(text, importKwd) { return "" } quotedPath := bytes.TrimSpace(text[len(importKwd):]) return string(bytes.Trim(quotedPath, `"`)) } // ConflictingImportComments indicates that the package declares more than one // different canonical path. type ConflictingImportComments struct { ImportPath string // An import path referring to this package ConflictingImportComments []string // All distinct "canonical" paths encountered in the package files } func (e *ConflictingImportComments) Error() string { return fmt.Sprintf("import path %s had conflicting import comments: %s", e.ImportPath, quotedPaths(e.ConflictingImportComments)) } // NonCanonicalImportRoot reports the situation when the dependee imports a // package via something other than the package's declared canonical path. type NonCanonicalImportRoot struct { ImportRoot string // A root path that is being used to import a package Canonical string // A canonical path declared by the package being imported } func (e *NonCanonicalImportRoot) Error() string { return fmt.Sprintf("import root %q is not a prefix for the package's declared canonical path %q", e.ImportRoot, e.Canonical) } func quotedPaths(ps []string) string { quoted := make([]string, 0, len(ps)) for _, p := range ps { quoted = append(quoted, fmt.Sprintf("%q", p)) } return strings.Join(quoted, ", ") } // LocalImportsError indicates that a package contains at least one relative // import that will prevent it from compiling. // // TODO(sdboyer) add a Files property once we're doing our own per-file parsing type LocalImportsError struct { ImportPath string Dir string LocalImports []string } func (e *LocalImportsError) Error() string { switch len(e.LocalImports) { case 0: // shouldn't be possible, but just cover the case return fmt.Sprintf("import path %s had bad local imports", e.ImportPath) case 1: return fmt.Sprintf("import path %s had a local import: %q", e.ImportPath, e.LocalImports[0]) default: return fmt.Sprintf("import path %s had local imports: %s", e.ImportPath, quotedPaths(e.LocalImports)) } } type wm struct { err error ex map[string]bool in map[string]bool } // PackageOrErr stores the results of attempting to parse a single directory for // Go source code. type PackageOrErr struct { P Package Err error } // ProblemImportError describes the reason that a particular import path is // not safely importable. type ProblemImportError struct { // The import path of the package with some problem rendering it // unimportable. ImportPath string // The path to the internal package the problem package imports that is the // original cause of this issue. If empty, the package itself is the // problem. Cause []string // The actual error from ListPackages that is undermining importability for // this package. Err error } // Error formats the ProblemImportError as a string, reflecting whether the // error represents a direct or transitive problem. func (e *ProblemImportError) Error() string { switch len(e.Cause) { case 0: return fmt.Sprintf("%q contains malformed code: %s", e.ImportPath, e.Err.Error()) case 1: return fmt.Sprintf("%q imports %q, which contains malformed code: %s", e.ImportPath, e.Cause[0], e.Err.Error()) default: return fmt.Sprintf("%q transitively (through %v packages) imports %q, which contains malformed code: %s", e.ImportPath, len(e.Cause)-1, e.Cause[len(e.Cause)-1], e.Err.Error()) } } // Helper func to create an error when a package is missing. func missingPkgErr(pkg string) error { return fmt.Errorf("no package exists at %q", pkg) } // A PackageTree represents the results of recursively parsing a tree of // packages, starting at the ImportRoot. The results of parsing the files in the // directory identified by each import path - a Package or an error - are stored // in the Packages map, keyed by that import path. type PackageTree struct { ImportRoot string Packages map[string]PackageOrErr } // ToReachMap looks through a PackageTree and computes the list of external // import statements (that is, import statements pointing to packages that are // not logical children of PackageTree.ImportRoot) that are transitively // imported by the internal packages in the tree. // // main indicates whether (true) or not (false) to include main packages in the // analysis. When utilized by gps' solver, main packages are generally excluded // from analyzing anything other than the root project, as they necessarily can't // be imported. // // tests indicates whether (true) or not (false) to include imports from test // files in packages when computing the reach map. // // backprop indicates whether errors (an actual PackageOrErr.Err, or an import // to a nonexistent internal package) should be backpropagated, transitively // "poisoning" all corresponding importers to all importers. // // ignore is a map of import paths that, if encountered, should be excluded from // analysis. This exclusion applies to both internal and external packages. If // an external import path is ignored, it is simply omitted from the results. // // If an internal path is ignored, then it not only does not appear in the final // map, but it is also excluded from the transitive calculations of other // internal packages. That is, if you ignore A/foo, then the external package // list for all internal packages that import A/foo will not include external // packages that are only reachable through A/foo. // // Visually, this means that, given a PackageTree with root A and packages at A, // A/foo, and A/bar, and the following import chain: // // A -> A/foo -> A/bar -> B/baz // // In this configuration, all of A's packages transitively import B/baz, so the // returned map would be: // // map[string][]string{ // "A": []string{"B/baz"}, // "A/foo": []string{"B/baz"} // "A/bar": []string{"B/baz"}, // } // // However, if you ignore A/foo, then A's path to B/baz is broken, and A/foo is // omitted entirely. Thus, the returned map would be: // // map[string][]string{ // "A": []string{}, // "A/bar": []string{"B/baz"}, // } // // If there are no packages to ignore, it is safe to pass a nil map. // // Finally, if an internal PackageOrErr contains an error, it is always omitted // from the result set. If backprop is true, then the error from that internal // package will be transitively propagated back to any other internal // PackageOrErrs that import it, causing them to also be omitted. So, with the // same import chain: // // A -> A/foo -> A/bar -> B/baz // // If A/foo has an error, then it would backpropagate to A, causing both to be // omitted, and the returned map to contain only A/bar: // // map[string][]string{ // "A/bar": []string{"B/baz"}, // } // // If backprop is false, then errors will not backpropagate to internal // importers. So, with an error in A/foo, this would be the result map: // // map[string][]string{ // "A": []string{}, // "A/bar": []string{"B/baz"}, // } func (t PackageTree) ToReachMap(main, tests, backprop bool, ignore *IgnoredRuleset) (ReachMap, map[string]*ProblemImportError) { // world's simplest adjacency list workmap := make(map[string]wm) var imps []string for ip, perr := range t.Packages { if perr.Err != nil { workmap[ip] = wm{ err: perr.Err, } continue } p := perr.P // Skip main packages, unless param says otherwise if p.Name == "main" && !main { continue } // Skip ignored packages if ignore.IsIgnored(ip) { continue } // TODO (kris-nova) Disable to get staticcheck passing //imps = imps[:0] if tests { imps = dedupeStrings(p.Imports, p.TestImports) } else { imps = p.Imports } w := wm{ ex: make(map[string]bool), in: make(map[string]bool), } // For each import, decide whether it should be ignored, or if it // belongs in the external or internal imports list. for _, imp := range imps { if ignore.IsIgnored(imp) || imp == "." { continue } if !eqOrSlashedPrefix(imp, t.ImportRoot) { w.ex[imp] = true } else { w.in[imp] = true } } workmap[ip] = w } return wmToReach(workmap, backprop) } // Copy copies the PackageTree. // // This is really only useful as a defensive measure to prevent external state // mutations. func (t PackageTree) Copy() PackageTree { t2 := PackageTree{ ImportRoot: t.ImportRoot, Packages: make(map[string]PackageOrErr, len(t.Packages)), } // Walk through and count up the total number of string slice elements we'll // need, then allocate them all at once. strcount := 0 for _, poe := range t.Packages { strcount = strcount + len(poe.P.Imports) + len(poe.P.TestImports) } pool := make([]string, strcount) for path, poe := range t.Packages { var poe2 PackageOrErr if poe.Err != nil { refl := reflect.ValueOf(poe.Err) switch refl.Kind() { case reflect.Ptr: poe2.Err = reflect.New(refl.Elem().Type()).Interface().(error) case reflect.Slice: err2 := reflect.MakeSlice(refl.Type(), refl.Len(), refl.Len()) reflect.Copy(err2, refl) poe2.Err = err2.Interface().(error) default: // This shouldn't be too onerous to maintain - the set of errors // we can get here is restricted by what ListPackages() allows. // So just panic if one is outside the expected kinds of ptr or // slice, as that would mean we've missed something notable. panic(fmt.Sprintf("unrecognized PackgeOrErr error type, %T", poe.Err)) } } else { poe2.P = poe.P il, til := len(poe.P.Imports), len(poe.P.TestImports) if il > 0 { poe2.P.Imports, pool = pool[:il], pool[il:] copy(poe2.P.Imports, poe.P.Imports) } if til > 0 { poe2.P.TestImports, pool = pool[:til], pool[til:] copy(poe2.P.TestImports, poe.P.TestImports) } } t2.Packages[path] = poe2 } return t2 } // TrimHiddenPackages returns a new PackageTree where packages that are ignored, // or both hidden and unreachable, have been removed. // // The package list is partitioned into two sets: visible, and hidden, where // packages are considered hidden if they are within or beneath directories // with: // // * leading dots // * leading underscores // * the exact name "testdata" // // Packages in the hidden set are dropped from the returned PackageTree, unless // they are transitively reachable from imports in the visible set. // // The "main", "tests" and "ignored" parameters have the same behavior as with // PackageTree.ToReachMap(): the first two determine, respectively, whether // imports from main packages, and imports from tests, should be considered for // reachability checks. Setting 'main' to true will additionally result in main // packages being trimmed. // // "ignored" designates import paths, or patterns of import paths, where the // corresponding packages should be excluded from reachability checks, if // encountered. Ignored packages are also removed from the final set. // // Note that it is not recommended to call this method if the goal is to obtain // a set of tree-external imports; calling ToReachMap and FlattenFn will achieve // the same effect. func (t PackageTree) TrimHiddenPackages(main, tests bool, ignore *IgnoredRuleset) PackageTree { rm, pie := t.ToReachMap(main, tests, false, ignore) t2 := t.Copy() preserve := make(map[string]bool) for pkg, ie := range rm { if pkgFilter(pkg) && !ignore.IsIgnored(pkg) { preserve[pkg] = true for _, in := range ie.Internal { preserve[in] = true } } } // Also process the problem map, as packages in the visible set with errors // need to be included in the return values. for pkg := range pie { if pkgFilter(pkg) && !ignore.IsIgnored(pkg) { preserve[pkg] = true } } for ip := range t.Packages { if !preserve[ip] { delete(t2.Packages, ip) } } return t2 } // wmToReach takes an internal "workmap" constructed by // PackageTree.ExternalReach(), transitively walks (via depth-first traversal) // all internal imports until they reach an external path or terminate, then // translates the results into a slice of external imports for each internal // pkg. // // It drops any packages with errors, and - if backprop is true - backpropagates // those errors, causing internal packages that (transitively) import other // internal packages having errors to also be dropped. func wmToReach(workmap map[string]wm, backprop bool) (ReachMap, map[string]*ProblemImportError) { // Uses depth-first exploration to compute reachability into external // packages, dropping any internal packages on "poisoned paths" - a path // containing a package with an error, or with a dep on an internal package // that's missing. const ( white uint8 = iota grey black ) colors := make(map[string]uint8) exrsets := make(map[string]map[string]struct{}) inrsets := make(map[string]map[string]struct{}) errmap := make(map[string]*ProblemImportError) // poison is a helper func to eliminate specific reachsets from exrsets and // inrsets, and populate error information along the way. poison := func(path []string, err *ProblemImportError) { for k, ppkg := range path { delete(exrsets, ppkg) delete(inrsets, ppkg) // Duplicate the err for this package kerr := &ProblemImportError{ ImportPath: ppkg, Err: err.Err, } // Shift the slice bounds on the incoming err.Cause. // // This check will only be false on the final path element when // entering via poisonWhite, where the last pkg is the underlying // cause of the problem, and is thus expected to have an empty Cause // slice. if k+1 < len(err.Cause) { // reuse the slice kerr.Cause = err.Cause[k+1:] } // Both black and white cases can have the final element be a // package that doesn't exist. If that's the case, don't write it // directly to the errmap, as presence in the errmap indicates the // package was present in the input PackageTree. if k == len(path)-1 { if _, exists := workmap[path[len(path)-1]]; !exists { continue } } // Direct writing to the errmap means that if multiple errors affect // a given package, only the last error visited will be reported. // But that should be sufficient; presumably, the user can // iteratively resolve the errors. errmap[ppkg] = kerr } } // poisonWhite wraps poison for error recording in the white-poisoning case, // where we're constructing a new poison path. poisonWhite := func(path []string) { err := &ProblemImportError{ Cause: make([]string, len(path)), } copy(err.Cause, path) // find the tail err tail := path[len(path)-1] if w, exists := workmap[tail]; exists { // If we make it to here, the dfe guarantees that the workmap // will contain an error for this pkg. err.Err = w.err } else { err.Err = missingPkgErr(tail) } poison(path, err) } // poisonBlack wraps poison for error recording in the black-poisoning case, // where we're connecting to an existing poison path. poisonBlack := func(path []string, from string) { // Because the outer dfe loop ensures we never directly re-visit a pkg // that was already completed (black), we don't have to defend against // an empty path here. fromErr, exists := errmap[from] // FIXME: It should not be possible for fromErr to not exist, // See issue https://github.com/golang/dep/issues/351 // This is a temporary solution to avoid a panic. if !exists { fromErr = &ProblemImportError{ Err: fmt.Errorf("unknown error for %q, if you get this error see https://github.com/golang/dep/issues/351", from), } } err := &ProblemImportError{ Err: fromErr.Err, Cause: make([]string, 0, len(path)+len(fromErr.Cause)+1), } err.Cause = append(err.Cause, path...) err.Cause = append(err.Cause, from) err.Cause = append(err.Cause, fromErr.Cause...) poison(path, err) } var dfe func(string, []string) bool // dfe is the depth-first-explorer that computes a safe, error-free external // reach map. // // pkg is the import path of the pkg currently being visited; path is the // stack of parent packages we've visited to get to pkg. The return value // indicates whether the level completed successfully (true) or if it was // poisoned (false). dfe = func(pkg string, path []string) bool { // white is the zero value of uint8, which is what we want if the pkg // isn't in the colors map, so this works fine switch colors[pkg] { case white: // first visit to this pkg; mark it as in-process (grey) colors[pkg] = grey // make sure it's present and w/out errs w, exists := workmap[pkg] // Push current visitee onto the path slice. Passing path through // recursion levels as a value has the effect of auto-popping the // slice, while also giving us safe memory reuse. path = append(path, pkg) if !exists || w.err != nil { if backprop { // Does not exist or has an err; poison self and all parents poisonWhite(path) } else if exists { // Only record something in the errmap if there's actually a // package there, per the semantics of the errmap errmap[pkg] = &ProblemImportError{ ImportPath: pkg, Err: w.err, } } // we know we're done here, so mark it black colors[pkg] = black return false } // pkg exists with no errs; start internal and external reachsets for it. rs := make(map[string]struct{}) irs := make(map[string]struct{}) // Dump this package's external pkgs into its own reachset. Separate // loop from the parent dump to avoid nested map loop lookups. for ex := range w.ex { rs[ex] = struct{}{} } exrsets[pkg] = rs // Same deal for internal imports for in := range w.in { irs[in] = struct{}{} } inrsets[pkg] = irs // Push this pkg's imports into all parent reachsets. Not all // parents will necessarily have a reachset; none, some, or all // could have been poisoned by a different path than what we're on // right now. for _, ppkg := range path { if prs, exists := exrsets[ppkg]; exists { for ex := range w.ex { prs[ex] = struct{}{} } } if prs, exists := inrsets[ppkg]; exists { for in := range w.in { prs[in] = struct{}{} } } } // Now, recurse until done, or a false bubbles up, indicating the // path is poisoned. for in := range w.in { // It's possible, albeit weird, for a package to import itself. // If we try to visit self, though, then it erroneously poisons // the path, as it would be interpreted as grey. In practice, // self-imports are a no-op, so we can just skip it. if in == pkg { continue } clean := dfe(in, path) if !clean && backprop { // Path is poisoned. If we're backpropagating errors, then // the reachmap for the visitee was already deleted by the // path we're returning from; mark the visitee black, then // return false to bubble up the poison. This is OK to do // early, before exploring all internal imports, because the // outer loop visits all internal packages anyway. // // In fact, stopping early is preferable - white subpackages // won't have to iterate pointlessly through a parent path // with no reachset. colors[pkg] = black return false } } // Fully done with this pkg; no transitive problems. colors[pkg] = black return true case grey: // Import cycles can arise in healthy situations through xtests, so // allow them for now. // // FIXME(sdboyer) we need an improved model that allows us to // accurately reject real import cycles. return true // grey means an import cycle; guaranteed badness right here. You'd // hope we never encounter it in a dependency (really? you published // that code?), but we have to defend against it. //colors[pkg] = black //poison(append(path, pkg)) // poison self and parents case black: // black means we're revisiting a package that was already // completely explored. If it has an entry in exrsets, it completed // successfully. If not, it was poisoned, and we need to bubble the // poison back up. rs, exists := exrsets[pkg] if !exists { if backprop { // just poison parents; self was necessarily already poisoned poisonBlack(path, pkg) } return false } // If external reachset existed, internal must (even if empty) irs := inrsets[pkg] // It's good; pull over the imports from its reachset into all // non-poisoned parent reachsets for _, ppkg := range path { if prs, exists := exrsets[ppkg]; exists { for ex := range rs { prs[ex] = struct{}{} } } if prs, exists := inrsets[ppkg]; exists { for in := range irs { prs[in] = struct{}{} } } } return true default: panic(fmt.Sprintf("invalid color marker %v for %s", colors[pkg], pkg)) } } // Run the depth-first exploration. // // Don't bother computing graph sources, this straightforward loop works // comparably well, and fits nicely with an escape hatch in the dfe. var path []string for pkg := range workmap { // However, at least check that the package isn't already fully visited; // this saves a bit of time and implementation complexity inside the // closures. if colors[pkg] != black { dfe(pkg, path) } } type ie struct { Internal, External []string } // Flatten exrsets into reachmap rm := make(ReachMap) for pkg, rs := range exrsets { rlen := len(rs) if rlen == 0 { rm[pkg] = ie{} continue } edeps := make([]string, 0, rlen) for opkg := range rs { edeps = append(edeps, opkg) } sort.Strings(edeps) sets := rm[pkg] sets.External = edeps rm[pkg] = sets } // Flatten inrsets into reachmap for pkg, rs := range inrsets { rlen := len(rs) if rlen == 0 { continue } ideps := make([]string, 0, rlen) for opkg := range rs { ideps = append(ideps, opkg) } sort.Strings(ideps) sets := rm[pkg] sets.Internal = ideps rm[pkg] = sets } return rm, errmap } // eqOrSlashedPrefix checks to see if the prefix is either equal to the string, // or that it is a prefix and the next char in the string is "/". func eqOrSlashedPrefix(s, prefix string) bool { if !strings.HasPrefix(s, prefix) { return false } prflen, pathlen := len(prefix), len(s) return prflen == pathlen || strings.Index(s[prflen:], "/") == 0 } // helper func to merge, dedupe, and sort strings func dedupeStrings(s1, s2 []string) (r []string) { dedupe := make(map[string]bool) if len(s1) > 0 && len(s2) > 0 { for _, i := range s1 { dedupe[i] = true } for _, i := range s2 { dedupe[i] = true } for i := range dedupe { r = append(r, i) } // And then re-sort them sort.Strings(r) } else if len(s1) > 0 { r = s1 } else if len(s2) > 0 { r = s2 } return } func uniq(a []string) []string { if a == nil { return make([]string, 0) } var s string var i int if !sort.StringsAreSorted(a) { sort.Strings(a) } for _, t := range a { if t != s { a[i] = t i++ s = t } } return a[:i] } dep-0.3.2/internal/gps/pkgtree/pkgtree_test.go000066400000000000000000001533121317166637100214010ustar00rootroot00000000000000// Copyright 2017 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 pkgtree import ( "fmt" "go/build" "go/scanner" "go/token" "io/ioutil" "os" "path" "path/filepath" "reflect" "runtime" "strings" "testing" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps/paths" ) // PackageTree.ToReachMap() uses an easily separable algorithm, wmToReach(), // to turn a discovered set of packages and their imports into a proper pair of // internal and external reach maps. // // That algorithm is purely symbolic (no filesystem interaction), and thus is // easy to test. This is that test. func TestWorkmapToReach(t *testing.T) { empty := func() map[string]bool { return make(map[string]bool) } table := map[string]struct { workmap map[string]wm rm ReachMap em map[string]*ProblemImportError backprop bool }{ "single": { workmap: map[string]wm{ "foo": { ex: empty(), in: empty(), }, }, rm: ReachMap{ "foo": {}, }, }, "no external": { workmap: map[string]wm{ "foo": { ex: empty(), in: empty(), }, "foo/bar": { ex: empty(), in: empty(), }, }, rm: ReachMap{ "foo": {}, "foo/bar": {}, }, }, "no external with subpkg": { workmap: map[string]wm{ "foo": { ex: empty(), in: map[string]bool{ "foo/bar": true, }, }, "foo/bar": { ex: empty(), in: empty(), }, }, rm: ReachMap{ "foo": { Internal: []string{"foo/bar"}, }, "foo/bar": {}, }, }, "simple base transitive": { workmap: map[string]wm{ "foo": { ex: empty(), in: map[string]bool{ "foo/bar": true, }, }, "foo/bar": { ex: map[string]bool{ "baz": true, }, in: empty(), }, }, rm: ReachMap{ "foo": { External: []string{"baz"}, Internal: []string{"foo/bar"}, }, "foo/bar": { External: []string{"baz"}, }, }, }, "missing package is poison": { workmap: map[string]wm{ "A": { ex: map[string]bool{ "B/foo": true, }, in: map[string]bool{ "A/foo": true, // missing "A/bar": true, }, }, "A/bar": { ex: map[string]bool{ "B/baz": true, }, in: empty(), }, }, rm: ReachMap{ "A/bar": { External: []string{"B/baz"}, }, }, em: map[string]*ProblemImportError{ "A": { ImportPath: "A", Cause: []string{"A/foo"}, Err: missingPkgErr("A/foo"), }, }, backprop: true, }, "transitive missing package is poison": { workmap: map[string]wm{ "A": { ex: map[string]bool{ "B/foo": true, }, in: map[string]bool{ "A/foo": true, // transitively missing "A/quux": true, }, }, "A/foo": { ex: map[string]bool{ "C/flugle": true, }, in: map[string]bool{ "A/bar": true, // missing }, }, "A/quux": { ex: map[string]bool{ "B/baz": true, }, in: empty(), }, }, rm: ReachMap{ "A/quux": { External: []string{"B/baz"}, }, }, em: map[string]*ProblemImportError{ "A": { ImportPath: "A", Cause: []string{"A/foo", "A/bar"}, Err: missingPkgErr("A/bar"), }, "A/foo": { ImportPath: "A/foo", Cause: []string{"A/bar"}, Err: missingPkgErr("A/bar"), }, }, backprop: true, }, "err'd package is poison": { workmap: map[string]wm{ "A": { ex: map[string]bool{ "B/foo": true, }, in: map[string]bool{ "A/foo": true, // err'd "A/bar": true, }, }, "A/foo": { err: fmt.Errorf("err pkg"), }, "A/bar": { ex: map[string]bool{ "B/baz": true, }, in: empty(), }, }, rm: ReachMap{ "A/bar": { External: []string{"B/baz"}, }, }, em: map[string]*ProblemImportError{ "A": { ImportPath: "A", Cause: []string{"A/foo"}, Err: fmt.Errorf("err pkg"), }, "A/foo": { ImportPath: "A/foo", Err: fmt.Errorf("err pkg"), }, }, backprop: true, }, "transitive err'd package is poison": { workmap: map[string]wm{ "A": { ex: map[string]bool{ "B/foo": true, }, in: map[string]bool{ "A/foo": true, // transitively err'd "A/quux": true, }, }, "A/foo": { ex: map[string]bool{ "C/flugle": true, }, in: map[string]bool{ "A/bar": true, // err'd }, }, "A/bar": { err: fmt.Errorf("err pkg"), }, "A/quux": { ex: map[string]bool{ "B/baz": true, }, in: empty(), }, }, rm: ReachMap{ "A/quux": { External: []string{"B/baz"}, }, }, em: map[string]*ProblemImportError{ "A": { ImportPath: "A", Cause: []string{"A/foo", "A/bar"}, Err: fmt.Errorf("err pkg"), }, "A/foo": { ImportPath: "A/foo", Cause: []string{"A/bar"}, Err: fmt.Errorf("err pkg"), }, "A/bar": { ImportPath: "A/bar", Err: fmt.Errorf("err pkg"), }, }, backprop: true, }, "transitive err'd package no backprop": { workmap: map[string]wm{ "A": { ex: map[string]bool{ "B/foo": true, }, in: map[string]bool{ "A/foo": true, // transitively err'd "A/quux": true, }, }, "A/foo": { ex: map[string]bool{ "C/flugle": true, }, in: map[string]bool{ "A/bar": true, // err'd }, }, "A/bar": { err: fmt.Errorf("err pkg"), }, "A/quux": { ex: map[string]bool{ "B/baz": true, }, in: empty(), }, }, rm: ReachMap{ "A": { Internal: []string{"A/bar", "A/foo", "A/quux"}, //Internal: []string{"A/foo", "A/quux"}, External: []string{"B/baz", "B/foo", "C/flugle"}, }, "A/foo": { Internal: []string{"A/bar"}, External: []string{"C/flugle"}, }, "A/quux": { External: []string{"B/baz"}, }, }, em: map[string]*ProblemImportError{ "A/bar": { ImportPath: "A/bar", Err: fmt.Errorf("err pkg"), }, }, }, // The following tests are mostly about regressions and weeding out // weird assumptions "internal diamond": { workmap: map[string]wm{ "A": { ex: map[string]bool{ "B/foo": true, }, in: map[string]bool{ "A/foo": true, "A/bar": true, }, }, "A/foo": { ex: map[string]bool{ "C": true, }, in: map[string]bool{ "A/quux": true, }, }, "A/bar": { ex: map[string]bool{ "D": true, }, in: map[string]bool{ "A/quux": true, }, }, "A/quux": { ex: map[string]bool{ "B/baz": true, }, in: empty(), }, }, rm: ReachMap{ "A": { External: []string{ "B/baz", "B/foo", "C", "D", }, Internal: []string{ "A/bar", "A/foo", "A/quux", }, }, "A/foo": { External: []string{ "B/baz", "C", }, Internal: []string{ "A/quux", }, }, "A/bar": { External: []string{ "B/baz", "D", }, Internal: []string{ "A/quux", }, }, "A/quux": { External: []string{"B/baz"}, }, }, }, "rootmost gets imported": { workmap: map[string]wm{ "A": { ex: map[string]bool{ "B": true, }, in: empty(), }, "A/foo": { ex: map[string]bool{ "C": true, }, in: map[string]bool{ "A": true, }, }, }, rm: ReachMap{ "A": { External: []string{"B"}, }, "A/foo": { External: []string{ "B", "C", }, Internal: []string{ "A", }, }, }, }, } for name, fix := range table { name, fix := name, fix t.Run(name, func(t *testing.T) { t.Parallel() // Avoid erroneous errors by initializing the fixture's error map if // needed if fix.em == nil { fix.em = make(map[string]*ProblemImportError) } rm, em := wmToReach(fix.workmap, fix.backprop) if !reflect.DeepEqual(rm, fix.rm) { //t.Error(pretty.Sprintf("wmToReach(%q): Did not get expected reach map:\n\t(GOT): %s\n\t(WNT): %s", name, rm, fix.rm)) t.Errorf("Did not get expected reach map:\n\t(GOT): %s\n\t(WNT): %s", rm, fix.rm) } if !reflect.DeepEqual(em, fix.em) { //t.Error(pretty.Sprintf("wmToReach(%q): Did not get expected error map:\n\t(GOT): %# v\n\t(WNT): %# v", name, em, fix.em)) t.Errorf("Did not get expected error map:\n\t(GOT): %v\n\t(WNT): %v", em, fix.em) } }) } } func TestListPackagesNoDir(t *testing.T) { out, err := ListPackages(filepath.Join(getTestdataRootDir(t), "notexist"), "notexist") if err == nil { t.Error("ListPackages should have errored on pointing to a nonexistent dir") } if !reflect.DeepEqual(PackageTree{}, out) { t.Error("should've gotten back an empty PackageTree") } } func TestListPackages(t *testing.T) { srcdir := filepath.Join(getTestdataRootDir(t), "src") j := func(s ...string) string { return filepath.Join(srcdir, filepath.Join(s...)) } table := map[string]struct { fileRoot string importRoot string out PackageTree err error }{ "empty": { fileRoot: j("empty"), importRoot: "empty", out: PackageTree{ ImportRoot: "empty", Packages: map[string]PackageOrErr{ "empty": { Err: &build.NoGoError{ Dir: j("empty"), }, }, }, }, }, "code only": { fileRoot: j("simple"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, }, }, }, "impose import path": { fileRoot: j("simple"), importRoot: "arbitrary", out: PackageTree{ ImportRoot: "arbitrary", Packages: map[string]PackageOrErr{ "arbitrary": { P: Package{ ImportPath: "arbitrary", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, }, }, }, "test only": { fileRoot: j("t"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{}, TestImports: []string{ "math/rand", "strconv", }, }, }, }, }, }, "xtest only": { fileRoot: j("xt"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{}, TestImports: []string{ "sort", "strconv", }, }, }, }, }, }, "code and test": { fileRoot: j("simplet"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, TestImports: []string{ "math/rand", "strconv", }, }, }, }, }, }, "code and xtest": { fileRoot: j("simplext"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, TestImports: []string{ "sort", "strconv", }, }, }, }, }, }, "code, test, xtest": { fileRoot: j("simpleallt"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, TestImports: []string{ "math/rand", "sort", "strconv", }, }, }, }, }, }, "one pkg multifile": { fileRoot: j("m1p"), importRoot: "m1p", out: PackageTree{ ImportRoot: "m1p", Packages: map[string]PackageOrErr{ "m1p": { P: Package{ ImportPath: "m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, }, }, "one nested below": { fileRoot: j("nest"), importRoot: "nest", out: PackageTree{ ImportRoot: "nest", Packages: map[string]PackageOrErr{ "nest": { P: Package{ ImportPath: "nest", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, "nest/m1p": { P: Package{ ImportPath: "nest/m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, }, }, "malformed go file": { fileRoot: j("bad"), importRoot: "bad", out: PackageTree{ ImportRoot: "bad", Packages: map[string]PackageOrErr{ "bad": { Err: scanner.ErrorList{ &scanner.Error{ Pos: token.Position{ Filename: j("bad", "bad.go"), Offset: 273, Line: 6, Column: 43, }, Msg: "expected 'package', found 'EOF'", }, }, }, }, }, }, "two nested under empty root": { fileRoot: j("ren"), importRoot: "ren", out: PackageTree{ ImportRoot: "ren", Packages: map[string]PackageOrErr{ "ren": { Err: &build.NoGoError{ Dir: j("ren"), }, }, "ren/m1p": { P: Package{ ImportPath: "ren/m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, "ren/simple": { P: Package{ ImportPath: "ren/simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, }, }, }, "internal name mismatch": { fileRoot: j("doublenest"), importRoot: "doublenest", out: PackageTree{ ImportRoot: "doublenest", Packages: map[string]PackageOrErr{ "doublenest": { P: Package{ ImportPath: "doublenest", CommentPath: "", Name: "base", Imports: []string{ "github.com/golang/dep/internal/gps", "go/parser", }, }, }, "doublenest/namemismatch": { P: Package{ ImportPath: "doublenest/namemismatch", CommentPath: "", Name: "nm", Imports: []string{ "github.com/Masterminds/semver", "os", }, }, }, "doublenest/namemismatch/m1p": { P: Package{ ImportPath: "doublenest/namemismatch/m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, }, }, "file and importroot mismatch": { fileRoot: j("doublenest"), importRoot: "other", out: PackageTree{ ImportRoot: "other", Packages: map[string]PackageOrErr{ "other": { P: Package{ ImportPath: "other", CommentPath: "", Name: "base", Imports: []string{ "github.com/golang/dep/internal/gps", "go/parser", }, }, }, "other/namemismatch": { P: Package{ ImportPath: "other/namemismatch", CommentPath: "", Name: "nm", Imports: []string{ "github.com/Masterminds/semver", "os", }, }, }, "other/namemismatch/m1p": { P: Package{ ImportPath: "other/namemismatch/m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, }, }, "code and ignored main": { fileRoot: j("igmain"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", "unicode", }, }, }, }, }, }, "code and ignored main, order check": { fileRoot: j("igmainfirst"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", "unicode", }, }, }, }, }, }, "code and ignored main with comment leader": { fileRoot: j("igmainlong"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", "unicode", }, }, }, }, }, }, "code, tests, and ignored main": { fileRoot: j("igmaint"), importRoot: "simple", out: PackageTree{ ImportRoot: "simple", Packages: map[string]PackageOrErr{ "simple": { P: Package{ ImportPath: "simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", "unicode", }, TestImports: []string{ "math/rand", "strconv", }, }, }, }, }, }, // imports a missing pkg "missing import": { fileRoot: j("missing"), importRoot: "missing", out: PackageTree{ ImportRoot: "missing", Packages: map[string]PackageOrErr{ "missing": { P: Package{ ImportPath: "missing", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "missing/missing", "sort", }, }, }, "missing/m1p": { P: Package{ ImportPath: "missing/m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, }, }, // import cycle of three packages. ListPackages doesn't do anything // special with cycles - that's the reach calculator's job - so this is // error-free "import cycle, len 3": { fileRoot: j("cycle"), importRoot: "cycle", out: PackageTree{ ImportRoot: "cycle", Packages: map[string]PackageOrErr{ "cycle": { P: Package{ ImportPath: "cycle", CommentPath: "", Name: "cycle", Imports: []string{ "cycle/one", "github.com/golang/dep/internal/gps", }, }, }, "cycle/one": { P: Package{ ImportPath: "cycle/one", CommentPath: "", Name: "one", Imports: []string{ "cycle/two", "github.com/golang/dep/internal/gps", }, }, }, "cycle/two": { P: Package{ ImportPath: "cycle/two", CommentPath: "", Name: "two", Imports: []string{ "cycle", "github.com/golang/dep/internal/gps", }, }, }, }, }, }, // has disallowed dir names "disallowed dirs": { fileRoot: j("disallow"), importRoot: "disallow", out: PackageTree{ ImportRoot: "disallow", Packages: map[string]PackageOrErr{ "disallow": { P: Package{ ImportPath: "disallow", CommentPath: "", Name: "disallow", Imports: []string{ "disallow/testdata", "github.com/golang/dep/internal/gps", "sort", }, }, }, "disallow/testdata": { P: Package{ ImportPath: "disallow/testdata", CommentPath: "", Name: "testdata", Imports: []string{ "hash", }, }, }, }, }, }, "relative imports": { fileRoot: j("relimport"), importRoot: "relimport", out: PackageTree{ ImportRoot: "relimport", Packages: map[string]PackageOrErr{ "relimport": { P: Package{ ImportPath: "relimport", CommentPath: "", Name: "relimport", Imports: []string{ "sort", }, }, }, "relimport/dot": { P: Package{ ImportPath: "relimport/dot", CommentPath: "", Name: "dot", Imports: []string{ ".", "sort", }, }, }, "relimport/dotdot": { Err: &LocalImportsError{ Dir: j("relimport/dotdot"), ImportPath: "relimport/dotdot", LocalImports: []string{ "..", }, }, }, "relimport/dotslash": { Err: &LocalImportsError{ Dir: j("relimport/dotslash"), ImportPath: "relimport/dotslash", LocalImports: []string{ "./simple", }, }, }, "relimport/dotdotslash": { Err: &LocalImportsError{ Dir: j("relimport/dotdotslash"), ImportPath: "relimport/dotdotslash", LocalImports: []string{ "../github.com/golang/dep/internal/gps", }, }, }, }, }, }, "skip underscore": { fileRoot: j("skip_"), importRoot: "skip_", out: PackageTree{ ImportRoot: "skip_", Packages: map[string]PackageOrErr{ "skip_": { P: Package{ ImportPath: "skip_", CommentPath: "", Name: "skip", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, }, }, }, // This case mostly exists for the PackageTree methods, but it does // cover a bit of range "varied": { fileRoot: j("varied"), importRoot: "varied", out: PackageTree{ ImportRoot: "varied", Packages: map[string]PackageOrErr{ "varied": { P: Package{ ImportPath: "varied", CommentPath: "", Name: "main", Imports: []string{ "net/http", "varied/namemismatch", "varied/otherpath", "varied/simple", }, }, }, "varied/otherpath": { P: Package{ ImportPath: "varied/otherpath", CommentPath: "", Name: "otherpath", Imports: []string{}, TestImports: []string{ "varied/m1p", }, }, }, "varied/simple": { P: Package{ ImportPath: "varied/simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "go/parser", "varied/simple/another", }, }, }, "varied/simple/another": { P: Package{ ImportPath: "varied/simple/another", CommentPath: "", Name: "another", Imports: []string{ "hash", "varied/m1p", }, TestImports: []string{ "encoding/binary", }, }, }, "varied/namemismatch": { P: Package{ ImportPath: "varied/namemismatch", CommentPath: "", Name: "nm", Imports: []string{ "github.com/Masterminds/semver", "os", }, }, }, "varied/m1p": { P: Package{ ImportPath: "varied/m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, }, }, "varied with hidden dirs": { fileRoot: j("varied_hidden"), importRoot: "varied", out: PackageTree{ ImportRoot: "varied", Packages: map[string]PackageOrErr{ "varied": { P: Package{ ImportPath: "varied", CommentPath: "", Name: "main", Imports: []string{ "net/http", "varied/_frommain", "varied/simple", }, }, }, "varied/always": { P: Package{ ImportPath: "varied/always", CommentPath: "", Name: "always", Imports: []string{}, TestImports: []string{ "varied/.onlyfromtests", }, }, }, "varied/.onlyfromtests": { P: Package{ ImportPath: "varied/.onlyfromtests", CommentPath: "", Name: "onlyfromtests", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", "varied/_secondorder", }, }, }, "varied/simple": { P: Package{ ImportPath: "varied/simple", CommentPath: "", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "go/parser", "varied/simple/testdata", }, }, }, "varied/simple/testdata": { P: Package{ ImportPath: "varied/simple/testdata", CommentPath: "", Name: "testdata", Imports: []string{ "varied/dotdotslash", }, }, }, "varied/_secondorder": { P: Package{ ImportPath: "varied/_secondorder", CommentPath: "", Name: "secondorder", Imports: []string{ "hash", }, }, }, "varied/_never": { P: Package{ ImportPath: "varied/_never", CommentPath: "", Name: "never", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, "varied/_frommain": { P: Package{ ImportPath: "varied/_frommain", CommentPath: "", Name: "frommain", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, "varied/dotdotslash": { Err: &LocalImportsError{ Dir: j("varied_hidden/dotdotslash"), ImportPath: "varied/dotdotslash", LocalImports: []string{ "../github.com/golang/dep/internal/gps", }, }, }, }, }, }, "invalid buildtag like comments should be ignored": { fileRoot: j("buildtag"), importRoot: "buildtag", out: PackageTree{ ImportRoot: "buildtag", Packages: map[string]PackageOrErr{ "buildtag": { P: Package{ ImportPath: "buildtag", CommentPath: "", Name: "buildtag", Imports: []string{ "sort", }, }, }, }, }, }, "does not skip directories starting with '.'": { fileRoot: j("dotgodir"), importRoot: "dotgodir", out: PackageTree{ ImportRoot: "dotgodir", Packages: map[string]PackageOrErr{ "dotgodir": { P: Package{ ImportPath: "dotgodir", Imports: []string{}, }, }, "dotgodir/.go": { P: Package{ ImportPath: "dotgodir/.go", Name: "dot", Imports: []string{}, }, }, "dotgodir/foo.go": { P: Package{ ImportPath: "dotgodir/foo.go", Name: "foo", Imports: []string{"sort"}, }, }, "dotgodir/.m1p": { P: Package{ ImportPath: "dotgodir/.m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, }, }, "canonical": { fileRoot: j("canonical"), importRoot: "canonical", out: PackageTree{ ImportRoot: "canonical", Packages: map[string]PackageOrErr{ "canonical": { P: Package{ ImportPath: "canonical", CommentPath: "canonical", Name: "pkg", Imports: []string{}, }, }, "canonical/sub": { P: Package{ ImportPath: "canonical/sub", CommentPath: "canonical/subpackage", Name: "sub", Imports: []string{}, }, }, }, }, }, "conflicting canonical comments": { fileRoot: j("canon_confl"), importRoot: "canon_confl", out: PackageTree{ ImportRoot: "canon_confl", Packages: map[string]PackageOrErr{ "canon_confl": { Err: &ConflictingImportComments{ ImportPath: "canon_confl", ConflictingImportComments: []string{ "vanity1", "vanity2", }, }, }, }, }, }, "non-canonical": { fileRoot: j("canonical"), importRoot: "noncanonical", out: PackageTree{ ImportRoot: "noncanonical", Packages: map[string]PackageOrErr{ "noncanonical": PackageOrErr{ Err: &NonCanonicalImportRoot{ ImportRoot: "noncanonical", Canonical: "canonical", }, }, "noncanonical/sub": PackageOrErr{ Err: &NonCanonicalImportRoot{ ImportRoot: "noncanonical", Canonical: "canonical/subpackage", }, }, }, }, }, } for name, fix := range table { t.Run(name, func(t *testing.T) { if _, err := os.Stat(fix.fileRoot); err != nil { t.Errorf("error on fileRoot %s: %s", fix.fileRoot, err) } out, err := ListPackages(fix.fileRoot, fix.importRoot) if err != nil && fix.err == nil { t.Errorf("Received error but none expected: %s", err) } else if fix.err != nil && err == nil { t.Errorf("Error expected but none received") } else if fix.err != nil && err != nil { if !reflect.DeepEqual(fix.err, err) { t.Errorf("Did not receive expected error:\n\t(GOT): %s\n\t(WNT): %s", err, fix.err) } } if fix.out.ImportRoot != "" && fix.out.Packages != nil { if !reflect.DeepEqual(out, fix.out) { if fix.out.ImportRoot != out.ImportRoot { t.Errorf("Expected ImportRoot %s, got %s", fix.out.ImportRoot, out.ImportRoot) } // overwrite the out one to see if we still have a real problem out.ImportRoot = fix.out.ImportRoot if !reflect.DeepEqual(out, fix.out) { // TODO (kris-nova) We need to disable this bypass here, and in the .travis.yml // as soon as dep#501 is fixed bypass := os.Getenv("DEPTESTBYPASS501") if bypass != "" { t.Log("bypassing fix.out.Packages check < 2") } else { if len(fix.out.Packages) < 2 { t.Errorf("Did not get expected PackageOrErrs:\n\t(GOT): %#v\n\t(WNT): %#v", out, fix.out) } else { seen := make(map[string]bool) for path, perr := range fix.out.Packages { seen[path] = true if operr, exists := out.Packages[path]; !exists { t.Errorf("Expected PackageOrErr for path %s was missing from output:\n\t%s", path, perr) } else { if !reflect.DeepEqual(perr, operr) { t.Errorf("PkgOrErr for path %s was not as expected:\n\t(GOT): %#v\n\t(WNT): %#v", path, operr, perr) } } } for path, operr := range out.Packages { if seen[path] { continue } t.Errorf("Got PackageOrErr for path %s, but none was expected:\n\t%s", path, operr) } } } } } } }) } } // Transform Table Test that operates solely on the varied_hidden fixture. func TestTrimHiddenPackages(t *testing.T) { base, err := ListPackages(filepath.Join(getTestdataRootDir(t), "src", "varied_hidden"), "varied") if err != nil { panic(err) } table := map[string]struct { main, tests bool // literal params to TrimHiddenPackages ignore []string // transformed into IgnoredRuleset param to TrimHiddenPackages trimmed []string // list of packages that should be trimmed in result PackageTree }{ // All of these implicitly verify that the varied/_never pkg is always // trimmed, and that the varied/dotdotslash pkg is not trimmed even // though it has errors. "minimal trim": { main: true, tests: true, }, "ignore simple, lose testdata": { main: true, tests: true, ignore: []string{"simple"}, trimmed: []string{"simple", "simple/testdata"}, }, "no tests": { main: true, tests: false, trimmed: []string{".onlyfromtests", "_secondorder"}, }, "ignore a reachable hidden": { main: true, tests: true, ignore: []string{"_secondorder"}, trimmed: []string{"_secondorder"}, }, "ignore a reachable hidden with another hidden solely reachable through it": { main: true, tests: true, ignore: []string{".onlyfromtests"}, trimmed: []string{".onlyfromtests", "_secondorder"}, }, "no main": { main: false, tests: true, trimmed: []string{"", "_frommain"}, }, "no main or tests": { main: false, tests: false, trimmed: []string{"", "_frommain", ".onlyfromtests", "_secondorder"}, }, "no main or tests and ignore simple": { main: false, tests: false, ignore: []string{"simple"}, trimmed: []string{"", "_frommain", ".onlyfromtests", "_secondorder", "simple", "simple/testdata"}, }, } for name, fix := range table { t.Run(name, func(t *testing.T) { want := base.Copy() var ig []string for _, v := range fix.ignore { ig = append(ig, path.Join("varied", v)) } got := base.TrimHiddenPackages(fix.main, fix.tests, NewIgnoredRuleset(ig)) for _, ip := range append(fix.trimmed, "_never") { ip = path.Join("varied", ip) if _, has := want.Packages[ip]; !has { panic(fmt.Sprintf("bad input, %s does not exist in fixture ptree", ip)) } delete(want.Packages, ip) } if !reflect.DeepEqual(want, got) { if len(want.Packages) < 2 { t.Errorf("Did not get expected PackageOrErrs:\n\t(GOT): %#v\n\t(WNT): %#v", got, want) } else { seen := make(map[string]bool) for path, perr := range want.Packages { seen[path] = true if operr, exists := got.Packages[path]; !exists { t.Errorf("Expected PackageOrErr for path %s was missing from output:\n\t%s", path, perr) } else { if !reflect.DeepEqual(perr, operr) { t.Errorf("PkgOrErr for path %s was not as expected:\n\t(GOT): %#v\n\t(WNT): %#v", path, operr, perr) } } } for path, operr := range got.Packages { if seen[path] { continue } t.Errorf("Got PackageOrErr for path %s, but none was expected:\n\t%s", path, operr) } } } }) } } // Test that ListPackages skips directories for which it lacks permissions to // enter and files it lacks permissions to read. func TestListPackagesNoPerms(t *testing.T) { if runtime.GOOS == "windows" { // TODO This test doesn't work on windows because I wasn't able to easily // figure out how to chmod a dir in a way that made it untraversable. // // It's not a big deal, though, because the os.IsPermission() call we // use in the real code is effectively what's being tested here, and // that's designed to be cross-platform. So, if the unix tests pass, we // have every reason to believe windows tests would too, if the situation // arises. t.Skip() } tmp, err := ioutil.TempDir("", "listpkgsnp") if err != nil { t.Fatalf("Failed to create temp dir: %s", err) } defer os.RemoveAll(tmp) srcdir := filepath.Join(getTestdataRootDir(t), "src", "ren") workdir := filepath.Join(tmp, "ren") fs.CopyDir(srcdir, workdir) // chmod the simple dir and m1p/b.go file so they can't be read err = os.Chmod(filepath.Join(workdir, "simple"), 0) if err != nil { t.Fatalf("Error while chmodding simple dir: %s", err) } os.Chmod(filepath.Join(workdir, "m1p", "b.go"), 0) if err != nil { t.Fatalf("Error while chmodding b.go file: %s", err) } want := PackageTree{ ImportRoot: "ren", Packages: map[string]PackageOrErr{ "ren": { Err: &build.NoGoError{ Dir: workdir, }, }, "ren/m1p": { P: Package{ ImportPath: "ren/m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, }, } got, err := ListPackages(workdir, "ren") if err != nil { t.Fatalf("Unexpected err from ListPackages: %s", err) } if want.ImportRoot != got.ImportRoot { t.Fatalf("Expected ImportRoot %s, got %s", want.ImportRoot, got.ImportRoot) } if !reflect.DeepEqual(got, want) { t.Errorf("Did not get expected PackageOrErrs:\n\t(GOT): %#v\n\t(WNT): %#v", got, want) if len(got.Packages) != 2 { if len(got.Packages) == 3 { t.Error("Wrong number of PackageOrErrs - did 'simple' subpackage make it into results somehow?") } else { t.Error("Wrong number of PackageOrErrs") } } if got.Packages["ren"].Err == nil { t.Error("Should have gotten error on empty root directory") } if !reflect.DeepEqual(got.Packages["ren/m1p"].P.Imports, want.Packages["ren/m1p"].P.Imports) { t.Error("Mismatch between imports in m1p") } } } func TestToReachMap(t *testing.T) { // There's enough in the 'varied' test case to test most of what matters vptree, err := ListPackages(filepath.Join(getTestdataRootDir(t), "src", "github.com", "example", "varied"), "github.com/example/varied") if err != nil { t.Fatalf("ListPackages failed on varied test case: %s", err) } // Helper to add github.com/varied/example prefix b := func(s string) string { if s == "" { return "github.com/example/varied" } return "github.com/example/varied/" + s } bl := func(parts ...string) string { for k, s := range parts { parts[k] = b(s) } return strings.Join(parts, " ") } // Set up vars for validate closure var want ReachMap var name string var main, tests bool var ignore []string validate := func() { got, em := vptree.ToReachMap(main, tests, true, NewIgnoredRuleset(ignore)) if len(em) != 0 { t.Errorf("Should not have any error packages from ToReachMap, got %s", em) } if !reflect.DeepEqual(want, got) { seen := make(map[string]bool) for ip, wantie := range want { seen[ip] = true if gotie, exists := got[ip]; !exists { t.Errorf("ver(%q): expected import path %s was not present in result", name, ip) } else { if !reflect.DeepEqual(wantie, gotie) { t.Errorf("ver(%q): did not get expected import set for pkg %s:\n\t(GOT): %#v\n\t(WNT): %#v", name, ip, gotie, wantie) } } } for ip, ie := range got { if seen[ip] { continue } t.Errorf("ver(%q): Got packages for import path %s, but none were expected:\n\t%s", name, ip, ie) } } } // maps of each internal package, and their expected external and internal // imports in the maximal case. allex := map[string][]string{ b(""): {"encoding/binary", "github.com/Masterminds/semver", "github.com/golang/dep/internal/gps", "go/parser", "hash", "net/http", "os", "sort"}, b("m1p"): {"github.com/golang/dep/internal/gps", "os", "sort"}, b("namemismatch"): {"github.com/Masterminds/semver", "os"}, b("otherpath"): {"github.com/golang/dep/internal/gps", "os", "sort"}, b("simple"): {"encoding/binary", "github.com/golang/dep/internal/gps", "go/parser", "hash", "os", "sort"}, b("simple/another"): {"encoding/binary", "github.com/golang/dep/internal/gps", "hash", "os", "sort"}, } allin := map[string][]string{ b(""): {b("m1p"), b("namemismatch"), b("otherpath"), b("simple"), b("simple/another")}, b("m1p"): {}, b("namemismatch"): {}, b("otherpath"): {b("m1p")}, b("simple"): {b("m1p"), b("simple/another")}, b("simple/another"): {b("m1p")}, } // build a map to validate the exception inputs. do this because shit is // hard enough to keep track of that it's preferable not to have silent // success if a typo creeps in and we're trying to except an import that // isn't in a pkg in the first place valid := make(map[string]map[string]bool) for ip, expkgs := range allex { m := make(map[string]bool) for _, pkg := range expkgs { m[pkg] = true } valid[ip] = m } validin := make(map[string]map[string]bool) for ip, inpkgs := range allin { m := make(map[string]bool) for _, pkg := range inpkgs { m[pkg] = true } validin[ip] = m } // helper to compose want, excepting specific packages // // this makes it easier to see what we're taking out on each test except := func(pkgig ...string) { // reinit expect with everything from all want = make(ReachMap) for ip, expkgs := range allex { var ie struct{ Internal, External []string } inpkgs := allin[ip] lenex, lenin := len(expkgs), len(inpkgs) if lenex > 0 { ie.External = make([]string, len(expkgs)) copy(ie.External, expkgs) } if lenin > 0 { ie.Internal = make([]string, len(inpkgs)) copy(ie.Internal, inpkgs) } want[ip] = ie } // now build the dropmap drop := make(map[string]map[string]bool) for _, igstr := range pkgig { // split on space; first elem is import path to pkg, the rest are // the imports to drop. not := strings.Split(igstr, " ") var ip string ip, not = not[0], not[1:] if _, exists := valid[ip]; !exists { t.Fatalf("%s is not a package name we're working with, doofus", ip) } // if only a single elem was passed, though, drop the whole thing if len(not) == 0 { delete(want, ip) continue } m := make(map[string]bool) for _, imp := range not { if strings.HasPrefix(imp, "github.com/example/varied") { if !validin[ip][imp] { t.Fatalf("%s is not a reachable import of %s, even in the all case", imp, ip) } } else { if !valid[ip][imp] { t.Fatalf("%s is not a reachable import of %s, even in the all case", imp, ip) } } m[imp] = true } drop[ip] = m } for ip, ie := range want { var nie struct{ Internal, External []string } for _, imp := range ie.Internal { if !drop[ip][imp] { nie.Internal = append(nie.Internal, imp) } } for _, imp := range ie.External { if !drop[ip][imp] { nie.External = append(nie.External, imp) } } want[ip] = nie } } /* PREP IS DONE, BEGIN ACTUAL TESTING */ // first, validate all name = "all" main, tests = true, true except() validate() // turn off main pkgs, which necessarily doesn't affect anything else name = "no main" main = false except(b("")) validate() // ignoring the "varied" pkg has same effect as disabling main pkgs name = "ignore root" ignore = []string{b("")} main = true validate() // when we drop tests, varied/otherpath loses its link to varied/m1p and // varied/simple/another loses its test import, which has a fairly big // cascade name = "no tests" tests = false ignore = nil except( b("")+" encoding/binary", b("simple")+" encoding/binary", b("simple/another")+" encoding/binary", b("otherpath")+" github.com/golang/dep/internal/gps os sort", ) // almost the same as previous, but varied just goes away completely name = "no main or tests" main = false except( b(""), b("simple")+" encoding/binary", b("simple/another")+" encoding/binary", bl("otherpath", "m1p")+" github.com/golang/dep/internal/gps os sort", ) validate() // focus on ignores now, so reset main and tests main, tests = true, true // now, the fun stuff. punch a hole in the middle by cutting out // varied/simple name = "ignore varied/simple" ignore = []string{b("simple")} except( // root pkg loses on everything in varied/simple/another // FIXME this is a bit odd, but should probably exclude m1p as well, // because it actually shouldn't be valid to import a package that only // has tests. This whole model misses that nuance right now, though. bl("", "simple", "simple/another")+" hash encoding/binary go/parser", b("simple"), ) validate() // widen the hole by excluding otherpath name = "ignore varied/{otherpath,simple}" ignore = []string{ b("otherpath"), b("simple"), } except( // root pkg loses on everything in varied/simple/another and varied/m1p bl("", "simple", "simple/another", "m1p", "otherpath")+" hash encoding/binary go/parser github.com/golang/dep/internal/gps sort", b("otherpath"), b("simple"), ) validate() // remove namemismatch, though we're mostly beating a dead horse now name = "ignore varied/{otherpath,simple,namemismatch}" ignore = append(ignore, b("namemismatch")) except( // root pkg loses on everything in varied/simple/another and varied/m1p bl("", "simple", "simple/another", "m1p", "otherpath", "namemismatch")+" hash encoding/binary go/parser github.com/golang/dep/internal/gps sort os github.com/Masterminds/semver", b("otherpath"), b("simple"), b("namemismatch"), ) validate() } func TestFlattenReachMap(t *testing.T) { // There's enough in the 'varied' test case to test most of what matters vptree, err := ListPackages(filepath.Join(getTestdataRootDir(t), "src", "github.com", "example", "varied"), "github.com/example/varied") if err != nil { t.Fatalf("listPackages failed on varied test case: %s", err) } all := []string{ "encoding/binary", "github.com/Masterminds/semver", "github.com/golang/dep/internal/gps", "go/parser", "hash", "net/http", "os", "sort", } // helper to generate testCase.expect as: all, except for a couple packages // // this makes it easier to see what we're taking out on each test except := func(not ...string) []string { expect := make([]string, len(all)-len(not)) drop := make(map[string]bool) for _, npath := range not { drop[npath] = true } k := 0 for _, path := range all { if !drop[path] { expect[k] = path k++ } } return expect } for _, testCase := range []*flattenReachMapCase{ // everything on { name: "simple", expect: except(), isStdLibFn: nil, main: true, tests: true, }, // no stdlib { name: "no stdlib", expect: except("encoding/binary", "go/parser", "hash", "net/http", "os", "sort"), isStdLibFn: paths.IsStandardImportPath, main: true, tests: true, }, // stdlib back in; now exclude tests, which should just cut one { name: "no tests", expect: except("encoding/binary"), isStdLibFn: nil, main: true, tests: false, }, // Now skip main, which still just cuts out one { name: "no main", expect: except("net/http"), isStdLibFn: nil, main: false, tests: true, }, // No test and no main, which should be additive { name: "no tests, no main", expect: except("net/http", "encoding/binary"), isStdLibFn: nil, main: false, tests: false, }, // now, the ignore tests. turn main and tests back on // start with non-matching { name: "non-matching ignore", expect: except(), isStdLibFn: nil, main: true, tests: true, ignore: NewIgnoredRuleset([]string{ "nomatch", }), }, // should have the same effect as ignoring main { name: "ignore the root", expect: except("net/http"), isStdLibFn: nil, main: true, tests: true, ignore: NewIgnoredRuleset([]string{ "github.com/example/varied", }), }, // now drop a more interesting one // we get github.com/golang/dep/internal/gps from m1p, too, so it should still be there { name: "ignore simple", expect: except("go/parser"), isStdLibFn: nil, main: true, tests: true, ignore: NewIgnoredRuleset([]string{ "github.com/example/varied/simple", }), }, // now drop two { name: "ignore simple and nameismatch", expect: except("go/parser", "github.com/Masterminds/semver"), isStdLibFn: nil, main: true, tests: true, ignore: NewIgnoredRuleset([]string{ "github.com/example/varied/simple", "github.com/example/varied/namemismatch", }), }, // make sure tests and main play nice with ignore { name: "ignore simple and nameismatch, and no tests", expect: except("go/parser", "github.com/Masterminds/semver", "encoding/binary"), isStdLibFn: nil, main: true, tests: false, ignore: NewIgnoredRuleset([]string{ "github.com/example/varied/simple", "github.com/example/varied/namemismatch", }), }, { name: "ignore simple and namemismatch, and no main", expect: except("go/parser", "github.com/Masterminds/semver", "net/http"), isStdLibFn: nil, main: false, tests: true, ignore: NewIgnoredRuleset([]string{ "github.com/example/varied/simple", "github.com/example/varied/namemismatch", }), }, { name: "ignore simple and namemismatch, and no main or tests", expect: except("go/parser", "github.com/Masterminds/semver", "net/http", "encoding/binary"), isStdLibFn: nil, main: false, tests: false, ignore: NewIgnoredRuleset([]string{ "github.com/example/varied/simple", "github.com/example/varied/namemismatch", }), }, // ignore two that should knock out gps { name: "ignore both importers", expect: except("sort", "github.com/golang/dep/internal/gps", "go/parser"), isStdLibFn: nil, main: true, tests: true, ignore: NewIgnoredRuleset([]string{ "github.com/example/varied/simple", "github.com/example/varied/m1p", }), }, // finally, directly ignore some external packages { name: "ignore external", expect: except("sort", "github.com/golang/dep/internal/gps", "go/parser"), isStdLibFn: nil, main: true, tests: true, ignore: NewIgnoredRuleset([]string{ "github.com/golang/dep/internal/gps", "go/parser", "sort", }), }, } { t.Run(testCase.name, testFlattenReachMap(&vptree, testCase)) } // The only thing varied *doesn't* cover is disallowed path patterns ptree, err := ListPackages(filepath.Join(getTestdataRootDir(t), "src", "disallow"), "disallow") if err != nil { t.Fatalf("ListPackages failed on disallow test case: %s", err) } t.Run("disallowed", testFlattenReachMap(&ptree, &flattenReachMapCase{ name: "disallowed", expect: []string{"github.com/golang/dep/internal/gps", "hash", "sort"}, isStdLibFn: nil, main: false, tests: false, })) } type flattenReachMapCase struct { expect []string name string ignore *IgnoredRuleset main, tests bool isStdLibFn func(string) bool } func testFlattenReachMap(ptree *PackageTree, testCase *flattenReachMapCase) func(*testing.T) { return func(t *testing.T) { t.Parallel() rm, em := ptree.ToReachMap(testCase.main, testCase.tests, true, testCase.ignore) if len(em) != 0 { t.Errorf("Should not have any error pkgs from ToReachMap, got %s", em) } result := rm.FlattenFn(testCase.isStdLibFn) if !reflect.DeepEqual(testCase.expect, result) { t.Errorf("Wrong imports in %q case:\n\t(GOT): %s\n\t(WNT): %s", testCase.name, result, testCase.expect) } } } // Verify that we handle import cycles correctly - drop em all func TestToReachMapCycle(t *testing.T) { ptree, err := ListPackages(filepath.Join(getTestdataRootDir(t), "src", "cycle"), "cycle") if err != nil { t.Fatalf("ListPackages failed on cycle test case: %s", err) } rm, em := ptree.ToReachMap(true, true, false, nil) if len(em) != 0 { t.Errorf("Should not have any error packages from ToReachMap, got %s", em) } // FIXME TEMPORARILY COMMENTED UNTIL WE CREATE A BETTER LISTPACKAGES MODEL - //if len(rm) > 0 { //t.Errorf("should be empty reachmap when all packages are in a cycle, got %v", rm) //} if len(rm) == 0 { t.Error("TEMPORARY: should ignore import cycles, but cycle was eliminated") } } func TestToReachMapFilterDot(t *testing.T) { ptree, err := ListPackages(filepath.Join(getTestdataRootDir(t), "src", "relimport"), "relimport") if err != nil { t.Fatalf("ListPackages failed on relimport test case: %s", err) } rm, _ := ptree.ToReachMap(true, true, false, nil) if _, has := rm["relimport/dot"]; !has { t.Fatal("relimport/dot should not have had errors") } imports := dedupeStrings(rm["relimport/dot"].External, rm["relimport/dot"].Internal) for _, imp := range imports { if imp == "." { t.Fatal("dot import should have been filtered by ToReachMap") } } } func getTestdataRootDir(t *testing.T) string { cwd, err := os.Getwd() if err != nil { t.Fatal(err) } return filepath.Join(cwd, "..", "_testdata") } // Canary regression test to make sure that if PackageTree ever gains new // fields, we update the Copy method accordingly. func TestCanaryPackageTreeCopy(t *testing.T) { ptreeFields := []string{ "ImportRoot", "Packages", } packageFields := []string{ "Name", "ImportPath", "CommentPath", "Imports", "TestImports", } fieldNames := func(typ reflect.Type) []string { var names []string for i := 0; i < typ.NumField(); i++ { names = append(names, typ.Field(i).Name) } return names } ptreeRefl := fieldNames(reflect.TypeOf(PackageTree{})) packageRefl := fieldNames(reflect.TypeOf(Package{})) if !reflect.DeepEqual(ptreeFields, ptreeRefl) { t.Errorf("PackageTree.Copy is designed to work with an exact set of fields in the PackageTree struct - make sure it (and this test) have been updated!\n\t(GOT):%s\n\t(WNT):%s", ptreeFields, ptreeRefl) } if !reflect.DeepEqual(packageFields, packageRefl) { t.Errorf("PackageTree.Copy is designed to work with an exact set of fields in the Package struct - make sure it (and this test) have been updated!\n\t(GOT):%s\n\t(WNT):%s", packageFields, packageRefl) } } dep-0.3.2/internal/gps/pkgtree/reachmap.go000066400000000000000000000035341317166637100204610ustar00rootroot00000000000000// Copyright 2017 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 pkgtree import ( "sort" "strings" ) // ReachMap maps a set of import paths (keys) to the sets of transitively // reachable tree-internal packages, and all the tree-external packages // reachable through those internal packages. // // See PackageTree.ToReachMap() for more information. type ReachMap map[string]struct { Internal, External []string } // Eliminate import paths with any elements having leading dots, leading // underscores, or testdata. If these are internally reachable (which is // a no-no, but possible), any external imports will have already been // pulled up through ExternalReach. The key here is that we don't want // to treat such packages as themselves being sources. func pkgFilter(pkg string) bool { for _, elem := range strings.Split(pkg, "/") { if strings.HasPrefix(elem, ".") || strings.HasPrefix(elem, "_") || elem == "testdata" { return false } } return true } // FlattenFn flattens a reachmap into a sorted, deduplicated list of all the // external imports named by its contained packages, but excludes imports coming // from packages with disallowed patterns in their names: any path element with // a leading dot, a leading underscore, with the name "testdata". // // Imports for which exclude returns true will be left out. func (rm ReachMap) FlattenFn(exclude func(string) bool) []string { exm := make(map[string]struct{}) for pkg, ie := range rm { if pkgFilter(pkg) { for _, ex := range ie.External { if exclude != nil && exclude(ex) { continue } exm[ex] = struct{}{} } } } if len(exm) == 0 { return []string{} } ex := make([]string, 0, len(exm)) for p := range exm { ex = append(ex, p) } sort.Strings(ex) return ex } dep-0.3.2/internal/gps/prune.go000066400000000000000000000202771317166637100163740ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "log" "os" "path/filepath" "strings" "github.com/pkg/errors" ) // PruneOptions represents the pruning options used to write the dependecy tree. type PruneOptions uint8 const ( // PruneNestedVendorDirs indicates if nested vendor directories should be pruned. PruneNestedVendorDirs = 1 << iota // PruneUnusedPackages indicates if unused Go packages should be pruned. PruneUnusedPackages // PruneNonGoFiles indicates if non-Go files should be pruned. // Files matching licenseFilePrefixes and legalFileSubstrings are kept in // an attempt to comply with legal requirements. PruneNonGoFiles // PruneGoTestFiles indicates if Go test files should be pruned. PruneGoTestFiles ) var ( // licenseFilePrefixes is a list of name prefixes for license files. licenseFilePrefixes = []string{ "license", "licence", "copying", "unlicense", "copyright", "copyleft", } // legalFileSubstrings contains substrings that are likey part of a legal // declaration file. legalFileSubstrings = []string{ "authors", "contributors", "legal", "notice", "disclaimer", "patent", "third-party", "thirdparty", } ) // Prune removes excess files from the dep tree whose root is baseDir based // on the PruneOptions passed. // // A Lock must be passed if PruneUnusedPackages is toggled on. func Prune(baseDir string, options PruneOptions, l Lock, logger *log.Logger) error { // TODO(ibrasho) allow passing specific options per project for _, lp := range l.Projects() { projectDir := filepath.Join(baseDir, string(lp.Ident().ProjectRoot)) err := PruneProject(projectDir, lp, options, logger) if err != nil { return err } } return nil } // PruneProject remove excess files according to the options passed, from // the lp directory in baseDir. func PruneProject(baseDir string, lp LockedProject, options PruneOptions, logger *log.Logger) error { projectDir := filepath.Join(baseDir, string(lp.Ident().ProjectRoot)) if (options & PruneNestedVendorDirs) != 0 { if err := pruneNestedVendorDirs(projectDir); err != nil { return err } } if (options & PruneUnusedPackages) != 0 { if err := pruneUnusedPackages(lp, projectDir, logger); err != nil { return errors.Wrap(err, "failed to prune unused packages") } } if (options & PruneNonGoFiles) != 0 { if err := pruneNonGoFiles(projectDir, logger); err != nil { return errors.Wrap(err, "failed to prune non-Go files") } } if (options & PruneGoTestFiles) != 0 { if err := pruneGoTestFiles(projectDir, logger); err != nil { return errors.Wrap(err, "failed to prune Go test files") } } return nil } // pruneNestedVendorDirs deletes all nested vendor directories within baseDir. func pruneNestedVendorDirs(baseDir string) error { return filepath.Walk(baseDir, stripVendor) } // pruneUnusedPackages deletes unimported packages found within baseDir. // Determining whether packages are imported or not is based on the passed LockedProject. func pruneUnusedPackages(lp LockedProject, projectDir string, logger *log.Logger) error { pr := string(lp.Ident().ProjectRoot) logger.Printf("Calculating unused packages in %s to prune.\n", pr) unusedPackages, err := calculateUnusedPackages(lp, projectDir) if err != nil { return errors.Wrapf(err, "could not calculate unused packages in %s", pr) } logger.Printf("Found the following unused packages in %s:\n", pr) for pkg := range unusedPackages { logger.Printf(" * %s\n", filepath.Join(pr, pkg)) } unusedPackagesFiles, err := collectUnusedPackagesFiles(projectDir, unusedPackages) if err != nil { return errors.Wrapf(err, "could not collect unused packages' files in %s", pr) } if err := deleteFiles(unusedPackagesFiles); err != nil { return errors.Wrapf(err, "") } return nil } // calculateUnusedPackages generates a list of unused packages in lp. func calculateUnusedPackages(lp LockedProject, projectDir string) (map[string]struct{}, error) { // TODO(ibrasho): optimize this... unused := make(map[string]struct{}) imported := make(map[string]struct{}) for _, pkg := range lp.Packages() { imported[pkg] = struct{}{} } err := filepath.Walk(projectDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // Ignore anything that's not a directory. if !info.IsDir() { return nil } pkg, err := filepath.Rel(projectDir, path) if err != nil { return errors.Wrap(err, "unexpected error while calculating unused packages") } pkg = filepath.ToSlash(pkg) if _, ok := imported[pkg]; !ok { unused[pkg] = struct{}{} } return nil }) return unused, err } // collectUnusedPackagesFiles returns a slice of all files in the unused packages in projectDir. func collectUnusedPackagesFiles(projectDir string, unusedPackages map[string]struct{}) ([]string, error) { // TODO(ibrasho): is this useful? files := make([]string, 0, len(unusedPackages)) err := filepath.Walk(projectDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // Ignore directories. if info.IsDir() { return nil } // Ignore perserved files. if isPreservedFile(info.Name()) { return nil } pkg, err := filepath.Rel(projectDir, filepath.Dir(path)) if err != nil { return errors.Wrap(err, "unexpected error while calculating unused packages") } pkg = filepath.ToSlash(pkg) if _, ok := unusedPackages[pkg]; ok { files = append(files, path) } return nil }) return files, err } // pruneNonGoFiles delete all non-Go files existing within baseDir. // Files with names that are prefixed by any entry in preservedNonGoFiles // are not deleted. func pruneNonGoFiles(baseDir string, logger *log.Logger) error { files, err := collectNonGoFiles(baseDir, logger) if err != nil { return errors.Wrap(err, "could not collect non-Go files") } if err := deleteFiles(files); err != nil { return errors.Wrap(err, "could not prune Go test files") } return nil } // collectNonGoFiles returns a slice containing all non-Go files in baseDir. // Files meeting the checks in isPreservedFile are not returned. func collectNonGoFiles(baseDir string, logger *log.Logger) ([]string, error) { files := make([]string, 0) err := filepath.Walk(baseDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // Ignore directories. if info.IsDir() { return nil } // Ignore all Go files. if strings.HasSuffix(info.Name(), ".go") { return nil } // Ignore perserved files. if isPreservedFile(info.Name()) { return nil } files = append(files, path) return nil }) return files, err } // isPreservedFile checks if the file name indicates that the file should be // preserved based on licenseFilePrefixes or legalFileSubstrings. func isPreservedFile(name string) bool { name = strings.ToLower(name) for _, prefix := range licenseFilePrefixes { if strings.HasPrefix(name, prefix) { return true } } for _, substring := range legalFileSubstrings { if strings.Contains(name, substring) { return true } } return false } // pruneGoTestFiles deletes all Go test files (*_test.go) within baseDir. func pruneGoTestFiles(baseDir string, logger *log.Logger) error { files, err := collectGoTestFiles(baseDir) if err != nil { return errors.Wrap(err, "could not collect Go test files") } if err := deleteFiles(files); err != nil { return errors.Wrap(err, "could not prune Go test files") } return nil } // collectGoTestFiles returns a slice contains all Go test files (any files // prefixed with _test.go) in baseDir. func collectGoTestFiles(baseDir string) ([]string, error) { files := make([]string, 0) err := filepath.Walk(baseDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // Ignore directories. if info.IsDir() { return nil } // Ignore any files that is not a Go test file. if strings.HasSuffix(info.Name(), "_test.go") { files = append(files, path) } return nil }) return files, err } func deleteFiles(paths []string) error { for _, path := range paths { if err := os.Remove(path); err != nil { return err } } return nil } dep-0.3.2/internal/gps/prune_test.go000066400000000000000000000132001317166637100174170ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "io/ioutil" "log" "testing" "github.com/golang/dep/internal/test" ) func TestPruneUnusedPackages(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir(".") pr := "github.com/test/project" pi := ProjectIdentifier{ProjectRoot: ProjectRoot(pr)} testcases := []struct { name string lp LockedProject fs fsTestCase err bool }{ { "one-package", LockedProject{ pi: pi, pkgs: []string{"."}, }, fsTestCase{ before: filesystemState{ files: []fsPath{ {"main.go"}, }, }, after: filesystemState{ files: []fsPath{ {"main.go"}, }, }, }, false, }, { "nested-package", LockedProject{ pi: pi, pkgs: []string{"pkg"}, }, fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"pkg"}, }, files: []fsPath{ {"main.go"}, {"pkg", "main.go"}, }, }, after: filesystemState{ dirs: []fsPath{ {"pkg"}, }, files: []fsPath{ {"pkg", "main.go"}, }, }, }, false, }, { "complex-project", LockedProject{ pi: pi, pkgs: []string{"pkg", "pkg/nestedpkg/otherpkg"}, }, fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"pkg"}, {"pkg", "nestedpkg"}, {"pkg", "nestedpkg", "otherpkg"}, }, files: []fsPath{ {"main.go"}, {"COPYING"}, {"pkg", "main.go"}, {"pkg", "nestedpkg", "main.go"}, {"pkg", "nestedpkg", "PATENT.md"}, {"pkg", "nestedpkg", "otherpkg", "main.go"}, }, }, after: filesystemState{ dirs: []fsPath{ {"pkg"}, {"pkg", "nestedpkg"}, {"pkg", "nestedpkg", "otherpkg"}, }, files: []fsPath{ {"COPYING"}, {"pkg", "main.go"}, {"pkg", "nestedpkg", "PATENT.md"}, {"pkg", "nestedpkg", "otherpkg", "main.go"}, }, }, }, false, }, } logger := log.New(ioutil.Discard, "", 0) for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { h.TempDir(pr) projectDir := h.Path(pr) tc.fs.before.root = projectDir tc.fs.after.root = projectDir tc.fs.before.setup(t) err := pruneUnusedPackages(tc.lp, projectDir, logger) if tc.err && err == nil { t.Errorf("expected an error, got nil") } else if !tc.err && err != nil { t.Errorf("unexpected error: %s", err) } tc.fs.after.assert(t) }) } } func TestPruneNonGoFiles(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir(".") testcases := []struct { name string fs fsTestCase err bool }{ { "one-file", fsTestCase{ before: filesystemState{ files: []fsPath{ {"README.md"}, }, }, after: filesystemState{}, }, false, }, { "multiple-files", fsTestCase{ before: filesystemState{ files: []fsPath{ {"main.go"}, {"main_test.go"}, {"README"}, }, }, after: filesystemState{ files: []fsPath{ {"main.go"}, {"main_test.go"}, }, }, }, false, }, { "mixed-files", fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"dir"}, }, files: []fsPath{ {"dir", "main.go"}, {"dir", "main_test.go"}, {"dir", "db.sqlite"}, }, }, after: filesystemState{ dirs: []fsPath{ {"dir"}, }, files: []fsPath{ {"dir", "main.go"}, {"dir", "main_test.go"}, }, }, }, false, }, } logger := log.New(ioutil.Discard, "", 0) for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { h.TempDir(tc.name) baseDir := h.Path(tc.name) tc.fs.before.root = baseDir tc.fs.after.root = baseDir tc.fs.before.setup(t) err := pruneNonGoFiles(baseDir, logger) if tc.err && err == nil { t.Errorf("expected an error, got nil") } else if !tc.err && err != nil { t.Errorf("unexpected error: %s", err) } tc.fs.after.assert(t) }) } } func TestPruneGoTestFiles(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() h.TempDir(".") testcases := []struct { name string fs fsTestCase err bool }{ { "one-test-file", fsTestCase{ before: filesystemState{ files: []fsPath{ {"main_test.go"}, }, }, after: filesystemState{}, }, false, }, { "multiple-files", fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"dir"}, }, files: []fsPath{ {"dir", "main_test.go"}, {"dir", "main2_test.go"}, }, }, after: filesystemState{ dirs: []fsPath{ {"dir"}, }, }, }, false, }, { "mixed-files", fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"dir"}, }, files: []fsPath{ {"dir", "main.go"}, {"dir", "main2.go"}, {"dir", "main_test.go"}, {"dir", "main2_test.go"}, }, }, after: filesystemState{ dirs: []fsPath{ {"dir"}, }, files: []fsPath{ {"dir", "main.go"}, {"dir", "main2.go"}, }, }, }, false, }, } logger := log.New(ioutil.Discard, "", 0) for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { h.TempDir(tc.name) baseDir := h.Path(tc.name) tc.fs.before.root = baseDir tc.fs.after.root = baseDir tc.fs.before.setup(t) err := pruneGoTestFiles(baseDir, logger) if tc.err && err == nil { t.Errorf("expected an error, got nil") } else if !tc.err && err != nil { t.Errorf("unexpected error: %s", err) } tc.fs.after.assert(t) }) } } dep-0.3.2/internal/gps/rootdata.go000066400000000000000000000122161317166637100170520ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "sort" "github.com/armon/go-radix" "github.com/golang/dep/internal/gps/pkgtree" ) // rootdata holds static data and constraining rules from the root project for // use in solving. type rootdata struct { // Path to the root of the project on which gps is operating. dir string // Ruleset for ignored import paths. ir *pkgtree.IgnoredRuleset // Map of packages to require. req map[string]bool // A ProjectConstraints map containing the validated (guaranteed non-empty) // overrides declared by the root manifest. ovr ProjectConstraints // A map of the ProjectRoot (local names) that should be allowed to change chng map[ProjectRoot]struct{} // Flag indicating all projects should be allowed to change, without regard // for lock. chngall bool // A map of the project names listed in the root's lock. rlm map[ProjectRoot]LockedProject // A defensively copied instance of the root manifest. rm SimpleManifest // A defensively copied instance of the root lock. rl safeLock // A defensively copied instance of params.RootPackageTree rpt pkgtree.PackageTree // The ProjectAnalyzer to use for all GetManifestAndLock calls. an ProjectAnalyzer } // externalImportList returns a list of the unique imports from the root data. // Ignores and requires are taken into consideration, stdlib is excluded, and // errors within the local set of package are not backpropagated. func (rd rootdata) externalImportList(stdLibFn func(string) bool) []string { rm, _ := rd.rpt.ToReachMap(true, true, false, rd.ir) reach := rm.FlattenFn(stdLibFn) // If there are any requires, slide them into the reach list, as well. if len(rd.req) > 0 { // Make a map of imports that are both in the import path list and the // required list to avoid duplication. skip := make(map[string]bool, len(rd.req)) for _, r := range reach { if rd.req[r] { skip[r] = true } } for r := range rd.req { if !skip[r] { reach = append(reach, r) } } } sort.Strings(reach) return reach } func (rd rootdata) getApplicableConstraints(stdLibFn func(string) bool) []workingConstraint { pc := rd.rm.DependencyConstraints() // Ensure that overrides which aren't in the combined pc map already make it // in. Doing so makes input hashes equal in more useful cases. for pr, pp := range rd.ovr { if _, has := pc[pr]; !has { cpp := ProjectProperties{ Constraint: pp.Constraint, Source: pp.Source, } if cpp.Constraint == nil { cpp.Constraint = anyConstraint{} } pc[pr] = cpp } } // Now override them all to produce a consolidated workingConstraint slice combined := rd.ovr.overrideAll(pc) type wccount struct { count int wc workingConstraint } xt := radix.New() for _, wc := range combined { xt.Insert(string(wc.Ident.ProjectRoot), wccount{wc: wc}) } // Walk all dep import paths we have to consider and mark the corresponding // wc entry in the trie, if any for _, im := range rd.externalImportList(stdLibFn) { if stdLibFn(im) { continue } if pre, v, match := xt.LongestPrefix(im); match && isPathPrefixOrEqual(pre, im) { wcc := v.(wccount) wcc.count++ xt.Insert(pre, wcc) } } var ret []workingConstraint xt.Walk(func(s string, v interface{}) bool { wcc := v.(wccount) if wcc.count > 0 { ret = append(ret, wcc.wc) } return false }) return ret } func (rd rootdata) combineConstraints() []workingConstraint { return rd.ovr.overrideAll(rd.rm.DependencyConstraints()) } // needVersionListFor indicates whether we need a version list for a given // project root, based solely on general solver inputs (no constraint checking // required). Assuming the argument is not the root project itself, this will be // true if any of the following conditions hold: // // - ChangeAll is on // - The project is not in the lock // - The project is in the lock, but is also in the list of projects to change func (rd rootdata) needVersionsFor(pr ProjectRoot) bool { if rd.isRoot(pr) { return false } if rd.chngall { return true } if _, has := rd.rlm[pr]; !has { // not in the lock return true } if _, has := rd.chng[pr]; has { // in the lock, but marked for change return true } // in the lock, not marked for change return false } func (rd rootdata) isRoot(pr ProjectRoot) bool { return pr == ProjectRoot(rd.rpt.ImportRoot) } // rootAtom creates an atomWithPackages that represents the root project. func (rd rootdata) rootAtom() atomWithPackages { a := atom{ id: ProjectIdentifier{ ProjectRoot: ProjectRoot(rd.rpt.ImportRoot), }, // This is a hack so that the root project doesn't have a nil version. // It's sort of OK because the root never makes it out into the results. // We may need a more elegant solution if we discover other side // effects, though. v: rootRev, } list := make([]string, 0, len(rd.rpt.Packages)) for path, pkg := range rd.rpt.Packages { if pkg.Err != nil && !rd.ir.IsIgnored(path) { list = append(list, path) } } sort.Strings(list) return atomWithPackages{ a: a, pl: list, } } dep-0.3.2/internal/gps/rootdata_test.go000066400000000000000000000125251317166637100201140ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "reflect" "testing" "github.com/golang/dep/internal/gps/pkgtree" ) func TestRootdataExternalImports(t *testing.T) { fix := basicFixtures["shared dependency with overlapping constraints"] params := SolveParameters{ RootDir: string(fix.ds[0].n), RootPackageTree: fix.rootTree(), Manifest: fix.rootmanifest(), ProjectAnalyzer: naiveAnalyzer{}, stdLibFn: func(string) bool { return false }, mkBridgeFn: overrideMkBridge, } is, err := Prepare(params, newdepspecSM(fix.ds, nil)) if err != nil { t.Fatalf("Unexpected error while prepping solver: %s", err) } rd := is.(*solver).rd want := []string{"a", "b"} got := rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) } // Add a require rd.req["c"] = true want = []string{"a", "b", "c"} got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) } // Add same path as import poe := rd.rpt.Packages["root"] poe.P.Imports = []string{"a", "b", "c"} rd.rpt.Packages["root"] = poe // should still be the same got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) } // Add an ignore, but not on the required path (Prepare makes that // combination impossible) rd.ir = pkgtree.NewIgnoredRuleset([]string{"b"}) want = []string{"a", "c"} got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) } } func TestGetApplicableConstraints(t *testing.T) { fix := basicFixtures["shared dependency with overlapping constraints"] params := SolveParameters{ RootDir: string(fix.ds[0].n), RootPackageTree: fix.rootTree(), Manifest: fix.rootmanifest(), ProjectAnalyzer: naiveAnalyzer{}, stdLibFn: func(string) bool { return false }, mkBridgeFn: overrideMkBridge, } is, err := Prepare(params, newdepspecSM(fix.ds, nil)) if err != nil { t.Fatalf("Unexpected error while prepping solver: %s", err) } rd := is.(*solver).rd table := []struct { name string mut func() result []workingConstraint }{ { name: "base case, two constraints", mut: func() {}, result: []workingConstraint{ { Ident: mkPI("a"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("b"), Constraint: mkSVC("1.0.0"), }, }, }, { name: "with unconstrained require", mut: func() { // No constraint means it doesn't show up rd.req["c"] = true }, result: []workingConstraint{ { Ident: mkPI("a"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("b"), Constraint: mkSVC("1.0.0"), }, }, }, { name: "with unconstrained import", mut: func() { // Again, no constraint means it doesn't show up poe := rd.rpt.Packages["root"] poe.P.Imports = []string{"a", "b", "d"} rd.rpt.Packages["root"] = poe }, result: []workingConstraint{ { Ident: mkPI("a"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("b"), Constraint: mkSVC("1.0.0"), }, }, }, { name: "constraint on required", mut: func() { rd.rm.Deps["c"] = ProjectProperties{ Constraint: NewBranch("foo"), } }, result: []workingConstraint{ { Ident: mkPI("a"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("b"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("c"), Constraint: NewBranch("foo"), }, }, }, { name: "override on imported", mut: func() { rd.ovr["d"] = ProjectProperties{ Constraint: NewBranch("bar"), } }, result: []workingConstraint{ { Ident: mkPI("a"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("b"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("c"), Constraint: NewBranch("foo"), }, { Ident: mkPI("d"), Constraint: NewBranch("bar"), overrConstraint: true, }, }, }, { // It is certainly the simplest and most rule-abiding solution to // drop the constraint in this case, but is there a chance it would // violate the principle of least surprise? name: "ignore imported and overridden pkg", mut: func() { rd.ir = pkgtree.NewIgnoredRuleset([]string{"d"}) }, result: []workingConstraint{ { Ident: mkPI("a"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("b"), Constraint: mkSVC("1.0.0"), }, { Ident: mkPI("c"), Constraint: NewBranch("foo"), }, }, }, } for _, fix := range table { t.Run(fix.name, func(t *testing.T) { fix.mut() got := rd.getApplicableConstraints(params.stdLibFn) if !reflect.DeepEqual(fix.result, got) { t.Errorf("unexpected applicable constraint set:\n\t(GOT): %+v\n\t(WNT): %+v", got, fix.result) } }) } } dep-0.3.2/internal/gps/satisfy.go000066400000000000000000000240371317166637100167230ustar00rootroot00000000000000// Copyright 2017 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 gps // check performs constraint checks on the provided atom. The set of checks // differ slightly depending on whether the atom is pkgonly, or if it's the // entire project being added for the first time. // // The goal is to determine whether selecting the atom would result in a state // where all the solver requirements are still satisfied. func (s *solver) check(a atomWithPackages, pkgonly bool) error { pa := a.a if nilpa == pa { // This shouldn't be able to happen, but if it does, it unequivocally // indicates a logical bug somewhere, so blowing up is preferable panic("canary - checking version of empty ProjectAtom") } s.mtr.push("satisfy") var err error defer func() { if err != nil { s.traceInfo(err) } s.mtr.pop() }() // If we're pkgonly, then base atom was already determined to be allowable, // so we can skip the checkAtomAllowable step. if !pkgonly { if err = s.checkAtomAllowable(pa); err != nil { return err } } if err = s.checkRequiredPackagesExist(a); err != nil { return err } var deps []completeDep _, deps, err = s.getImportsAndConstraintsOf(a) if err != nil { // An err here would be from the package fetcher; pass it straight back return err } // TODO(sdboyer) this deps list contains only packages not already selected // from the target atom (assuming one is selected at all). It's fine for // now, but won't be good enough when we get around to doing static // analysis. for _, dep := range deps { if err = s.checkIdentMatches(a, dep); err != nil { return err } if err = s.checkRootCaseConflicts(a, dep); err != nil { return err } if err = s.checkDepsConstraintsAllowable(a, dep); err != nil { return err } if err = s.checkDepsDisallowsSelected(a, dep); err != nil { return err } if err = s.checkRevisionExists(a, dep); err != nil { return err } if err = s.checkPackageImportsFromDepExist(a, dep); err != nil { return err } // TODO(sdboyer) add check that fails if adding this atom would create a loop } return nil } // checkAtomAllowable ensures that an atom itself is acceptable with respect to // the constraints established by the current solution. func (s *solver) checkAtomAllowable(pa atom) error { constraint := s.sel.getConstraint(pa.id) if s.vUnify.matches(pa.id, constraint, pa.v) { return nil } // TODO(sdboyer) collect constraint failure reason (wait...aren't we, below?) deps := s.sel.getDependenciesOn(pa.id) var failparent []dependency for _, dep := range deps { if !s.vUnify.matches(pa.id, dep.dep.Constraint, pa.v) { s.fail(dep.depender.id) failparent = append(failparent, dep) } } err := &versionNotAllowedFailure{ goal: pa, failparent: failparent, c: constraint, } return err } // checkRequiredPackagesExist ensures that all required packages enumerated by // existing dependencies on this atom are actually present in the atom. func (s *solver) checkRequiredPackagesExist(a atomWithPackages) error { ptree, err := s.b.ListPackages(a.a.id, a.a.v) if err != nil { // TODO(sdboyer) handle this more gracefully return err } deps := s.sel.getDependenciesOn(a.a.id) fp := make(map[string]errDeppers) // We inspect these in a bit of a roundabout way, in order to incrementally // build up the failure we'd return if there is, indeed, a missing package. // TODO(sdboyer) rechecking all of these every time is wasteful. Is there a shortcut? for _, dep := range deps { for _, pkg := range dep.dep.pl { if errdep, seen := fp[pkg]; seen { errdep.deppers = append(errdep.deppers, dep.depender) fp[pkg] = errdep } else { perr, has := ptree.Packages[pkg] if !has || perr.Err != nil { fp[pkg] = errDeppers{ err: perr.Err, deppers: []atom{dep.depender}, } } } } } if len(fp) > 0 { return &checkeeHasProblemPackagesFailure{ goal: a.a, failpkg: fp, } } return nil } // checkDepsConstraintsAllowable checks that the constraints of an atom on a // given dep are valid with respect to existing constraints. func (s *solver) checkDepsConstraintsAllowable(a atomWithPackages, cdep completeDep) error { dep := cdep.workingConstraint constraint := s.sel.getConstraint(dep.Ident) // Ensure the constraint expressed by the dep has at least some possible // intersection with the intersection of existing constraints. if s.vUnify.matchesAny(dep.Ident, constraint, dep.Constraint) { return nil } siblings := s.sel.getDependenciesOn(dep.Ident) // No admissible versions - visit all siblings and identify the disagreement(s) var failsib []dependency var nofailsib []dependency for _, sibling := range siblings { if !s.vUnify.matchesAny(dep.Ident, sibling.dep.Constraint, dep.Constraint) { s.fail(sibling.depender.id) failsib = append(failsib, sibling) } else { nofailsib = append(nofailsib, sibling) } } return &disjointConstraintFailure{ goal: dependency{depender: a.a, dep: cdep}, failsib: failsib, nofailsib: nofailsib, c: constraint, } } // checkDepsDisallowsSelected ensures that an atom's constraints on a particular // dep are not incompatible with the version of that dep that's already been // selected. func (s *solver) checkDepsDisallowsSelected(a atomWithPackages, cdep completeDep) error { dep := cdep.workingConstraint selected, exists := s.sel.selected(dep.Ident) if exists && !s.vUnify.matches(dep.Ident, dep.Constraint, selected.a.v) { s.fail(dep.Ident) return &constraintNotAllowedFailure{ goal: dependency{depender: a.a, dep: cdep}, v: selected.a.v, } } return nil } // checkIdentMatches ensures that the LocalName of a dep introduced by an atom, // has the same Source as what's already been selected (assuming anything's been // selected). // // In other words, this ensures that the solver never simultaneously selects two // identifiers with the same local name, but that disagree about where their // network source is. func (s *solver) checkIdentMatches(a atomWithPackages, cdep completeDep) error { dep := cdep.workingConstraint if curid, has := s.sel.getIdentFor(dep.Ident.ProjectRoot); has && !curid.equiv(dep.Ident) { deps := s.sel.getDependenciesOn(a.a.id) // Fail all the other deps, as there's no way atom can ever be // compatible with them for _, d := range deps { s.fail(d.depender.id) } return &sourceMismatchFailure{ shared: dep.Ident.ProjectRoot, sel: deps, current: curid.normalizedSource(), mismatch: dep.Ident.normalizedSource(), prob: a.a, } } return nil } // checkRootCaseConflicts ensures that the ProjectRoot specified in the completeDep // does not have case conflicts with any existing dependencies. // // We only need to check the ProjectRoot, rather than any packages therein, as // the later check for package existence is case-sensitive. func (s *solver) checkRootCaseConflicts(a atomWithPackages, cdep completeDep) error { pr := cdep.workingConstraint.Ident.ProjectRoot hasConflict, current := s.sel.findCaseConflicts(pr) if !hasConflict { return nil } curid, _ := s.sel.getIdentFor(current) deps := s.sel.getDependenciesOn(curid) for _, d := range deps { s.fail(d.depender.id) } // If a project has multiple packages that import each other, we treat that // as establishing a canonical case variant for the ProjectRoot. It's possible, // however, that that canonical variant is not the same one that others // imported it under. If that's the situation, then we'll have arrived here // when visiting the project, not its dependers, having misclassified its // internal imports as external. That means the atomWithPackages will // be the wrong case variant induced by the importers, and the cdep will be // a link pointing back at the canonical case variant. // // If this is the case, use a special failure, wrongCaseFailure, that // makes a stronger statement as to the correctness of case variants. // // TODO(sdboyer) This approach to marking failure is less than great, as // this will mark the current atom as failed, as well, causing the // backtracker to work through it. While that could prove fruitful, it's // quite likely just to be wasted effort. Addressing this - if that's a good // idea - would entail creating another path back out of checking to enable // backjumping directly to the incorrect importers. if current == a.a.id.ProjectRoot { return &wrongCaseFailure{ correct: pr, goal: dependency{depender: a.a, dep: cdep}, badcase: deps, } } return &caseMismatchFailure{ goal: dependency{depender: a.a, dep: cdep}, current: current, failsib: deps, } } // checkPackageImportsFromDepExist ensures that, if the dep is already selected, // the newly-required set of packages being placed on it exist and are valid. func (s *solver) checkPackageImportsFromDepExist(a atomWithPackages, cdep completeDep) error { sel, is := s.sel.selected(cdep.workingConstraint.Ident) if !is { // dep is not already selected; nothing to do return nil } ptree, err := s.b.ListPackages(sel.a.id, sel.a.v) if err != nil { // TODO(sdboyer) handle this more gracefully return err } e := &depHasProblemPackagesFailure{ goal: dependency{ depender: a.a, dep: cdep, }, v: sel.a.v, prob: make(map[string]error), } for _, pkg := range cdep.pl { perr, has := ptree.Packages[pkg] if !has || perr.Err != nil { if has { e.prob[pkg] = perr.Err } else { e.prob[pkg] = nil } } } if len(e.prob) > 0 { return e } return nil } // checkRevisionExists ensures that if a dependency is constrained by a // revision, that that revision actually exists. func (s *solver) checkRevisionExists(a atomWithPackages, cdep completeDep) error { r, isrev := cdep.Constraint.(Revision) if !isrev { // Constraint is not a revision; nothing to do return nil } present, _ := s.b.RevisionPresentIn(cdep.Ident, r) if present { return nil } return &nonexistentRevisionFailure{ goal: dependency{ depender: a.a, dep: cdep, }, r: r, } } dep-0.3.2/internal/gps/selection.go000066400000000000000000000166161317166637100172320ustar00rootroot00000000000000// Copyright 2017 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 gps type selection struct { // projects is a stack of the atoms that have currently been selected by the // solver. It can also be thought of as the vertex set of the current // selection graph. projects []selected // deps records the set of dependers on a given ProjectRoot. It is // essentially an adjacency list of *inbound* edges. deps map[ProjectRoot][]dependency // foldRoots records a mapping from a canonical, case-folded form of // ProjectRoots to the particular case variant that has currently been // selected. foldRoots map[string]ProjectRoot // The versoinUnifier in use for this solve run. vu *versionUnifier } type selected struct { a atomWithPackages first bool } func (s *selection) getDependenciesOn(id ProjectIdentifier) []dependency { if deps, exists := s.deps[id.ProjectRoot]; exists { return deps } return nil } // getIdentFor returns the ProjectIdentifier (so, the network name) currently in // use for the provided ProjectRoot. // // If no dependencies are present yet that designate a network name for // the provided root, this will return an empty ProjectIdentifier and false. func (s *selection) getIdentFor(pr ProjectRoot) (ProjectIdentifier, bool) { deps := s.getDependenciesOn(ProjectIdentifier{ProjectRoot: pr}) if len(deps) == 0 { return ProjectIdentifier{}, false } // For now, at least, the solver maintains (assumes?) the invariant that // whatever is first in the deps list decides the net name to be used. return deps[0].dep.Ident, true } // pushSelection pushes a new atomWithPackages onto the selection stack, along // with an indicator as to whether this selection indicates a new project *and* // packages, or merely some new packages on a project that was already selected. func (s *selection) pushSelection(a atomWithPackages, pkgonly bool) { s.projects = append(s.projects, selected{ a: a, first: !pkgonly, }) } // popSelection removes and returns the last atomWithPackages from the selection // stack, along with an indication of whether that element was the first from // that project - that is, if it represented an addition of both a project and // one or more packages to the overall selection. func (s *selection) popSelection() (atomWithPackages, bool) { var sel selected sel, s.projects = s.projects[len(s.projects)-1], s.projects[:len(s.projects)-1] return sel.a, sel.first } // findCaseConflicts checks to see if the given ProjectRoot has a // case-insensitive overlap with another, different ProjectRoot that's already // been picked. func (s *selection) findCaseConflicts(pr ProjectRoot) (bool, ProjectRoot) { if current, has := s.foldRoots[toFold(string(pr))]; has && pr != current { return true, current } return false, "" } func (s *selection) pushDep(dep dependency) { pr := dep.dep.Ident.ProjectRoot deps := s.deps[pr] if len(deps) == 0 { s.foldRoots[toFold(string(pr))] = pr } s.deps[pr] = append(deps, dep) } func (s *selection) popDep(id ProjectIdentifier) (dep dependency) { deps := s.deps[id.ProjectRoot] dlen := len(deps) if dlen == 1 { delete(s.foldRoots, toFold(string(id.ProjectRoot))) } dep, s.deps[id.ProjectRoot] = deps[dlen-1], deps[:dlen-1] return dep } func (s *selection) depperCount(id ProjectIdentifier) int { return len(s.deps[id.ProjectRoot]) } // Compute a list of the unique packages within the given ProjectIdentifier that // have dependers, and the number of dependers they have. func (s *selection) getRequiredPackagesIn(id ProjectIdentifier) map[string]int { // TODO(sdboyer) this is horribly inefficient to do on the fly; we need a method to // precompute it on pushing a new dep, and preferably with an immut // structure so that we can pop with zero cost. uniq := make(map[string]int) for _, dep := range s.deps[id.ProjectRoot] { for _, pkg := range dep.dep.pl { uniq[pkg] = uniq[pkg] + 1 } } return uniq } // Suppress unused warning. var _ = (*selection)(nil).getSelectedPackagesIn // Compute a list of the unique packages within the given ProjectIdentifier that // are currently selected, and the number of times each package has been // independently selected. func (s *selection) getSelectedPackagesIn(id ProjectIdentifier) map[string]int { // TODO(sdboyer) this is horribly inefficient to do on the fly; we need a method to // precompute it on pushing a new dep, and preferably with an immut // structure so that we can pop with zero cost. uniq := make(map[string]int) for _, p := range s.projects { if p.a.a.id.eq(id) { for _, pkg := range p.a.pl { uniq[pkg] = uniq[pkg] + 1 } } } return uniq } func (s *selection) getConstraint(id ProjectIdentifier) Constraint { deps, exists := s.deps[id.ProjectRoot] if !exists || len(deps) == 0 { return any } // TODO(sdboyer) recomputing this sucks and is quite wasteful. Precompute/cache it // on changes to the constraint set, instead. // The solver itself is expected to maintain the invariant that all the // constraints kept here collectively admit a non-empty set of versions. We // assume this is the case here while assembling a composite constraint. // Start with the open set var ret Constraint = any for _, dep := range deps { ret = s.vu.intersect(id, ret, dep.dep.Constraint) } return ret } // selected checks to see if the given ProjectIdentifier has been selected, and // if so, returns the corresponding atomWithPackages. // // It walks the projects selection list from front to back and returns the first // match it finds, which means it will always and only return the base selection // of the project, without any additional package selections that may or may not // have happened later. func (s *selection) selected(id ProjectIdentifier) (atomWithPackages, bool) { for _, p := range s.projects { if p.a.a.id.ProjectRoot == id.ProjectRoot { return p.a, true } } return atomWithPackages{a: nilpa}, false } type unselected struct { sl []bimodalIdentifier cmp func(i, j int) bool } func (u unselected) Len() int { return len(u.sl) } func (u unselected) Less(i, j int) bool { return u.cmp(i, j) } func (u unselected) Swap(i, j int) { u.sl[i], u.sl[j] = u.sl[j], u.sl[i] } func (u *unselected) Push(x interface{}) { u.sl = append(u.sl, x.(bimodalIdentifier)) } func (u *unselected) Pop() (v interface{}) { v, u.sl = u.sl[len(u.sl)-1], u.sl[:len(u.sl)-1] return v } // remove takes a bimodalIdentifier out of the priority queue, if present. Only // the first matching bmi will be removed. // // There are two events that cause this to be called: bmi selection, when the // bmi at the front of the queue is removed, and backtracking, when a bmi // becomes unnecessary because the dependency that induced it was backtracked // and popped off. // // The worst case for both of these is O(n), but in practice the first case is // O(1), as we iterate the queue from front to back. func (u *unselected) remove(bmi bimodalIdentifier) { plen := len(bmi.pl) outer: for i, pi := range u.sl { if pi.id.eq(bmi.id) && len(pi.pl) == plen { // Simple slice comparison - assume they're both sorted the same for i2, pkg := range pi.pl { if bmi.pl[i2] != pkg { continue outer } } if i == len(u.sl)-1 { // if we're on the last element, just pop, no splice u.sl = u.sl[:len(u.sl)-1] } else { u.sl = append(u.sl[:i], u.sl[i+1:]...) } break } } } dep-0.3.2/internal/gps/selection_test.go000066400000000000000000000031671317166637100202660ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "reflect" "testing" ) // Regression test for https://github.com/sdboyer/gps/issues/174 func TestUnselectedRemoval(t *testing.T) { // We don't need a comparison function for this test bmi1 := bimodalIdentifier{ id: mkPI("foo"), pl: []string{"foo", "bar"}, } bmi2 := bimodalIdentifier{ id: mkPI("foo"), pl: []string{"foo", "bar", "baz"}, } bmi3 := bimodalIdentifier{ id: mkPI("foo"), pl: []string{"foo"}, } u := &unselected{ sl: []bimodalIdentifier{bmi1, bmi2, bmi3}, } u.remove(bimodalIdentifier{ id: mkPI("other"), pl: []string{"other"}, }) if len(u.sl) != 3 { t.Fatalf("len of unselected slice should have been 2 after no-op removal, got %v", len(u.sl)) } u.remove(bmi3) want := []bimodalIdentifier{bmi1, bmi2} if len(u.sl) != 2 { t.Fatalf("removal of matching bmi did not work, slice should have 2 items but has %v", len(u.sl)) } if !reflect.DeepEqual(u.sl, want) { t.Fatalf("wrong item removed from slice:\n\t(GOT): %v\n\t(WNT): %v", u.sl, want) } u.remove(bmi3) if len(u.sl) != 2 { t.Fatalf("removal of bmi w/non-matching packages should be a no-op but wasn't; slice should have 2 items but has %v", len(u.sl)) } u.remove(bmi2) want = []bimodalIdentifier{bmi1} if len(u.sl) != 1 { t.Fatalf("removal of matching bmi did not work, slice should have 1 items but has %v", len(u.sl)) } if !reflect.DeepEqual(u.sl, want) { t.Fatalf("wrong item removed from slice:\n\t(GOT): %v\n\t(WNT): %v", u.sl, want) } } dep-0.3.2/internal/gps/solution.go000066400000000000000000000073711317166637100171170ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "fmt" "log" "os" "path/filepath" "sync" "github.com/pkg/errors" "golang.org/x/sync/errgroup" ) // A Solution is returned by a solver run. It is mostly just a Lock, with some // additional methods that report information about the solve run. type Solution interface { Lock // The name of the ProjectAnalyzer used in generating this solution. AnalyzerName() string // The version of the ProjectAnalyzer used in generating this solution. AnalyzerVersion() int // The name of the Solver used in generating this solution. SolverName() string // The version of the Solver used in generating this solution. SolverVersion() int Attempts() int } type solution struct { // A list of the projects selected by the solver. p []LockedProject // The number of solutions that were attempted att int // The hash digest of the input opts hd []byte // The analyzer info analyzerInfo ProjectAnalyzerInfo // The solver used in producing this solution solv Solver } const concurrentWriters = 16 // WriteDepTree takes a basedir and a Lock, and exports all the projects // listed in the lock to the appropriate target location within the basedir. // // If the goal is to populate a vendor directory, basedir should be the absolute // path to that vendor directory, not its parent (a project root, typically). // // It requires a SourceManager to do the work, and takes a flag indicating // whether or not to strip vendor directories contained in the exported // dependencies. func WriteDepTree(basedir string, l Lock, sm SourceManager, sv bool, logger *log.Logger) error { if l == nil { return fmt.Errorf("must provide non-nil Lock to WriteDepTree") } if err := os.MkdirAll(basedir, 0777); err != nil { return err } g, ctx := errgroup.WithContext(context.TODO()) lps := l.Projects() sem := make(chan struct{}, concurrentWriters) var cnt struct { sync.Mutex i int } for i := range lps { p := lps[i] // per-iteration copy g.Go(func() error { err := func() error { select { case sem <- struct{}{}: defer func() { <-sem }() case <-ctx.Done(): return ctx.Err() } ident := p.Ident() projectRoot := string(ident.ProjectRoot) to := filepath.FromSlash(filepath.Join(basedir, projectRoot)) if err := sm.ExportProject(ctx, ident, p.Version(), to); err != nil { return errors.Wrapf(err, "failed to export %s", projectRoot) } if sv { if err := ctx.Err(); err != nil { return err } if err := filepath.Walk(to, stripVendor); err != nil { return errors.Wrapf(err, "failed to strip vendor from %s", projectRoot) } } return nil }() switch err { case context.Canceled, context.DeadlineExceeded: // Don't log "secondary" errors. default: msg := "Wrote" if err != nil { msg = "Failed to write" } // Log and increment atomically to prevent re-ordering. cnt.Lock() cnt.i++ logger.Printf("(%d/%d) %s %s@%s\n", cnt.i, len(lps), msg, p.Ident(), p.Version()) cnt.Unlock() } return err }) } err := g.Wait() if err != nil { os.RemoveAll(basedir) } return errors.Wrap(err, "failed to write dep tree") } func (r solution) Projects() []LockedProject { return r.p } func (r solution) Attempts() int { return r.att } func (r solution) InputsDigest() []byte { return r.hd } func (r solution) AnalyzerName() string { return r.analyzerInfo.Name } func (r solution) AnalyzerVersion() int { return r.analyzerInfo.Version } func (r solution) SolverName() string { return r.solv.Name() } func (r solution) SolverVersion() int { return r.solv.Version() } dep-0.3.2/internal/gps/solution_test.go000066400000000000000000000104741317166637100201540ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "io/ioutil" "log" "os" "path" "path/filepath" "testing" "github.com/golang/dep/internal/test" ) func discardLogger() *log.Logger { return log.New(ioutil.Discard, "", 0) } var basicResult solution func pi(n string) ProjectIdentifier { return ProjectIdentifier{ ProjectRoot: ProjectRoot(n), } } func init() { basicResult = solution{ att: 1, p: []LockedProject{ pa2lp(atom{ id: pi("github.com/sdboyer/testrepo"), v: NewBranch("master").Pair(Revision("4d59fb584b15a94d7401e356d2875c472d76ef45")), }, nil), pa2lp(atom{ id: pi("github.com/Masterminds/VCSTestRepo"), v: NewVersion("1.0.0").Pair(Revision("30605f6ac35fcb075ad0bfa9296f90a7d891523e")), }, nil), }, } basicResult.analyzerInfo = (naiveAnalyzer{}).Info() // Just in case something needs punishing, kubernetes offers a complex, // real-world set of dependencies, and this revision is known to work. /* _ = atom{ id: pi("github.com/kubernetes/kubernetes"), v: NewVersion("1.0.0").Pair(Revision("528f879e7d3790ea4287687ef0ab3f2a01cc2718")), } */ } func testWriteDepTree(t *testing.T) { t.Parallel() // This test is a bit slow, skip it on -short if testing.Short() { t.Skip("Skipping dep tree writing test in short mode") } requiresBins(t, "git", "hg", "bzr") tmp, err := ioutil.TempDir("", "writetree") if err != nil { t.Fatalf("Failed to create temp dir: %s", err) } defer os.RemoveAll(tmp) r := solution{ att: 1, p: []LockedProject{ pa2lp(atom{ id: pi("github.com/sdboyer/testrepo"), v: NewBranch("master").Pair(Revision("4d59fb584b15a94d7401e356d2875c472d76ef45")), }, nil), pa2lp(atom{ id: pi("launchpad.net/govcstestbzrrepo"), v: NewVersion("1.0.0").Pair(Revision("matt@mattfarina.com-20150731135137-pbphasfppmygpl68")), }, nil), pa2lp(atom{ id: pi("bitbucket.org/sdboyer/withbm"), v: NewVersion("v1.0.0").Pair(Revision("aa110802a0c64195d0a6c375c9f66668827c90b4")), }, nil), }, } sm, clean := mkNaiveSM(t) defer clean() // Trigger simultaneous fetch of all three to speed up test execution time for _, p := range r.p { go func(pi ProjectIdentifier) { sm.SyncSourceFor(pi) }(p.pi) } // nil lock/result should err immediately err = WriteDepTree(tmp, nil, sm, true, discardLogger()) if err == nil { t.Errorf("Should error if nil lock is passed to WriteDepTree") } err = WriteDepTree(tmp, r, sm, true, discardLogger()) if err != nil { t.Errorf("Unexpected error while creating vendor tree: %s", err) } if _, err = os.Stat(filepath.Join(tmp, "github.com", "sdboyer", "testrepo")); err != nil { t.Errorf("Directory for github.com/sdboyer/testrepo does not exist") } if _, err = os.Stat(filepath.Join(tmp, "launchpad.net", "govcstestbzrrepo")); err != nil { t.Errorf("Directory for launchpad.net/govcstestbzrrepo does not exist") } if _, err = os.Stat(filepath.Join(tmp, "bitbucket.org", "sdboyer", "withbm")); err != nil { t.Errorf("Directory for bitbucket.org/sdboyer/withbm does not exist") } } func BenchmarkCreateVendorTree(b *testing.B) { // We're fs-bound here, so restrict to single parallelism b.SetParallelism(1) r := basicResult tmp := path.Join(os.TempDir(), "vsolvtest") clean := true sm, err := NewSourceManager(SourceManagerConfig{ Cachedir: path.Join(tmp, "cache"), Logger: log.New(test.Writer{TB: b}, "", 0), }) if err != nil { b.Errorf("failed to create SourceManager: %q", err) clean = false } // Prefetch the projects before timer starts for _, lp := range r.p { err := sm.SyncSourceFor(lp.Ident()) if err != nil { b.Errorf("failed getting project info during prefetch: %s", err) clean = false } } if clean { logger := discardLogger() b.ResetTimer() b.StopTimer() exp := path.Join(tmp, "export") for i := 0; i < b.N; i++ { // Order the loop this way to make it easy to disable final cleanup, to // ease manual inspection os.RemoveAll(exp) b.StartTimer() err = WriteDepTree(exp, r, sm, true, logger) b.StopTimer() if err != nil { b.Errorf("unexpected error after %v iterations: %s", i, err) break } } } sm.Release() os.RemoveAll(tmp) // comment this to leave temp dir behind for inspection } dep-0.3.2/internal/gps/solve_basic_test.go000066400000000000000000001224271317166637100205730ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "fmt" "net/url" "regexp" "strings" "github.com/Masterminds/semver" "github.com/golang/dep/internal/gps/pkgtree" ) var regfrom = regexp.MustCompile(`^(\w*) from (\w*) ([0-9\.\*]*)`) // nvSplit splits an "info" string on " " into the pair of name and // version/constraint, and returns each individually. // // This is for narrow use - panics if there are less than two resulting items in // the slice. func nvSplit(info string) (id ProjectIdentifier, version string) { if strings.Contains(info, " from ") { parts := regfrom.FindStringSubmatch(info) info = parts[1] + " " + parts[3] id.Source = parts[2] } s := strings.SplitN(info, " ", 2) if len(s) < 2 { panic(fmt.Sprintf("Malformed name/version info string '%s'", info)) } id.ProjectRoot, version = ProjectRoot(s[0]), s[1] return } // nvrSplit splits an "info" string on " " into the triplet of name, // version/constraint, and revision, and returns each individually. // // It will work fine if only name and version/constraint are provided. // // This is for narrow use - panics if there are less than two resulting items in // the slice. func nvrSplit(info string) (id ProjectIdentifier, version string, revision Revision) { if strings.Contains(info, " from ") { parts := regfrom.FindStringSubmatch(info) info = fmt.Sprintf("%s %s", parts[1], parts[3]) id.Source = parts[2] } s := strings.SplitN(info, " ", 3) if len(s) < 2 { panic(fmt.Sprintf("Malformed name/version info string '%s'", info)) } id.ProjectRoot, version = ProjectRoot(s[0]), s[1] if len(s) == 3 { revision = Revision(s[2]) } return } // mkAtom splits the input string on a space, and uses the first two elements as // the project identifier and version, respectively. // // The version segment may have a leading character indicating the type of // version to create: // // p: create a "plain" (non-semver) version. // b: create a branch version. // r: create a revision. // // No prefix is assumed to indicate a semver version. // // If a third space-delimited element is provided, it will be interepreted as a // revision, and used as the underlying version in a PairedVersion. No prefix // should be provided in this case. It is an error (and will panic) to try to // pass a revision with an underlying revision. func mkAtom(info string) atom { // if info is "root", special case it to use the root "version" if info == "root" { return atom{ id: ProjectIdentifier{ ProjectRoot: ProjectRoot("root"), }, v: rootRev, } } id, ver, rev := nvrSplit(info) var v Version switch ver[0] { case 'r': if rev != "" { panic("Cannot pair a revision with a revision") } v = Revision(ver[1:]) case 'p': v = NewVersion(ver[1:]) case 'b': v = NewBranch(ver[1:]) default: _, err := semver.NewVersion(ver) if err != nil { // don't want to allow bad test data at this level, so just panic panic(fmt.Sprintf("Error when converting '%s' into semver: %s", ver, err)) } v = NewVersion(ver) } if rev != "" { v = v.(UnpairedVersion).Pair(rev) } return atom{ id: id, v: v, } } // mkPCstrnt splits the input string on a space, and uses the first two elements // as the project identifier and constraint body, respectively. // // The constraint body may have a leading character indicating the type of // version to create: // // p: create a "plain" (non-semver) version. // b: create a branch version. // r: create a revision. // // If no leading character is used, a semver constraint is assumed. func mkPCstrnt(info string) ProjectConstraint { id, ver, rev := nvrSplit(info) var c Constraint switch ver[0] { case 'r': c = Revision(ver[1:]) case 'p': c = NewVersion(ver[1:]) case 'b': c = NewBranch(ver[1:]) default: // Without one of those leading characters, we know it's a proper semver // expression, so use the other parser that doesn't look for a rev rev = "" id, ver = nvSplit(info) var err error c, err = NewSemverConstraint(ver) if err != nil { // don't want bad test data at this level, so just panic panic(fmt.Sprintf("Error when converting '%s' into semver constraint: %s (full info: %s)", ver, err, info)) } } // There's no practical reason that a real tool would need to produce a // constraint that's a PairedVersion, but it is a possibility admitted by the // system, so we at least allow for it in our testing harness. if rev != "" { // Of course, this *will* panic if the predicate is a revision or a // semver constraint, neither of which implement UnpairedVersion. This // is as intended, to prevent bad data from entering the system. c = c.(UnpairedVersion).Pair(rev) } return ProjectConstraint{ Ident: id, Constraint: c, } } // mkCDep composes a completeDep struct from the inputs. // // The only real work here is passing the initial string to mkPDep. All the // other args are taken as package names. func mkCDep(pdep string, pl ...string) completeDep { pc := mkPCstrnt(pdep) return completeDep{ workingConstraint: workingConstraint{ Ident: pc.Ident, Constraint: pc.Constraint, }, pl: pl, } } // A depspec is a fixture representing all the information a SourceManager would // ordinarily glean directly from interrogating a repository. type depspec struct { n ProjectRoot v Version deps []ProjectConstraint pkgs []tpkg } // mkDepspec creates a depspec by processing a series of strings, each of which // contains an identiifer and version information. // // The first string is broken out into the name and version of the package being // described - see the docs on mkAtom for details. subsequent strings are // interpreted as dep constraints of that dep at that version. See the docs on // mkPDep for details. func mkDepspec(pi string, deps ...string) depspec { pa := mkAtom(pi) if string(pa.id.ProjectRoot) != pa.id.Source && pa.id.Source != "" { panic("alternate source on self makes no sense") } ds := depspec{ n: pa.id.ProjectRoot, v: pa.v, } for _, dep := range deps { ds.deps = append(ds.deps, mkPCstrnt(dep)) } return ds } func mkDep(atom, pdep string, pl ...string) dependency { return dependency{ depender: mkAtom(atom), dep: mkCDep(pdep, pl...), } } func mkADep(atom, pdep string, c Constraint, pl ...string) dependency { return dependency{ depender: mkAtom(atom), dep: completeDep{ workingConstraint: workingConstraint{ Ident: ProjectIdentifier{ ProjectRoot: ProjectRoot(pdep), }, Constraint: c, }, pl: pl, }, } } // mkPI creates a ProjectIdentifier with the ProjectRoot as the provided // string, and the Source unset. // // Call normalize() on the returned value if you need the Source to be be // equal to the ProjectRoot. func mkPI(root string) ProjectIdentifier { return ProjectIdentifier{ ProjectRoot: ProjectRoot(root), } } // mkSVC creates a new semver constraint, panicking if an error is returned. func mkSVC(body string) Constraint { c, err := NewSemverConstraint(body) if err != nil { panic(fmt.Sprintf("Error while trying to create semver constraint from %s: %s", body, err.Error())) } return c } // mklock makes a fixLock, suitable to act as a lock file func mklock(pairs ...string) fixLock { l := make(fixLock, 0) for _, s := range pairs { pa := mkAtom(s) l = append(l, NewLockedProject(pa.id, pa.v, nil)) } return l } // mkrevlock makes a fixLock, suitable to act as a lock file, with only a name // and a rev func mkrevlock(pairs ...string) fixLock { l := make(fixLock, 0) for _, s := range pairs { pa := mkAtom(s) l = append(l, NewLockedProject(pa.id, pa.v.(PairedVersion).Revision(), nil)) } return l } // mksolution creates a map of project identifiers to their LockedProject // result, which is sufficient to act as a solution fixture for the purposes of // most tests. // // Either strings or LockedProjects can be provided. If a string is provided, it // is assumed that we're in the default, "basic" case where there is exactly one // package in a project, and it is the root of the project - meaning that only // the "." package should be listed. If a LockedProject is provided (e.g. as // returned from mklp()), then it's incorporated directly. // // If any other type is provided, the func will panic. func mksolution(inputs ...interface{}) map[ProjectIdentifier]LockedProject { m := make(map[ProjectIdentifier]LockedProject) for _, in := range inputs { switch t := in.(type) { case string: a := mkAtom(t) m[a.id] = NewLockedProject(a.id, a.v, []string{"."}) case LockedProject: m[t.pi] = t default: panic(fmt.Sprintf("unexpected input to mksolution: %T %s", in, in)) } } return m } // mklp creates a LockedProject from string inputs func mklp(pair string, pkgs ...string) LockedProject { a := mkAtom(pair) return NewLockedProject(a.id, a.v, pkgs) } // computeBasicReachMap takes a depspec and computes a reach map which is // identical to the explicit depgraph. // // Using a reachMap here is overkill for what the basic fixtures actually need, // but we use it anyway for congruence with the more general cases. func computeBasicReachMap(ds []depspec) reachMap { rm := make(reachMap) for k, d := range ds { n := string(d.n) lm := map[string][]string{ n: nil, } v := d.v if k == 0 { // Put the root in with a nil rev, to accommodate the solver v = nil } rm[pident{n: d.n, v: v}] = lm for _, dep := range d.deps { lm[n] = append(lm[n], string(dep.Ident.ProjectRoot)) } } return rm } type pident struct { n ProjectRoot v Version } type specfix interface { name() string rootmanifest() RootManifest rootTree() pkgtree.PackageTree specs() []depspec maxTries() int solution() map[ProjectIdentifier]LockedProject failure() error } // A basicFixture is a declarative test fixture that can cover a wide variety of // solver cases. All cases, however, maintain one invariant: package == project. // There are no subpackages, and so it is impossible for them to trigger or // require bimodal solving. // // This type is separate from bimodalFixture in part for legacy reasons - many // of these were adapted from similar tests in dart's pub lib, where there is no // such thing as "bimodal solving". // // But it's also useful to keep them separate because bimodal solving involves // considerably more complexity than simple solving, both in terms of fixture // declaration and actual solving mechanics. Thus, we gain a lot of value for // contributors and maintainers by keeping comprehension costs relatively low // while still covering important cases. type basicFixture struct { // name of this fixture datum n string // depspecs. always treat first as root ds []depspec // results; map of name/atom pairs r map[ProjectIdentifier]LockedProject // max attempts the solver should need to find solution. 0 means no limit maxAttempts int // Use downgrade instead of default upgrade sorter downgrade bool // lock file simulator, if one's to be used at all l fixLock // solve failure expected, if any fail error // overrides, if any ovr ProjectConstraints // request up/downgrade to all projects changeall bool // individual projects to change changelist []ProjectRoot // if the fixture is currently broken/expected to fail, this has a message // recording why broken string } func (f basicFixture) name() string { return f.n } func (f basicFixture) specs() []depspec { return f.ds } func (f basicFixture) maxTries() int { return f.maxAttempts } func (f basicFixture) solution() map[ProjectIdentifier]LockedProject { return f.r } func (f basicFixture) rootmanifest() RootManifest { return simpleRootManifest{ c: pcSliceToMap(f.ds[0].deps), ovr: f.ovr, } } func (f basicFixture) rootTree() pkgtree.PackageTree { var imp []string for _, dep := range f.ds[0].deps { imp = append(imp, string(dep.Ident.ProjectRoot)) } n := string(f.ds[0].n) pt := pkgtree.PackageTree{ ImportRoot: n, Packages: map[string]pkgtree.PackageOrErr{ string(n): { P: pkgtree.Package{ ImportPath: n, Name: n, Imports: imp, }, }, }, } return pt } func (f basicFixture) failure() error { return f.fail } // A table of basicFixtures, used in the basic solving test set. var basicFixtures = map[string]basicFixture{ // basic fixtures "no dependencies": { ds: []depspec{ mkDepspec("root 0.0.0"), }, r: mksolution(), }, "simple dependency tree": { ds: []depspec{ mkDepspec("root 0.0.0", "a 1.0.0", "b 1.0.0"), mkDepspec("a 1.0.0", "aa 1.0.0", "ab 1.0.0"), mkDepspec("aa 1.0.0"), mkDepspec("ab 1.0.0"), mkDepspec("b 1.0.0", "ba 1.0.0", "bb 1.0.0"), mkDepspec("ba 1.0.0"), mkDepspec("bb 1.0.0"), }, r: mksolution( "a 1.0.0", "aa 1.0.0", "ab 1.0.0", "b 1.0.0", "ba 1.0.0", "bb 1.0.0", ), }, "shared dependency with overlapping constraints": { ds: []depspec{ mkDepspec("root 0.0.0", "a 1.0.0", "b 1.0.0"), mkDepspec("a 1.0.0", "shared >=2.0.0, <4.0.0"), mkDepspec("b 1.0.0", "shared >=3.0.0, <5.0.0"), mkDepspec("shared 2.0.0"), mkDepspec("shared 3.0.0"), mkDepspec("shared 3.6.9"), mkDepspec("shared 4.0.0"), mkDepspec("shared 5.0.0"), }, r: mksolution( "a 1.0.0", "b 1.0.0", "shared 3.6.9", ), }, "downgrade on overlapping constraints": { ds: []depspec{ mkDepspec("root 0.0.0", "a 1.0.0", "b 1.0.0"), mkDepspec("a 1.0.0", "shared >=2.0.0, <=4.0.0"), mkDepspec("b 1.0.0", "shared >=3.0.0, <5.0.0"), mkDepspec("shared 2.0.0"), mkDepspec("shared 3.0.0"), mkDepspec("shared 3.6.9"), mkDepspec("shared 4.0.0"), mkDepspec("shared 5.0.0"), }, r: mksolution( "a 1.0.0", "b 1.0.0", "shared 3.0.0", ), downgrade: true, }, "shared dependency where dependent version in turn affects other dependencies": { ds: []depspec{ mkDepspec("root 0.0.0", "foo <=1.0.2", "bar 1.0.0"), mkDepspec("foo 1.0.0"), mkDepspec("foo 1.0.1", "bang 1.0.0"), mkDepspec("foo 1.0.2", "whoop 1.0.0"), mkDepspec("foo 1.0.3", "zoop 1.0.0"), mkDepspec("bar 1.0.0", "foo <=1.0.1"), mkDepspec("bang 1.0.0"), mkDepspec("whoop 1.0.0"), mkDepspec("zoop 1.0.0"), }, r: mksolution( "foo 1.0.1", "bar 1.0.0", "bang 1.0.0", ), }, "removed dependency": { ds: []depspec{ mkDepspec("root 1.0.0", "foo 1.0.0", "bar *"), mkDepspec("foo 1.0.0"), mkDepspec("foo 2.0.0"), mkDepspec("bar 1.0.0"), mkDepspec("bar 2.0.0", "baz 1.0.0"), mkDepspec("baz 1.0.0", "foo 2.0.0"), }, r: mksolution( "foo 1.0.0", "bar 1.0.0", ), maxAttempts: 2, }, // fixtures with locks "with compatible locked dependency": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1", "bar 1.0.1"), mkDepspec("foo 1.0.2", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mklock( "foo 1.0.1", ), r: mksolution( "foo 1.0.1", "bar 1.0.1", ), }, "upgrade through lock": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1", "bar 1.0.1"), mkDepspec("foo 1.0.2", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mklock( "foo 1.0.1", ), r: mksolution( "foo 1.0.2", "bar 1.0.2", ), changeall: true, }, "downgrade through lock": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1", "bar 1.0.1"), mkDepspec("foo 1.0.2", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mklock( "foo 1.0.1", ), r: mksolution( "foo 1.0.0", "bar 1.0.0", ), changeall: true, downgrade: true, }, "update one with only one": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *"), mkDepspec("foo 1.0.0"), mkDepspec("foo 1.0.1"), mkDepspec("foo 1.0.2"), }, l: mklock( "foo 1.0.1", ), r: mksolution( "foo 1.0.2", ), changelist: []ProjectRoot{"foo"}, }, "update one of multi": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *", "bar *"), mkDepspec("foo 1.0.0"), mkDepspec("foo 1.0.1"), mkDepspec("foo 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mklock( "foo 1.0.1", "bar 1.0.1", ), r: mksolution( "foo 1.0.2", "bar 1.0.1", ), changelist: []ProjectRoot{"foo"}, }, "update both of multi": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *", "bar *"), mkDepspec("foo 1.0.0"), mkDepspec("foo 1.0.1"), mkDepspec("foo 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mklock( "foo 1.0.1", "bar 1.0.1", ), r: mksolution( "foo 1.0.2", "bar 1.0.2", ), changelist: []ProjectRoot{"foo", "bar"}, }, "update two of more": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *", "bar *", "baz *"), mkDepspec("foo 1.0.0"), mkDepspec("foo 1.0.1"), mkDepspec("foo 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), mkDepspec("baz 1.0.0"), mkDepspec("baz 1.0.1"), mkDepspec("baz 1.0.2"), }, l: mklock( "foo 1.0.1", "bar 1.0.1", "baz 1.0.1", ), r: mksolution( "foo 1.0.2", "bar 1.0.2", "baz 1.0.1", ), changelist: []ProjectRoot{"foo", "bar"}, }, "break other lock with targeted update": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *", "baz *"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1", "bar 1.0.1"), mkDepspec("foo 1.0.2", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), mkDepspec("baz 1.0.0"), mkDepspec("baz 1.0.1"), mkDepspec("baz 1.0.2"), }, l: mklock( "foo 1.0.1", "bar 1.0.1", "baz 1.0.1", ), r: mksolution( "foo 1.0.2", "bar 1.0.2", "baz 1.0.1", ), changelist: []ProjectRoot{"foo", "bar"}, }, "with incompatible locked dependency": { ds: []depspec{ mkDepspec("root 0.0.0", "foo >1.0.1"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1", "bar 1.0.1"), mkDepspec("foo 1.0.2", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mklock( "foo 1.0.1", ), r: mksolution( "foo 1.0.2", "bar 1.0.2", ), }, "with unrelated locked dependency": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1", "bar 1.0.1"), mkDepspec("foo 1.0.2", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), mkDepspec("baz 1.0.0 bazrev"), }, l: mklock( "baz 1.0.0 bazrev", ), r: mksolution( "foo 1.0.2", "bar 1.0.2", ), }, "unlocks dependencies if necessary to ensure that a new dependency is satisfied": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *", "newdep *"), mkDepspec("foo 1.0.0 foorev", "bar <2.0.0"), mkDepspec("bar 1.0.0 barrev", "baz <2.0.0"), mkDepspec("baz 1.0.0 bazrev", "qux <2.0.0"), mkDepspec("qux 1.0.0 quxrev"), mkDepspec("foo 2.0.0", "bar <3.0.0"), mkDepspec("bar 2.0.0", "baz <3.0.0"), mkDepspec("baz 2.0.0", "qux <3.0.0"), mkDepspec("qux 2.0.0"), mkDepspec("newdep 2.0.0", "baz >=1.5.0"), }, l: mklock( "foo 1.0.0 foorev", "bar 1.0.0 barrev", "baz 1.0.0 bazrev", "qux 1.0.0 quxrev", ), r: mksolution( "foo 2.0.0", "bar 2.0.0", "baz 2.0.0", "qux 1.0.0 quxrev", "newdep 2.0.0", ), maxAttempts: 4, }, "break lock when only the deps necessitate it": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *", "bar *"), mkDepspec("foo 1.0.0 foorev", "bar <2.0.0"), mkDepspec("foo 2.0.0", "bar <3.0.0"), mkDepspec("bar 2.0.0", "baz <3.0.0"), mkDepspec("baz 2.0.0", "foo >1.0.0"), }, l: mklock( "foo 1.0.0 foorev", ), r: mksolution( "foo 2.0.0", "bar 2.0.0", "baz 2.0.0", ), maxAttempts: 4, }, "locked atoms are matched on both local and net name": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *"), mkDepspec("foo 1.0.0 foorev"), mkDepspec("foo 2.0.0 foorev2"), }, l: mklock( "foo from baz 1.0.0 foorev", ), r: mksolution( "foo 2.0.0 foorev2", ), }, "pairs bare revs in lock with versions": { ds: []depspec{ mkDepspec("root 0.0.0", "foo ~1.0.1"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1 foorev", "bar 1.0.1"), mkDepspec("foo 1.0.2", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mkrevlock( "foo 1.0.1 foorev", // mkrevlock drops the 1.0.1 ), r: mksolution( "foo 1.0.1 foorev", "bar 1.0.1", ), }, // This fixture describes a situation that should be impossible with a // real-world VCS (contents of dep at same rev are different, as indicated // by different constraints on bar). But, that's not the SUT here, so it's // OK. "pairs bare revs in lock with all versions": { ds: []depspec{ mkDepspec("root 0.0.0", "foo ~1.0.1"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1 foorev", "bar 1.0.1"), mkDepspec("foo 1.0.2 foorev", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mkrevlock( "foo 1.0.1 foorev", // mkrevlock drops the 1.0.1 ), r: mksolution( "foo 1.0.2 foorev", "bar 1.0.2", ), }, "does not pair bare revs in manifest with unpaired lock version": { ds: []depspec{ mkDepspec("root 0.0.0", "foo ~1.0.1"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1 foorev", "bar 1.0.1"), mkDepspec("foo 1.0.2", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mkrevlock( "foo 1.0.1 foorev", // mkrevlock drops the 1.0.1 ), r: mksolution( "foo 1.0.1 foorev", "bar 1.0.1", ), }, "lock to branch on old rev keeps old rev": { ds: []depspec{ mkDepspec("root 0.0.0", "foo bmaster"), mkDepspec("foo bmaster newrev"), }, l: mklock( "foo bmaster oldrev", ), r: mksolution( "foo bmaster oldrev", ), }, // Whereas this is a normal situation for a branch, when it occurs for a // tag, it means someone's been naughty upstream. Still, though, the outcome // is the same. // // TODO(sdboyer) this needs to generate a warning, once we start doing that "lock to now-moved tag on old rev keeps old rev": { ds: []depspec{ mkDepspec("root 0.0.0", "foo ptaggerino"), mkDepspec("foo ptaggerino newrev"), }, l: mklock( "foo ptaggerino oldrev", ), r: mksolution( "foo ptaggerino oldrev", ), }, "no version that matches requirement": { ds: []depspec{ mkDepspec("root 0.0.0", "foo ^1.0.0"), mkDepspec("foo 2.0.0"), mkDepspec("foo 2.1.3"), }, fail: &noVersionError{ pn: mkPI("foo"), fails: []failedVersion{ { v: NewVersion("2.1.3"), f: &versionNotAllowedFailure{ goal: mkAtom("foo 2.1.3"), failparent: []dependency{mkDep("root", "foo ^1.0.0", "foo")}, c: mkSVC("^1.0.0"), }, }, { v: NewVersion("2.0.0"), f: &versionNotAllowedFailure{ goal: mkAtom("foo 2.0.0"), failparent: []dependency{mkDep("root", "foo ^1.0.0", "foo")}, c: mkSVC("^1.0.0"), }, }, }, }, }, "no version that matches combined constraint": { ds: []depspec{ mkDepspec("root 0.0.0", "foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.0", "shared >=2.0.0, <3.0.0"), mkDepspec("bar 1.0.0", "shared >=2.9.0, <4.0.0"), mkDepspec("shared 2.5.0"), mkDepspec("shared 3.5.0"), }, fail: &noVersionError{ pn: mkPI("shared"), fails: []failedVersion{ { v: NewVersion("3.5.0"), f: &versionNotAllowedFailure{ goal: mkAtom("shared 3.5.0"), failparent: []dependency{mkDep("foo 1.0.0", "shared >=2.0.0, <3.0.0", "shared")}, c: mkSVC(">=2.9.0, <3.0.0"), }, }, { v: NewVersion("2.5.0"), f: &versionNotAllowedFailure{ goal: mkAtom("shared 2.5.0"), failparent: []dependency{mkDep("bar 1.0.0", "shared >=2.9.0, <4.0.0", "shared")}, c: mkSVC(">=2.9.0, <3.0.0"), }, }, }, }, }, "disjoint constraints": { ds: []depspec{ mkDepspec("root 0.0.0", "foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.0", "shared <=2.0.0"), mkDepspec("bar 1.0.0", "shared >3.0.0"), mkDepspec("shared 2.0.0"), mkDepspec("shared 4.0.0"), }, fail: &noVersionError{ pn: mkPI("foo"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &disjointConstraintFailure{ goal: mkDep("foo 1.0.0", "shared <=2.0.0", "shared"), failsib: []dependency{mkDep("bar 1.0.0", "shared >3.0.0", "shared")}, nofailsib: nil, c: mkSVC(">3.0.0"), }, }, }, }, }, "no valid solution": { ds: []depspec{ mkDepspec("root 0.0.0", "a *", "b *"), mkDepspec("a 1.0.0", "b 1.0.0"), mkDepspec("a 2.0.0", "b 2.0.0"), mkDepspec("b 1.0.0", "a 2.0.0"), mkDepspec("b 2.0.0", "a 1.0.0"), }, fail: &noVersionError{ pn: mkPI("b"), fails: []failedVersion{ { v: NewVersion("2.0.0"), f: &versionNotAllowedFailure{ goal: mkAtom("b 2.0.0"), failparent: []dependency{mkDep("a 1.0.0", "b 1.0.0", "b")}, c: mkSVC("1.0.0"), }, }, { v: NewVersion("1.0.0"), f: &constraintNotAllowedFailure{ goal: mkDep("b 1.0.0", "a 2.0.0", "a"), v: NewVersion("1.0.0"), }, }, }, }, }, "no version that matches while backtracking": { ds: []depspec{ mkDepspec("root 0.0.0", "a *", "b >1.0.0"), mkDepspec("a 1.0.0"), mkDepspec("b 1.0.0"), }, fail: &noVersionError{ pn: mkPI("b"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &versionNotAllowedFailure{ goal: mkAtom("b 1.0.0"), failparent: []dependency{mkDep("root", "b >1.0.0", "b")}, c: mkSVC(">1.0.0"), }, }, }, }, }, // The latest versions of a and b disagree on c. An older version of either // will resolve the problem. This test validates that b, which is farther // in the dependency graph from myapp is downgraded first. "rolls back leaf versions first": { ds: []depspec{ mkDepspec("root 0.0.0", "a *"), mkDepspec("a 1.0.0", "b *"), mkDepspec("a 2.0.0", "b *", "c 2.0.0"), mkDepspec("b 1.0.0"), mkDepspec("b 2.0.0", "c 1.0.0"), mkDepspec("c 1.0.0"), mkDepspec("c 2.0.0"), }, r: mksolution( "a 2.0.0", "b 1.0.0", "c 2.0.0", ), maxAttempts: 2, }, // Only one version of baz, so foo and bar will have to downgrade until they // reach it. "mutual downgrading": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *"), mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 2.0.0", "bar 2.0.0"), mkDepspec("foo 3.0.0", "bar 3.0.0"), mkDepspec("bar 1.0.0", "baz *"), mkDepspec("bar 2.0.0", "baz 2.0.0"), mkDepspec("bar 3.0.0", "baz 3.0.0"), mkDepspec("baz 1.0.0"), }, r: mksolution( "foo 1.0.0", "bar 1.0.0", "baz 1.0.0", ), maxAttempts: 3, }, // Ensures the solver doesn't exhaustively search all versions of b when // it's a-2.0.0 whose dependency on c-2.0.0-nonexistent led to the // problem. We make sure b has more versions than a so that the solver // tries a first since it sorts sibling dependencies by number of // versions. "search real failer": { ds: []depspec{ mkDepspec("root 0.0.0", "a *", "b *"), mkDepspec("a 1.0.0", "c 1.0.0"), mkDepspec("a 2.0.0", "c 2.0.0"), mkDepspec("b 1.0.0"), mkDepspec("b 2.0.0"), mkDepspec("b 3.0.0"), mkDepspec("c 1.0.0"), }, r: mksolution( "a 1.0.0", "b 3.0.0", "c 1.0.0", ), maxAttempts: 2, }, // Dependencies are ordered so that packages with fewer versions are tried // first. Here, there are two valid solutions (either a or b must be // downgraded once). The chosen one depends on which dep is traversed first. // Since b has fewer versions, it will be traversed first, which means a // will come later. Since later selections are revised first, a gets // downgraded. "traverse into package with fewer versions first": { ds: []depspec{ mkDepspec("root 0.0.0", "a *", "b *"), mkDepspec("a 1.0.0", "c *"), mkDepspec("a 2.0.0", "c *"), mkDepspec("a 3.0.0", "c *"), mkDepspec("a 4.0.0", "c *"), mkDepspec("a 5.0.0", "c 1.0.0"), mkDepspec("b 1.0.0", "c *"), mkDepspec("b 2.0.0", "c *"), mkDepspec("b 3.0.0", "c *"), mkDepspec("b 4.0.0", "c 2.0.0"), mkDepspec("c 1.0.0"), mkDepspec("c 2.0.0"), }, r: mksolution( "a 4.0.0", "b 4.0.0", "c 2.0.0", ), maxAttempts: 2, }, // This is similar to the preceding fixture. When getting the number of // versions of a package to determine which to traverse first, versions that // are disallowed by the root package's constraints should not be // considered. Here, foo has more versions than bar in total (4), but fewer // that meet myapp"s constraints (only 2). There is no solution, but we will // do less backtracking if foo is tested first. "root constraints pre-eliminate versions": { ds: []depspec{ mkDepspec("root 0.0.0", "foo *", "bar *"), mkDepspec("foo 1.0.0", "none 2.0.0"), mkDepspec("foo 2.0.0", "none 2.0.0"), mkDepspec("foo 3.0.0", "none 2.0.0"), mkDepspec("foo 4.0.0", "none 2.0.0"), mkDepspec("bar 1.0.0"), mkDepspec("bar 2.0.0"), mkDepspec("bar 3.0.0"), mkDepspec("none 1.0.0"), }, fail: &noVersionError{ pn: mkPI("none"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &versionNotAllowedFailure{ goal: mkAtom("none 1.0.0"), failparent: []dependency{mkDep("foo 1.0.0", "none 2.0.0", "none")}, c: mkSVC("2.0.0"), }, }, }, }, }, // If there"s a disjoint constraint on a package, then selecting other // versions of it is a waste of time: no possible versions can match. We // need to jump past it to the most recent package that affected the // constraint. "backjump past failed package on disjoint constraint": { ds: []depspec{ mkDepspec("root 0.0.0", "a *", "foo *"), mkDepspec("a 1.0.0", "foo *"), mkDepspec("a 2.0.0", "foo <1.0.0"), mkDepspec("foo 2.0.0"), mkDepspec("foo 2.0.1"), mkDepspec("foo 2.0.2"), mkDepspec("foo 2.0.3"), mkDepspec("foo 2.0.4"), mkDepspec("none 1.0.0"), }, r: mksolution( "a 1.0.0", "foo 2.0.4", ), maxAttempts: 2, }, // Revision enters vqueue if a dep has a constraint on that revision "revision injected into vqueue": { ds: []depspec{ mkDepspec("root 0.0.0", "foo r123abc"), mkDepspec("foo r123abc"), mkDepspec("foo 1.0.0 foorev"), mkDepspec("foo 2.0.0 foorev2"), }, r: mksolution( "foo r123abc", ), }, // Some basic override checks "override root's own constraint": { ds: []depspec{ mkDepspec("root 0.0.0", "a *", "b *"), mkDepspec("a 1.0.0", "b 1.0.0"), mkDepspec("a 2.0.0", "b 1.0.0"), mkDepspec("b 1.0.0"), }, ovr: ProjectConstraints{ ProjectRoot("a"): ProjectProperties{ Constraint: NewVersion("1.0.0"), }, }, r: mksolution( "a 1.0.0", "b 1.0.0", ), }, "override dep's constraint": { ds: []depspec{ mkDepspec("root 0.0.0", "a *"), mkDepspec("a 1.0.0", "b 1.0.0"), mkDepspec("a 2.0.0", "b 1.0.0"), mkDepspec("b 1.0.0"), mkDepspec("b 2.0.0"), }, ovr: ProjectConstraints{ ProjectRoot("b"): ProjectProperties{ Constraint: NewVersion("2.0.0"), }, }, r: mksolution( "a 2.0.0", "b 2.0.0", ), }, "overridden mismatched net addrs, alt in dep, back to default": { ds: []depspec{ mkDepspec("root 1.0.0", "foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.0", "bar from baz 1.0.0"), mkDepspec("bar 1.0.0"), }, ovr: ProjectConstraints{ ProjectRoot("bar"): ProjectProperties{ Source: "bar", }, }, r: mksolution( "foo 1.0.0", "bar from bar 1.0.0", ), }, // TODO(sdboyer) decide how to refactor the solver in order to re-enable these. // Checking for revision existence is important...but kinda obnoxious. //{ //// Solve fails if revision constraint calls for a nonexistent revision //n: "fail on missing revision", //ds: []depspec{ //mkDepspec("root 0.0.0", "bar *"), //mkDepspec("bar 1.0.0", "foo r123abc"), //mkDepspec("foo r123nomatch"), //mkDepspec("foo 1.0.0"), //mkDepspec("foo 2.0.0"), //}, //errp: []string{"bar", "foo", "bar"}, //}, //{ //// Solve fails if revision constraint calls for a nonexistent revision, //// even if rev constraint is specified by root //n: "fail on missing revision from root", //ds: []depspec{ //mkDepspec("root 0.0.0", "foo r123nomatch"), //mkDepspec("foo r123abc"), //mkDepspec("foo 1.0.0"), //mkDepspec("foo 2.0.0"), //}, //errp: []string{"foo", "root", "foo"}, //}, // TODO(sdboyer) add fixture that tests proper handling of loops via aliases (where // a project that wouldn't be a loop is aliased to a project that is a loop) } func init() { // This sets up a hundred versions of foo and bar, 0.0.0 through 9.9.0. Each // version of foo depends on a baz with the same major version. Each version // of bar depends on a baz with the same minor version. There is only one // version of baz, 0.0.0, so only older versions of foo and bar will // satisfy it. fix := basicFixture{ ds: []depspec{ mkDepspec("root 0.0.0", "foo *", "bar *"), mkDepspec("baz 0.0.0"), }, r: mksolution( "foo 0.9.0", "bar 9.0.0", "baz 0.0.0", ), maxAttempts: 10, } for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { fix.ds = append(fix.ds, mkDepspec(fmt.Sprintf("foo %v.%v.0", i, j), fmt.Sprintf("baz %v.0.0", i))) fix.ds = append(fix.ds, mkDepspec(fmt.Sprintf("bar %v.%v.0", i, j), fmt.Sprintf("baz 0.%v.0", j))) } } basicFixtures["complex backtrack"] = fix for k, fix := range basicFixtures { // Assign the name into the fixture itself fix.n = k basicFixtures[k] = fix } } // reachMaps contain externalReach()-type data for a given depspec fixture's // universe of projects, packages, and versions. type reachMap map[pident]map[string][]string type depspecSourceManager struct { specs []depspec rm reachMap ig map[string]bool } type fixSM interface { SourceManager rootSpec() depspec allSpecs() []depspec ignore() map[string]bool } var _ fixSM = &depspecSourceManager{} func newdepspecSM(ds []depspec, ignore []string) *depspecSourceManager { ig := make(map[string]bool) if len(ignore) > 0 { for _, pkg := range ignore { ig[pkg] = true } } return &depspecSourceManager{ specs: ds, rm: computeBasicReachMap(ds), ig: ig, } } func (sm *depspecSourceManager) GetManifestAndLock(id ProjectIdentifier, v Version, an ProjectAnalyzer) (Manifest, Lock, error) { // If the input version is a PairedVersion, look only at its top version, // not the underlying. This is generally consistent with the idea that, for // this class of lookup, the rev probably DOES exist, but upstream changed // it (typically a branch). For the purposes of tests, then, that's an OK // scenario, because otherwise we'd have to enumerate all the revs in the // fixture declarations, which would screw up other things. if pv, ok := v.(PairedVersion); ok { v = pv.Unpair() } src := toFold(id.normalizedSource()) for _, ds := range sm.specs { if src == string(ds.n) && v.Matches(ds.v) { return ds, dummyLock{}, nil } } return nil, nil, fmt.Errorf("Project %s at version %s could not be found", id, v) } func (sm *depspecSourceManager) ListPackages(id ProjectIdentifier, v Version) (pkgtree.PackageTree, error) { pid := pident{n: ProjectRoot(toFold(id.normalizedSource())), v: v} if pv, ok := v.(PairedVersion); ok && pv.Revision() == "FAKEREV" { // An empty rev may come in here because that's what we produce in // ListVersions(). If that's what we see, then just pretend like we have // an unpaired. pid.v = pv.Unpair() } if r, exists := sm.rm[pid]; exists { return pkgtree.PackageTree{ ImportRoot: id.normalizedSource(), Packages: map[string]pkgtree.PackageOrErr{ string(pid.n): { P: pkgtree.Package{ ImportPath: string(pid.n), Name: string(pid.n), Imports: r[string(pid.n)], }, }, }, }, nil } // if incoming version was paired, walk the map and search for a match on // top-only version if pv, ok := v.(PairedVersion); ok { uv := pv.Unpair() for pid, r := range sm.rm { if uv.Matches(pid.v) { return pkgtree.PackageTree{ ImportRoot: id.normalizedSource(), Packages: map[string]pkgtree.PackageOrErr{ string(pid.n): { P: pkgtree.Package{ ImportPath: string(pid.n), Name: string(pid.n), Imports: r[string(pid.n)], }, }, }, }, nil } } } return pkgtree.PackageTree{}, fmt.Errorf("Project %s at version %s could not be found", pid.n, v) } func (sm *depspecSourceManager) ListVersions(id ProjectIdentifier) ([]PairedVersion, error) { var pvl []PairedVersion src := toFold(id.normalizedSource()) for _, ds := range sm.specs { if src != string(ds.n) { continue } switch tv := ds.v.(type) { case Revision: // To simulate the behavior of the real SourceManager, we do not return // raw revisions from listVersions(). case PairedVersion: pvl = append(pvl, tv) case UnpairedVersion: // Dummy revision; if the fixture doesn't provide it, we know // the test doesn't need revision info, anyway. pvl = append(pvl, tv.Pair(Revision("FAKEREV"))) default: panic(fmt.Sprintf("unreachable: type of version was %#v for spec %s", ds.v, id)) } } if len(pvl) == 0 { return nil, fmt.Errorf("Project %s could not be found", id) } return pvl, nil } func (sm *depspecSourceManager) RevisionPresentIn(id ProjectIdentifier, r Revision) (bool, error) { src := toFold(id.normalizedSource()) for _, ds := range sm.specs { if src == string(ds.n) && r == ds.v { return true, nil } } return false, fmt.Errorf("Project %s has no revision %s", id, r) } func (sm *depspecSourceManager) SourceExists(id ProjectIdentifier) (bool, error) { src := toFold(id.normalizedSource()) for _, ds := range sm.specs { if src == string(ds.n) { return true, nil } } return false, nil } func (sm *depspecSourceManager) SyncSourceFor(id ProjectIdentifier) error { // Ignore err because it can't happen if exist, _ := sm.SourceExists(id); !exist { return fmt.Errorf("Source %s does not exist", id) } return nil } func (sm *depspecSourceManager) Release() {} func (sm *depspecSourceManager) ExportProject(context.Context, ProjectIdentifier, Version, string) error { return fmt.Errorf("dummy sm doesn't support exporting") } func (sm *depspecSourceManager) DeduceProjectRoot(ip string) (ProjectRoot, error) { fip := toFold(ip) for _, ds := range sm.allSpecs() { n := string(ds.n) if fip == n || strings.HasPrefix(fip, n+"/") { return ProjectRoot(ip[:len(n)]), nil } } return "", fmt.Errorf("Could not find %s, or any parent, in list of known fixtures", ip) } func (sm *depspecSourceManager) SourceURLsForPath(ip string) ([]*url.URL, error) { return nil, fmt.Errorf("dummy sm doesn't implement SourceURLsForPath") } func (sm *depspecSourceManager) rootSpec() depspec { return sm.specs[0] } func (sm *depspecSourceManager) allSpecs() []depspec { return sm.specs } func (sm *depspecSourceManager) ignore() map[string]bool { return sm.ig } // InferConstraint tries to puzzle out what kind of version is given in a string - // semver, a revision, or as a fallback, a plain tag. This current implementation // is a panic because there's no current circumstance under which the depspecSourceManager // is useful outside of the gps solving tests, and it shouldn't be used anywhere else without a conscious and intentional // expansion of its semantics. func (sm *depspecSourceManager) InferConstraint(s string, pi ProjectIdentifier) (Constraint, error) { panic("depsecSourceManager is only for gps solving tests") } type depspecBridge struct { *bridge } func (b *depspecBridge) listVersions(id ProjectIdentifier) ([]Version, error) { if vl, exists := b.vlists[id]; exists { return vl, nil } pvl, err := b.sm.ListVersions(id) if err != nil { return nil, err } // Construct a []Version slice. If any paired versions use the fake rev, // remove the underlying component. vl := make([]Version, 0, len(pvl)) for _, v := range pvl { if v.Revision() == "FAKEREV" { vl = append(vl, v.Unpair()) } else { vl = append(vl, v) } } if b.down { SortForDowngrade(vl) } else { SortForUpgrade(vl) } b.vlists[id] = vl return vl, nil } // override verifyRoot() on bridge to prevent any filesystem interaction func (b *depspecBridge) verifyRootDir(path string) error { root := b.sm.(fixSM).rootSpec() if string(root.n) != path { return fmt.Errorf("Expected only root project %q to verifyRootDir(), got %q", root.n, path) } return nil } func (b *depspecBridge) ListPackages(id ProjectIdentifier, v Version) (pkgtree.PackageTree, error) { return b.sm.(fixSM).ListPackages(id, v) } func (b *depspecBridge) vendorCodeExists(id ProjectIdentifier) (bool, error) { return false, nil } // enforce interfaces var _ Manifest = depspec{} var _ Lock = dummyLock{} var _ Lock = fixLock{} // impl Spec interface func (ds depspec) DependencyConstraints() ProjectConstraints { return pcSliceToMap(ds.deps) } type fixLock []LockedProject // impl Lock interface func (fixLock) InputsDigest() []byte { return []byte("fooooorooooofooorooofoo") } // impl Lock interface func (l fixLock) Projects() []LockedProject { return l } type dummyLock struct{} // impl Lock interface func (dummyLock) InputsDigest() []byte { return []byte("fooooorooooofooorooofoo") } // impl Lock interface func (dummyLock) Projects() []LockedProject { return nil } dep-0.3.2/internal/gps/solve_bimodal_test.go000066400000000000000000001070531317166637100211170ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "path/filepath" "strings" "github.com/golang/dep/internal/gps/pkgtree" ) // dsp - "depspec with packages" // // Wraps a set of tpkgs onto a depspec, and returns it. func dsp(ds depspec, pkgs ...tpkg) depspec { ds.pkgs = pkgs return ds } // pkg makes a tpkg appropriate for use in bimodal testing func pkg(path string, imports ...string) tpkg { return tpkg{ path: path, imports: imports, } } func init() { for k, fix := range bimodalFixtures { // Assign the name into the fixture itself fix.n = k bimodalFixtures[k] = fix } } // Fixtures that rely on simulated bimodal (project and package-level) // analysis for correct operation. The name given in the map gets assigned into // the fixture itself in init(). var bimodalFixtures = map[string]bimodalFixture{ // Simple case, ensures that we do the very basics of picking up and // including a single, simple import that is not expressed as a constraint "simple bm-add": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "a")), dsp(mkDepspec("a 1.0.0"), pkg("a")), }, r: mksolution( "a 1.0.0", ), }, // Ensure it works when the import jump is not from the package with the // same path as root, but from a subpkg "subpkg bm-add": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a"), ), }, r: mksolution( "a 1.0.0", ), }, // The same, but with a jump through two subpkgs "double-subpkg bm-add": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "root/bar"), pkg("root/bar", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a"), ), }, r: mksolution( "a 1.0.0", ), }, // Same again, but now nest the subpkgs "double nested subpkg bm-add": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "root/foo/bar"), pkg("root/foo/bar", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a"), ), }, r: mksolution( "a 1.0.0", ), }, // Importing package from project with no root package "bm-add on project with no pkg in root dir": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "a/foo")), dsp(mkDepspec("a 1.0.0"), pkg("a/foo")), }, r: mksolution( mklp("a 1.0.0", "foo"), ), }, // Import jump is in a dep, and points to a transitive dep "transitive bm-add": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "b"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), ), }, r: mksolution( "a 1.0.0", "b 1.0.0", ), }, // Constraints apply only if the project that declares them has a // reachable import "constraints activated by import": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "b 1.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "b"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), ), dsp(mkDepspec("b 1.1.0"), pkg("b"), ), }, r: mksolution( "a 1.0.0", "b 1.1.0", ), }, // Constraints apply only if the project that declares them has a // reachable import - non-root "constraints activated by import, transitive": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo", "b"), pkg("root/foo", "a"), ), dsp(mkDepspec("a 1.0.0", "b 1.0.0"), pkg("a"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), ), dsp(mkDepspec("b 1.1.0"), pkg("b"), ), }, r: mksolution( "a 1.0.0", "b 1.1.0", ), }, // Import jump is in a dep, and points to a transitive dep - but only in not // the first version we try "transitive bm-add on older version": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "a ~1.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "b"), ), dsp(mkDepspec("a 1.1.0"), pkg("a"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), ), }, r: mksolution( "a 1.0.0", "b 1.0.0", ), }, // Import jump is in a dep, and points to a transitive dep - but will only // get there via backtracking "backtrack to dep on bm-add": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a", "b"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "c"), ), dsp(mkDepspec("a 1.1.0"), pkg("a"), ), // Include two versions of b, otherwise it'll be selected first dsp(mkDepspec("b 0.9.0"), pkg("b", "c"), ), dsp(mkDepspec("b 1.0.0"), pkg("b", "c"), ), dsp(mkDepspec("c 1.0.0", "a 1.0.0"), pkg("c", "a"), ), }, r: mksolution( "a 1.0.0", "b 1.0.0", "c 1.0.0", ), }, "backjump through pkg-only selection": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a", "b"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "c"), ), // Include two versions of b to ensure that a is visited first dsp(mkDepspec("b 0.9.0", "d ^1.0.0"), pkg("b", "c/other", "d"), ), dsp(mkDepspec("b 1.0.0", "d ^1.2.0"), pkg("b", "c/other", "d"), ), // Three versions of c so it's last dsp(mkDepspec("c 1.0.0", "d ^1.0.0"), pkg("c", "d"), pkg("c/other"), ), dsp(mkDepspec("d 1.0.0"), pkg("d"), ), dsp(mkDepspec("d 1.1.0"), pkg("d"), ), }, r: mksolution( "a 1.0.0", "b 0.9.0", mklp("c 1.0.0", ".", "other"), "d 1.1.0", ), }, // Import jump is in a dep subpkg, and points to a transitive dep "transitive subpkg bm-add": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "a/bar"), pkg("a/bar", "b"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), ), }, r: mksolution( mklp("a 1.0.0", ".", "bar"), "b 1.0.0", ), }, // Import jump is in a dep subpkg, pointing to a transitive dep, but only in // not the first version we try "transitive subpkg bm-add on older version": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "a ~1.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "a/bar"), pkg("a/bar", "b"), ), dsp(mkDepspec("a 1.1.0"), pkg("a", "a/bar"), pkg("a/bar"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), ), }, r: mksolution( mklp("a 1.0.0", ".", "bar"), "b 1.0.0", ), }, "project cycle involving root": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "a ~1.0.0"), pkg("root", "a"), pkg("root/foo"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "root/foo"), ), }, r: mksolution( "a 1.0.0", ), }, "project cycle involving root with backtracking": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "a ~1.0.0"), pkg("root", "a", "b"), pkg("root/foo"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "root/foo"), ), dsp(mkDepspec("a 1.0.1"), pkg("a", "root/foo"), ), dsp(mkDepspec("b 1.0.0", "a 1.0.0"), pkg("b", "a"), ), dsp(mkDepspec("b 1.0.1", "a 1.0.0"), pkg("b", "a"), ), dsp(mkDepspec("b 1.0.2", "a 1.0.0"), pkg("b", "a"), ), }, r: mksolution( "a 1.0.0", "b 1.0.2", ), }, "unify project on disjoint package imports + source switching": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "b from baz 1.0.0"), pkg("root", "a", "b"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "b/foo"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), pkg("b/foo"), ), dsp(mkDepspec("baz 1.0.0"), pkg("b"), pkg("b/foo"), ), }, r: mksolution( "a 1.0.0", mklp("b from baz 1.0.0", ".", "foo"), ), }, "project cycle not involving root": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "a ~1.0.0"), pkg("root", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "b"), pkg("a/foo"), ), dsp(mkDepspec("b 1.0.0"), pkg("b", "a/foo"), ), }, r: mksolution( mklp("a 1.0.0", ".", "foo"), "b 1.0.0", ), }, "project cycle not involving root with internal paths": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "a ~1.0.0"), pkg("root", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "b/baz"), pkg("a/foo", "a/quux", "a/quark"), pkg("a/quux"), pkg("a/quark"), ), dsp(mkDepspec("b 1.0.0"), pkg("b", "a/foo"), pkg("b/baz", "b"), ), }, r: mksolution( mklp("a 1.0.0", ".", "foo", "quark", "quux"), mklp("b 1.0.0", ".", "baz"), ), }, // Ensure that if a constraint is expressed, but no actual import exists, // then the constraint is disregarded - the project named in the constraint // is not part of the solution. "ignore constraint without import": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "a 1.0.0"), pkg("root", "root/foo"), pkg("root/foo"), ), dsp(mkDepspec("a 1.0.0"), pkg("a"), ), }, r: mksolution(), }, // Transitive deps from one project (a) get incrementally included as other // deps incorporate its various packages. "multi-stage pkg incorporation": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "a", "d"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "b"), pkg("a/second", "c"), ), dsp(mkDepspec("b 2.0.0"), pkg("b"), ), dsp(mkDepspec("c 1.2.0"), pkg("c"), ), dsp(mkDepspec("d 1.0.0"), pkg("d", "a/second"), ), }, r: mksolution( mklp("a 1.0.0", ".", "second"), "b 2.0.0", "c 1.2.0", "d 1.0.0", ), }, // Regression - make sure that the the constraint/import intersector only // accepts a project 'match' if exactly equal, or a separating slash is // present. "radix path separator post-check": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo", "foobar"), ), dsp(mkDepspec("foo 1.0.0"), pkg("foo"), ), dsp(mkDepspec("foobar 1.0.0"), pkg("foobar"), ), }, r: mksolution( "foo 1.0.0", "foobar 1.0.0", ), }, // Well-formed failure when there's a dependency on a pkg that doesn't exist "fail when imports nonexistent package": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "a 1.0.0"), pkg("root", "a/foo"), ), dsp(mkDepspec("a 1.0.0"), pkg("a"), ), }, fail: &noVersionError{ pn: mkPI("a"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &checkeeHasProblemPackagesFailure{ goal: mkAtom("a 1.0.0"), failpkg: map[string]errDeppers{ "a/foo": { err: nil, // nil indicates package is missing deppers: []atom{ mkAtom("root"), }, }, }, }, }, }, }, }, // Transitive deps from one project (a) get incrementally included as other // deps incorporate its various packages, and fail with proper error when we // discover one incrementally that isn't present "fail multi-stage missing pkg": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "a", "d"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "b"), pkg("a/second", "c"), ), dsp(mkDepspec("b 2.0.0"), pkg("b"), ), dsp(mkDepspec("c 1.2.0"), pkg("c"), ), dsp(mkDepspec("d 1.0.0"), pkg("d", "a/second"), pkg("d", "a/nonexistent"), ), }, fail: &noVersionError{ pn: mkPI("d"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &depHasProblemPackagesFailure{ goal: mkADep("d 1.0.0", "a", Any(), "a/nonexistent"), v: NewVersion("1.0.0"), prob: map[string]error{ "a/nonexistent": nil, }, }, }, }, }, }, // Check ignores on the root project "ignore in double-subpkg": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "root/bar", "b"), pkg("root/bar", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), ), }, ignore: []string{"root/bar"}, r: mksolution( "b 1.0.0", ), }, // Ignores on a dep pkg "ignore through dep pkg": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "root/foo"), pkg("root/foo", "a"), ), dsp(mkDepspec("a 1.0.0"), pkg("a", "a/bar"), pkg("a/bar", "b"), ), dsp(mkDepspec("b 1.0.0"), pkg("b"), ), }, ignore: []string{"a/bar"}, r: mksolution( "a 1.0.0", ), }, // Preferred version, as derived from a dep's lock, is attempted first "respect prefv, simple case": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "a")), dsp(mkDepspec("a 1.0.0"), pkg("a", "b")), dsp(mkDepspec("b 1.0.0 foorev"), pkg("b")), dsp(mkDepspec("b 2.0.0 barrev"), pkg("b")), }, lm: map[string]fixLock{ "a 1.0.0": mklock( "b 1.0.0 foorev", ), }, r: mksolution( "a 1.0.0", "b 1.0.0 foorev", ), }, // Preferred version, as derived from a dep's lock, is attempted first, even // if the root also has a direct dep on it (root doesn't need to use // preferreds, because it has direct control AND because the root lock // already supersedes dep lock "preferences") "respect dep prefv with root import": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "a", "b")), dsp(mkDepspec("a 1.0.0"), pkg("a", "b")), //dsp(newDepspec("a 1.0.1"), //pkg("a", "b")), //dsp(newDepspec("a 1.1.0"), //pkg("a", "b")), dsp(mkDepspec("b 1.0.0 foorev"), pkg("b")), dsp(mkDepspec("b 2.0.0 barrev"), pkg("b")), }, lm: map[string]fixLock{ "a 1.0.0": mklock( "b 1.0.0 foorev", ), }, r: mksolution( "a 1.0.0", "b 1.0.0 foorev", ), }, // Preferred versions can only work if the thing offering it has been // selected, or at least marked in the unselected queue "prefv only works if depper is selected": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "a", "b")), // Three atoms for a, which will mean it gets visited after b dsp(mkDepspec("a 1.0.0"), pkg("a", "b")), dsp(mkDepspec("a 1.0.1"), pkg("a", "b")), dsp(mkDepspec("a 1.1.0"), pkg("a", "b")), dsp(mkDepspec("b 1.0.0 foorev"), pkg("b")), dsp(mkDepspec("b 2.0.0 barrev"), pkg("b")), }, lm: map[string]fixLock{ "a 1.0.0": mklock( "b 1.0.0 foorev", ), }, r: mksolution( "a 1.1.0", "b 2.0.0 barrev", ), }, "override unconstrained root import": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "a")), dsp(mkDepspec("a 1.0.0"), pkg("a")), dsp(mkDepspec("a 2.0.0"), pkg("a")), }, ovr: ProjectConstraints{ ProjectRoot("a"): ProjectProperties{ Constraint: NewVersion("1.0.0"), }, }, r: mksolution( "a 1.0.0", ), }, "simple case-only differences": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo", "bar")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "Bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), }, fail: &noVersionError{ pn: mkPI("foo"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &caseMismatchFailure{ goal: mkDep("foo 1.0.0", "Bar 1.0.0", "Bar"), current: ProjectRoot("bar"), failsib: []dependency{mkDep("root", "bar 1.0.0", "bar")}, }, }, }, }, }, "case variations acceptable with agreement": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "Bar", "baz")), dsp(mkDepspec("baz 1.0.0"), pkg("baz", "Bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), }, r: mksolution( "foo 1.0.0", "Bar 1.0.0", "baz 1.0.0", ), }, "case variations within root": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo", "bar", "Bar")), dsp(mkDepspec("foo 1.0.0"), pkg("foo")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), }, fail: &noVersionError{ pn: mkPI("foo"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &caseMismatchFailure{ goal: mkDep("foo 1.0.0", "Bar 1.0.0", "Bar"), current: ProjectRoot("bar"), failsib: []dependency{mkDep("root", "foo 1.0.0", "foo")}, }, }, }, }, broken: "need to implement checking for import case variations *within* the root", }, "case variations within single dep": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "bar", "Bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), }, fail: &noVersionError{ pn: mkPI("foo"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &caseMismatchFailure{ goal: mkDep("foo 1.0.0", "Bar 1.0.0", "Bar"), current: ProjectRoot("bar"), failsib: []dependency{mkDep("root", "foo 1.0.0", "foo")}, }, }, }, }, broken: "need to implement checking for import case variations *within* a single project", }, "case variations across multiple deps": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo", "bar")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "bar", "baz")), dsp(mkDepspec("baz 1.0.0"), pkg("baz", "Bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), }, fail: &noVersionError{ pn: mkPI("baz"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &caseMismatchFailure{ goal: mkDep("baz 1.0.0", "Bar 1.0.0", "Bar"), current: ProjectRoot("bar"), failsib: []dependency{ mkDep("root", "bar 1.0.0", "bar"), mkDep("foo 1.0.0", "bar 1.0.0", "bar"), }, }, }, }, }, }, // This isn't actually as crazy as it might seem, as the root is defined by // the addresser, not the addressee. It would occur (to provide a // real-as-of-this-writing example) if something imports // github.com/Sirupsen/logrus, as the contained subpackage at // github.com/Sirupsen/logrus/hooks/syslog imports // github.com/sirupsen/logrus. The only reason that doesn't blow up all the // time is that most people only import the root package, not the syslog // subpackage. "canonical case is established by mutual self-imports": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "Bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar", "bar/subpkg"), pkg("bar/subpkg")), }, fail: &noVersionError{ pn: mkPI("Bar"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &wrongCaseFailure{ correct: ProjectRoot("bar"), goal: mkDep("Bar 1.0.0", "bar 1.0.0", "bar"), badcase: []dependency{mkDep("foo 1.0.0", "Bar 1.0.0", "Bar/subpkg")}, }, }, }, }, }, "canonical case only applies if relevant imports are activated": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "Bar/subpkg")), dsp(mkDepspec("bar 1.0.0"), pkg("bar", "bar/subpkg"), pkg("bar/subpkg")), }, r: mksolution( "foo 1.0.0", mklp("Bar 1.0.0", "subpkg"), ), }, "simple case-only variations plus source variance": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo", "bar")), dsp(mkDepspec("foo 1.0.0", "Bar from quux 1.0.0"), pkg("foo", "Bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), dsp(mkDepspec("quux 1.0.0"), pkg("bar")), }, fail: &noVersionError{ pn: mkPI("foo"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &caseMismatchFailure{ goal: mkDep("foo 1.0.0", "Bar from quux 1.0.0", "Bar"), current: ProjectRoot("bar"), failsib: []dependency{mkDep("root", "bar 1.0.0", "bar")}, }, }, }, }, }, "case-only variations plus source variance with internal canonicality": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "Bar from quux 1.0.0"), pkg("root", "foo", "Bar")), dsp(mkDepspec("foo 1.0.0", "Bar from quux 1.0.0"), pkg("foo", "Bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar", "bar/subpkg"), pkg("bar/subpkg")), dsp(mkDepspec("quux 1.0.0"), pkg("bar", "bar/subpkg"), pkg("bar/subpkg")), }, fail: &noVersionError{ pn: mkPI("Bar"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &wrongCaseFailure{ correct: ProjectRoot("bar"), goal: mkDep("Bar from quux 1.0.0", "bar 1.0.0", "bar"), badcase: []dependency{mkDep("root", "Bar 1.0.0", "Bar/subpkg")}, }, }, }, }, }, "alternate net address": { ds: []depspec{ dsp(mkDepspec("root 1.0.0", "foo from bar 2.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo")), dsp(mkDepspec("foo 2.0.0"), pkg("foo")), dsp(mkDepspec("bar 1.0.0"), pkg("foo")), dsp(mkDepspec("bar 2.0.0"), pkg("foo")), }, r: mksolution( "foo from bar 2.0.0", ), }, "alternate net address, version only in alt": { ds: []depspec{ dsp(mkDepspec("root 1.0.0", "foo from bar 2.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo")), dsp(mkDepspec("bar 1.0.0"), pkg("foo")), dsp(mkDepspec("bar 2.0.0"), pkg("foo")), }, r: mksolution( "foo from bar 2.0.0", ), }, "alternate net address in dep": { ds: []depspec{ dsp(mkDepspec("root 1.0.0", "foo 1.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0", "bar from baz 2.0.0"), pkg("foo", "bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), dsp(mkDepspec("baz 1.0.0"), pkg("bar")), dsp(mkDepspec("baz 2.0.0"), pkg("bar")), }, r: mksolution( "foo 1.0.0", "bar from baz 2.0.0", ), }, // Because NOT specifying an alternate net address for a given import path // is taken as an "eh, whatever", if we see an empty net addr after // something else has already set an alternate one, then the second should // just "go along" with whatever's already been specified. "alternate net address with second depper": { ds: []depspec{ dsp(mkDepspec("root 1.0.0", "foo from bar 2.0.0"), pkg("root", "foo", "baz")), dsp(mkDepspec("foo 1.0.0"), pkg("foo")), dsp(mkDepspec("foo 2.0.0"), pkg("foo")), dsp(mkDepspec("bar 1.0.0"), pkg("foo")), dsp(mkDepspec("bar 2.0.0"), pkg("foo")), dsp(mkDepspec("baz 1.0.0"), pkg("baz", "foo")), }, r: mksolution( "foo from bar 2.0.0", "baz 1.0.0", ), }, // Same as the previous, except the alternate declaration originates in a // dep, not the root. "alternate net addr from dep, with second default depper": { ds: []depspec{ dsp(mkDepspec("root 1.0.0", "foo 1.0.0"), pkg("root", "foo", "bar")), dsp(mkDepspec("foo 1.0.0", "bar 2.0.0"), pkg("foo", "baz")), dsp(mkDepspec("foo 2.0.0", "bar 2.0.0"), pkg("foo", "baz")), dsp(mkDepspec("bar 2.0.0", "baz from quux 1.0.0"), pkg("bar", "baz")), dsp(mkDepspec("baz 1.0.0"), pkg("baz")), dsp(mkDepspec("baz 2.0.0"), pkg("baz")), dsp(mkDepspec("quux 1.0.0"), pkg("baz")), }, r: mksolution( "foo 1.0.0", "bar 2.0.0", "baz from quux 1.0.0", ), }, // When a given project is initially brought in using the default (i.e., // empty) ProjectIdentifier.Source, and a later, presumably // as-yet-undiscovered dependency specifies an alternate net addr for it, we // have to fail - even though, if the deps were visited in the opposite // order (deeper dep w/the alternate location first, default location // second), it would be fine. // // TODO A better solution here would involve restarting the solver w/a // marker to use that alternate, or (ugh) introducing a new failure // path/marker type that changes how backtracking works. (In fact, these // approaches are probably demonstrably equivalent.) "fails with net mismatch when deeper dep specs it": { ds: []depspec{ dsp(mkDepspec("root 1.0.0", "foo 1.0.0"), pkg("root", "foo", "baz")), dsp(mkDepspec("foo 1.0.0", "bar 2.0.0"), pkg("foo", "bar")), dsp(mkDepspec("bar 2.0.0", "baz from quux 1.0.0"), pkg("bar", "baz")), dsp(mkDepspec("baz 1.0.0"), pkg("baz")), dsp(mkDepspec("quux 1.0.0"), pkg("baz")), }, fail: &noVersionError{ pn: mkPI("bar"), fails: []failedVersion{ { v: NewVersion("2.0.0"), f: &sourceMismatchFailure{ shared: ProjectRoot("baz"), current: "baz", mismatch: "quux", prob: mkAtom("bar 2.0.0"), sel: []dependency{mkDep("foo 1.0.0", "bar 2.0.0", "bar")}, }, }, }, }, }, "with mismatched net addrs": { ds: []depspec{ dsp(mkDepspec("root 1.0.0", "foo 1.0.0", "bar 1.0.0"), pkg("root", "foo", "bar")), dsp(mkDepspec("foo 1.0.0", "bar from baz 1.0.0"), pkg("foo", "bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), dsp(mkDepspec("baz 1.0.0"), pkg("bar")), }, fail: &noVersionError{ pn: mkPI("foo"), fails: []failedVersion{ { v: NewVersion("1.0.0"), f: &sourceMismatchFailure{ shared: ProjectRoot("bar"), current: "bar", mismatch: "baz", prob: mkAtom("foo 1.0.0"), sel: []dependency{mkDep("root", "foo 1.0.0", "foo")}, }, }, }, }, }, "overridden mismatched net addrs, alt in dep": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0", "bar from baz 1.0.0"), pkg("foo", "bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), dsp(mkDepspec("baz 1.0.0"), pkg("bar")), }, ovr: ProjectConstraints{ ProjectRoot("bar"): ProjectProperties{ Source: "baz", }, }, r: mksolution( "foo 1.0.0", "bar from baz 1.0.0", ), }, "overridden mismatched net addrs, alt in root": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "bar from baz 1.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), dsp(mkDepspec("baz 1.0.0"), pkg("bar")), }, ovr: ProjectConstraints{ ProjectRoot("bar"): ProjectProperties{ Source: "baz", }, }, r: mksolution( "foo 1.0.0", "bar from baz 1.0.0", ), }, "require package": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "bar 1.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), dsp(mkDepspec("baz 1.0.0"), pkg("baz")), }, require: []string{"baz"}, r: mksolution( "foo 1.0.0", "bar 1.0.0", "baz 1.0.0", ), }, "require activates constraints": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "foo 1.0.0", "bar 1.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), dsp(mkDepspec("bar 1.1.0"), pkg("bar")), }, require: []string{"bar"}, r: mksolution( "foo 1.0.0", "bar 1.0.0", ), }, "require subpackage": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "bar 1.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo", "bar")), dsp(mkDepspec("bar 1.0.0"), pkg("bar")), dsp(mkDepspec("baz 1.0.0"), pkg("baz", "baz/qux"), pkg("baz/qux")), }, require: []string{"baz/qux"}, r: mksolution( "foo 1.0.0", "bar 1.0.0", mklp("baz 1.0.0", "qux"), ), }, "require impossible subpackage": { ds: []depspec{ dsp(mkDepspec("root 0.0.0", "baz 1.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0"), pkg("foo")), dsp(mkDepspec("baz 1.0.0"), pkg("baz")), dsp(mkDepspec("baz 2.0.0"), pkg("baz", "baz/qux"), pkg("baz/qux")), }, require: []string{"baz/qux"}, fail: &noVersionError{ pn: mkPI("baz"), fails: []failedVersion{ { v: NewVersion("2.0.0"), f: &versionNotAllowedFailure{ goal: mkAtom("baz 2.0.0"), failparent: []dependency{mkDep("root", "baz 1.0.0", "baz/qux")}, c: NewVersion("1.0.0"), }, }, { v: NewVersion("1.0.0"), f: &checkeeHasProblemPackagesFailure{ goal: mkAtom("baz 1.0.0"), failpkg: map[string]errDeppers{ "baz/qux": { err: nil, // nil indicates package is missing deppers: []atom{ mkAtom("root"), }, }, }, }, }, }, }, }, "require subpkg conflicts with other dep constraint": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0", "baz 1.0.0"), pkg("foo", "baz")), dsp(mkDepspec("baz 1.0.0"), pkg("baz")), dsp(mkDepspec("baz 2.0.0"), pkg("baz", "baz/qux"), pkg("baz/qux")), }, require: []string{"baz/qux"}, fail: &noVersionError{ pn: mkPI("baz"), fails: []failedVersion{ { v: NewVersion("2.0.0"), f: &versionNotAllowedFailure{ goal: mkAtom("baz 2.0.0"), failparent: []dependency{mkDep("foo 1.0.0", "baz 1.0.0", "baz")}, c: NewVersion("1.0.0"), }, }, { v: NewVersion("1.0.0"), f: &checkeeHasProblemPackagesFailure{ goal: mkAtom("baz 1.0.0"), failpkg: map[string]errDeppers{ "baz/qux": { err: nil, // nil indicates package is missing deppers: []atom{ mkAtom("root"), }, }, }, }, }, }, }, }, "require independent subpkg conflicts with other dep constraint": { ds: []depspec{ dsp(mkDepspec("root 0.0.0"), pkg("root", "foo")), dsp(mkDepspec("foo 1.0.0", "baz 1.0.0"), pkg("foo", "baz")), dsp(mkDepspec("baz 1.0.0"), pkg("baz")), dsp(mkDepspec("baz 2.0.0"), pkg("baz"), pkg("baz/qux")), }, require: []string{"baz/qux"}, fail: &noVersionError{ pn: mkPI("baz"), fails: []failedVersion{ { v: NewVersion("2.0.0"), f: &versionNotAllowedFailure{ goal: mkAtom("baz 2.0.0"), failparent: []dependency{mkDep("foo 1.0.0", "baz 1.0.0", "baz")}, c: NewVersion("1.0.0"), }, }, { v: NewVersion("1.0.0"), f: &checkeeHasProblemPackagesFailure{ goal: mkAtom("baz 1.0.0"), failpkg: map[string]errDeppers{ "baz/qux": { err: nil, // nil indicates package is missing deppers: []atom{ mkAtom("root"), }, }, }, }, }, }, }, }, } // tpkg is a representation of a single package. It has its own import path, as // well as a list of paths it itself "imports". type tpkg struct { // Full import path of this package path string // Slice of full paths to its virtual imports imports []string } type bimodalFixture struct { // name of this fixture datum n string // bimodal project; first is always treated as root project ds []depspec // results; map of name/version pairs r map[ProjectIdentifier]LockedProject // max attempts the solver should need to find solution. 0 means no limit maxAttempts int // Use downgrade instead of default upgrade sorter downgrade bool // lock file simulator, if one's to be used at all l fixLock // map of locks for deps, if any. keys should be of the form: // " " lm map[string]fixLock // solve failure expected, if any fail error // overrides, if any ovr ProjectConstraints // request up/downgrade to all projects changeall bool // pkgs to ignore ignore []string // pkgs to require require []string // if the fixture is currently broken/expected to fail, this has a message // recording why broken string } func (f bimodalFixture) name() string { return f.n } func (f bimodalFixture) specs() []depspec { return f.ds } func (f bimodalFixture) maxTries() int { return f.maxAttempts } func (f bimodalFixture) solution() map[ProjectIdentifier]LockedProject { return f.r } func (f bimodalFixture) rootmanifest() RootManifest { m := simpleRootManifest{ c: pcSliceToMap(f.ds[0].deps), ovr: f.ovr, ig: pkgtree.NewIgnoredRuleset(f.ignore), req: make(map[string]bool), } for _, req := range f.require { m.req[req] = true } return m } func (f bimodalFixture) rootTree() pkgtree.PackageTree { pt := pkgtree.PackageTree{ ImportRoot: string(f.ds[0].n), Packages: map[string]pkgtree.PackageOrErr{}, } for _, pkg := range f.ds[0].pkgs { elems := strings.Split(pkg.path, "/") pt.Packages[pkg.path] = pkgtree.PackageOrErr{ P: pkgtree.Package{ ImportPath: pkg.path, Name: elems[len(elems)-1], // TODO(sdboyer) ugh, tpkg type has no space for supporting test // imports... Imports: pkg.imports, }, } } return pt } func (f bimodalFixture) failure() error { return f.fail } // bmSourceManager is an SM specifically for the bimodal fixtures. It composes // the general depspec SM, and differs from it in how it answers static analysis // calls, and its support for package ignores and dep lock data. type bmSourceManager struct { depspecSourceManager lm map[string]fixLock } var _ SourceManager = &bmSourceManager{} func newbmSM(bmf bimodalFixture) *bmSourceManager { sm := &bmSourceManager{ depspecSourceManager: *newdepspecSM(bmf.ds, bmf.ignore), } sm.rm = computeBimodalExternalMap(bmf.ds) sm.lm = bmf.lm return sm } func (sm *bmSourceManager) ListPackages(id ProjectIdentifier, v Version) (pkgtree.PackageTree, error) { // Deal with address-based root-switching with both case folding and // alternate sources. var src, fsrc, root, froot string src, fsrc = id.normalizedSource(), toFold(id.normalizedSource()) if id.Source != "" { root = string(id.ProjectRoot) froot = toFold(root) } else { root, froot = src, fsrc } for k, ds := range sm.specs { // Cheat for root, otherwise we blow up b/c version is empty if fsrc == string(ds.n) && (k == 0 || ds.v.Matches(v)) { var replace bool if root != string(ds.n) { // We're in a case-varying lookup; ensure we replace the actual // leading ProjectRoot portion of import paths with the literal // string from the input. replace = true } ptree := pkgtree.PackageTree{ ImportRoot: src, Packages: make(map[string]pkgtree.PackageOrErr), } for _, pkg := range ds.pkgs { if replace { pkg.path = strings.Replace(pkg.path, froot, root, 1) } ptree.Packages[pkg.path] = pkgtree.PackageOrErr{ P: pkgtree.Package{ ImportPath: pkg.path, Name: filepath.Base(pkg.path), Imports: pkg.imports, }, } } return ptree, nil } } return pkgtree.PackageTree{}, fmt.Errorf("Project %s at version %s could not be found", id, v) } func (sm *bmSourceManager) GetManifestAndLock(id ProjectIdentifier, v Version, an ProjectAnalyzer) (Manifest, Lock, error) { src := toFold(id.normalizedSource()) for _, ds := range sm.specs { if src == string(ds.n) && v.Matches(ds.v) { if l, exists := sm.lm[src+" "+v.String()]; exists { return ds, l, nil } return ds, dummyLock{}, nil } } // TODO(sdboyer) proper solver-type errors return nil, nil, fmt.Errorf("Project %s at version %s could not be found", id, v) } // computeBimodalExternalMap takes a set of depspecs and computes an // internally-versioned ReachMap that is useful for quickly answering // ReachMap.Flatten()-type calls. // // Note that it does not do things like stripping out stdlib packages - these // maps are intended for use in SM fixtures, and that's a higher-level // responsibility within the system. func computeBimodalExternalMap(specs []depspec) map[pident]map[string][]string { // map of project name+version -> map of subpkg name -> external pkg list rm := make(map[pident]map[string][]string) for _, ds := range specs { ptree := pkgtree.PackageTree{ ImportRoot: string(ds.n), Packages: make(map[string]pkgtree.PackageOrErr), } for _, pkg := range ds.pkgs { ptree.Packages[pkg.path] = pkgtree.PackageOrErr{ P: pkgtree.Package{ ImportPath: pkg.path, Name: filepath.Base(pkg.path), Imports: pkg.imports, }, } } reachmap, em := ptree.ToReachMap(false, true, true, nil) if len(em) > 0 { panic(fmt.Sprintf("pkgs with errors in reachmap processing: %s", em)) } drm := make(map[string][]string) for ip, ie := range reachmap { drm[ip] = ie.External } rm[pident{n: ds.n, v: ds.v}] = drm } return rm } dep-0.3.2/internal/gps/solve_failures.go000066400000000000000000000416721317166637100202670ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "fmt" "sort" "strings" ) func a2vs(a atom) string { if a.v == rootRev || a.v == nil { return "(root)" } return fmt.Sprintf("%s@%s", a.id, a.v) } type traceError interface { traceString() string } type noVersionError struct { pn ProjectIdentifier fails []failedVersion } func (e *noVersionError) Error() string { if len(e.fails) == 0 { return fmt.Sprintf("No versions found for project %q.", e.pn.ProjectRoot) } var buf bytes.Buffer fmt.Fprintf(&buf, "No versions of %s met constraints:", e.pn.ProjectRoot) for _, f := range e.fails { fmt.Fprintf(&buf, "\n\t%s: %s", f.v, f.f.Error()) } return buf.String() } func (e *noVersionError) traceString() string { if len(e.fails) == 0 { return fmt.Sprintf("No versions found") } var buf bytes.Buffer fmt.Fprintf(&buf, "No versions of %s met constraints:", e.pn.ProjectRoot) for _, f := range e.fails { if te, ok := f.f.(traceError); ok { fmt.Fprintf(&buf, "\n %s: %s", f.v, te.traceString()) } else { fmt.Fprintf(&buf, "\n %s: %s", f.v, f.f.Error()) } } return buf.String() } // caseMismatchFailure occurs when there are import paths that differ only by // case. The compiler disallows this case. type caseMismatchFailure struct { // goal is the depender atom that tried to introduce the case-varying name, // along with the case-varying name. goal dependency // current is the specific casing of a ProjectRoot that is presently // selected for all possible case variations of its contained unicode code // points. current ProjectRoot // failsib is the list of active dependencies that have determined the // specific casing for the target project. failsib []dependency } func (e *caseMismatchFailure) Error() string { if len(e.failsib) == 1 { str := "Could not introduce %s due to a case-only variation: it depends on %q, but %q was already established as the case variant for that project root by depender %s" return fmt.Sprintf(str, a2vs(e.goal.depender), e.goal.dep.Ident.ProjectRoot, e.current, a2vs(e.failsib[0].depender)) } var buf bytes.Buffer str := "Could not introduce %s due to a case-only variation: it depends on %q, but %q was already established as the case variant for that project root by the following other dependers:\n" fmt.Fprintf(&buf, str, a2vs(e.goal.depender), e.goal.dep.Ident.ProjectRoot, e.current) for _, c := range e.failsib { fmt.Fprintf(&buf, "\t%s\n", a2vs(c.depender)) } return buf.String() } func (e *caseMismatchFailure) traceString() string { var buf bytes.Buffer fmt.Fprintf(&buf, "case-only variation in dependency on %q; %q already established by:\n", e.goal.dep.Ident.ProjectRoot, e.current) for _, f := range e.failsib { fmt.Fprintf(&buf, "%s\n", a2vs(f.depender)) } return buf.String() } // wrongCaseFailure occurs when one or more projects - A, B, ... - depend on // another project - Z - with an incorrect case variant, as indicated by the // case variant used internally by Z to reference its own packages. // // For example, github.com/sirupsen/logrus/hooks/syslog references itself via // github.com/sirupsen/logrus, establishing that as the canonical case variant. type wrongCaseFailure struct { // correct is the canonical representation of the ProjectRoot correct ProjectRoot // goal is the incorrectly-referenced target project goal dependency // badcase is the list of active dependencies that have specified an // incorrect ProjectRoot casing for the project in question. badcase []dependency } func (e *wrongCaseFailure) Error() string { if len(e.badcase) == 1 { str := "Could not introduce %s; imports amongst its packages establish %q as the canonical casing for root, but %s tried to import it as %q" return fmt.Sprintf(str, a2vs(e.goal.depender), e.correct, a2vs(e.badcase[0].depender), e.badcase[0].dep.Ident.ProjectRoot) } var buf bytes.Buffer str := "Could not introduce %s; imports amongst its packages establish %q as the canonical casing for root, but the following projects tried to import it as %q" fmt.Fprintf(&buf, str, a2vs(e.goal.depender), e.correct, e.badcase[0].dep.Ident.ProjectRoot) for _, c := range e.badcase { fmt.Fprintf(&buf, "\t%s\n", a2vs(c.depender)) } return buf.String() } func (e *wrongCaseFailure) traceString() string { var buf bytes.Buffer fmt.Fprintf(&buf, "internal imports establish %q as correct casing; %q was used by:\n", e.correct, e.goal.dep.Ident.ProjectRoot) for _, f := range e.badcase { fmt.Fprintf(&buf, "%s\n", a2vs(f.depender)) } return buf.String() } // disjointConstraintFailure occurs when attempting to introduce an atom that // itself has an acceptable version, but one of its dependency constraints is // disjoint with one or more dependency constraints already active for that // identifier. type disjointConstraintFailure struct { // goal is the dependency with the problematic constraint, forcing us to // reject the atom that introduces it. goal dependency // failsib is the list of active dependencies that are disjoint with the // goal dependency. This will be at least one, but may not be all of the // active dependencies. failsib []dependency // nofailsib is the list of active dependencies that are NOT disjoint with // the goal dependency. The total of nofailsib and failsib will always be // the total number of active dependencies on target identifier. nofailsib []dependency // c is the current constraint on the target identifier. It is intersection // of all the active dependencies' constraints. c Constraint } func (e *disjointConstraintFailure) Error() string { if len(e.failsib) == 1 { str := "Could not introduce %s, as it has a dependency on %s with constraint %s, which has no overlap with existing constraint %s from %s" return fmt.Sprintf(str, a2vs(e.goal.depender), e.goal.dep.Ident, e.goal.dep.Constraint.String(), e.failsib[0].dep.Constraint.String(), a2vs(e.failsib[0].depender)) } var buf bytes.Buffer var sibs []dependency if len(e.failsib) > 1 { sibs = e.failsib str := "Could not introduce %s, as it has a dependency on %s with constraint %s, which has no overlap with the following existing constraints:\n" fmt.Fprintf(&buf, str, a2vs(e.goal.depender), e.goal.dep.Ident, e.goal.dep.Constraint.String()) } else { sibs = e.nofailsib str := "Could not introduce %s, as it has a dependency on %s with constraint %s, which does not overlap with the intersection of existing constraints from other currently selected packages:\n" fmt.Fprintf(&buf, str, a2vs(e.goal.depender), e.goal.dep.Ident, e.goal.dep.Constraint.String()) } for _, c := range sibs { fmt.Fprintf(&buf, "\t%s from %s\n", c.dep.Constraint.String(), a2vs(c.depender)) } return buf.String() } func (e *disjointConstraintFailure) traceString() string { var buf bytes.Buffer fmt.Fprintf(&buf, "constraint %s on %s disjoint with other dependers:\n", e.goal.dep.Constraint.String(), e.goal.dep.Ident) for _, f := range e.failsib { fmt.Fprintf( &buf, "%s from %s (no overlap)\n", f.dep.Constraint.String(), a2vs(f.depender), ) } for _, f := range e.nofailsib { fmt.Fprintf( &buf, "%s from %s (some overlap)\n", f.dep.Constraint.String(), a2vs(f.depender), ) } return buf.String() } // Indicates that an atom could not be introduced because one of its dep // constraints does not admit the currently-selected version of the target // project. type constraintNotAllowedFailure struct { // The dependency with the problematic constraint that could not be // introduced. goal dependency // The (currently selected) version of the target project that was not // admissible by the goal dependency. v Version } func (e *constraintNotAllowedFailure) Error() string { return fmt.Sprintf( "Could not introduce %s, as it has a dependency on %s with constraint %s, which does not allow the currently selected version of %s", a2vs(e.goal.depender), e.goal.dep.Ident, e.goal.dep.Constraint, e.v, ) } func (e *constraintNotAllowedFailure) traceString() string { return fmt.Sprintf( "%s depends on %s with %s, but that's already selected at %s", a2vs(e.goal.depender), e.goal.dep.Ident.ProjectRoot, e.goal.dep.Constraint, e.v, ) } // versionNotAllowedFailure describes a failure where an atom is rejected // because its version is not allowed by current constraints. // // (This is one of the more straightforward types of failures) type versionNotAllowedFailure struct { // goal is the atom that was rejected by current constraints. goal atom // failparent is the list of active dependencies that caused the atom to be // rejected. Note that this only includes dependencies that actually // rejected the atom, which will be at least one, but may not be all the // active dependencies on the atom's identifier. failparent []dependency // c is the current constraint on the atom's identifier. This is the intersection // of all active dependencies' constraints. c Constraint } func (e *versionNotAllowedFailure) Error() string { if len(e.failparent) == 1 { return fmt.Sprintf( "Could not introduce %s, as it is not allowed by constraint %s from project %s.", a2vs(e.goal), e.failparent[0].dep.Constraint.String(), e.failparent[0].depender.id, ) } var buf bytes.Buffer fmt.Fprintf(&buf, "Could not introduce %s, as it is not allowed by constraints from the following projects:\n", a2vs(e.goal)) for _, f := range e.failparent { fmt.Fprintf(&buf, "\t%s from %s\n", f.dep.Constraint.String(), a2vs(f.depender)) } return buf.String() } func (e *versionNotAllowedFailure) traceString() string { var buf bytes.Buffer fmt.Fprintf(&buf, "%s not allowed by constraint %s:\n", a2vs(e.goal), e.c.String()) for _, f := range e.failparent { fmt.Fprintf(&buf, " %s from %s\n", f.dep.Constraint.String(), a2vs(f.depender)) } return buf.String() } type missingSourceFailure struct { goal ProjectIdentifier prob string } func (e *missingSourceFailure) Error() string { return fmt.Sprintf(e.prob, e.goal) } type badOptsFailure string func (e badOptsFailure) Error() string { return string(e) } type sourceMismatchFailure struct { // The ProjectRoot over which there is disagreement about where it should be // sourced from shared ProjectRoot // The current value for the network source current string // The mismatched value for the network source mismatch string // The currently selected dependencies which have agreed upon/established // the given network source sel []dependency // The atom with the constraint that has the new, incompatible network source prob atom } func (e *sourceMismatchFailure) Error() string { var cur []string for _, c := range e.sel { cur = append(cur, string(c.depender.id.ProjectRoot)) } str := "Could not introduce %s, as it depends on %s from %s, but %s is already marked as coming from %s by %s" return fmt.Sprintf(str, a2vs(e.prob), e.shared, e.mismatch, e.shared, e.current, strings.Join(cur, ", ")) } func (e *sourceMismatchFailure) traceString() string { var buf bytes.Buffer fmt.Fprintf(&buf, "disagreement on network addr for %s:\n", e.shared) fmt.Fprintf(&buf, " %s from %s\n", e.mismatch, e.prob.id) for _, dep := range e.sel { fmt.Fprintf(&buf, " %s from %s\n", e.current, dep.depender.id) } return buf.String() } type errDeppers struct { err error deppers []atom } // checkeeHasProblemPackagesFailure indicates that the goal atom was rejected // because one or more of the packages required by its deppers had errors. // // "errors" includes package nonexistence, which is indicated by a nil err in // the corresponding errDeppers failpkg map value. // // checkeeHasProblemPackagesFailure complements depHasProblemPackagesFailure; // one or the other could appear to describe the same fundamental issue, // depending on the order in which dependencies were visited. type checkeeHasProblemPackagesFailure struct { // goal is the atom that was rejected due to problematic packages. goal atom // failpkg is a map of package names to the error describing the problem // with them, plus a list of the selected atoms that require that package. failpkg map[string]errDeppers } func (e *checkeeHasProblemPackagesFailure) Error() string { var buf bytes.Buffer indent := "" if len(e.failpkg) > 1 { indent = "\t" fmt.Fprintf( &buf, "Could not introduce %s due to multiple problematic subpackages:\n", a2vs(e.goal), ) } for pkg, errdep := range e.failpkg { var cause string if errdep.err == nil { cause = "is missing" } else { cause = fmt.Sprintf("does not contain usable Go code (%T).", errdep.err) } if len(e.failpkg) == 1 { fmt.Fprintf( &buf, "Could not introduce %s, as its subpackage %s %s.", a2vs(e.goal), pkg, cause, ) } else { fmt.Fprintf(&buf, "\tSubpackage %s %s.", pkg, cause) } if len(errdep.deppers) == 1 { fmt.Fprintf( &buf, " (Package is required by %s.)", a2vs(errdep.deppers[0]), ) } else { fmt.Fprintf(&buf, " Package is required by:") for _, pa := range errdep.deppers { fmt.Fprintf(&buf, "\n%s\t%s", indent, a2vs(pa)) } } } return buf.String() } func (e *checkeeHasProblemPackagesFailure) traceString() string { var buf bytes.Buffer fmt.Fprintf(&buf, "%s at %s has problem subpkg(s):\n", e.goal.id.ProjectRoot, e.goal.v) for pkg, errdep := range e.failpkg { if errdep.err == nil { fmt.Fprintf(&buf, "\t%s is missing; ", pkg) } else { fmt.Fprintf(&buf, "\t%s has err (%T); ", pkg, errdep.err) } if len(errdep.deppers) == 1 { fmt.Fprintf(&buf, "required by %s.", a2vs(errdep.deppers[0])) } else { fmt.Fprintf(&buf, " required by:") for _, pa := range errdep.deppers { fmt.Fprintf(&buf, "\n\t\t%s at %s", pa.id, pa.v) } } } return buf.String() } // depHasProblemPackagesFailure indicates that the goal dependency was rejected // because there were problems with one or more of the packages the dependency // requires in the atom currently selected for that dependency. (This failure // can only occur if the target dependency is already selected.) // // "errors" includes package nonexistence, which is indicated by a nil err as // the corresponding prob map value. // // depHasProblemPackagesFailure complements checkeeHasProblemPackagesFailure; // one or the other could appear to describe the same fundamental issue, // depending on the order in which dependencies were visited. type depHasProblemPackagesFailure struct { // goal is the dependency that was rejected due to the atom currently // selected for the dependency's target id having errors (including, and // probably most commonly, // nonexistence) in one or more packages named by the dependency. goal dependency // v is the version of the currently selected atom targeted by the goal // dependency. v Version // prob is a map of problem packages to their specific error. It does not // include missing packages. prob map[string]error } func (e *depHasProblemPackagesFailure) Error() string { fcause := func(pkg string) string { if err := e.prob[pkg]; err != nil { return fmt.Sprintf("does not contain usable Go code (%T).", err) } return "is missing." } if len(e.prob) == 1 { var pkg string for pkg = range e.prob { } return fmt.Sprintf( "Could not introduce %s, as it requires package %s from %s, but in version %s that package %s", a2vs(e.goal.depender), pkg, e.goal.dep.Ident, e.v, fcause(pkg), ) } var buf bytes.Buffer fmt.Fprintf( &buf, "Could not introduce %s, as it requires problematic packages from %s (current version %s):", a2vs(e.goal.depender), e.goal.dep.Ident, e.v, ) pkgs := make([]string, len(e.prob)) k := 0 for pkg := range e.prob { pkgs[k] = pkg k++ } sort.Strings(pkgs) for _, pkg := range pkgs { fmt.Fprintf(&buf, "\t%s %s", pkg, fcause(pkg)) } return buf.String() } func (e *depHasProblemPackagesFailure) traceString() string { var buf bytes.Buffer fcause := func(pkg string) string { if err := e.prob[pkg]; err != nil { return fmt.Sprintf("has parsing err (%T).", err) } return "is missing" } fmt.Fprintf( &buf, "%s depping on %s at %s has problem subpkg(s):", a2vs(e.goal.depender), e.goal.dep.Ident, e.v, ) pkgs := make([]string, len(e.prob)) k := 0 for pkg := range e.prob { pkgs[k] = pkg k++ } sort.Strings(pkgs) for _, pkg := range pkgs { fmt.Fprintf(&buf, "\t%s %s", pkg, fcause(pkg)) } return buf.String() } // nonexistentRevisionFailure indicates that a revision constraint was specified // for a given project, but that that revision does not exist in the source // repository. type nonexistentRevisionFailure struct { goal dependency r Revision } func (e *nonexistentRevisionFailure) Error() string { return fmt.Sprintf( "Could not introduce %s, as it requires %s at revision %s, but that revision does not exist", a2vs(e.goal.depender), e.goal.dep.Ident, e.r, ) } func (e *nonexistentRevisionFailure) traceString() string { return fmt.Sprintf( "%s wants missing rev %s of %s", a2vs(e.goal.depender), e.r, e.goal.dep.Ident, ) } dep-0.3.2/internal/gps/solve_test.go000066400000000000000000000163171317166637100174320ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "fmt" "log" "reflect" "sort" "testing" "github.com/golang/dep/internal/test" ) // overrideMkBridge overrides the base bridge with the depspecBridge that skips // verifyRootDir calls func overrideMkBridge(s *solver, sm SourceManager, down bool) sourceBridge { return &depspecBridge{mkBridge(s, sm, down)} } func fixSolve(params SolveParameters, sm SourceManager, t *testing.T) (Solution, error) { // Trace unconditionally; by passing the trace through t.Log(), the testing // system will decide whether or not to actually show the output (based on // -v, or selectively on test failure). params.TraceLogger = log.New(test.Writer{TB: t}, "", 0) // always return false, otherwise it would identify pretty much all of // our fixtures as being stdlib and skip everything params.stdLibFn = func(string) bool { return false } params.mkBridgeFn = overrideMkBridge s, err := Prepare(params, sm) if err != nil { return nil, err } return s.Solve() } // Test all the basic table fixtures. // // Or, just the one named in the fix arg. func TestBasicSolves(t *testing.T) { // sort them by their keys so we get stable output names := make([]string, 0, len(basicFixtures)) for n := range basicFixtures { names = append(names, n) } sort.Strings(names) for _, n := range names { n := n t.Run(n, func(t *testing.T) { t.Parallel() solveBasicsAndCheck(basicFixtures[n], t) }) } } func solveBasicsAndCheck(fix basicFixture, t *testing.T) (res Solution, err error) { sm := newdepspecSM(fix.ds, nil) if fix.broken != "" { t.Skip(fix.broken) } params := SolveParameters{ RootDir: string(fix.ds[0].n), RootPackageTree: fix.rootTree(), Manifest: fix.rootmanifest(), Lock: dummyLock{}, Downgrade: fix.downgrade, ChangeAll: fix.changeall, ToChange: fix.changelist, ProjectAnalyzer: naiveAnalyzer{}, } if fix.l != nil { params.Lock = fix.l } res, err = fixSolve(params, sm, t) return fixtureSolveSimpleChecks(fix, res, err, t) } // Test all the bimodal table fixtures. // // Or, just the one named in the fix arg. func TestBimodalSolves(t *testing.T) { // sort them by their keys so we get stable output names := make([]string, 0, len(bimodalFixtures)) for n := range bimodalFixtures { names = append(names, n) } sort.Strings(names) for _, n := range names { n := n t.Run(n, func(t *testing.T) { t.Parallel() solveBimodalAndCheck(bimodalFixtures[n], t) }) } } func solveBimodalAndCheck(fix bimodalFixture, t *testing.T) (res Solution, err error) { sm := newbmSM(fix) if fix.broken != "" { t.Skip(fix.broken) } params := SolveParameters{ RootDir: string(fix.ds[0].n), RootPackageTree: fix.rootTree(), Manifest: fix.rootmanifest(), Lock: dummyLock{}, Downgrade: fix.downgrade, ChangeAll: fix.changeall, ProjectAnalyzer: naiveAnalyzer{}, } if fix.l != nil { params.Lock = fix.l } res, err = fixSolve(params, sm, t) return fixtureSolveSimpleChecks(fix, res, err, t) } func fixtureSolveSimpleChecks(fix specfix, soln Solution, err error, t *testing.T) (Solution, error) { ppi := func(id ProjectIdentifier) string { // need this so we can clearly tell if there's a Source or not if id.Source == "" { return string(id.ProjectRoot) } return fmt.Sprintf("%s (from %s)", id.ProjectRoot, id.Source) } pv := func(v Version) string { if pv, ok := v.(PairedVersion); ok { return fmt.Sprintf("%s (%s)", pv.Unpair(), pv.Revision()) } return v.String() } fixfail := fix.failure() if err != nil { if fixfail == nil { t.Errorf("Solve failed unexpectedly:\n%s", err) } else if !(fixfail.Error() == err.Error()) { // TODO(sdboyer) reflect.DeepEqual works for now, but once we start // modeling more complex cases, this should probably become more robust t.Errorf("Failure mismatch:\n\t(GOT): %s\n\t(WNT): %s", err, fixfail) } } else if fixfail != nil { var buf bytes.Buffer fmt.Fprintf(&buf, "Solver succeeded, but expecting failure:\n%s\nProjects in solution:", fixfail) for _, p := range soln.Projects() { fmt.Fprintf(&buf, "\n\t- %s at %s", ppi(p.Ident()), p.Version()) } t.Error(buf.String()) } else { r := soln.(solution) if fix.maxTries() > 0 && r.Attempts() > fix.maxTries() { t.Errorf("Solver completed in %v attempts, but expected %v or fewer", r.att, fix.maxTries()) } // Dump result projects into a map for easier interrogation rp := make(map[ProjectIdentifier]LockedProject) for _, lp := range r.p { rp[lp.pi] = lp } fixlen, rlen := len(fix.solution()), len(rp) if fixlen != rlen { // Different length, so they definitely disagree t.Errorf("Solver reported %v package results, result expected %v", rlen, fixlen) } // Whether or not len is same, still have to verify that results agree // Walk through fixture/expected results first for id, flp := range fix.solution() { if lp, exists := rp[id]; !exists { t.Errorf("Project %q expected but missing from results", ppi(id)) } else { // delete result from map so we skip it on the reverse pass delete(rp, id) if flp.Version() != lp.Version() { t.Errorf("Expected version %q of project %q, but actual version was %q", pv(flp.Version()), ppi(id), pv(lp.Version())) } if !reflect.DeepEqual(lp.pkgs, flp.pkgs) { t.Errorf("Package list was not not as expected for project %s@%s:\n\t(GOT) %s\n\t(WNT) %s", ppi(id), pv(lp.Version()), lp.pkgs, flp.pkgs) } } } // Now walk through remaining actual results for id, lp := range rp { if _, exists := fix.solution()[id]; !exists { t.Errorf("Unexpected project %s@%s present in results, with pkgs:\n\t%s", ppi(id), pv(lp.Version()), lp.pkgs) } } } return soln, err } // This tests that, when a root lock is underspecified (has only a version) we // don't allow a match on that version from a rev in the manifest. We may allow // this in the future, but disallow it for now because going from an immutable // requirement to a mutable lock automagically is a bad direction that could // produce weird side effects. func TestRootLockNoVersionPairMatching(t *testing.T) { fix := basicFixture{ n: "does not match unpaired lock versions with paired real versions", ds: []depspec{ mkDepspec("root 0.0.0", "foo *"), // foo's constraint rewritten below to foorev mkDepspec("foo 1.0.0", "bar 1.0.0"), mkDepspec("foo 1.0.1 foorev", "bar 1.0.1"), mkDepspec("foo 1.0.2 foorev", "bar 1.0.2"), mkDepspec("bar 1.0.0"), mkDepspec("bar 1.0.1"), mkDepspec("bar 1.0.2"), }, l: mklock( "foo 1.0.1", ), r: mksolution( "foo 1.0.2 foorev", "bar 1.0.2", ), } pd := fix.ds[0].deps[0] pd.Constraint = Revision("foorev") fix.ds[0].deps[0] = pd sm := newdepspecSM(fix.ds, nil) l2 := make(fixLock, 1) copy(l2, fix.l) l2[0].v = nil params := SolveParameters{ RootDir: string(fix.ds[0].n), RootPackageTree: fix.rootTree(), Manifest: fix.rootmanifest(), Lock: l2, ProjectAnalyzer: naiveAnalyzer{}, } res, err := fixSolve(params, sm, t) fixtureSolveSimpleChecks(fix, res, err, t) } dep-0.3.2/internal/gps/solver.go000066400000000000000000001222321317166637100165470ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "container/heap" "fmt" "log" "sort" "strings" "sync" "github.com/armon/go-radix" "github.com/golang/dep/internal/gps/paths" "github.com/golang/dep/internal/gps/pkgtree" ) var rootRev = Revision("") // SolveParameters hold all arguments to a solver run. // // Only RootDir and RootPackageTree are absolutely required. A nil Manifest is // allowed, though it usually makes little sense. // // Of these properties, only the Manifest and RootPackageTree are (directly) // incorporated in memoization hashing. type SolveParameters struct { // The path to the root of the project on which the solver should operate. // This should point to the directory that should contain the vendor/ // directory. // // In general, it is wise for this to be under an active GOPATH, though it // is not (currently) required. // // A real path to a readable directory is required. RootDir string // The ProjectAnalyzer is responsible for extracting Manifest and // (optionally) Lock information from dependencies. The solver passes it // along to its SourceManager's GetManifestAndLock() method as needed. // // An analyzer is required. ProjectAnalyzer ProjectAnalyzer // The tree of packages that comprise the root project, as well as the // import path that should identify the root of that tree. // // In most situations, tools should simply pass the result of ListPackages() // directly through here. // // The ImportRoot property must be a non-empty string, and at least one // element must be present in the Packages map. RootPackageTree pkgtree.PackageTree // The root manifest. This contains all the dependency constraints // associated with normal Manifests, as well as the particular controls // afforded only to the root project. // // May be nil, but for most cases, that would be unwise. Manifest RootManifest // The root lock. Optional. Generally, this lock is the output of a previous // solve run. // // If provided, the solver will attempt to preserve the versions specified // in the lock, unless ToChange or ChangeAll settings indicate otherwise. Lock Lock // ToChange is a list of project names that should be changed - that is, any // versions specified for those projects in the root lock file should be // ignored. // // Passing ChangeAll has subtly different behavior from enumerating all // projects into ToChange. In general, ToChange should *only* be used if the // user expressly requested an upgrade for a specific project. ToChange []ProjectRoot // ChangeAll indicates that all projects should be changed - that is, any // versions specified in the root lock file should be ignored. ChangeAll bool // Downgrade indicates whether the solver will attempt to upgrade (false) or // downgrade (true) projects that are not locked, or are marked for change. // // Upgrading is, by far, the most typical case. The field is named // 'Downgrade' so that the bool's zero value corresponds to that most // typical case. Downgrade bool // TraceLogger is the logger to use for generating trace output. If set, the // solver will generate informative trace output as it moves through the // solving process. TraceLogger *log.Logger // stdLibFn is the function to use to recognize standard library import paths. // Only overridden for tests. Defaults to paths.IsStandardImportPath if nil. stdLibFn func(string) bool // mkBridgeFn is the function to use to create sourceBridges. // Only overridden for tests (so we can run with virtual RootDir). // Defaults to mkBridge if nil. mkBridgeFn func(*solver, SourceManager, bool) sourceBridge } // solver is a CDCL-style constraint solver with satisfiability conditions // hardcoded to the needs of the Go package management problem space. type solver struct { // The current number of attempts made over the course of this solve. This // number increments each time the algorithm completes a backtrack and // starts moving forward again. attempts int // Logger used exclusively for trace output, or nil to suppress. tl *log.Logger // The function to use to recognize standard library import paths. stdLibFn func(string) bool // A bridge to the standard SourceManager. The adapter does some local // caching of pre-sorted version lists, as well as translation between the // full-on ProjectIdentifiers that the solver deals with and the simplified // names a SourceManager operates on. b sourceBridge // A versionUnifier, to facilitate cross-type version comparison and set // operations. vUnify *versionUnifier // A stack containing projects and packages that are currently "selected" - // that is, they have passed all satisfiability checks, and are part of the // current solution. // // The *selection type is mostly just a dumb data container; the solver // itself is responsible for maintaining that invariant. sel *selection // The current list of projects that we need to incorporate into the solution in // order for the solution to be complete. This list is implemented as a // priority queue that places projects least likely to induce errors at the // front, in order to minimize the amount of backtracking required to find a // solution. // // Entries are added to and removed from this list by the solver at the same // time that the selected queue is updated, either with an addition or // removal. unsel *unselected // A stack of all the currently active versionQueues in the solver. The set // of projects represented here corresponds closely to what's in s.sel, // although s.sel will always contain the root project, and s.vqs never // will. Also, s.vqs is only added to (or popped from during backtracking) // when a new project is selected; it is untouched when new packages are // added to an existing project. vqs []*versionQueue // Contains data and constraining information from the root project rd rootdata // metrics for the current solve run. mtr *metrics } func (params SolveParameters) toRootdata() (rootdata, error) { if params.ProjectAnalyzer == nil { return rootdata{}, badOptsFailure("must provide a ProjectAnalyzer") } if params.RootDir == "" { return rootdata{}, badOptsFailure("params must specify a non-empty root directory") } if params.RootPackageTree.ImportRoot == "" { return rootdata{}, badOptsFailure("params must include a non-empty import root") } if len(params.RootPackageTree.Packages) == 0 { return rootdata{}, badOptsFailure("at least one package must be present in the PackageTree") } if params.Lock == nil && len(params.ToChange) != 0 { return rootdata{}, badOptsFailure(fmt.Sprintf("update specifically requested for %s, but no lock was provided to upgrade from", params.ToChange)) } if params.Manifest == nil { params.Manifest = simpleRootManifest{} } rd := rootdata{ ir: params.Manifest.IgnoredPackages(), req: params.Manifest.RequiredPackages(), ovr: params.Manifest.Overrides(), rpt: params.RootPackageTree.Copy(), chng: make(map[ProjectRoot]struct{}), rlm: make(map[ProjectRoot]LockedProject), chngall: params.ChangeAll, dir: params.RootDir, an: params.ProjectAnalyzer, } // Ensure the required and overrides maps are at least initialized if rd.req == nil { rd.req = make(map[string]bool) } if rd.ovr == nil { rd.ovr = make(ProjectConstraints) } if rd.ir.Len() > 0 { var both []string for pkg := range params.Manifest.RequiredPackages() { if rd.ir.IsIgnored(pkg) { both = append(both, pkg) } } switch len(both) { case 0: break case 1: return rootdata{}, badOptsFailure(fmt.Sprintf("%q was given as both a required and ignored package", both[0])) default: return rootdata{}, badOptsFailure(fmt.Sprintf("multiple packages given as both required and ignored: %s", strings.Join(both, ", "))) } } // Validate no empties in the overrides map var eovr []string for pr, pp := range rd.ovr { if pp.Constraint == nil && pp.Source == "" { eovr = append(eovr, string(pr)) } } if eovr != nil { // Maybe it's a little nitpicky to do this (we COULD proceed; empty // overrides have no effect), but this errs on the side of letting the // tool/user know there's bad input. Purely as a principle, that seems // preferable to silently allowing progress with icky input. if len(eovr) > 1 { return rootdata{}, badOptsFailure(fmt.Sprintf("Overrides lacked any non-zero properties for multiple project roots: %s", strings.Join(eovr, " "))) } return rootdata{}, badOptsFailure(fmt.Sprintf("An override was declared for %s, but without any non-zero properties", eovr[0])) } // Prep safe, normalized versions of root manifest and lock data rd.rm = prepManifest(params.Manifest) if params.Lock != nil { for _, lp := range params.Lock.Projects() { rd.rlm[lp.Ident().ProjectRoot] = lp } // Also keep a prepped one, mostly for the bridge. This is probably // wasteful, but only minimally so, and yay symmetry rd.rl = prepLock(params.Lock) } for _, p := range params.ToChange { if _, exists := rd.rlm[p]; !exists { return rootdata{}, badOptsFailure(fmt.Sprintf("cannot update %s as it is not in the lock", p)) } rd.chng[p] = struct{}{} } return rd, nil } // Prepare readies a Solver for use. // // This function reads and validates the provided SolveParameters. If a problem // with the inputs is detected, an error is returned. Otherwise, a Solver is // returned, ready to hash and check inputs or perform a solving run. func Prepare(params SolveParameters, sm SourceManager) (Solver, error) { if sm == nil { return nil, badOptsFailure("must provide non-nil SourceManager") } rd, err := params.toRootdata() if err != nil { return nil, err } if params.stdLibFn == nil { params.stdLibFn = paths.IsStandardImportPath } s := &solver{ tl: params.TraceLogger, stdLibFn: params.stdLibFn, rd: rd, } // Set up the bridge and ensure the root dir is in good, working order // before doing anything else. if params.mkBridgeFn == nil { s.b = mkBridge(s, sm, params.Downgrade) } else { s.b = params.mkBridgeFn(s, sm, params.Downgrade) } err = s.b.verifyRootDir(params.RootDir) if err != nil { return nil, err } s.vUnify = &versionUnifier{ b: s.b, } // Initialize stacks and queues s.sel = &selection{ deps: make(map[ProjectRoot][]dependency), foldRoots: make(map[string]ProjectRoot), vu: s.vUnify, } s.unsel = &unselected{ sl: make([]bimodalIdentifier, 0), cmp: s.unselectedComparator, } return s, nil } // A Solver is the main workhorse of gps: given a set of project inputs, it // performs a constraint solving analysis to develop a complete Solution, or // else fail with an informative error. // // If a Solution is found, an implementing tool may persist it - typically into // a "lock file" - and/or use it to write out a directory tree of dependencies, // suitable to be a vendor directory, via CreateVendorTree. type Solver interface { // HashInputs hashes the unique inputs to this solver, returning the hash // digest. It is guaranteed that, if the resulting digest is equal to the // digest returned from a previous Solution.InputHash(), that that Solution // is valid for this Solver's inputs. // // In such a case, it may not be necessary to run Solve() at all. HashInputs() []byte // Solve initiates a solving run. It will either complete successfully with // a Solution, or fail with an informative error. Solve() (Solution, error) // Name returns a string identifying the particular solver backend. // // Different solvers likely have different invariants, and likely will not // have identical possible result sets for any particular inputs; in some // cases, they may even be disjoint. Name() string // Version returns an int indicating the version of the solver of the given // Name(). Implementations should change their reported version ONLY when // the logic is changed in such a way that substantially changes the result // set that is possible for a substantial subset of likely inputs. // // "Substantial" is an imprecise term, and it is used intentionally. There // are no easy, general ways of subdividing constraint solving problems such // that one can know, a priori, the full impact that subtle algorithmic // changes will have on possible result sets. Consequently, we have to fall // back on coarser, intuition-based reasoning as to whether a change is // large enough that it is likely to be broadly user-visible. // // This is acceptable, because this value is not used programmatically by // the solver in any way. Rather, it is intend for implementing tools to // use as a coarse signal to users about compatibility between their tool's // version and the current data, typically via persistence to a Lock. // Changes to the version number reported should be weighed between // confusing teams by having two members' tools continuously rolling back // each others' chosen Solutions for no apparent reason, and annoying teams // by changing the number for changes so remote that warnings about solver // version mismatches become meaningless. // // Err on the side of caution. // // Chronology is the only implication of the ordering - that lower version // numbers were published before higher numbers. Version() int } func (s *solver) Name() string { return "gps-cdcl" } func (s *solver) Version() int { return 1 } // DeductionErrs maps package import path to errors occurring during deduction. type DeductionErrs map[string]error func (e DeductionErrs) Error() string { return "could not deduce external imports' project roots" } // ValidateParams validates the solver parameters to ensure solving can be completed. func ValidateParams(params SolveParameters, sm SourceManager) error { // Ensure that all packages are deducible without issues. var deducePkgsGroup sync.WaitGroup deductionErrs := make(DeductionErrs) var errsMut sync.Mutex rd, err := params.toRootdata() if err != nil { return err } deducePkg := func(ip string, sm SourceManager) { _, err := sm.DeduceProjectRoot(ip) if err != nil { errsMut.Lock() deductionErrs[ip] = err errsMut.Unlock() } deducePkgsGroup.Done() } for _, ip := range rd.externalImportList(paths.IsStandardImportPath) { deducePkgsGroup.Add(1) go deducePkg(ip, sm) } deducePkgsGroup.Wait() if len(deductionErrs) > 0 { return deductionErrs } return nil } // Solve attempts to find a dependency solution for the given project, as // represented by the SolveParameters with which this Solver was created. // // This is the entry point to the main gps workhorse. func (s *solver) Solve() (Solution, error) { // Set up a metrics object s.mtr = newMetrics() s.vUnify.mtr = s.mtr // Prime the queues with the root project if err := s.selectRoot(); err != nil { return nil, err } all, err := s.solve() s.mtr.pop() var soln solution if err == nil { soln = solution{ att: s.attempts, solv: s, } soln.analyzerInfo = s.rd.an.Info() soln.hd = s.HashInputs() // Convert ProjectAtoms into LockedProjects soln.p = make([]LockedProject, len(all)) k := 0 for pa, pl := range all { soln.p[k] = pa2lp(pa, pl) k++ } } s.traceFinish(soln, err) if s.tl != nil { s.mtr.dump(s.tl) } return soln, err } // solve is the top-level loop for the solving process. func (s *solver) solve() (map[atom]map[string]struct{}, error) { // Main solving loop for { bmi, has := s.nextUnselected() if !has { // no more packages to select - we're done. break } // This split is the heart of "bimodal solving": we follow different // satisfiability and selection paths depending on whether we've already // selected the base project/repo that came off the unselected queue. // // (If we've already selected the project, other parts of the algorithm // guarantee the bmi will contain at least one package from this project // that has yet to be selected.) if awp, is := s.sel.selected(bmi.id); !is { s.mtr.push("new-atom") // Analysis path for when we haven't selected the project yet - need // to create a version queue. queue, err := s.createVersionQueue(bmi) if err != nil { // Err means a failure somewhere down the line; try backtracking. s.traceStartBacktrack(bmi, err, false) s.mtr.pop() if s.backtrack() { // backtracking succeeded, move to the next unselected id continue } return nil, err } if queue.current() == nil { panic("canary - queue is empty, but flow indicates success") } awp := atomWithPackages{ a: atom{ id: queue.id, v: queue.current(), }, pl: bmi.pl, } s.selectAtom(awp, false) s.vqs = append(s.vqs, queue) s.mtr.pop() } else { s.mtr.push("add-atom") // We're just trying to add packages to an already-selected project. // That means it's not OK to burn through the version queue for that // project as we do when first selecting a project, as doing so // would upend the guarantees on which all previous selections of // the project are based (both the initial one, and any package-only // ones). // Because we can only safely operate within the scope of the // single, currently selected version, we can skip looking for the // queue and just use the version given in what came back from // s.sel.selected(). nawp := atomWithPackages{ a: atom{ id: bmi.id, v: awp.a.v, }, pl: bmi.pl, } s.traceCheckPkgs(bmi) err := s.check(nawp, true) if err != nil { // Err means a failure somewhere down the line; try backtracking. s.traceStartBacktrack(bmi, err, true) if s.backtrack() { // backtracking succeeded, move to the next unselected id continue } s.mtr.pop() return nil, err } s.selectAtom(nawp, true) // We don't add anything to the stack of version queues because the // backtracker knows not to pop the vqstack if it backtracks // across a pure-package addition. s.mtr.pop() } } // Getting this far means we successfully found a solution. Combine the // selected projects and packages. projs := make(map[atom]map[string]struct{}) // Skip the first project. It's always the root, and that shouldn't be // included in results. for _, sel := range s.sel.projects[1:] { pm, exists := projs[sel.a.a] if !exists { pm = make(map[string]struct{}) projs[sel.a.a] = pm } for _, path := range sel.a.pl { pm[path] = struct{}{} } } return projs, nil } // selectRoot is a specialized selectAtom, used solely to initially // populate the queues at the beginning of a solve run. func (s *solver) selectRoot() error { s.mtr.push("select-root") // Push the root project onto the queue. awp := s.rd.rootAtom() s.sel.pushSelection(awp, false) // If we're looking for root's deps, get it from opts and local root // analysis, rather than having the sm do it deps, err := s.intersectConstraintsWithImports(s.rd.combineConstraints(), s.rd.externalImportList(s.stdLibFn)) if err != nil { // TODO(sdboyer) this could well happen; handle it with a more graceful error panic(fmt.Sprintf("shouldn't be possible %s", err)) } for _, dep := range deps { // If we have no lock, or if this dep isn't in the lock, then prefetch // it. See longer explanation in selectAtom() for how we benefit from // parallelism here. if s.rd.needVersionsFor(dep.Ident.ProjectRoot) { go s.b.SyncSourceFor(dep.Ident) } s.sel.pushDep(dependency{depender: awp.a, dep: dep}) // Add all to unselected queue heap.Push(s.unsel, bimodalIdentifier{id: dep.Ident, pl: dep.pl, fromRoot: true}) } s.traceSelectRoot(s.rd.rpt, deps) s.mtr.pop() return nil } func (s *solver) getImportsAndConstraintsOf(a atomWithPackages) ([]string, []completeDep, error) { var err error if s.rd.isRoot(a.a.id.ProjectRoot) { panic("Should never need to recheck imports/constraints from root during solve") } // Work through the source manager to get project info and static analysis // information. m, _, err := s.b.GetManifestAndLock(a.a.id, a.a.v, s.rd.an) if err != nil { return nil, nil, err } ptree, err := s.b.ListPackages(a.a.id, a.a.v) if err != nil { return nil, nil, err } rm, em := ptree.ToReachMap(true, false, true, s.rd.ir) // Use maps to dedupe the unique internal and external packages. exmap, inmap := make(map[string]struct{}), make(map[string]struct{}) for _, pkg := range a.pl { inmap[pkg] = struct{}{} for _, ipkg := range rm[pkg].Internal { inmap[ipkg] = struct{}{} } } var pl []string // If lens are the same, then the map must have the same contents as the // slice; no need to build a new one. if len(inmap) == len(a.pl) { pl = a.pl } else { pl = make([]string, 0, len(inmap)) for pkg := range inmap { pl = append(pl, pkg) } sort.Strings(pl) } // Add to the list those packages that are reached by the packages // explicitly listed in the atom for _, pkg := range a.pl { // Skip ignored packages if s.rd.ir.IsIgnored(pkg) { continue } ie, exists := rm[pkg] if !exists { // Missing package here *should* only happen if the target pkg was // poisoned; check the errors map. if importErr, eexists := em[pkg]; eexists { return nil, nil, importErr } // Nope, it's actually full-on not there. return nil, nil, fmt.Errorf("package %s does not exist within project %s", pkg, a.a.id) } for _, ex := range ie.External { exmap[ex] = struct{}{} } } reach := make([]string, 0, len(exmap)) for pkg := range exmap { reach = append(reach, pkg) } sort.Strings(reach) deps := s.rd.ovr.overrideAll(m.DependencyConstraints()) cd, err := s.intersectConstraintsWithImports(deps, reach) return pl, cd, err } // intersectConstraintsWithImports takes a list of constraints and a list of // externally reached packages, and creates a []completeDep that is guaranteed // to include all packages named by import reach, using constraints where they // are available, or Any() where they are not. func (s *solver) intersectConstraintsWithImports(deps []workingConstraint, reach []string) ([]completeDep, error) { // Create a radix tree with all the projects we know from the manifest xt := radix.New() for _, dep := range deps { xt.Insert(string(dep.Ident.ProjectRoot), dep) } // Step through the reached packages; if they have prefix matches in // the trie, assume (mostly) it's a correct correspondence. dmap := make(map[ProjectRoot]completeDep) for _, rp := range reach { // If it's a stdlib-shaped package, skip it. if s.stdLibFn(rp) { continue } // Look for a prefix match; it'll be the root project/repo containing // the reached package if pre, idep, match := xt.LongestPrefix(rp); match && isPathPrefixOrEqual(pre, rp) { // Match is valid; put it in the dmap, either creating a new // completeDep or appending it to the existing one for this base // project/prefix. dep := idep.(workingConstraint) if cdep, exists := dmap[dep.Ident.ProjectRoot]; exists { cdep.pl = append(cdep.pl, rp) dmap[dep.Ident.ProjectRoot] = cdep } else { dmap[dep.Ident.ProjectRoot] = completeDep{ workingConstraint: dep, pl: []string{rp}, } } continue } // No match. Let the SourceManager try to figure out the root root, err := s.b.DeduceProjectRoot(rp) if err != nil { // Nothing we can do if we can't suss out a root return nil, err } // Make a new completeDep with an open constraint, respecting overrides pd := s.rd.ovr.override(root, ProjectProperties{Constraint: Any()}) // Insert the pd into the trie so that further deps from this // project get caught by the prefix search xt.Insert(string(root), pd) // And also put the complete dep into the dmap dmap[root] = completeDep{ workingConstraint: pd, pl: []string{rp}, } } // Dump all the deps from the map into the expected return slice cdeps := make([]completeDep, 0, len(dmap)) for _, cdep := range dmap { cdeps = append(cdeps, cdep) } return cdeps, nil } func (s *solver) createVersionQueue(bmi bimodalIdentifier) (*versionQueue, error) { id := bmi.id // If on the root package, there's no queue to make if s.rd.isRoot(id.ProjectRoot) { return newVersionQueue(id, nil, nil, s.b) } exists, err := s.b.SourceExists(id) if err != nil { return nil, err } if !exists { exists, err = s.b.vendorCodeExists(id) if err != nil { return nil, err } if exists { // Project exists only in vendor // FIXME(sdboyer) this just totally doesn't work at all right now } else { return nil, fmt.Errorf("project '%s' could not be located", id) } } var lockv Version if len(s.rd.rlm) > 0 { lockv, err = s.getLockVersionIfValid(id) if err != nil { // Can only get an error here if an upgrade was expressly requested on // code that exists only in vendor return nil, err } } var prefv Version if bmi.fromRoot { // If this bmi came from the root, then we want to search through things // with a dependency on it in order to see if any have a lock that might // express a prefv // // TODO(sdboyer) nested loop; prime candidate for a cache somewhere for _, dep := range s.sel.getDependenciesOn(bmi.id) { // Skip the root, of course if s.rd.isRoot(dep.depender.id.ProjectRoot) { continue } _, l, err := s.b.GetManifestAndLock(dep.depender.id, dep.depender.v, s.rd.an) if err != nil || l == nil { // err being non-nil really shouldn't be possible, but the lock // being nil is quite likely continue } for _, lp := range l.Projects() { if lp.Ident().eq(bmi.id) { prefv = lp.Version() } } } // OTHER APPROACH - WRONG, BUT MAYBE USEFUL FOR REFERENCE? // If this bmi came from the root, then we want to search the unselected // queue to see if anything *else* wants this ident, in which case we // pick up that prefv //for _, bmi2 := range s.unsel.sl { //// Take the first thing from the queue that's for the same ident, //// and has a non-nil prefv //if bmi.id.eq(bmi2.id) { //if bmi2.prefv != nil { //prefv = bmi2.prefv //} //} //} } else { // Otherwise, just use the preferred version expressed in the bmi prefv = bmi.prefv } q, err := newVersionQueue(id, lockv, prefv, s.b) if err != nil { // TODO(sdboyer) this particular err case needs to be improved to be ONLY for cases // where there's absolutely nothing findable about a given project name return nil, err } // Hack in support for revisions. // // By design, revs aren't returned from ListVersion(). Thus, if the dep in // the bmi was has a rev constraint, it is (almost) guaranteed to fail, even // if that rev does exist in the repo. So, detect a rev and push it into the // vq here, instead. // // Happily, the solver maintains the invariant that constraints on a given // ident cannot be incompatible, so we know that if we find one rev, then // any other deps will have to also be on that rev (or Any). // // TODO(sdboyer) while this does work, it bypasses the interface-implied guarantees // of the version queue, and is therefore not a great strategy for API // coherency. Folding this in to a formal interface would be better. if tc, ok := s.sel.getConstraint(bmi.id).(Revision); ok && q.pi[0] != tc { // We know this is the only thing that could possibly match, so put it // in at the front - if it isn't there already. // TODO(sdboyer) existence of the revision is guaranteed by checkRevisionExists(); restore that call. q.pi = append([]Version{tc}, q.pi...) } // Having assembled the queue, search it for a valid version. s.traceCheckQueue(q, bmi, false, 1) return q, s.findValidVersion(q, bmi.pl) } // findValidVersion walks through a versionQueue until it finds a version that // satisfies the constraints held in the current state of the solver. // // The satisfiability checks triggered from here are constrained to operate only // on those dependencies induced by the list of packages given in the second // parameter. func (s *solver) findValidVersion(q *versionQueue, pl []string) error { if nil == q.current() { // this case should not be reachable, but reflects improper solver state // if it is, so panic immediately panic("version queue is empty, should not happen") } faillen := len(q.fails) for { cur := q.current() s.traceInfo("try %s@%s", q.id, cur) err := s.check(atomWithPackages{ a: atom{ id: q.id, v: cur, }, pl: pl, }, false) if err == nil { // we have a good version, can return safely return nil } if q.advance(err) != nil { // Error on advance, have to bail out break } if q.isExhausted() { // Queue is empty, bail with error break } } s.fail(s.sel.getDependenciesOn(q.id)[0].depender.id) // Return a compound error of all the new errors encountered during this // attempt to find a new, valid version return &noVersionError{ pn: q.id, fails: q.fails[faillen:], } } // getLockVersionIfValid finds an atom for the given ProjectIdentifier from the // root lock, assuming: // // 1. A root lock was provided // 2. The general flag to change all projects was not passed // 3. A flag to change this particular ProjectIdentifier was not passed // // If any of these three conditions are true (or if the id cannot be found in // the root lock), then no atom will be returned. func (s *solver) getLockVersionIfValid(id ProjectIdentifier) (Version, error) { // If the project is specifically marked for changes, then don't look for a // locked version. if _, explicit := s.rd.chng[id.ProjectRoot]; explicit || s.rd.chngall { // For projects with an upstream or cache repository, it's safe to // ignore what's in the lock, because there's presumably more versions // to be found and attempted in the repository. If it's only in vendor, // though, then we have to try to use what's in the lock, because that's // the only version we'll be able to get. if exist, _ := s.b.SourceExists(id); exist { // Upgrades mean breaking the lock s.b.breakLock() return nil, nil } // However, if a change was *expressly* requested for something that // exists only in vendor, then that guarantees we don't have enough // information to complete a solution. In that case, error out. if explicit { return nil, &missingSourceFailure{ goal: id, prob: "Cannot upgrade %s, as no source repository could be found.", } } } lp, exists := s.rd.rlm[id.ProjectRoot] if !exists { return nil, nil } constraint := s.sel.getConstraint(id) v := lp.Version() if !constraint.Matches(v) { var found bool if tv, ok := v.(Revision); ok { // If we only have a revision from the root's lock, allow matching // against other versions that have that revision for _, pv := range s.vUnify.pairRevision(id, tv) { if constraint.Matches(pv) { v = pv found = true break } } //} else if _, ok := constraint.(Revision); ok { //// If the current constraint is itself a revision, and the lock gave //// an unpaired version, see if they match up //// //if u, ok := v.(UnpairedVersion); ok { //pv := s.sm.pairVersion(id, u) //if constraint.Matches(pv) { //v = pv //found = true //} //} } if !found { // No match found, which means we're going to be breaking the lock // Still return the invalid version so that is included in the trace s.b.breakLock() } } return v, nil } // backtrack works backwards from the current failed solution to find the next // solution to try. func (s *solver) backtrack() bool { if len(s.vqs) == 0 { // nothing to backtrack to return false } s.mtr.push("backtrack") for { for { if len(s.vqs) == 0 { // no more versions, nowhere further to backtrack return false } if s.vqs[len(s.vqs)-1].failed { break } s.vqs, s.vqs[len(s.vqs)-1] = s.vqs[:len(s.vqs)-1], nil // Pop selections off until we get to a project. var proj bool var awp atomWithPackages for !proj { awp, proj = s.unselectLast() s.traceBacktrack(awp.bmi(), !proj) } } // Grab the last versionQueue off the list of queues q := s.vqs[len(s.vqs)-1] // Walk back to the next project. This may entail walking through some // package-only selections. var proj bool var awp atomWithPackages for !proj { awp, proj = s.unselectLast() s.traceBacktrack(awp.bmi(), !proj) } if !q.id.eq(awp.a.id) { panic("canary - version queue stack and selected project stack are misaligned") } // Advance the queue past the current version, which we know is bad // TODO(sdboyer) is it feasible to make available the failure reason here? if q.advance(nil) == nil && !q.isExhausted() { // Search for another acceptable version of this failed dep in its queue s.traceCheckQueue(q, awp.bmi(), true, 0) if s.findValidVersion(q, awp.pl) == nil { // Found one! Put it back on the selected queue and stop // backtracking // reusing the old awp is fine awp.a.v = q.current() s.selectAtom(awp, false) break } } s.traceBacktrack(awp.bmi(), false) //s.traceInfo("no more versions of %s, backtracking", q.id.errString()) // No solution found; continue backtracking after popping the queue // we just inspected off the list // GC-friendly pop pointer elem in slice s.vqs, s.vqs[len(s.vqs)-1] = s.vqs[:len(s.vqs)-1], nil } s.mtr.pop() // Backtracking was successful if loop ended before running out of versions if len(s.vqs) == 0 { return false } s.attempts++ return true } func (s *solver) nextUnselected() (bimodalIdentifier, bool) { if len(s.unsel.sl) > 0 { return s.unsel.sl[0], true } return bimodalIdentifier{}, false } func (s *solver) unselectedComparator(i, j int) bool { ibmi, jbmi := s.unsel.sl[i], s.unsel.sl[j] iname, jname := ibmi.id, jbmi.id // Most important thing is pushing package additions ahead of project // additions. Package additions can't walk their version queue, so all they // do is narrow the possibility of success; better to find out early and // fast if they're going to fail than wait until after we've done real work // on a project and have to backtrack across it. // FIXME the impl here is currently O(n) in the number of selections; it // absolutely cannot stay in a hot sorting path like this // FIXME while other solver invariants probably protect us from it, this // call-out means that it's possible for external state change to invalidate // heap invariants. _, isel := s.sel.selected(iname) _, jsel := s.sel.selected(jname) if isel && !jsel { return true } if !isel && jsel { return false } if iname.eq(jname) { return false } _, ilock := s.rd.rlm[iname.ProjectRoot] _, jlock := s.rd.rlm[jname.ProjectRoot] switch { case ilock && !jlock: return true case !ilock && jlock: return false case ilock && jlock: return iname.Less(jname) } // Now, sort by number of available versions. This will trigger network // activity, but at this point we know that the project we're looking at // isn't locked by the root. And, because being locked by root is the only // way avoid that call when making a version queue, we know we're gonna have // to pay that cost anyway. // We can safely ignore an err from listVersions here because, if there is // an actual problem, it'll be noted and handled somewhere else saner in the // solving algorithm. ivl, _ := s.b.listVersions(iname) jvl, _ := s.b.listVersions(jname) iv, jv := len(ivl), len(jvl) // Packages with fewer versions to pick from are less likely to benefit from // backtracking, so deal with them earlier in order to minimize the amount // of superfluous backtracking through them we do. switch { case iv == 0 && jv != 0: return true case iv != 0 && jv == 0: return false case iv != jv: return iv < jv } // Finally, if all else fails, fall back to comparing by name return iname.Less(jname) } func (s *solver) fail(id ProjectIdentifier) { // TODO(sdboyer) does this need updating, now that we have non-project package // selection? // skip if the root project if !s.rd.isRoot(id.ProjectRoot) { // just look for the first (oldest) one; the backtracker will necessarily // traverse through and pop off any earlier ones for _, vq := range s.vqs { if vq.id.eq(id) { vq.failed = true return } } } } // selectAtom pulls an atom into the selection stack, alongside some of // its contained packages. New resultant dependency requirements are added to // the unselected priority queue. // // Behavior is slightly diffferent if pkgonly is true. func (s *solver) selectAtom(a atomWithPackages, pkgonly bool) { s.mtr.push("select-atom") s.unsel.remove(bimodalIdentifier{ id: a.a.id, pl: a.pl, }) pl, deps, err := s.getImportsAndConstraintsOf(a) if err != nil { // This shouldn't be possible; other checks should have ensured all // packages and deps are present for any argument passed to this method. panic(fmt.Sprintf("canary - shouldn't be possible %s", err)) } // Assign the new internal package list into the atom, then push it onto the // selection stack a.pl = pl s.sel.pushSelection(a, pkgonly) // If this atom has a lock, pull it out so that we can potentially inject // preferred versions into any bmis we enqueue // // TODO(sdboyer) making this call here could be the first thing to trigger // network activity...maybe? if so, can we mitigate by deferring the work to // queue consumption time? _, l, _ := s.b.GetManifestAndLock(a.a.id, a.a.v, s.rd.an) var lmap map[ProjectIdentifier]Version if l != nil { lmap = make(map[ProjectIdentifier]Version) for _, lp := range l.Projects() { lmap[lp.Ident()] = lp.Version() } } for _, dep := range deps { // Root can come back up here if there's a project-level cycle. // Satisfiability checks have already ensured invariants are maintained, // so we know we can just skip it here. if s.rd.isRoot(dep.Ident.ProjectRoot) { continue } // If this is dep isn't in the lock, do some prefetching. (If it is, we // might be able to get away with zero network activity for it, so don't // prefetch). This provides an opportunity for some parallelism wins, on // two fronts: // // 1. Because this loop may have multiple deps in it, we could end up // simultaneously fetching both in the background while solving proceeds // // 2. Even if only one dep gets prefetched here, the worst case is that // that same dep comes out of the unselected queue next, and we gain a // few microseconds before blocking later. Best case, the dep doesn't // come up next, but some other dep comes up that wasn't prefetched, and // both fetches proceed in parallel. if s.rd.needVersionsFor(dep.Ident.ProjectRoot) { go s.b.SyncSourceFor(dep.Ident) } s.sel.pushDep(dependency{depender: a.a, dep: dep}) // Go through all the packages introduced on this dep, selecting only // the ones where the only depper on them is what the preceding line just // pushed in. Then, put those into the unselected queue. rpm := s.sel.getRequiredPackagesIn(dep.Ident) var newp []string for _, pkg := range dep.pl { // Just one means that the dep we're visiting is the sole importer. if rpm[pkg] == 1 { newp = append(newp, pkg) } } if len(newp) > 0 { // If there was a previously-established alternate source for this // dependency, but the current atom did not express one (and getting // here means the atom passed the source hot-swapping check - see // checkIdentMatches()), then we have to create the new bmi with the // alternate source. Otherwise, we end up with two discrete project // entries for the project root in the final output, one with the // alternate source, and one without. See #969. id, _ := s.sel.getIdentFor(dep.Ident.ProjectRoot) bmi := bimodalIdentifier{ id: id, pl: newp, // This puts in a preferred version if one's in the map, else // drops in the zero value (nil) prefv: lmap[dep.Ident], } heap.Push(s.unsel, bmi) } } s.traceSelect(a, pkgonly) s.mtr.pop() } func (s *solver) unselectLast() (atomWithPackages, bool) { s.mtr.push("unselect") awp, first := s.sel.popSelection() heap.Push(s.unsel, bimodalIdentifier{id: awp.a.id, pl: awp.pl}) _, deps, err := s.getImportsAndConstraintsOf(awp) if err != nil { // This shouldn't be possible; other checks should have ensured all // packages and deps are present for any argument passed to this method. panic(fmt.Sprintf("canary - shouldn't be possible %s", err)) } for _, dep := range deps { // Skip popping if the dep is the root project, which can occur if // there's a project-level import cycle. (This occurs frequently with // e.g. kubernetes and docker) if s.rd.isRoot(dep.Ident.ProjectRoot) { continue } s.sel.popDep(dep.Ident) // if no parents/importers, remove from unselected queue if s.sel.depperCount(dep.Ident) == 0 { s.unsel.remove(bimodalIdentifier{id: dep.Ident, pl: dep.pl}) } } s.mtr.pop() return awp, first } // simple (temporary?) helper just to convert atoms into locked projects func pa2lp(pa atom, pkgs map[string]struct{}) LockedProject { lp := LockedProject{ pi: pa.id, } switch v := pa.v.(type) { case UnpairedVersion: lp.v = v case Revision: lp.r = v case versionPair: lp.v = v.v lp.r = v.r default: panic("unreachable") } lp.pkgs = make([]string, len(pkgs)) k := 0 pr := string(pa.id.ProjectRoot) trim := pr + "/" for pkg := range pkgs { if pkg == string(pa.id.ProjectRoot) { lp.pkgs[k] = "." } else { lp.pkgs[k] = strings.TrimPrefix(pkg, trim) } k++ } sort.Strings(lp.pkgs) return lp } dep-0.3.2/internal/gps/solver_inputs_test.go000066400000000000000000000162421317166637100212130ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "io/ioutil" "log" "math/rand" "strconv" "strings" "testing" "github.com/golang/dep/internal/gps/pkgtree" "github.com/golang/dep/internal/test" ) // TestBadSolveOpts exercises the different possible inputs to a solver that can // be determined as invalid in Prepare(), without any further work func TestBadSolveOpts(t *testing.T) { pn := strconv.FormatInt(rand.Int63(), 36) fix := basicFixtures["no dependencies"] fix.ds[0].n = ProjectRoot(pn) sm := newdepspecSM(fix.ds, nil) params := SolveParameters{ mkBridgeFn: overrideMkBridge, } _, err := Prepare(params, nil) if err == nil { t.Errorf("Prepare should have errored on nil SourceManager") } else if !strings.Contains(err.Error(), "non-nil SourceManager") { t.Error("Prepare should have given error on nil SourceManager, but gave:", err) } _, err = Prepare(params, sm) if err == nil { t.Errorf("Prepare should have errored without ProjectAnalyzer") } else if !strings.Contains(err.Error(), "must provide a ProjectAnalyzer") { t.Error("Prepare should have given error without ProjectAnalyzer, but gave:", err) } params.ProjectAnalyzer = naiveAnalyzer{} _, err = Prepare(params, sm) if err == nil { t.Errorf("Prepare should have errored on empty root") } else if !strings.Contains(err.Error(), "non-empty root directory") { t.Error("Prepare should have given error on empty root, but gave:", err) } params.RootDir = pn _, err = Prepare(params, sm) if err == nil { t.Errorf("Prepare should have errored on empty name") } else if !strings.Contains(err.Error(), "non-empty import root") { t.Error("Prepare should have given error on empty import root, but gave:", err) } params.RootPackageTree = pkgtree.PackageTree{ ImportRoot: pn, } _, err = Prepare(params, sm) if err == nil { t.Errorf("Prepare should have errored on empty name") } else if !strings.Contains(err.Error(), "at least one package") { t.Error("Prepare should have given error on empty import root, but gave:", err) } params.RootPackageTree = pkgtree.PackageTree{ ImportRoot: pn, Packages: map[string]pkgtree.PackageOrErr{ pn: { P: pkgtree.Package{ ImportPath: pn, Name: pn, }, }, }, } params.TraceLogger = log.New(ioutil.Discard, "", 0) params.Manifest = simpleRootManifest{ ovr: ProjectConstraints{ ProjectRoot("foo"): ProjectProperties{}, }, } _, err = Prepare(params, sm) if err == nil { t.Errorf("Should have errored on override with empty ProjectProperties") } else if !strings.Contains(err.Error(), "foo, but without any non-zero properties") { t.Error("Prepare should have given error override with empty ProjectProperties, but gave:", err) } params.Manifest = simpleRootManifest{ ig: pkgtree.NewIgnoredRuleset([]string{"foo"}), req: map[string]bool{"foo": true}, } _, err = Prepare(params, sm) if err == nil { t.Errorf("Should have errored on pkg both ignored and required") } else if !strings.Contains(err.Error(), "was given as both a required and ignored package") { t.Error("Prepare should have given error with single ignore/require conflict error, but gave:", err) } params.Manifest = simpleRootManifest{ ig: pkgtree.NewIgnoredRuleset([]string{"foo", "bar"}), req: map[string]bool{"foo": true, "bar": true}, } _, err = Prepare(params, sm) if err == nil { t.Errorf("Should have errored on pkg both ignored and required") } else if !strings.Contains(err.Error(), "multiple packages given as both required and ignored:") { t.Error("Prepare should have given error with multiple ignore/require conflict error, but gave:", err) } params.Manifest = simpleRootManifest{ ig: pkgtree.NewIgnoredRuleset([]string{"foo*"}), req: map[string]bool{"foo/bar": true}, } _, err = Prepare(params, sm) if err == nil { t.Errorf("Should have errored on pkg both ignored (with wildcard) and required") } else if !strings.Contains(err.Error(), "was given as both a required and ignored package") { t.Error("Prepare should have given error with single ignore/require conflict error, but gave:", err) } params.Manifest = nil params.ToChange = []ProjectRoot{"foo"} _, err = Prepare(params, sm) if err == nil { t.Errorf("Should have errored on non-empty ToChange without a lock provided") } else if !strings.Contains(err.Error(), "update specifically requested for") { t.Error("Prepare should have given error on ToChange without Lock, but gave:", err) } params.Lock = safeLock{ p: []LockedProject{ NewLockedProject(mkPI("bar"), Revision("makebelieve"), nil), }, } _, err = Prepare(params, sm) if err == nil { t.Errorf("Should have errored on ToChange containing project not in lock") } else if !strings.Contains(err.Error(), "cannot update foo as it is not in the lock") { t.Error("Prepare should have given error on ToChange with item not present in Lock, but gave:", err) } params.Lock, params.ToChange = nil, nil _, err = Prepare(params, sm) if err != nil { t.Error("Basic conditions satisfied, prepare should have completed successfully, err as:", err) } // swap out the test mkBridge override temporarily, just to make sure we get // the right error params.mkBridgeFn = nil _, err = Prepare(params, sm) if err == nil { t.Errorf("Should have errored on nonexistent root") } else if !strings.Contains(err.Error(), "could not read project root") { t.Error("Prepare should have given error nonexistent project root dir, but gave:", err) } // Pointing it at a file should also be an err params.RootDir = "solve_test.go" _, err = Prepare(params, sm) if err == nil { t.Errorf("Should have errored on file for RootDir") } else if !strings.Contains(err.Error(), "is a file, not a directory") { t.Error("Prepare should have given error on file as RootDir, but gave:", err) } } func TestValidateParams(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() cacheDir := "gps-cache" h.TempDir(cacheDir) sm, err := NewSourceManager(SourceManagerConfig{ Cachedir: h.Path(cacheDir), Logger: log.New(test.Writer{TB: t}, "", 0), }) h.Must(err) defer sm.Release() h.TempDir("src") testcases := []struct { imports []string err bool }{ {[]string{"google.com/non-existing/package"}, true}, {[]string{"google.com/non-existing/package/subpkg"}, true}, {[]string{"github.com/sdboyer/testrepo"}, false}, {[]string{"github.com/sdboyer/testrepo/subpkg"}, false}, } params := SolveParameters{ ProjectAnalyzer: naiveAnalyzer{}, RootDir: h.Path("src"), RootPackageTree: pkgtree.PackageTree{ ImportRoot: "github.com/sdboyer/dep", }, } for _, tc := range testcases { params.RootPackageTree.Packages = map[string]pkgtree.PackageOrErr{ "github.com/sdboyer/dep": { P: pkgtree.Package{ Name: "github.com/sdboyer/dep", ImportPath: "github.com/sdboyer/dep", Imports: tc.imports, }, }, } err = ValidateParams(params, sm) if tc.err && err == nil { t.Fatalf("expected an error when deducing package fails, got none") } else if !tc.err && err != nil { t.Fatalf("deducing packges should have succeeded, got err: %#v", err) } } } dep-0.3.2/internal/gps/source.go000066400000000000000000000462331317166637100165430ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "fmt" "log" "sync" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) // sourceState represent the states that a source can be in, depending on how // much search and discovery work ahs been done by a source's managing gateway. // // These are basically used to achieve a cheap approximation of a FSM. type sourceState int32 const ( sourceIsSetUp sourceState = 1 << iota sourceExistsUpstream sourceExistsLocally sourceHasLatestVersionList sourceHasLatestLocally ) type srcReturnChans struct { ret chan *sourceGateway err chan error } func (rc srcReturnChans) awaitReturn() (sg *sourceGateway, err error) { select { case sg = <-rc.ret: case err = <-rc.err: } return } type sourceCoordinator struct { supervisor *supervisor srcmut sync.RWMutex // guards srcs and nameToURL maps srcs map[string]*sourceGateway nameToURL map[string]string psrcmut sync.Mutex // guards protoSrcs map protoSrcs map[string][]srcReturnChans deducer deducer cachedir string logger *log.Logger } func newSourceCoordinator(superv *supervisor, deducer deducer, cachedir string, logger *log.Logger) *sourceCoordinator { return &sourceCoordinator{ supervisor: superv, deducer: deducer, cachedir: cachedir, logger: logger, srcs: make(map[string]*sourceGateway), nameToURL: make(map[string]string), protoSrcs: make(map[string][]srcReturnChans), } } func (sc *sourceCoordinator) close() {} func (sc *sourceCoordinator) getSourceGatewayFor(ctx context.Context, id ProjectIdentifier) (*sourceGateway, error) { if err := sc.supervisor.ctx.Err(); err != nil { return nil, err } normalizedName := id.normalizedSource() sc.srcmut.RLock() if url, has := sc.nameToURL[normalizedName]; has { srcGate, has := sc.srcs[url] sc.srcmut.RUnlock() if has { return srcGate, nil } panic(fmt.Sprintf("%q was URL for %q in nameToURL, but no corresponding srcGate in srcs map", url, normalizedName)) } // Without a direct match, we must fold the input name to a generally // stable, caseless variant and primarily work from that. This ensures that // on case-insensitive filesystems, we do not end up with multiple // sourceGateways for paths that vary only by case. We perform folding // unconditionally, independent of whether the underlying fs is // case-sensitive, in order to ensure uniform behavior. // // This has significant implications. It is effectively deciding that the // ProjectRoot portion of import paths are case-insensitive, which is by no // means an invariant maintained by all hosting systems. If this presents a // problem in practice, then we can explore expanding the deduction system // to include case-sensitivity-for-roots metadata and treat it on a // host-by-host basis. Such cases would still be rejected by the Go // toolchain's compiler, though, and case-sensitivity in root names is // likely to be at least frowned on if not disallowed by most hosting // systems. So we follow this path, which is both a vastly simpler solution // and one that seems quite likely to work in practice. foldedNormalName := toFold(normalizedName) notFolded := foldedNormalName != normalizedName if notFolded { // If the folded name differs from the input name, then there may // already be an entry for it in the nameToURL map, so check again. if url, has := sc.nameToURL[foldedNormalName]; has { // There was a match on the canonical folded variant. Upgrade to a // write lock, so that future calls on this name don't need to // burn cycles on folding. sc.srcmut.RUnlock() sc.srcmut.Lock() // It may be possible that another goroutine could interleave // between the unlock and re-lock. Even if they do, though, they'll // only have recorded the same url value as we have here. In other // words, these operations commute, so we can safely write here // without checking again. sc.nameToURL[normalizedName] = url srcGate, has := sc.srcs[url] sc.srcmut.Unlock() if has { return srcGate, nil } panic(fmt.Sprintf("%q was URL for %q in nameToURL, but no corresponding srcGate in srcs map", url, normalizedName)) } } sc.srcmut.RUnlock() // No gateway exists for this path yet; set up a proto, being careful to fold // together simultaneous attempts on the same case-folded path. sc.psrcmut.Lock() if chans, has := sc.protoSrcs[foldedNormalName]; has { // Another goroutine is already working on this normalizedName. Fold // in with that work by attaching our return channels to the list. rc := srcReturnChans{ ret: make(chan *sourceGateway, 1), err: make(chan error, 1), } sc.protoSrcs[foldedNormalName] = append(chans, rc) sc.psrcmut.Unlock() return rc.awaitReturn() } sc.protoSrcs[foldedNormalName] = []srcReturnChans{} sc.psrcmut.Unlock() doReturn := func(sg *sourceGateway, err error) { sc.psrcmut.Lock() if sg != nil { for _, rc := range sc.protoSrcs[foldedNormalName] { rc.ret <- sg } } else if err != nil { for _, rc := range sc.protoSrcs[foldedNormalName] { rc.err <- err } } else { panic("sg and err both nil") } delete(sc.protoSrcs, foldedNormalName) sc.psrcmut.Unlock() } pd, err := sc.deducer.deduceRootPath(ctx, normalizedName) if err != nil { // As in the deducer, don't cache errors so that externally-driven retry // strategies can be constructed. doReturn(nil, err) return nil, err } // It'd be quite the feat - but not impossible - for a gateway // corresponding to this normalizedName to have slid into the main // sources map after the initial unlock, but before this goroutine got // scheduled. Guard against that by checking the main sources map again // and bailing out if we find an entry. var srcGate *sourceGateway sc.srcmut.RLock() if url, has := sc.nameToURL[foldedNormalName]; has { if srcGate, has := sc.srcs[url]; has { sc.srcmut.RUnlock() doReturn(srcGate, nil) return srcGate, nil } panic(fmt.Sprintf("%q was URL for %q in nameToURL, but no corresponding srcGate in srcs map", url, normalizedName)) } sc.srcmut.RUnlock() srcGate = newSourceGateway(pd.mb, sc.supervisor, sc.cachedir) // The normalized name is usually different from the source URL- e.g. // github.com/sdboyer/gps vs. https://github.com/sdboyer/gps. But it's // possible to arrive here with a full URL as the normalized name - and both // paths *must* lead to the same sourceGateway instance in order to ensure // disk access is correctly managed. // // Therefore, we now must query the sourceGateway to get the actual // sourceURL it's operating on, and ensure it's *also* registered at // that path in the map. This will cause it to actually initiate the // maybeSource.try() behavior in order to settle on a URL. url, err := srcGate.sourceURL(ctx) if err != nil { doReturn(nil, err) return nil, err } // If the normalizedName and foldedNormalName differ, then we're pretty well // guaranteed that returned URL will also need folding into canonical form. var unfoldedURL string if notFolded { unfoldedURL = url url = toFold(url) } // We know we have a working srcGateway at this point, and need to // integrate it back into the main map. sc.srcmut.Lock() defer sc.srcmut.Unlock() // Record the name -> URL mapping, making sure that we also get the // self-mapping. sc.nameToURL[foldedNormalName] = url if url != foldedNormalName { sc.nameToURL[url] = url } // Make sure we have both the folded and unfolded names and URLs recorded in // the map, if the input needed folding. if notFolded { sc.nameToURL[normalizedName] = url sc.nameToURL[unfoldedURL] = url } if sa, has := sc.srcs[url]; has { // URL already had an entry in the main map; use that as the result. doReturn(sa, nil) return sa, nil } sc.srcs[url] = srcGate doReturn(srcGate, nil) return srcGate, nil } // sourceGateways manage all incoming calls for data from sources, serializing // and caching them as needed. type sourceGateway struct { cachedir string maybe maybeSource srcState sourceState src source cache singleSourceCache mu sync.Mutex // global lock, serializes all behaviors suprvsr *supervisor } func newSourceGateway(maybe maybeSource, superv *supervisor, cachedir string) *sourceGateway { sg := &sourceGateway{ maybe: maybe, cachedir: cachedir, suprvsr: superv, } sg.cache = sg.createSingleSourceCache() return sg } func (sg *sourceGateway) syncLocal(ctx context.Context) error { sg.mu.Lock() defer sg.mu.Unlock() _, err := sg.require(ctx, sourceIsSetUp|sourceExistsLocally|sourceHasLatestLocally) return err } func (sg *sourceGateway) existsInCache(ctx context.Context) bool { sg.mu.Lock() defer sg.mu.Unlock() _, err := sg.require(ctx, sourceIsSetUp|sourceExistsLocally) if err != nil { return false } return sg.srcState&sourceExistsLocally != 0 } func (sg *sourceGateway) existsUpstream(ctx context.Context) bool { sg.mu.Lock() defer sg.mu.Unlock() _, err := sg.require(ctx, sourceIsSetUp|sourceExistsUpstream) if err != nil { return false } return sg.srcState&sourceExistsUpstream != 0 } func (sg *sourceGateway) exportVersionTo(ctx context.Context, v Version, to string) error { sg.mu.Lock() defer sg.mu.Unlock() _, err := sg.require(ctx, sourceIsSetUp|sourceExistsLocally) if err != nil { return err } r, err := sg.convertToRevision(ctx, v) if err != nil { return err } err = sg.suprvsr.do(ctx, sg.src.upstreamURL(), ctExportTree, func(ctx context.Context) error { return sg.src.exportRevisionTo(ctx, r, to) }) // It's possible (in git) that we may have tried this against a version that // doesn't exist in the repository cache, even though we know it exists in // the upstream. If it looks like that might be the case, update the local // and retry. // TODO(sdboyer) It'd be better if we could check the error to see if this // actually was the cause of the problem. if err != nil && sg.srcState&sourceHasLatestLocally == 0 { if _, err = sg.require(ctx, sourceHasLatestLocally); err == nil { err = sg.suprvsr.do(ctx, sg.src.upstreamURL(), ctExportTree, func(ctx context.Context) error { return sg.src.exportRevisionTo(ctx, r, to) }) } } return err } func (sg *sourceGateway) getManifestAndLock(ctx context.Context, pr ProjectRoot, v Version, an ProjectAnalyzer) (Manifest, Lock, error) { sg.mu.Lock() defer sg.mu.Unlock() r, err := sg.convertToRevision(ctx, v) if err != nil { return nil, nil, err } m, l, has := sg.cache.getManifestAndLock(r, an.Info()) if has { return m, l, nil } _, err = sg.require(ctx, sourceIsSetUp|sourceExistsLocally) if err != nil { return nil, nil, err } label := fmt.Sprintf("%s:%s", sg.src.upstreamURL(), an.Info()) err = sg.suprvsr.do(ctx, label, ctGetManifestAndLock, func(ctx context.Context) error { m, l, err = sg.src.getManifestAndLock(ctx, pr, r, an) return err }) // It's possible (in git) that we may have tried this against a version that // doesn't exist in the repository cache, even though we know it exists in // the upstream. If it looks like that might be the case, update the local // and retry. // TODO(sdboyer) It'd be better if we could check the error to see if this // actually was the cause of the problem. if err != nil && sg.srcState&sourceHasLatestLocally == 0 { // TODO(sdboyer) we should warn/log/something in adaptive recovery // situations like this _, err = sg.require(ctx, sourceHasLatestLocally) if err != nil { return nil, nil, err } err = sg.suprvsr.do(ctx, label, ctGetManifestAndLock, func(ctx context.Context) error { m, l, err = sg.src.getManifestAndLock(ctx, pr, r, an) return err }) } if err != nil { return nil, nil, err } sg.cache.setManifestAndLock(r, an.Info(), m, l) return m, l, nil } // FIXME ProjectRoot input either needs to parameterize the cache, or be // incorporated on the fly on egress...? func (sg *sourceGateway) listPackages(ctx context.Context, pr ProjectRoot, v Version) (pkgtree.PackageTree, error) { sg.mu.Lock() defer sg.mu.Unlock() r, err := sg.convertToRevision(ctx, v) if err != nil { return pkgtree.PackageTree{}, err } ptree, has := sg.cache.getPackageTree(r) if has { return ptree, nil } _, err = sg.require(ctx, sourceIsSetUp|sourceExistsLocally) if err != nil { return pkgtree.PackageTree{}, err } label := fmt.Sprintf("%s:%s", pr, sg.src.upstreamURL()) err = sg.suprvsr.do(ctx, label, ctListPackages, func(ctx context.Context) error { ptree, err = sg.src.listPackages(ctx, pr, r) return err }) // It's possible (in git) that we may have tried this against a version that // doesn't exist in the repository cache, even though we know it exists in // the upstream. If it looks like that might be the case, update the local // and retry. // TODO(sdboyer) It'd be better if we could check the error to see if this // actually was the cause of the problem. if err != nil && sg.srcState&sourceHasLatestLocally == 0 { // TODO(sdboyer) we should warn/log/something in adaptive recovery // situations like this _, err = sg.require(ctx, sourceHasLatestLocally) if err != nil { return pkgtree.PackageTree{}, err } err = sg.suprvsr.do(ctx, label, ctListPackages, func(ctx context.Context) error { ptree, err = sg.src.listPackages(ctx, pr, r) return err }) } if err != nil { return pkgtree.PackageTree{}, err } sg.cache.setPackageTree(r, ptree) return ptree, nil } func (sg *sourceGateway) convertToRevision(ctx context.Context, v Version) (Revision, error) { // When looking up by Version, there are four states that may have // differing opinions about version->revision mappings: // // 1. The upstream source/repo (canonical) // 2. The local source/repo // 3. The local cache // 4. The input (params to this method) // // If the input differs from any of the above, it's likely because some lock // got written somewhere with a version/rev pair that has since changed or // been removed. But correct operation dictates that such a mis-mapping be // respected; if the mis-mapping is to be corrected, it has to be done // intentionally by the caller, not automatically here. r, has := sg.cache.toRevision(v) if has { return r, nil } if sg.srcState&sourceHasLatestVersionList != 0 { // We have the latest version list already and didn't get a match, so // this is definitely a failure case. return "", fmt.Errorf("version %q does not exist in source", v) } // The version list is out of date; it's possible this version might // show up after loading it. _, err := sg.require(ctx, sourceIsSetUp|sourceHasLatestVersionList) if err != nil { return "", err } r, has = sg.cache.toRevision(v) if !has { return "", fmt.Errorf("version %q does not exist in source", v) } return r, nil } func (sg *sourceGateway) listVersions(ctx context.Context) ([]PairedVersion, error) { sg.mu.Lock() defer sg.mu.Unlock() // TODO(sdboyer) The problem here is that sourceExistsUpstream may not be // sufficient (e.g. bzr, hg), but we don't want to force local b/c git // doesn't need it _, err := sg.require(ctx, sourceIsSetUp|sourceExistsUpstream|sourceHasLatestVersionList) if err != nil { return nil, err } if pvs, ok := sg.cache.getAllVersions(); ok { return pvs, nil } return nil, nil } func (sg *sourceGateway) revisionPresentIn(ctx context.Context, r Revision) (bool, error) { sg.mu.Lock() defer sg.mu.Unlock() _, err := sg.require(ctx, sourceIsSetUp|sourceExistsLocally) if err != nil { return false, err } if _, exists := sg.cache.getVersionsFor(r); exists { return true, nil } present, err := sg.src.revisionPresentIn(r) if err == nil && present { sg.cache.markRevisionExists(r) } return present, err } func (sg *sourceGateway) disambiguateRevision(ctx context.Context, r Revision) (Revision, error) { sg.mu.Lock() defer sg.mu.Unlock() _, err := sg.require(ctx, sourceIsSetUp|sourceExistsLocally) if err != nil { return "", err } return sg.src.disambiguateRevision(ctx, r) } func (sg *sourceGateway) sourceURL(ctx context.Context) (string, error) { sg.mu.Lock() defer sg.mu.Unlock() _, err := sg.require(ctx, sourceIsSetUp) if err != nil { return "", err } return sg.src.upstreamURL(), nil } // createSingleSourceCache creates a singleSourceCache instance for use by // the encapsulated source. func (sg *sourceGateway) createSingleSourceCache() singleSourceCache { // TODO(sdboyer) when persistent caching is ready, just drop in the creation // of a source-specific handle here return newMemoryCache() } func (sg *sourceGateway) require(ctx context.Context, wanted sourceState) (errState sourceState, err error) { todo := (^sg.srcState) & wanted var flag sourceState = 1 for todo != 0 { if todo&flag != 0 { // Assign the currently visited bit to errState so that we can // return easily later. // // Also set up addlState so that individual ops can easily attach // more states that were incidentally satisfied by the op. errState = flag var addlState sourceState switch flag { case sourceIsSetUp: sg.src, addlState, err = sg.maybe.try(ctx, sg.cachedir, sg.cache, sg.suprvsr) case sourceExistsUpstream: err = sg.suprvsr.do(ctx, sg.src.sourceType(), ctSourcePing, func(ctx context.Context) error { if !sg.src.existsUpstream(ctx) { return fmt.Errorf("%s does not exist upstream", sg.src.upstreamURL()) } return nil }) case sourceExistsLocally: if !sg.src.existsLocally(ctx) { err = sg.suprvsr.do(ctx, sg.src.sourceType(), ctSourceInit, func(ctx context.Context) error { return sg.src.initLocal(ctx) }) if err == nil { addlState |= sourceHasLatestLocally } else { err = errors.Wrapf(err, "%s does not exist in the local cache and fetching failed", sg.src.upstreamURL()) } } case sourceHasLatestVersionList: var pvl []PairedVersion err = sg.suprvsr.do(ctx, sg.src.sourceType(), ctListVersions, func(ctx context.Context) error { pvl, err = sg.src.listVersions(ctx) return err }) if err == nil { sg.cache.setVersionMap(pvl) } case sourceHasLatestLocally: err = sg.suprvsr.do(ctx, sg.src.sourceType(), ctSourceFetch, func(ctx context.Context) error { return sg.src.updateLocal(ctx) }) } if err != nil { return } checked := flag | addlState sg.srcState |= checked todo &= ^checked } flag <<= 1 } return 0, nil } // source is an abstraction around the different underlying types (git, bzr, hg, // svn, maybe raw on-disk code, and maybe eventually a registry) that can // provide versioned project source trees. type source interface { existsLocally(context.Context) bool existsUpstream(context.Context) bool upstreamURL() string initLocal(context.Context) error updateLocal(context.Context) error listVersions(context.Context) ([]PairedVersion, error) getManifestAndLock(context.Context, ProjectRoot, Revision, ProjectAnalyzer) (Manifest, Lock, error) listPackages(context.Context, ProjectRoot, Revision) (pkgtree.PackageTree, error) revisionPresentIn(Revision) (bool, error) disambiguateRevision(context.Context, Revision) (Revision, error) exportRevisionTo(context.Context, Revision, string) error sourceType() string } dep-0.3.2/internal/gps/source_cache.go000066400000000000000000000141271317166637100176630ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "sync" "github.com/golang/dep/internal/gps/pkgtree" ) // singleSourceCache provides a method set for storing and retrieving data about // a single source. type singleSourceCache interface { // Store the manifest and lock information for a given revision, as defined by // a particular ProjectAnalyzer. setManifestAndLock(Revision, ProjectAnalyzerInfo, Manifest, Lock) // Get the manifest and lock information for a given revision, as defined by // a particular ProjectAnalyzer. getManifestAndLock(Revision, ProjectAnalyzerInfo) (Manifest, Lock, bool) // Store a PackageTree for a given revision. setPackageTree(Revision, pkgtree.PackageTree) // Get the PackageTree for a given revision. getPackageTree(Revision) (pkgtree.PackageTree, bool) // Indicate to the cache that an individual revision is known to exist. markRevisionExists(r Revision) // Store the mappings between a set of PairedVersions' surface versions // their corresponding revisions. // // The existing list of versions will be purged before writing. Revisions // will have their pairings purged, but record of the revision existing will // be kept, on the assumption that revisions are immutable and permanent. setVersionMap(versionList []PairedVersion) // Get the list of unpaired versions corresponding to the given revision. getVersionsFor(Revision) ([]UnpairedVersion, bool) // Gets all the version pairs currently known to the cache. getAllVersions() ([]PairedVersion, bool) // Get the revision corresponding to the given unpaired version. getRevisionFor(UnpairedVersion) (Revision, bool) // Attempt to convert the given Version to a Revision, given information // currently present in the cache, and in the Version itself. toRevision(v Version) (Revision, bool) // Attempt to convert the given Version to an UnpairedVersion, given // information currently present in the cache, or in the Version itself. // // If the input is a revision and multiple UnpairedVersions are associated // with it, whatever happens to be the first is returned. toUnpaired(v Version) (UnpairedVersion, bool) } type singleSourceCacheMemory struct { mut sync.RWMutex // protects all fields infos map[ProjectAnalyzerInfo]map[Revision]projectInfo ptrees map[Revision]pkgtree.PackageTree vList []PairedVersion // replaced, never modified vMap map[UnpairedVersion]Revision rMap map[Revision][]UnpairedVersion } func newMemoryCache() singleSourceCache { return &singleSourceCacheMemory{ infos: make(map[ProjectAnalyzerInfo]map[Revision]projectInfo), ptrees: make(map[Revision]pkgtree.PackageTree), vMap: make(map[UnpairedVersion]Revision), rMap: make(map[Revision][]UnpairedVersion), } } type projectInfo struct { Manifest Lock } func (c *singleSourceCacheMemory) setManifestAndLock(r Revision, pai ProjectAnalyzerInfo, m Manifest, l Lock) { c.mut.Lock() inner, has := c.infos[pai] if !has { inner = make(map[Revision]projectInfo) c.infos[pai] = inner } inner[r] = projectInfo{Manifest: m, Lock: l} // Ensure there's at least an entry in the rMap so that the rMap always has // a complete picture of the revisions we know to exist if _, has = c.rMap[r]; !has { c.rMap[r] = nil } c.mut.Unlock() } func (c *singleSourceCacheMemory) getManifestAndLock(r Revision, pai ProjectAnalyzerInfo) (Manifest, Lock, bool) { c.mut.Lock() defer c.mut.Unlock() inner, has := c.infos[pai] if !has { return nil, nil, false } pi, has := inner[r] if has { return pi.Manifest, pi.Lock, true } return nil, nil, false } func (c *singleSourceCacheMemory) setPackageTree(r Revision, ptree pkgtree.PackageTree) { c.mut.Lock() c.ptrees[r] = ptree // Ensure there's at least an entry in the rMap so that the rMap always has // a complete picture of the revisions we know to exist if _, has := c.rMap[r]; !has { c.rMap[r] = nil } c.mut.Unlock() } func (c *singleSourceCacheMemory) getPackageTree(r Revision) (pkgtree.PackageTree, bool) { c.mut.Lock() ptree, has := c.ptrees[r] c.mut.Unlock() return ptree, has } func (c *singleSourceCacheMemory) setVersionMap(versionList []PairedVersion) { c.mut.Lock() c.vList = versionList // TODO(sdboyer) how do we handle cache consistency here - revs that may // be out of date vis-a-vis the ptrees or infos maps? for r := range c.rMap { c.rMap[r] = nil } c.vMap = make(map[UnpairedVersion]Revision, len(versionList)) for _, pv := range versionList { u, r := pv.Unpair(), pv.Revision() c.vMap[u] = r c.rMap[r] = append(c.rMap[r], u) } c.mut.Unlock() } func (c *singleSourceCacheMemory) markRevisionExists(r Revision) { c.mut.Lock() if _, has := c.rMap[r]; !has { c.rMap[r] = nil } c.mut.Unlock() } func (c *singleSourceCacheMemory) getVersionsFor(r Revision) ([]UnpairedVersion, bool) { c.mut.Lock() versionList, has := c.rMap[r] c.mut.Unlock() return versionList, has } func (c *singleSourceCacheMemory) getAllVersions() ([]PairedVersion, bool) { c.mut.Lock() vList := c.vList c.mut.Unlock() if vList == nil { return nil, false } cp := make([]PairedVersion, len(vList)) copy(cp, vList) return cp, true } func (c *singleSourceCacheMemory) getRevisionFor(uv UnpairedVersion) (Revision, bool) { c.mut.Lock() r, has := c.vMap[uv] c.mut.Unlock() return r, has } func (c *singleSourceCacheMemory) toRevision(v Version) (Revision, bool) { switch t := v.(type) { case Revision: return t, true case PairedVersion: return t.Revision(), true case UnpairedVersion: c.mut.Lock() r, has := c.vMap[t] c.mut.Unlock() return r, has default: panic(fmt.Sprintf("Unknown version type %T", v)) } } func (c *singleSourceCacheMemory) toUnpaired(v Version) (UnpairedVersion, bool) { switch t := v.(type) { case UnpairedVersion: return t, true case PairedVersion: return t.Unpair(), true case Revision: c.mut.Lock() upv, has := c.rMap[t] c.mut.Unlock() if has && len(upv) > 0 { return upv[0], true } return nil, false default: panic(fmt.Sprintf("unknown version type %T", v)) } } dep-0.3.2/internal/gps/source_cache_bolt.go000066400000000000000000000330041317166637100206760ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "log" "os" "path/filepath" "time" "github.com/boltdb/bolt" "github.com/golang/dep/internal/gps/internal/pb" "github.com/golang/dep/internal/gps/pkgtree" "github.com/golang/protobuf/proto" "github.com/jmank88/nuts" "github.com/pkg/errors" ) // boltCache manages a bolt.DB cache and provides singleSourceCaches. type boltCache struct { db *bolt.DB epoch int64 // getters will not return values older than this unix timestamp logger *log.Logger // info logging } // newBoltCache returns a new boltCache backed by a BoltDB file under the cache directory. func newBoltCache(cd string, epoch int64, logger *log.Logger) (*boltCache, error) { path := sourceCachePath(cd, "bolt") + ".db" dir := filepath.Dir(path) if fi, err := os.Stat(dir); os.IsNotExist(err) { if err := os.MkdirAll(dir, os.ModeDir|os.ModePerm); err != nil { return nil, errors.Wrapf(err, "failed to create source cache directory: %s", dir) } } else if err != nil { return nil, errors.Wrapf(err, "failed to check source cache directory: ", dir) } else if !fi.IsDir() { return nil, errors.Wrapf(err, "source cache path is not directory: %s", dir) } db, err := bolt.Open(path, 0600, &bolt.Options{Timeout: 1 * time.Second}) if err != nil { return nil, errors.Wrapf(err, "failed to open BoltDB cache file %q", path) } return &boltCache{ db: db, epoch: epoch, logger: logger, }, nil } // newSingleSourceCache returns a new singleSourceCache for pi. func (c *boltCache) newSingleSourceCache(pi ProjectIdentifier) singleSourceCache { return &singleSourceCacheBolt{ boltCache: c, pi: pi, sourceName: []byte(pi.normalizedSource()), } } // close releases all cache resources. func (c *boltCache) close() error { return errors.Wrapf(c.db.Close(), "error closing Bolt database %q", c.db.String()) } // singleSourceCacheBolt implements a singleSourceCache backed by a persistent BoltDB file. // Version mappings are timestamped, and the `epoch` field limits the age of returned values. // Database access methods are safe for concurrent use. // // Implementation: // // Each source has a top-level bucket containing sub-buckets for (1) versions and (2) revisions. // // 1) Versions buckets hold version keys with revision values: // // Bucket: "v" // Keys: Unpaired Versions serialized via ConstraintMsg // Values: "" // // 2) Revision buckets hold (a) manifest and lock data for various ProjectAnalyzers, // (b) package trees, and (c) version lists. // // Bucket: "r" // // a) Manifest and Lock info are stored in buckets derived from ProjectAnalyzer.Info: // // Sub-Bucket: ".m", ".l" // Keys/Values: Manifest or Lock fields // // b) Package tree buckets contain package import path keys and package-or-error buckets: // // Sub-Bucket: "p" // Sub-Bucket: "" // Key/Values: PackageOrErr fields // // c) Revision-versions buckets contain lists of version values: // // Sub-Bucket: "v" // Keys: "" // Values: Unpaired Versions serialized via ConstraintMsg type singleSourceCacheBolt struct { *boltCache pi ProjectIdentifier sourceName []byte } func (s *singleSourceCacheBolt) setManifestAndLock(rev Revision, ai ProjectAnalyzerInfo, m Manifest, l Lock) { err := s.updateRevBucket(rev, func(b *bolt.Bucket) error { info := ai.String() name := make([]byte, len(info)+1) copy(name, info) name[len(info)] = 'm' if b.Bucket(name) != nil { if err := b.DeleteBucket(name); err != nil { return err } } // Manifest mb, err := b.CreateBucket(name) if err != nil { return err } if err := cachePutManifest(mb, m); err != nil { return errors.Wrap(err, "failed to put manifest") } if l == nil { return nil } // Lock name[len(info)] = 'l' if b.Bucket(name) != nil { if err := b.DeleteBucket(name); err != nil { return err } } lb, err := b.CreateBucket(name) if err != nil { return err } return errors.Wrap(cachePutLock(lb, l), "failed to put lock") }) if err != nil { s.logger.Println(errors.Wrapf(err, "failed to cache manifest/lock for revision %q, analyzer: %v", rev, ai)) } } func (s *singleSourceCacheBolt) getManifestAndLock(rev Revision, ai ProjectAnalyzerInfo) (m Manifest, l Lock, ok bool) { err := s.viewRevBucket(rev, func(b *bolt.Bucket) error { info := ai.String() name := make([]byte, len(info)+1) copy(name, info) name[len(info)] = 'm' // Manifest mb := b.Bucket(name) if mb == nil { return nil } var err error m, err = cacheGetManifest(mb) if err != nil { return errors.Wrap(err, "failed to get manifest") } // Lock name[len(info)] = 'l' lb := b.Bucket(name) if lb == nil { ok = true return nil } l, err = cacheGetLock(lb) if err != nil { return errors.Wrap(err, "failed to get lock") } ok = true return nil }) if err != nil { s.logger.Println(errors.Wrapf(err, "failed to get cached manifest/lock for revision %q, analyzer: %v", rev, ai)) } return } func (s *singleSourceCacheBolt) setPackageTree(rev Revision, ptree pkgtree.PackageTree) { err := s.updateRevBucket(rev, func(b *bolt.Bucket) error { if b.Bucket(cacheKeyPTree) != nil { if err := b.DeleteBucket(cacheKeyPTree); err != nil { return err } } ptrees, err := b.CreateBucket(cacheKeyPTree) if err != nil { return err } for ip, poe := range ptree.Packages { pb, err := ptrees.CreateBucket([]byte(ip)) if err != nil { return err } if err := cachePutPackageOrErr(pb, poe); err != nil { return err } } return nil }) if err != nil { s.logger.Println(errors.Wrapf(err, "failed to cache package tree for revision %q", rev)) } } func (s *singleSourceCacheBolt) getPackageTree(rev Revision) (ptree pkgtree.PackageTree, ok bool) { err := s.viewRevBucket(rev, func(b *bolt.Bucket) error { ptrees := b.Bucket(cacheKeyPTree) if ptrees == nil { return nil } pkgs := make(map[string]pkgtree.PackageOrErr) err := ptrees.ForEach(func(ip, _ []byte) error { poe, err := cacheGetPackageOrErr(ptrees.Bucket(ip)) if err != nil { return err } if poe.Err == nil { poe.P.ImportPath = string(ip) } pkgs[string(ip)] = poe return nil }) if err != nil { return err } ptree.ImportRoot = string(s.pi.ProjectRoot) ptree.Packages = pkgs ok = true return nil }) if err != nil { s.logger.Println(errors.Wrapf(err, "failed to get cached package tree for revision %q", rev)) } return } func (s *singleSourceCacheBolt) markRevisionExists(rev Revision) { err := s.updateRevBucket(rev, func(versions *bolt.Bucket) error { return nil }) if err != nil { s.logger.Println(errors.Wrapf(err, "failed to mark revision %q in cache", rev)) } } func (s *singleSourceCacheBolt) setVersionMap(pvs []PairedVersion) { err := s.updateSourceBucket(func(src *bolt.Bucket) error { if err := cachePrefixDelete(src, cacheVersion); err != nil { return err } vk := cacheTimestampedKey(cacheVersion, time.Now()) versions, err := src.CreateBucket(vk) if err != nil { return err } c := src.Cursor() for k, _ := c.Seek(cacheKeyRevision); len(k) > 0 && k[0] == cacheRevision; k, _ = c.Next() { rb := src.Bucket(k) if err := cachePrefixDelete(rb, cacheVersion); err != nil { return err } } revVersions := make(map[Revision]*bolt.Bucket) key := make(nuts.Key, nuts.KeyLen(uint64(len(pvs)-1))) var msg pb.Constraint for i, pv := range pvs { uv, rev := pv.Unpair(), pv.Revision() uv.copyTo(&msg) uvB, err := proto.Marshal(&msg) if err != nil { return errors.Wrapf(err, "failed to serialize UnpairedVersion: %#v", uv) } if err := versions.Put(uvB, []byte(rev)); err != nil { return errors.Wrap(err, "failed to put version->revision") } b, err := src.CreateBucketIfNotExists(cacheRevisionName(rev)) if err != nil { return errors.Wrapf(err, "failed to create bucket for revision: %s", rev) } var versions *bolt.Bucket if versions = revVersions[rev]; versions == nil { err := cachePrefixDelete(b, cacheVersion) if err != nil { return err } versions, err = b.CreateBucket(vk) if err != nil { return errors.Wrapf(err, "failed to create bucket for revision versions: %s", rev) } revVersions[rev] = versions } key.Put(uint64(i)) if err := versions.Put(key, uvB); err != nil { return errors.Wrap(err, "failed to put revision->version") } } return nil }) if err != nil { s.logger.Println(errors.Wrap(err, "failed to cache version map")) } } func (s *singleSourceCacheBolt) getVersionsFor(rev Revision) (uvs []UnpairedVersion, ok bool) { err := s.viewRevBucket(rev, func(b *bolt.Bucket) error { versions := cacheFindLatestValid(b, cacheVersion, s.epoch) if versions == nil { return nil } ok = true var msg pb.Constraint return versions.ForEach(func(_, v []byte) error { if err := proto.Unmarshal(v, &msg); err != nil { return err } uv, err := unpairedVersionFromCache(&msg) if err != nil { return err } uvs = append(uvs, uv) return nil }) }) if err != nil { s.logger.Println(errors.Wrapf(err, "failed to get cached versions for revision %q", rev)) return nil, false } return } func (s *singleSourceCacheBolt) getAllVersions() (pvs []PairedVersion, ok bool) { err := s.viewSourceBucket(func(src *bolt.Bucket) error { versions := cacheFindLatestValid(src, cacheVersion, s.epoch) if versions == nil { return nil } var msg pb.Constraint return versions.ForEach(func(k, v []byte) error { if err := proto.Unmarshal(k, &msg); err != nil { return err } uv, err := unpairedVersionFromCache(&msg) if err != nil { return err } pvs = append(pvs, uv.Pair(Revision(v))) ok = true return nil }) }) if err != nil { s.logger.Println(errors.Wrap(err, "failed to get all cached versions")) return nil, false } return } func (s *singleSourceCacheBolt) getRevisionFor(uv UnpairedVersion) (rev Revision, ok bool) { err := s.viewSourceBucket(func(src *bolt.Bucket) error { versions := cacheFindLatestValid(src, cacheVersion, s.epoch) if versions == nil { return nil } var msg pb.Constraint uv.copyTo(&msg) b, err := proto.Marshal(&msg) if err != nil { return errors.Wrapf(err, "failed to serialize UnpairedVersion: %#v", uv) } v := versions.Get(b) if len(v) > 0 { rev = Revision(v) ok = true } return nil }) if err != nil { s.logger.Println(errors.Wrapf(err, "failed to get cached revision for unpaired version: %v", uv)) } return } func (s *singleSourceCacheBolt) toRevision(v Version) (rev Revision, ok bool) { switch t := v.(type) { case Revision: return t, true case PairedVersion: return t.Revision(), true case UnpairedVersion: return s.getRevisionFor(t) default: s.logger.Println(fmt.Sprintf("failed to get cached revision for version %v: unknown type %T", v, v)) return "", false } } func (s *singleSourceCacheBolt) toUnpaired(v Version) (uv UnpairedVersion, ok bool) { const errMsg = "failed to get cached unpaired version for version: %v" switch t := v.(type) { case UnpairedVersion: return t, true case PairedVersion: return t.Unpair(), true case Revision: err := s.viewRevBucket(t, func(b *bolt.Bucket) error { versions := cacheFindLatestValid(b, cacheVersion, s.epoch) if versions == nil { return nil } _, v := versions.Cursor().First() if len(v) == 0 { return nil } var msg pb.Constraint if err := proto.Unmarshal(v, &msg); err != nil { return err } var err error uv, err = unpairedVersionFromCache(&msg) if err != nil { return err } ok = true return nil }) if err != nil { s.logger.Println(errors.Wrapf(err, errMsg, v)) } return default: s.logger.Println(fmt.Sprintf(errMsg, v)) return } } // cacheRevisionName returns the bucket name for rev. func cacheRevisionName(rev Revision) []byte { name := make([]byte, 1+len(rev)) name[0] = 'r' copy(name[1:], string(rev)) return name } // viewSourceBucket executes view with the source bucket, if it exists. func (s *singleSourceCacheBolt) viewSourceBucket(view func(b *bolt.Bucket) error) error { return s.db.View(func(tx *bolt.Tx) error { b := tx.Bucket(s.sourceName) if b == nil { return nil } return view(b) }) } // updateSourceBucket executes update (in batch) with the source bucket, creating it first if necessary. func (s *singleSourceCacheBolt) updateSourceBucket(update func(b *bolt.Bucket) error) error { return s.db.Batch(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists(s.sourceName) if err != nil { return errors.Wrapf(err, "failed to create bucket: %s", s.sourceName) } return update(b) }) } // viewRevBucket executes view with rev's bucket for this source, if it exists. func (s *singleSourceCacheBolt) viewRevBucket(rev Revision, view func(b *bolt.Bucket) error) error { return s.viewSourceBucket(func(src *bolt.Bucket) error { b := src.Bucket(cacheRevisionName(rev)) if b == nil { return nil } return view(b) }) } // updateRevBucket executes update with rev's bucket for this source, creating it first if necessary. func (s *singleSourceCacheBolt) updateRevBucket(rev Revision, update func(b *bolt.Bucket) error) error { return s.updateSourceBucket(func(src *bolt.Bucket) error { name := cacheRevisionName(rev) b, err := src.CreateBucketIfNotExists(name) if err != nil { return errors.Wrapf(err, "failed to create bucket: %s", name) } return update(b) }) } dep-0.3.2/internal/gps/source_cache_bolt_encode.go000066400000000000000000000261241317166637100222200ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "encoding/binary" "time" "github.com/boltdb/bolt" "github.com/golang/dep/internal/gps/internal/pb" "github.com/golang/dep/internal/gps/pkgtree" "github.com/golang/protobuf/proto" "github.com/jmank88/nuts" "github.com/pkg/errors" ) var ( cacheKeyComment = []byte("c") cacheKeyConstraint = cacheKeyComment cacheKeyError = []byte("e") cacheKeyHash = []byte("h") cacheKeyIgnored = []byte("i") cacheKeyImport = cacheKeyIgnored cacheKeyLock = []byte("l") cacheKeyName = []byte("n") cacheKeyOverride = []byte("o") cacheKeyPTree = []byte("p") cacheKeyRequired = []byte("r") cacheKeyRevision = cacheKeyRequired cacheKeyTestImport = []byte("t") cacheRevision = byte('r') cacheVersion = byte('v') ) // propertiesFromCache returns a new ProjectRoot and ProjectProperties with the fields from m. func propertiesFromCache(m *pb.ProjectProperties) (ProjectRoot, ProjectProperties, error) { ip := ProjectRoot(m.Root) var pp ProjectProperties pp.Source = m.Source if m.Constraint == nil { pp.Constraint = Any() } else { c, err := constraintFromCache(m.Constraint) if err != nil { return "", ProjectProperties{}, err } pp.Constraint = c } return ip, pp, nil } // projectPropertiesMsgs is a convenience tuple. type projectPropertiesMsgs struct { pp pb.ProjectProperties c pb.Constraint } // copyFrom sets the ProjectPropertiesMsg fields from ip and pp. func (ms *projectPropertiesMsgs) copyFrom(ip ProjectRoot, pp ProjectProperties) { ms.pp.Root = string(ip) ms.pp.Source = pp.Source if pp.Constraint != nil && !IsAny(pp.Constraint) { pp.Constraint.copyTo(&ms.c) ms.pp.Constraint = &ms.c } else { ms.pp.Constraint = nil } } // cachePutManifest stores a Manifest in the bolt.Bucket. func cachePutManifest(b *bolt.Bucket, m Manifest) error { var ppMsg projectPropertiesMsgs constraints := m.DependencyConstraints() if len(constraints) > 0 { cs, err := b.CreateBucket(cacheKeyConstraint) if err != nil { return err } key := make(nuts.Key, nuts.KeyLen(uint64(len(constraints)-1))) var i uint64 for ip, pp := range constraints { ppMsg.copyFrom(ip, pp) v, err := proto.Marshal(&ppMsg.pp) if err != nil { return err } key.Put(i) i++ if err := cs.Put(key, v); err != nil { return err } } } rm, ok := m.(RootManifest) if !ok { return nil } ignored := rm.IgnoredPackages().ToSlice() if len(ignored) > 0 { ig, err := b.CreateBucket(cacheKeyIgnored) if err != nil { return err } key := make(nuts.Key, nuts.KeyLen(uint64(len(ignored)-1))) var i uint64 for _, ip := range ignored { key.Put(i) i++ if err := ig.Put(key, []byte(ip)); err != nil { return err } } } overrides := rm.Overrides() if len(overrides) > 0 { ovr, err := b.CreateBucket(cacheKeyOverride) if err != nil { return err } key := make(nuts.Key, nuts.KeyLen(uint64(len(overrides)-1))) var i uint64 for ip, pp := range overrides { ppMsg.copyFrom(ip, pp) v, err := proto.Marshal(&ppMsg.pp) if err != nil { return err } key.Put(i) i++ if err := ovr.Put(key, v); err != nil { return err } } } required := rm.RequiredPackages() if len(required) > 0 { req, err := b.CreateBucket(cacheKeyRequired) if err != nil { return err } key := make(nuts.Key, nuts.KeyLen(uint64(len(required)-1))) var i uint64 for ip, ok := range required { if ok { key.Put(i) i++ if err := req.Put(key, []byte(ip)); err != nil { return err } } } } return nil } // cacheGetManifest returns a new RootManifest with the data retrieved from the bolt.Bucket. func cacheGetManifest(b *bolt.Bucket) (RootManifest, error) { //TODO consider storing slice/map lens to enable calling make() with capacity m := &simpleRootManifest{ c: make(ProjectConstraints), ovr: make(ProjectConstraints), req: make(map[string]bool), } // Constraints if cs := b.Bucket(cacheKeyConstraint); cs != nil { var msg pb.ProjectProperties err := cs.ForEach(func(_, v []byte) error { if err := proto.Unmarshal(v, &msg); err != nil { return err } ip, pp, err := propertiesFromCache(&msg) if err != nil { return err } m.c[ip] = pp return nil }) if err != nil { return nil, errors.Wrap(err, "failed to get constraints") } } // Ignored if ig := b.Bucket(cacheKeyIgnored); ig != nil { var igslice []string err := ig.ForEach(func(_, v []byte) error { igslice = append(igslice, string(v)) return nil }) m.ig = pkgtree.NewIgnoredRuleset(igslice) if err != nil { return nil, errors.Wrap(err, "failed to get ignored") } } // Overrides if os := b.Bucket(cacheKeyOverride); os != nil { var msg pb.ProjectProperties err := os.ForEach(func(_, v []byte) error { if err := proto.Unmarshal(v, &msg); err != nil { return err } ip, pp, err := propertiesFromCache(&msg) if err != nil { return err } m.ovr[ip] = pp return nil }) if err != nil { return nil, errors.Wrap(err, "failed to get overrides") } } // Required if req := b.Bucket(cacheKeyRequired); req != nil { err := req.ForEach(func(_, v []byte) error { m.req[string(v)] = true return nil }) if err != nil { return nil, errors.Wrap(err, "failed to get required") } } return m, nil } // copyTo returns a serializable representation of lp. func (lp LockedProject) copyTo(msg *pb.LockedProject, c *pb.Constraint) { if lp.v == nil { msg.UnpairedVersion = nil } else { lp.v.copyTo(c) msg.UnpairedVersion = c } msg.Root = string(lp.pi.ProjectRoot) msg.Source = lp.pi.Source msg.Revision = string(lp.r) msg.Packages = lp.pkgs } // lockedProjectFromCache returns a new LockedProject with fields from m. func lockedProjectFromCache(m *pb.LockedProject) (LockedProject, error) { var uv UnpairedVersion var err error if m.UnpairedVersion != nil { uv, err = unpairedVersionFromCache(m.UnpairedVersion) if err != nil { return LockedProject{}, err } } return LockedProject{ pi: ProjectIdentifier{ ProjectRoot: ProjectRoot(m.Root), Source: m.Source, }, v: uv, r: Revision(m.Revision), pkgs: m.Packages, }, nil } // cachePutLock stores the Lock as fields in the bolt.Bucket. func cachePutLock(b *bolt.Bucket, l Lock) error { // InputHash if v := l.InputsDigest(); len(v) > 0 { if err := b.Put(cacheKeyHash, v); err != nil { return errors.Wrap(err, "failed to put hash") } } // Projects if projects := l.Projects(); len(projects) > 0 { lb, err := b.CreateBucket(cacheKeyLock) if err != nil { return err } key := make(nuts.Key, nuts.KeyLen(uint64(len(projects)-1))) var msg pb.LockedProject var cMsg pb.Constraint for i, lp := range projects { lp.copyTo(&msg, &cMsg) v, err := proto.Marshal(&msg) if err != nil { return err } key.Put(uint64(i)) if err := lb.Put(key, v); err != nil { return err } } } return nil } // cacheGetLock returns a new *safeLock with the fields retrieved from the bolt.Bucket. func cacheGetLock(b *bolt.Bucket) (*safeLock, error) { l := &safeLock{ h: b.Get(cacheKeyHash), } if locked := b.Bucket(cacheKeyLock); locked != nil { var msg pb.LockedProject err := locked.ForEach(func(_, v []byte) error { if err := proto.Unmarshal(v, &msg); err != nil { return err } lp, err := lockedProjectFromCache(&msg) if err != nil { return err } l.p = append(l.p, lp) return nil }) if err != nil { return nil, errors.Wrap(err, "failed to get locked projects") } } return l, nil } // cachePutPackageOrError stores the pkgtree.PackageOrErr as fields in the bolt.Bucket. func cachePutPackageOrErr(b *bolt.Bucket, poe pkgtree.PackageOrErr) error { if poe.Err != nil { err := b.Put(cacheKeyError, []byte(poe.Err.Error())) return errors.Wrapf(err, "failed to put error: %v", poe.Err) } if len(poe.P.CommentPath) > 0 { err := b.Put(cacheKeyComment, []byte(poe.P.CommentPath)) if err != nil { return errors.Wrapf(err, "failed to put package: %v", poe.P) } } if len(poe.P.Imports) > 0 { ip, err := b.CreateBucket(cacheKeyImport) if err != nil { return err } key := make(nuts.Key, nuts.KeyLen(uint64(len(poe.P.Imports)-1))) for i := range poe.P.Imports { v := []byte(poe.P.Imports[i]) key.Put(uint64(i)) if err := ip.Put(key, v); err != nil { return err } } } if len(poe.P.Name) > 0 { err := b.Put(cacheKeyName, []byte(poe.P.Name)) if err != nil { return errors.Wrapf(err, "failed to put package: %v", poe.P) } } if len(poe.P.TestImports) > 0 { ip, err := b.CreateBucket(cacheKeyTestImport) if err != nil { return err } key := make(nuts.Key, nuts.KeyLen(uint64(len(poe.P.TestImports)-1))) for i := range poe.P.TestImports { v := []byte(poe.P.TestImports[i]) key.Put(uint64(i)) if err := ip.Put(key, v); err != nil { return err } } } return nil } // cacheGetPackageOrErr returns a new pkgtree.PackageOrErr with fields retrieved // from the bolt.Bucket. func cacheGetPackageOrErr(b *bolt.Bucket) (pkgtree.PackageOrErr, error) { if v := b.Get(cacheKeyError); len(v) > 0 { return pkgtree.PackageOrErr{ Err: errors.New(string(v)), }, nil } var p pkgtree.Package p.CommentPath = string(b.Get(cacheKeyComment)) if ip := b.Bucket(cacheKeyImport); ip != nil { err := ip.ForEach(func(_, v []byte) error { p.Imports = append(p.Imports, string(v)) return nil }) if err != nil { return pkgtree.PackageOrErr{}, err } } p.Name = string(b.Get(cacheKeyName)) if tip := b.Bucket(cacheKeyTestImport); tip != nil { err := tip.ForEach(func(_, v []byte) error { p.TestImports = append(p.TestImports, string(v)) return nil }) if err != nil { return pkgtree.PackageOrErr{}, err } } return pkgtree.PackageOrErr{P: p}, nil } // cacheTimestampedKey returns a prefixed key with a trailing timestamp. func cacheTimestampedKey(pre byte, t time.Time) []byte { b := make([]byte, 9) b[0] = pre binary.BigEndian.PutUint64(b[1:], uint64(t.Unix())) return b } // boltTxOrBucket is a minimal interface satisfied by bolt.Tx and bolt.Bucket. type boltTxOrBucket interface { Cursor() *bolt.Cursor DeleteBucket([]byte) error Bucket([]byte) *bolt.Bucket } // cachePrefixDelete prefix scans and deletes each bucket. func cachePrefixDelete(tob boltTxOrBucket, pre byte) error { c := tob.Cursor() for k, _ := c.Seek([]byte{pre}); len(k) > 0 && k[0] == pre; k, _ = c.Next() { if err := tob.DeleteBucket(k); err != nil { return errors.Wrapf(err, "failed to delete bucket: %s", k) } } return nil } // cacheFindLatestValid prefix scans for the latest bucket which is timestamped >= epoch, // or returns nil if none exists. func cacheFindLatestValid(tob boltTxOrBucket, pre byte, epoch int64) *bolt.Bucket { c := tob.Cursor() var latest []byte for k, _ := c.Seek([]byte{pre}); len(k) > 0 && k[0] == pre; k, _ = c.Next() { latest = k } if latest == nil { return nil } ts := latest[1:] if len(ts) != 8 { return nil } if int64(binary.BigEndian.Uint64(ts)) < epoch { return nil } return tob.Bucket(latest) } dep-0.3.2/internal/gps/source_cache_bolt_encode_test.go000066400000000000000000000042541317166637100232570ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "testing" "time" "github.com/golang/protobuf/proto" ) func TestPropertiesFromCache(t *testing.T) { for _, test := range []struct { name string ip ProjectRoot pp ProjectProperties }{ {"defaultBranch", "root", ProjectProperties{"", newDefaultBranch("test")}}, {"branch", "root", ProjectProperties{"source", NewBranch("test")}}, {"semver", "root", ProjectProperties{"", testSemverConstraint(t, "^1.0.0")}}, {"rev", "root", ProjectProperties{"source", Revision("test")}}, {"any", "root", ProjectProperties{"source", Any()}}, } { t.Run(test.name, func(t *testing.T) { var buf projectPropertiesMsgs buf.copyFrom(test.ip, test.pp) v, err := proto.Marshal(&buf.pp) if err != nil { t.Fatal(err) } if err := proto.Unmarshal(v, &buf.pp); err != nil { t.Fatal(err) } else { ip, pp, err := propertiesFromCache(&buf.pp) if err != nil { t.Fatal(err) } if ip != test.ip { t.Errorf("decoded unexpected ProjectRoot:\n\t(GOT): %#v\n\t(WNT): %#v", ip, test.ip) } if pp.Source != test.pp.Source { t.Errorf("decoded unexpected ProjectRoot.Source:\n\t(GOT): %s\n\t (WNT): %s", pp.Source, test.pp.Source) } if !pp.Constraint.identical(test.pp.Constraint) { t.Errorf("decoded non-identical ProjectRoot.Constraint:\n\t(GOT): %#v\n\t(WNT): %#v", pp.Constraint, test.pp.Constraint) } } }) } } func TestCacheTimestampedKey(t *testing.T) { pre := byte('p') for _, test := range []struct { ts time.Time suffix []byte }{ {time.Unix(0, 0), []byte{0, 0, 0, 0, 0, 0, 0, 0}}, {time.Unix(100, 0), []byte{0, 0, 0, 0, 0, 0, 0, 100}}, {time.Unix(255, 0), []byte{0, 0, 0, 0, 0, 0, 0, 255}}, {time.Unix(1+1<<8+1<<16+1<<24, 0), []byte{0, 0, 0, 0, 1, 1, 1, 1}}, {time.Unix(255<<48, 0), []byte{0, 255, 0, 0, 0, 0, 0, 0}}, } { b := cacheTimestampedKey(pre, test.ts) if !bytes.Equal(b, append([]byte{pre}, test.suffix...)) { t.Errorf("unexpected suffix:\n\t(GOT):%v\n\t(WNT):%v", b[4:], test.suffix) } } } dep-0.3.2/internal/gps/source_cache_bolt_test.go000066400000000000000000000163161317166637100217440ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "io/ioutil" "log" "testing" "time" "github.com/golang/dep/internal/gps/pkgtree" "github.com/golang/dep/internal/test" ) func TestBoltCacheTimeout(t *testing.T) { const root = "example.com/test" cpath, err := ioutil.TempDir("", "singlesourcecache") if err != nil { t.Fatalf("Failed to create temp cache dir: %s", err) } pi := ProjectIdentifier{ProjectRoot: root} logger := log.New(test.Writer{TB: t}, "", 0) start := time.Now() bc, err := newBoltCache(cpath, start.Unix(), logger) if err != nil { t.Fatal(err) } defer bc.close() c := bc.newSingleSourceCache(pi) rev := Revision("test") ai := ProjectAnalyzerInfo{Name: "name", Version: 42} manifest := &simpleRootManifest{ c: ProjectConstraints{ ProjectRoot("foo"): ProjectProperties{ Constraint: Any(), }, ProjectRoot("bar"): ProjectProperties{ Source: "whatever", Constraint: testSemverConstraint(t, "> 1.3"), }, }, ovr: ProjectConstraints{ ProjectRoot("b"): ProjectProperties{ Constraint: testSemverConstraint(t, "2.0.0"), }, }, } lock := &safeLock{ h: []byte("test_hash"), p: []LockedProject{ NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{"gps"}), NewLockedProject(mkPI("github.com/sdboyer/gps2"), NewVersion("v0.10.0"), nil), NewLockedProject(mkPI("github.com/sdboyer/gps3"), NewVersion("v0.10.0"), []string{"gps", "flugle"}), NewLockedProject(mkPI("foo"), NewVersion("nada"), []string{"foo"}), NewLockedProject(mkPI("github.com/sdboyer/gps4"), NewVersion("v0.10.0"), []string{"flugle", "gps"}), }, } ptree := pkgtree.PackageTree{ ImportRoot: root, Packages: map[string]pkgtree.PackageOrErr{ "simple": { P: pkgtree.Package{ ImportPath: "simple", CommentPath: "comment", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, "m1p": { P: pkgtree.Package{ ImportPath: "m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, } pvs := []PairedVersion{ NewBranch("originalbranch").Pair("rev1"), NewVersion("originalver").Pair("rev2"), } // Write values timestamped > `start`. { c.setManifestAndLock(rev, ai, manifest, lock) c.setPackageTree(rev, ptree) c.setVersionMap(pvs) } // Read back values timestamped > `start`. { gotM, gotL, ok := c.getManifestAndLock(rev, ai) if !ok { t.Error("no manifest and lock found for revision") } compareManifests(t, manifest, gotM) if dl := DiffLocks(lock, gotL); dl != nil { t.Errorf("lock differences:\n\t %#v", dl) } got, ok := c.getPackageTree(rev) if !ok { t.Errorf("no package tree found:\n\t(WNT): %#v", ptree) } comparePackageTree(t, ptree, got) gotV, ok := c.getAllVersions() if !ok || len(gotV) != len(pvs) { t.Errorf("unexpected versions:\n\t(GOT): %#v\n\t(WNT): %#v", gotV, pvs) } else { SortPairedForDowngrade(gotV) for i := range pvs { if !pvs[i].identical(gotV[i]) { t.Errorf("unexpected versions:\n\t(GOT): %#v\n\t(WNT): %#v", gotV, pvs) break } } } } if err := bc.close(); err != nil { t.Fatal("failed to close cache:", err) } // Read with a later epoch. Expect no *timestamped* values, since all were < `after`. { after := start.Add(1000 * time.Hour) bc, err = newBoltCache(cpath, after.Unix(), logger) if err != nil { t.Fatal(err) } c = bc.newSingleSourceCache(pi) gotM, gotL, ok := c.getManifestAndLock(rev, ai) if !ok { t.Error("no manifest and lock found for revision") } compareManifests(t, manifest, gotM) if dl := DiffLocks(lock, gotL); dl != nil { t.Errorf("lock differences:\n\t %#v", dl) } gotPtree, ok := c.getPackageTree(rev) if !ok { t.Errorf("no package tree found:\n\t(WNT): %#v", ptree) } comparePackageTree(t, ptree, gotPtree) pvs, ok := c.getAllVersions() if ok || len(pvs) > 0 { t.Errorf("expected no cached versions, but got:\n\t%#v", pvs) } } if err := bc.close(); err != nil { t.Fatal("failed to close cache:", err) } // Re-connect with the original epoch. bc, err = newBoltCache(cpath, start.Unix(), logger) if err != nil { t.Fatal(err) } c = bc.newSingleSourceCache(pi) // Read values timestamped > `start`. { gotM, gotL, ok := c.getManifestAndLock(rev, ai) if !ok { t.Error("no manifest and lock found for revision") } compareManifests(t, manifest, gotM) if dl := DiffLocks(lock, gotL); dl != nil { t.Errorf("lock differences:\n\t %#v", dl) } got, ok := c.getPackageTree(rev) if !ok { t.Errorf("no package tree found:\n\t(WNT): %#v", ptree) } comparePackageTree(t, ptree, got) gotV, ok := c.getAllVersions() if !ok || len(gotV) != len(pvs) { t.Errorf("unexpected versions:\n\t(GOT): %#v\n\t(WNT): %#v", gotV, pvs) } else { SortPairedForDowngrade(gotV) for i := range pvs { if !pvs[i].identical(gotV[i]) { t.Errorf("unexpected versions:\n\t(GOT): %#v\n\t(WNT): %#v", gotV, pvs) break } } } } // New values. newManifest := &simpleRootManifest{ c: ProjectConstraints{ ProjectRoot("foo"): ProjectProperties{ Constraint: NewBranch("master"), }, ProjectRoot("bar"): ProjectProperties{ Source: "whatever", Constraint: testSemverConstraint(t, "> 1.5"), }, }, } newLock := &safeLock{ h: []byte("new_test_hash"), p: []LockedProject{ NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v1"), []string{"gps"}), }, } newPtree := pkgtree.PackageTree{ ImportRoot: root, Packages: map[string]pkgtree.PackageOrErr{ "simple": { P: pkgtree.Package{ ImportPath: "simple", CommentPath: "newcomment", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps42", "test", }, }, }, "m1p": { P: pkgtree.Package{ ImportPath: "m1p", CommentPath: "", Name: "m1p", Imports: []string{ "os", }, }, }, }, } newPVS := []PairedVersion{ NewBranch("newbranch").Pair("revA"), NewVersion("newver").Pair("revB"), } // Overwrite with new values, and with timestamps > `after`. { c.setManifestAndLock(rev, ai, newManifest, newLock) c.setPackageTree(rev, newPtree) c.setVersionMap(newPVS) } // Read new values. { gotM, gotL, ok := c.getManifestAndLock(rev, ai) if !ok { t.Error("no manifest and lock found for revision") } compareManifests(t, newManifest, gotM) if dl := DiffLocks(newLock, gotL); dl != nil { t.Errorf("lock differences:\n\t %#v", dl) } got, ok := c.getPackageTree(rev) if !ok { t.Errorf("no package tree found:\n\t(WNT): %#v", newPtree) } comparePackageTree(t, newPtree, got) gotV, ok := c.getAllVersions() if !ok || len(gotV) != len(newPVS) { t.Errorf("unexpected versions:\n\t(GOT): %#v\n\t(WNT): %#v", gotV, newPVS) } else { SortPairedForDowngrade(gotV) for i := range newPVS { if !newPVS[i].identical(gotV[i]) { t.Errorf("unexpected versions:\n\t(GOT): %#v\n\t(WNT): %#v", gotV, newPVS) break } } } } } dep-0.3.2/internal/gps/source_cache_multi.go000066400000000000000000000052201317166637100210670ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "github.com/golang/dep/internal/gps/pkgtree" ) // A multiCache manages two cache levels, ephemeral in-memory and persistent on-disk. // // The in-memory cache is always checked first, with the on-disk used as a fallback. // Values read from disk are set in-memory when an appropriate method exists. // // Set values are cached both in-memory and on-disk. type multiCache struct { mem, disk singleSourceCache } func (c *multiCache) setManifestAndLock(r Revision, ai ProjectAnalyzerInfo, m Manifest, l Lock) { c.mem.setManifestAndLock(r, ai, m, l) c.disk.setManifestAndLock(r, ai, m, l) } func (c *multiCache) getManifestAndLock(r Revision, ai ProjectAnalyzerInfo) (Manifest, Lock, bool) { m, l, ok := c.mem.getManifestAndLock(r, ai) if ok { return m, l, true } m, l, ok = c.disk.getManifestAndLock(r, ai) if ok { c.mem.setManifestAndLock(r, ai, m, l) return m, l, true } return nil, nil, false } func (c *multiCache) setPackageTree(r Revision, ptree pkgtree.PackageTree) { c.mem.setPackageTree(r, ptree) c.disk.setPackageTree(r, ptree) } func (c *multiCache) getPackageTree(r Revision) (pkgtree.PackageTree, bool) { ptree, ok := c.mem.getPackageTree(r) if ok { return ptree, true } ptree, ok = c.disk.getPackageTree(r) if ok { c.mem.setPackageTree(r, ptree) return ptree, true } return pkgtree.PackageTree{}, false } func (c *multiCache) markRevisionExists(r Revision) { c.mem.markRevisionExists(r) c.disk.markRevisionExists(r) } func (c *multiCache) setVersionMap(pvs []PairedVersion) { c.mem.setVersionMap(pvs) c.disk.setVersionMap(pvs) } func (c *multiCache) getVersionsFor(rev Revision) ([]UnpairedVersion, bool) { uvs, ok := c.mem.getVersionsFor(rev) if ok { return uvs, true } return c.disk.getVersionsFor(rev) } func (c *multiCache) getAllVersions() ([]PairedVersion, bool) { pvs, ok := c.mem.getAllVersions() if ok { return pvs, true } pvs, ok = c.disk.getAllVersions() if ok { c.mem.setVersionMap(pvs) return pvs, true } return nil, false } func (c *multiCache) getRevisionFor(uv UnpairedVersion) (Revision, bool) { rev, ok := c.mem.getRevisionFor(uv) if ok { return rev, true } return c.disk.getRevisionFor(uv) } func (c *multiCache) toRevision(v Version) (Revision, bool) { rev, ok := c.mem.toRevision(v) if ok { return rev, true } return c.disk.toRevision(v) } func (c *multiCache) toUnpaired(v Version) (UnpairedVersion, bool) { uv, ok := c.mem.toUnpaired(v) if ok { return uv, true } return c.disk.toUnpaired(v) } dep-0.3.2/internal/gps/source_cache_test.go000066400000000000000000000362301317166637100207210ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "io/ioutil" "log" "reflect" "sort" "testing" "time" "github.com/golang/dep/internal/gps/pkgtree" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) func Test_singleSourceCache(t *testing.T) { newMem := func(*testing.T, string, string) (singleSourceCache, func() error) { return newMemoryCache(), func() error { return nil } } t.Run("mem", singleSourceCacheTest{newCache: newMem}.run) epoch := time.Now().Unix() newBolt := func(t *testing.T, cachedir, root string) (singleSourceCache, func() error) { pi := mkPI(root).normalize() bc, err := newBoltCache(cachedir, epoch, log.New(test.Writer{TB: t}, "", 0)) if err != nil { t.Fatal(err) } return bc.newSingleSourceCache(pi), bc.close } t.Run("bolt/keepOpen", singleSourceCacheTest{newCache: newBolt}.run) t.Run("bolt/reOpen", singleSourceCacheTest{newCache: newBolt, persistent: true}.run) newMulti := func(t *testing.T, cachedir, root string) (singleSourceCache, func() error) { disk, close := newBolt(t, cachedir, root) return &multiCache{mem: newMemoryCache(), disk: disk}, close } t.Run("multi/keepOpen", singleSourceCacheTest{newCache: newMulti}.run) t.Run("multi/reOpen", singleSourceCacheTest{persistent: true, newCache: newMulti}.run) t.Run("multi/keepOpen/noDisk", singleSourceCacheTest{ newCache: func(*testing.T, string, string) (singleSourceCache, func() error) { return &multiCache{mem: newMemoryCache(), disk: discardCache{}}, func() error { return nil } }, }.run) t.Run("multi/reOpen/noMem", singleSourceCacheTest{ persistent: true, newCache: func(t *testing.T, cachedir, root string) (singleSourceCache, func() error) { disk, close := newBolt(t, cachedir, root) return &multiCache{mem: discardCache{}, disk: disk}, close }, }.run) } var testAnalyzerInfo = ProjectAnalyzerInfo{ Name: "test-analyzer", Version: 1, } type singleSourceCacheTest struct { newCache func(*testing.T, string, string) (cache singleSourceCache, close func() error) persistent bool } // run tests singleSourceCache methods of caches returned by test.newCache. // For test.persistent caches, test.newCache is periodically called mid-test to ensure persistence. func (test singleSourceCacheTest) run(t *testing.T) { const root = "example.com/test" cpath, err := ioutil.TempDir("", "singlesourcecache") if err != nil { t.Fatalf("Failed to create temp cache dir: %s", err) } t.Run("info", func(t *testing.T) { const rev Revision = "revision" c, close := test.newCache(t, cpath, root) defer func() { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } }() var m Manifest = &simpleRootManifest{ c: ProjectConstraints{ ProjectRoot("foo"): ProjectProperties{ Constraint: Any(), }, ProjectRoot("bar"): ProjectProperties{ Source: "whatever", Constraint: testSemverConstraint(t, "> 1.3"), }, }, ovr: ProjectConstraints{ ProjectRoot("b"): ProjectProperties{ Constraint: testSemverConstraint(t, "2.0.0"), }, }, req: map[string]bool{ "c": true, "d": true, }, ig: pkgtree.NewIgnoredRuleset([]string{"a", "b"}), } var l Lock = &safeLock{ h: []byte("test_hash"), p: []LockedProject{ NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{"gps"}), NewLockedProject(mkPI("github.com/sdboyer/gps2"), NewVersion("v0.10.0"), nil), NewLockedProject(mkPI("github.com/sdboyer/gps3"), NewVersion("v0.10.0"), []string{"gps", "flugle"}), NewLockedProject(mkPI("foo"), NewVersion("nada"), []string{"foo"}), NewLockedProject(mkPI("github.com/sdboyer/gps4"), NewVersion("v0.10.0"), []string{"flugle", "gps"}), }, } c.setManifestAndLock(rev, testAnalyzerInfo, m, l) if test.persistent { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } c, close = test.newCache(t, cpath, root) } gotM, gotL, ok := c.getManifestAndLock(rev, testAnalyzerInfo) if !ok { t.Error("no manifest and lock found for revision") } compareManifests(t, m, gotM) if dl := DiffLocks(l, gotL); dl != nil { t.Errorf("lock differences:\n\t %#v", dl) } m = &simpleRootManifest{ c: ProjectConstraints{ ProjectRoot("foo"): ProjectProperties{ Source: "whatever", Constraint: Any(), }, }, ovr: ProjectConstraints{ ProjectRoot("bar"): ProjectProperties{ Constraint: testSemverConstraint(t, "2.0.0"), }, }, req: map[string]bool{ "a": true, "b": true, }, ig: pkgtree.NewIgnoredRuleset([]string{"c", "d"}), } l = &safeLock{ h: []byte("different_test_hash"), p: []LockedProject{ NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0").Pair("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}), NewLockedProject(mkPI("github.com/sdboyer/gps2"), NewVersion("v0.11.0"), []string{"gps"}), NewLockedProject(mkPI("github.com/sdboyer/gps3"), Revision("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}), }, } c.setManifestAndLock(rev, testAnalyzerInfo, m, l) if test.persistent { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } c, close = test.newCache(t, cpath, root) } gotM, gotL, ok = c.getManifestAndLock(rev, testAnalyzerInfo) if !ok { t.Error("no manifest and lock found for revision") } compareManifests(t, m, gotM) if dl := DiffLocks(l, gotL); dl != nil { t.Errorf("lock differences:\n\t %#v", dl) } }) t.Run("pkgTree", func(t *testing.T) { c, close := test.newCache(t, cpath, root) defer func() { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } }() const rev Revision = "rev_adsfjkl" if got, ok := c.getPackageTree(rev); ok { t.Fatalf("unexpected result before setting package tree: %v", got) } if test.persistent { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } c, close = test.newCache(t, cpath, root) } pt := pkgtree.PackageTree{ ImportRoot: root, Packages: map[string]pkgtree.PackageOrErr{ "simple": { P: pkgtree.Package{ ImportPath: "simple", CommentPath: "comment", Name: "simple", Imports: []string{ "github.com/golang/dep/internal/gps", "sort", }, }, }, "m1p": { P: pkgtree.Package{ ImportPath: "m1p", CommentPath: "", Name: "m1p", Imports: []string{ "github.com/golang/dep/internal/gps", "os", "sort", }, }, }, }, } c.setPackageTree(rev, pt) if test.persistent { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } c, close = test.newCache(t, cpath, root) } got, ok := c.getPackageTree(rev) if !ok { t.Errorf("no package tree found:\n\t(WNT): %#v", pt) } comparePackageTree(t, pt, got) if test.persistent { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } c, close = test.newCache(t, cpath, root) } pt = pkgtree.PackageTree{ ImportRoot: root, Packages: map[string]pkgtree.PackageOrErr{ "test": { Err: errors.New("error"), }, }, } c.setPackageTree(rev, pt) if test.persistent { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } c, close = test.newCache(t, cpath, root) } got, ok = c.getPackageTree(rev) if !ok { t.Errorf("no package tree found:\n\t(WNT): %#v", pt) } comparePackageTree(t, pt, got) }) t.Run("versions", func(t *testing.T) { c, close := test.newCache(t, cpath, root) defer func() { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } }() const rev1, rev2 = "rev1", "rev2" const br, ver = "branch_name", "2.10" versions := []PairedVersion{ NewBranch(br).Pair(rev1), NewVersion(ver).Pair(rev2), } SortPairedForDowngrade(versions) c.setVersionMap(versions) if test.persistent { if err := close(); err != nil { t.Fatal("failed to close cache:", err) } c, close = test.newCache(t, cpath, root) } t.Run("getAllVersions", func(t *testing.T) { got, ok := c.getAllVersions() if !ok || len(got) != len(versions) { t.Errorf("unexpected versions:\n\t(GOT): %#v\n\t(WNT): %#v", got, versions) } else { SortPairedForDowngrade(got) for i := range versions { if !versions[i].identical(got[i]) { t.Errorf("unexpected versions:\n\t(GOT): %#v\n\t(WNT): %#v", got, versions) break } } } }) revToUV := map[Revision]UnpairedVersion{ rev1: NewBranch(br), rev2: NewVersion(ver), } t.Run("getVersionsFor", func(t *testing.T) { for rev, want := range revToUV { rev, want := rev, want t.Run(string(rev), func(t *testing.T) { uvs, ok := c.getVersionsFor(rev) if !ok { t.Errorf("no version found:\n\t(WNT) %#v", want) } else if len(uvs) != 1 { t.Errorf("expected one result but got %d", len(uvs)) } else { uv := uvs[0] if uv.Type() != want.Type() { t.Errorf("expected version type %d but got %d", want.Type(), uv.Type()) } if uv.String() != want.String() { t.Errorf("expected version %q but got %q", want.String(), uv.String()) } } }) } }) t.Run("getRevisionFor", func(t *testing.T) { for want, uv := range revToUV { want, uv := want, uv t.Run(uv.String(), func(t *testing.T) { rev, ok := c.getRevisionFor(uv) if !ok { t.Errorf("expected revision %q but got none", want) } else if rev != want { t.Errorf("expected revision %q but got %q", want, rev) } }) } }) t.Run("toRevision", func(t *testing.T) { for want, uv := range revToUV { want, uv := want, uv t.Run(uv.String(), func(t *testing.T) { rev, ok := c.toRevision(uv) if !ok { t.Errorf("expected revision %q but got none", want) } else if rev != want { t.Errorf("expected revision %q but got %q", want, rev) } }) } }) t.Run("toUnpaired", func(t *testing.T) { for rev, want := range revToUV { rev, want := rev, want t.Run(want.String(), func(t *testing.T) { uv, ok := c.toUnpaired(rev) if !ok { t.Errorf("no UnpairedVersion found:\n\t(WNT): %#v", uv) } else if !uv.identical(want) { t.Errorf("unexpected UnpairedVersion:\n\t(GOT): %#v\n\t(WNT): %#v", uv, want) } }) } }) }) } // compareManifests compares two manifests and reports differences as test errors. func compareManifests(t *testing.T, want, got Manifest) { if (want == nil || got == nil) && (got != nil || want != nil) { t.Errorf("one manifest is nil:\n\t(GOT): %#v\n\t(WNT): %#v", got, want) return } { want, got := want.DependencyConstraints(), got.DependencyConstraints() if !projectConstraintsEqual(want, got) { t.Errorf("unexpected constraints:\n\t(GOT): %#v\n\t(WNT): %#v", got, want) } } wantRM, wantOK := want.(RootManifest) gotRM, gotOK := got.(RootManifest) if wantOK && !gotOK { t.Errorf("expected RootManifest:\n\t(GOT): %#v", got) return } if gotOK && !wantOK { t.Errorf("didn't expected RootManifest:\n\t(GOT): %#v", got) return } { want, got := wantRM.IgnoredPackages(), gotRM.IgnoredPackages() if !reflect.DeepEqual(want.ToSlice(), got.ToSlice()) { t.Errorf("unexpected ignored packages:\n\t(GOT): %#v\n\t(WNT): %#v", got, want) } } { want, got := wantRM.Overrides(), gotRM.Overrides() if !projectConstraintsEqual(want, got) { t.Errorf("unexpected overrides:\n\t(GOT): %#v\n\t(WNT): %#v", got, want) } } { want, got := wantRM.RequiredPackages(), gotRM.RequiredPackages() if !mapStringBoolEqual(want, got) { t.Errorf("unexpected required packages:\n\t(GOT): %#v\n\t(WNT): %#v", got, want) } } } // comparePackageTree compares two pkgtree.PackageTree and reports differences as test errors. func comparePackageTree(t *testing.T, want, got pkgtree.PackageTree) { if got.ImportRoot != want.ImportRoot { t.Errorf("expected package tree root %q but got %q", want.ImportRoot, got.ImportRoot) } { want, got := want.Packages, got.Packages if len(want) != len(got) { t.Errorf("unexpected packages:\n\t(GOT): %#v\n\t(WNT): %#v", got, want) } else { for k, v := range want { if v2, ok := got[k]; !ok { t.Errorf("key %q: expected %v but got none", k, v) } else if !packageOrErrEqual(v, v2) { t.Errorf("key %q: expected %v but got %v", k, v, v2) } } } } } func projectConstraintsEqual(want, got ProjectConstraints) bool { loop, check := want, got if len(got) > len(want) { loop, check = got, want } for pr, pp := range loop { pp2, ok := check[pr] if !ok { return false } if pp.Source != pp2.Source { return false } if pp.Constraint == nil || pp2.Constraint == nil { if pp.Constraint != nil || pp2.Constraint != nil { return false } } else if !pp.Constraint.identical(pp2.Constraint) { return false } } return true } func mapStringBoolEqual(exp, got map[string]bool) bool { loop, check := exp, got if len(got) > len(exp) { loop, check = got, exp } for k, v := range loop { v2, ok := check[k] if !ok || v != v2 { return false } } return true } func safeError(err error) string { if err == nil { return "" } return err.Error() } // packageOrErrEqual return true if the pkgtree.PackageOrErrs are equal. Error equality is // string based. Imports and TestImports are treated as sets, and will be sorted. func packageOrErrEqual(a, b pkgtree.PackageOrErr) bool { if safeError(a.Err) != safeError(b.Err) { return false } if a.P.Name != b.P.Name { return false } if a.P.ImportPath != b.P.ImportPath { return false } if a.P.CommentPath != b.P.CommentPath { return false } if len(a.P.Imports) != len(b.P.Imports) { return false } sort.Strings(a.P.Imports) sort.Strings(b.P.Imports) for i := range a.P.Imports { if a.P.Imports[i] != b.P.Imports[i] { return false } } if len(a.P.TestImports) != len(b.P.TestImports) { return false } sort.Strings(a.P.TestImports) sort.Strings(b.P.TestImports) for i := range a.P.TestImports { if a.P.TestImports[i] != b.P.TestImports[i] { return false } } return true } // discardCache discards set values and returns nothing. type discardCache struct{} func (discardCache) setManifestAndLock(Revision, ProjectAnalyzerInfo, Manifest, Lock) {} func (discardCache) getManifestAndLock(Revision, ProjectAnalyzerInfo) (Manifest, Lock, bool) { return nil, nil, false } func (discardCache) setPackageTree(Revision, pkgtree.PackageTree) {} func (discardCache) getPackageTree(Revision) (pkgtree.PackageTree, bool) { return pkgtree.PackageTree{}, false } func (discardCache) markRevisionExists(r Revision) {} func (discardCache) setVersionMap(versionList []PairedVersion) {} func (discardCache) getVersionsFor(Revision) ([]UnpairedVersion, bool) { return nil, false } func (discardCache) getAllVersions() ([]PairedVersion, bool) { return nil, false } func (discardCache) getRevisionFor(UnpairedVersion) (Revision, bool) { return "", false } func (discardCache) toRevision(v Version) (Revision, bool) { return "", false } func (discardCache) toUnpaired(v Version) (UnpairedVersion, bool) { return nil, false } dep-0.3.2/internal/gps/source_errors.go000066400000000000000000000015331317166637100201310ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "github.com/Masterminds/vcs" "github.com/pkg/errors" ) // unwrapVcsErr recognizes *vcs.LocalError and *vsc.RemoteError, and returns a form // preserving the actual vcs command output and error, in addition to the message. // All other types pass through unchanged. func unwrapVcsErr(err error) error { var cause error var out, msg string switch t := err.(type) { case *vcs.LocalError: cause, out, msg = t.Original(), t.Out(), t.Error() case *vcs.RemoteError: cause, out, msg = t.Original(), t.Out(), t.Error() default: return err } if cause == nil { cause = errors.New(out) } else { cause = errors.Wrap(cause, out) } return errors.Wrap(cause, msg) } dep-0.3.2/internal/gps/source_errors_test.go000066400000000000000000000013531317166637100211700ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "testing" "github.com/Masterminds/vcs" ) func TestUnwrapVcsErrNonNil(t *testing.T) { for _, err := range []error{ vcs.NewRemoteError("msg", nil, "out"), vcs.NewRemoteError("msg", nil, ""), vcs.NewRemoteError("", nil, "out"), vcs.NewRemoteError("", nil, ""), vcs.NewLocalError("msg", nil, "out"), vcs.NewLocalError("msg", nil, ""), vcs.NewLocalError("", nil, "out"), vcs.NewLocalError("", nil, ""), &vcs.RemoteError{}, &vcs.LocalError{}, } { if unwrapVcsErr(err) == nil { t.Errorf("unexpected nil error unwrapping: %#v", err) } } } dep-0.3.2/internal/gps/source_manager.go000066400000000000000000000564451317166637100202430ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "fmt" "io/ioutil" "log" "net/url" "os" "os/signal" "path/filepath" "runtime" "strings" "sync" "sync/atomic" "time" "github.com/golang/dep/internal/gps/pkgtree" "github.com/nightlyone/lockfile" "github.com/pkg/errors" "github.com/sdboyer/constext" ) // Used to compute a friendly filepath from a URL-shaped input. var sanitizer = strings.NewReplacer("-", "--", ":", "-", "/", "-", "+", "-") // A locker is responsible for preventing multiple instances of dep from // interfering with one-another. // // Currently, anything that can either TryLock(), Unlock(), or GetOwner() // satifies that need. type locker interface { TryLock() error Unlock() error GetOwner() (*os.Process, error) } // A falselocker adheres to the locker interface and its purpose is to quietly // fail to lock when the DEPNOLOCK environment variable is set. // // This allows dep to run on systems where file locking doesn't work -- // particularly those that use union mount type filesystems that don't // implement hard links or fnctl() style locking. type falseLocker struct{} // Always returns an error to indicate there's no current ower PID for our // lock. func (fl falseLocker) GetOwner() (*os.Process, error) { return nil, fmt.Errorf("falseLocker always fails") } // Does nothing and returns a nil error so caller beleives locking succeeded. func (fl falseLocker) TryLock() error { return nil } // Does nothing and returns a nil error so caller beleives unlocking succeeded. func (fl falseLocker) Unlock() error { return nil } // A SourceManager is responsible for retrieving, managing, and interrogating // source repositories. Its primary purpose is to serve the needs of a Solver, // but it is handy for other purposes, as well. // // gps's built-in SourceManager, SourceMgr, is intended to be generic and // sufficient for any purpose. It provides some additional semantics around the // methods defined here. type SourceManager interface { // SourceExists checks if a repository exists, either upstream or in the // SourceManager's central repository cache. SourceExists(ProjectIdentifier) (bool, error) // SyncSourceFor will attempt to bring all local information about a source // fully up to date. SyncSourceFor(ProjectIdentifier) error // ListVersions retrieves a list of the available versions for a given // repository name. ListVersions(ProjectIdentifier) ([]PairedVersion, error) // RevisionPresentIn indicates whether the provided Version is present in // the given repository. RevisionPresentIn(ProjectIdentifier, Revision) (bool, error) // ListPackages parses the tree of the Go packages at or below root of the // provided ProjectIdentifier, at the provided version. ListPackages(ProjectIdentifier, Version) (pkgtree.PackageTree, error) // GetManifestAndLock returns manifest and lock information for the provided // root import path. // // gps currently requires that projects be rooted at their repository root, // necessitating that the ProjectIdentifier's ProjectRoot must also be a // repository root. GetManifestAndLock(ProjectIdentifier, Version, ProjectAnalyzer) (Manifest, Lock, error) // ExportProject writes out the tree of the provided import path, at the // provided version, to the provided directory. ExportProject(context.Context, ProjectIdentifier, Version, string) error // DeduceProjectRoot takes an import path and deduces the corresponding // project/source root. DeduceProjectRoot(ip string) (ProjectRoot, error) // SourceURLsForPath takes an import path and deduces the set of source URLs // that may refer to a canonical upstream source. // In general, these URLs differ only by protocol (e.g. https vs. ssh), not path SourceURLsForPath(ip string) ([]*url.URL, error) // Release lets go of any locks held by the SourceManager. Once called, it is // no longer safe to call methods against it; all method calls will // immediately result in errors. Release() // InferConstraint tries to puzzle out what kind of version is given in a string - // semver, a revision, or as a fallback, a plain tag InferConstraint(s string, pi ProjectIdentifier) (Constraint, error) } // A ProjectAnalyzer is responsible for analyzing a given path for Manifest and // Lock information. Tools relying on gps must implement one. type ProjectAnalyzer interface { // Perform analysis of the filesystem tree rooted at path, with the // root import path importRoot, to determine the project's constraints, as // indicated by a Manifest and Lock. // // Note that an error will typically cause the solver to treat the analyzed // version as unusable. As such, an error should generally only be returned // if the code tree is somehow malformed, but not if the implementor's // expected files containing Manifest and Lock data are merely absent. DeriveManifestAndLock(path string, importRoot ProjectRoot) (Manifest, Lock, error) // Info reports this project analyzer's info. Info() ProjectAnalyzerInfo } // ProjectAnalyzerInfo indicates a ProjectAnalyzer's name and version. type ProjectAnalyzerInfo struct { Name string Version int } // String returns a string like: "." func (p ProjectAnalyzerInfo) String() string { return fmt.Sprintf("%s.%d", p.Name, p.Version) } // SourceMgr is the default SourceManager for gps. // // There's no (planned) reason why it would need to be reimplemented by other // tools; control via dependency injection is intended to be sufficient. type SourceMgr struct { cachedir string // path to root of cache dir lf locker // handle for the sm lock file on disk suprvsr *supervisor // subsystem that supervises running calls/io cancelAll context.CancelFunc // cancel func to kill all running work deduceCoord *deductionCoordinator // subsystem that manages import path deduction srcCoord *sourceCoordinator // subsystem that manages sources sigmut sync.Mutex // mutex protecting signal handling setup/teardown qch chan struct{} // quit chan for signal handler relonce sync.Once // once-er to ensure we only release once releasing int32 // flag indicating release of sm has begun } type smIsReleased struct{} func (smIsReleased) Error() string { return "this SourceMgr has been released, its methods can no longer be called" } var _ SourceManager = &SourceMgr{} // SourceManagerConfig holds configuration information for creating SourceMgrs. type SourceManagerConfig struct { Cachedir string // Where to store local instances of upstream sources. Logger *log.Logger // Optional info/warn logger. Discards if nil. DisableLocking bool // True if the SourceManager should NOT use a lock file to protect the Cachedir from multiple processes. } // NewSourceManager produces an instance of gps's built-in SourceManager. // // The returned SourceManager aggressively caches information wherever possible. // If tools need to do preliminary work involving upstream repository analysis // prior to invoking a solve run, it is recommended that they create this // SourceManager as early as possible and use it to their ends. That way, the // solver can benefit from any caches that may have already been warmed. // // gps's SourceManager is intended to be threadsafe (if it's not, please file a // bug!). It should be safe to reuse across concurrent solving runs, even on // unrelated projects. func NewSourceManager(c SourceManagerConfig) (*SourceMgr, error) { if c.Logger == nil { c.Logger = log.New(ioutil.Discard, "", 0) } err := os.MkdirAll(filepath.Join(c.Cachedir, "sources"), 0777) if err != nil { return nil, err } // Fix for #820 // // Consult https://godoc.org/github.com/nightlyone/lockfile for the lockfile // behaviour. It's magic. It deals with stale processes, and if there is // a process keeping the lock busy, it will pass back a temporary error that // we can spin on. glpath := filepath.Join(c.Cachedir, "sm.lock") lockfile, err := func() (locker, error) { if c.DisableLocking { return falseLocker{}, nil } return lockfile.New(glpath) }() if err != nil { return nil, CouldNotCreateLockError{ Path: glpath, Err: errors.Wrapf(err, "unable to create lock %s", glpath), } } process, err := lockfile.GetOwner() if err == nil { // If we didn't get an error, then the lockfile exists already. We should // check to see if it's us already: if process.Pid == os.Getpid() { return nil, CouldNotCreateLockError{ Path: glpath, Err: fmt.Errorf("lockfile %s already locked by this process", glpath), } } // There is a lockfile, but it's owned by someone else. We'll try to lock // it anyway. } // If it's a TemporaryError, we retry every second. Otherwise, we fail // permanently. // // TODO: #534 needs to be implemented to provide a better way to log warnings, // but until then we will just use stderr. // Implicit Time of 0. var lasttime time.Time err = lockfile.TryLock() for err != nil { nowtime := time.Now() duration := nowtime.Sub(lasttime) // The first time this is evaluated, duration will be very large as lasttime is 0. // Unless time travel is invented and someone travels back to the year 1, we should // be ok. if duration > 15*time.Second { fmt.Fprintf(os.Stderr, "waiting for lockfile %s: %s\n", glpath, err.Error()) lasttime = nowtime } if t, ok := err.(interface { Temporary() bool }); ok && t.Temporary() { time.Sleep(time.Second * 1) } else { return nil, CouldNotCreateLockError{ Path: glpath, Err: errors.Wrapf(err, "unable to lock %s", glpath), } } err = lockfile.TryLock() } ctx, cf := context.WithCancel(context.TODO()) superv := newSupervisor(ctx) deducer := newDeductionCoordinator(superv) sm := &SourceMgr{ cachedir: c.Cachedir, lf: lockfile, suprvsr: superv, cancelAll: cf, deduceCoord: deducer, srcCoord: newSourceCoordinator(superv, deducer, c.Cachedir, c.Logger), qch: make(chan struct{}), } return sm, nil } // UseDefaultSignalHandling sets up typical os.Interrupt signal handling for a // SourceMgr. func (sm *SourceMgr) UseDefaultSignalHandling() { sigch := make(chan os.Signal, 1) signal.Notify(sigch, os.Interrupt) sm.HandleSignals(sigch) } // HandleSignals sets up logic to handle incoming signals with the goal of // shutting down the SourceMgr safely. // // Calling code must provide the signal channel, and is responsible for calling // signal.Notify() on that channel. // // Successive calls to HandleSignals() will deregister the previous handler and // set up a new one. It is not recommended that the same channel be passed // multiple times to this method. // // SetUpSigHandling() will set up a handler that is appropriate for most // use cases. func (sm *SourceMgr) HandleSignals(sigch chan os.Signal) { sm.sigmut.Lock() // always start by closing the qch, which will lead to any existing signal // handler terminating, and deregistering its sigch. if sm.qch != nil { close(sm.qch) } sm.qch = make(chan struct{}) // Run a new goroutine with the input sigch and the fresh qch go func(sch chan os.Signal, qch <-chan struct{}) { defer signal.Stop(sch) select { case <-sch: // Set up a timer to uninstall the signal handler after three // seconds, so that the user can easily force termination with a // second ctrl-c time.AfterFunc(3*time.Second, func() { signal.Stop(sch) }) if opc := sm.suprvsr.count(); opc > 0 { fmt.Printf("Signal received: waiting for %v ops to complete...\n", opc) } sm.Release() case <-qch: // quit channel triggered - deregister our sigch and return } }(sigch, sm.qch) // Try to ensure handler is blocked in for-select before releasing the mutex runtime.Gosched() sm.sigmut.Unlock() } // StopSignalHandling deregisters any signal handler running on this SourceMgr. // // It's normally not necessary to call this directly; it will be called as // needed by Release(). func (sm *SourceMgr) StopSignalHandling() { sm.sigmut.Lock() if sm.qch != nil { close(sm.qch) sm.qch = nil runtime.Gosched() } sm.sigmut.Unlock() } // CouldNotCreateLockError describe failure modes in which creating a SourceMgr // did not succeed because there was an error while attempting to create the // on-disk lock file. type CouldNotCreateLockError struct { Path string Err error } func (e CouldNotCreateLockError) Error() string { return e.Err.Error() } // Release lets go of any locks held by the SourceManager. Once called, it is no // longer safe to call methods against it; all method calls will immediately // result in errors. func (sm *SourceMgr) Release() { atomic.StoreInt32(&sm.releasing, 1) sm.relonce.Do(func() { // Send the signal to the supervisor to cancel all running calls. sm.cancelAll() sm.suprvsr.wait() // Close the source coordinator. sm.srcCoord.close() // Close the file handle for the lock file and remove it from disk sm.lf.Unlock() os.Remove(filepath.Join(sm.cachedir, "sm.lock")) // Close the qch, if non-nil, so the signal handlers run out. This will // also deregister the sig channel, if any has been set up. if sm.qch != nil { close(sm.qch) } }) } // GetManifestAndLock returns manifest and lock information for the provided // ProjectIdentifier, at the provided Version. The work of producing the // manifest and lock is delegated to the provided ProjectAnalyzer's // DeriveManifestAndLock() method. func (sm *SourceMgr) GetManifestAndLock(id ProjectIdentifier, v Version, an ProjectAnalyzer) (Manifest, Lock, error) { if atomic.LoadInt32(&sm.releasing) == 1 { return nil, nil, smIsReleased{} } srcg, err := sm.srcCoord.getSourceGatewayFor(context.TODO(), id) if err != nil { return nil, nil, err } return srcg.getManifestAndLock(context.TODO(), id.ProjectRoot, v, an) } // ListPackages parses the tree of the Go packages at and below the ProjectRoot // of the given ProjectIdentifier, at the given version. func (sm *SourceMgr) ListPackages(id ProjectIdentifier, v Version) (pkgtree.PackageTree, error) { if atomic.LoadInt32(&sm.releasing) == 1 { return pkgtree.PackageTree{}, smIsReleased{} } srcg, err := sm.srcCoord.getSourceGatewayFor(context.TODO(), id) if err != nil { return pkgtree.PackageTree{}, err } return srcg.listPackages(context.TODO(), id.ProjectRoot, v) } // ListVersions retrieves a list of the available versions for a given // repository name. // // The list is not sorted; while it may be returned in the order that the // underlying VCS reports version information, no guarantee is made. It is // expected that the caller either not care about order, or sort the result // themselves. // // This list is always retrieved from upstream on the first call. Subsequent // calls will return a cached version of the first call's results. if upstream // is not accessible (network outage, access issues, or the resource actually // went away), an error will be returned. func (sm *SourceMgr) ListVersions(id ProjectIdentifier) ([]PairedVersion, error) { if atomic.LoadInt32(&sm.releasing) == 1 { return nil, smIsReleased{} } srcg, err := sm.srcCoord.getSourceGatewayFor(context.TODO(), id) if err != nil { // TODO(sdboyer) More-er proper-er errors return nil, err } return srcg.listVersions(context.TODO()) } // RevisionPresentIn indicates whether the provided Revision is present in the given // repository. func (sm *SourceMgr) RevisionPresentIn(id ProjectIdentifier, r Revision) (bool, error) { if atomic.LoadInt32(&sm.releasing) == 1 { return false, smIsReleased{} } srcg, err := sm.srcCoord.getSourceGatewayFor(context.TODO(), id) if err != nil { // TODO(sdboyer) More-er proper-er errors return false, err } return srcg.revisionPresentIn(context.TODO(), r) } // SourceExists checks if a repository exists, either upstream or in the cache, // for the provided ProjectIdentifier. func (sm *SourceMgr) SourceExists(id ProjectIdentifier) (bool, error) { if atomic.LoadInt32(&sm.releasing) == 1 { return false, smIsReleased{} } srcg, err := sm.srcCoord.getSourceGatewayFor(context.TODO(), id) if err != nil { return false, err } ctx := context.TODO() return srcg.existsInCache(ctx) || srcg.existsUpstream(ctx), nil } // SyncSourceFor will ensure that all local caches and information about a // source are up to date with any network-acccesible information. // // The primary use case for this is prefetching. func (sm *SourceMgr) SyncSourceFor(id ProjectIdentifier) error { if atomic.LoadInt32(&sm.releasing) == 1 { return smIsReleased{} } srcg, err := sm.srcCoord.getSourceGatewayFor(context.TODO(), id) if err != nil { return err } return srcg.syncLocal(context.TODO()) } // ExportProject writes out the tree of the provided ProjectIdentifier's // ProjectRoot, at the provided version, to the provided directory. func (sm *SourceMgr) ExportProject(ctx context.Context, id ProjectIdentifier, v Version, to string) error { if atomic.LoadInt32(&sm.releasing) == 1 { return smIsReleased{} } srcg, err := sm.srcCoord.getSourceGatewayFor(ctx, id) if err != nil { return err } return srcg.exportVersionTo(ctx, v, to) } // DeduceProjectRoot takes an import path and deduces the corresponding // project/source root. // // Note that some import paths may require network activity to correctly // determine the root of the path, such as, but not limited to, vanity import // paths. (A special exception is written for gopkg.in to minimize network // activity, as its behavior is well-structured) func (sm *SourceMgr) DeduceProjectRoot(ip string) (ProjectRoot, error) { if atomic.LoadInt32(&sm.releasing) == 1 { return "", smIsReleased{} } pd, err := sm.deduceCoord.deduceRootPath(context.TODO(), ip) return ProjectRoot(pd.root), err } // InferConstraint tries to puzzle out what kind of version is given in a // string. Preference is given first for branches, then semver constraints, then // plain tags, and then revisions. func (sm *SourceMgr) InferConstraint(s string, pi ProjectIdentifier) (Constraint, error) { if s == "" { return Any(), nil } // Lookup the string in the repository var version PairedVersion versions, err := sm.ListVersions(pi) if err != nil { return nil, errors.Wrapf(err, "list versions for %s", pi) // means repo does not exist } SortPairedForUpgrade(versions) for _, v := range versions { if s == v.String() { version = v break } } // Branch if version != nil && version.Type() == IsBranch { return version.Unpair(), nil } // Semver Constraint c, err := NewSemverConstraintIC(s) if c != nil && err == nil { return c, nil } // Tag if version != nil { return version.Unpair(), nil } // Revision, possibly abbreviated r, err := sm.disambiguateRevision(context.TODO(), pi, Revision(s)) if err == nil { return r, nil } return nil, errors.Errorf("%s is not a valid version for the package %s(%s)", s, pi.ProjectRoot, pi.Source) } // SourceURLsForPath takes an import path and deduces the set of source URLs // that may refer to a canonical upstream source. // In general, these URLs differ only by protocol (e.g. https vs. ssh), not path func (sm *SourceMgr) SourceURLsForPath(ip string) ([]*url.URL, error) { deduced, err := sm.deduceCoord.deduceRootPath(context.TODO(), ip) if err != nil { return nil, err } return deduced.mb.possibleURLs(), nil } // disambiguateRevision looks up a revision in the underlying source, spitting // it back out in an unabbreviated, disambiguated form. // // For example, if pi refers to a git-based project, then rev could be an // abbreviated git commit hash. disambiguateRevision would return the complete // hash. func (sm *SourceMgr) disambiguateRevision(ctx context.Context, pi ProjectIdentifier, rev Revision) (Revision, error) { srcg, err := sm.srcCoord.getSourceGatewayFor(context.TODO(), pi) if err != nil { return "", err } return srcg.disambiguateRevision(ctx, rev) } type timeCount struct { count int start time.Time } type durCount struct { count int dur time.Duration } type supervisor struct { ctx context.Context mu sync.Mutex // Guards all maps cond sync.Cond // Wraps mu so callers can wait until all calls end running map[callInfo]timeCount ran map[callType]durCount } func newSupervisor(ctx context.Context) *supervisor { supv := &supervisor{ ctx: ctx, running: make(map[callInfo]timeCount), ran: make(map[callType]durCount), } supv.cond = sync.Cond{L: &supv.mu} return supv } // do executes the incoming closure using a conjoined context, and keeps // counters to ensure the sourceMgr can't finish Release()ing until after all // calls have returned. func (sup *supervisor) do(inctx context.Context, name string, typ callType, f func(context.Context) error) error { ci := callInfo{ name: name, typ: typ, } octx, err := sup.start(ci) if err != nil { return err } cctx, cancelFunc := constext.Cons(inctx, octx) err = f(cctx) sup.done(ci) cancelFunc() return err } func (sup *supervisor) start(ci callInfo) (context.Context, error) { sup.mu.Lock() defer sup.mu.Unlock() if err := sup.ctx.Err(); err != nil { // We've already been canceled; error out. return nil, err } if existingInfo, has := sup.running[ci]; has { existingInfo.count++ sup.running[ci] = existingInfo } else { sup.running[ci] = timeCount{ count: 1, start: time.Now(), } } return sup.ctx, nil } func (sup *supervisor) count() int { sup.mu.Lock() defer sup.mu.Unlock() return len(sup.running) } func (sup *supervisor) done(ci callInfo) { sup.mu.Lock() existingInfo, has := sup.running[ci] if !has { panic(fmt.Sprintf("sourceMgr: tried to complete a call that had not registered via run()")) } if existingInfo.count > 1 { // If more than one is pending, don't stop the clock yet. existingInfo.count-- sup.running[ci] = existingInfo } else { // Last one for this particular key; update metrics with info. durCnt := sup.ran[ci.typ] durCnt.count++ durCnt.dur += time.Since(existingInfo.start) sup.ran[ci.typ] = durCnt delete(sup.running, ci) if len(sup.running) == 0 { // This is the only place where we signal the cond, as it's the only // time that the number of running calls could become zero. sup.cond.Signal() } } sup.mu.Unlock() } // wait until all active calls have terminated. // // Assumes something else has already canceled the supervisor via its context. func (sup *supervisor) wait() { sup.cond.L.Lock() for len(sup.running) > 0 { sup.cond.Wait() } sup.cond.L.Unlock() } type callType uint const ( ctHTTPMetadata callType = iota ctListVersions ctGetManifestAndLock ctListPackages ctSourcePing ctSourceInit ctSourceFetch ctExportTree ) func (ct callType) String() string { switch ct { case ctHTTPMetadata: return "Retrieving go get metadata" case ctListVersions: return "Retrieving latest version list" case ctGetManifestAndLock: return "Reading manifest and lock data" case ctListPackages: return "Parsing PackageTree" case ctSourcePing: return "Checking for upstream existence" case ctSourceInit: return "Initializing local source cache" case ctSourceFetch: return "Fetching latest data into local source cache" case ctExportTree: return "Writing code tree out to disk" default: panic("unknown calltype") } } // callInfo provides metadata about an ongoing call. type callInfo struct { name string typ callType } dep-0.3.2/internal/gps/source_manager_test.go000066400000000000000000000060631317166637100212710ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "log" "reflect" "testing" "github.com/golang/dep/internal/test" ) func TestSourceManager_InferConstraint(t *testing.T) { if testing.Short() { t.Skip("Skipping slow test in short mode") } t.Parallel() // Used in git subtests: v081, err := NewSemverConstraintIC("v0.8.1") if err != nil { t.Fatal(err) } v012, err := NewSemverConstraintIC("v0.12.0-12-de4dcafe0") if err != nil { t.Fatal(err) } // Used in hg and bzr subtests: v1, err := NewSemverConstraintIC("v1.0.0") if err != nil { t.Fatal(err) } var ( gitProj = ProjectIdentifier{ProjectRoot: "github.com/carolynvs/deptest"} bzrProj = ProjectIdentifier{ProjectRoot: "launchpad.net/govcstestbzrrepo"} hgProj = ProjectIdentifier{ProjectRoot: "bitbucket.org/golang-dep/dep-test"} testcases = []struct { project ProjectIdentifier name string str string want Constraint }{ {gitProj, "empty", "", Any()}, {gitProj, "semver-short", "v0.8.1", v081}, {gitProj, "long semver constraint", "v0.12.0-12-de4dcafe0", v012}, {gitProj, "branch v2", "v2", NewBranch("v2")}, {gitProj, "branch master", "master", NewBranch("master")}, {gitProj, "long revision", "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", Revision("3f4c3bea144e112a69bbe5d8d01c1b09a544253f")}, {gitProj, "short revision", "3f4c3bea", Revision("3f4c3bea144e112a69bbe5d8d01c1b09a544253f")}, {bzrProj, "empty", "", Any()}, {bzrProj, "semver", "v1.0.0", v1}, {bzrProj, "revision", "matt@mattfarina.com-20150731135137-pbphasfppmygpl68", Revision("matt@mattfarina.com-20150731135137-pbphasfppmygpl68")}, {hgProj, "empty", "", Any()}, {hgProj, "semver", "v1.0.0", v1}, {hgProj, "default branch", "default", NewBranch("default")}, {hgProj, "revision", "6f55e1f03d91f8a7cce35d1968eb60a2352e4d59", Revision("6f55e1f03d91f8a7cce35d1968eb60a2352e4d59")}, {hgProj, "short revision", "6f55e1f03d91", Revision("6f55e1f03d91f8a7cce35d1968eb60a2352e4d59")}, } ) for _, tc := range testcases { var subtestName string switch tc.project { case gitProj: subtestName = "git-" + tc.name case bzrProj: subtestName = "bzr-" + tc.name case hgProj: subtestName = "hg-" + tc.name default: subtestName = tc.name } t.Run(subtestName, func(t *testing.T) { t.Parallel() h := test.NewHelper(t) defer h.Cleanup() cacheDir := "gps-repocache" h.TempDir(cacheDir) sm, err := NewSourceManager(SourceManagerConfig{ Cachedir: h.Path(cacheDir), Logger: log.New(test.Writer{TB: t}, "", 0), }) h.Must(err) got, err := sm.InferConstraint(tc.str, tc.project) h.Must(err) wantT := reflect.TypeOf(tc.want) gotT := reflect.TypeOf(got) if wantT != gotT { t.Errorf("expected type: %s, got %s, for input %s", wantT, gotT, tc.str) } if got.String() != tc.want.String() { t.Errorf("expected value: %s, got %s for input %s", tc.want, got, tc.str) } }) } } dep-0.3.2/internal/gps/source_test.go000066400000000000000000000134151317166637100175760ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "fmt" "io/ioutil" "log" "os" "reflect" "testing" "github.com/golang/dep/internal/gps/pkgtree" "github.com/golang/dep/internal/test" ) // Executed in parallel by TestSlowVcs func testSourceGateway(t *testing.T) { t.Parallel() if testing.Short() { t.Skip("Skipping gateway testing in short mode") } requiresBins(t, "git") cachedir, err := ioutil.TempDir("", "smcache") if err != nil { t.Fatalf("failed to create temp dir: %s", err) } bgc := context.Background() ctx, cancelFunc := context.WithCancel(bgc) defer func() { os.RemoveAll(cachedir) cancelFunc() }() do := func(wantstate sourceState) func(t *testing.T) { return func(t *testing.T) { superv := newSupervisor(ctx) sc := newSourceCoordinator(superv, newDeductionCoordinator(superv), cachedir, log.New(test.Writer{TB: t}, "", 0)) id := mkPI("github.com/sdboyer/deptest") sg, err := sc.getSourceGatewayFor(ctx, id) if err != nil { t.Fatal(err) } if _, ok := sg.src.(*gitSource); !ok { t.Fatalf("Expected a gitSource, got a %T", sg.src) } if sg.srcState != wantstate { t.Fatalf("expected state on initial create to be %v, got %v", wantstate, sg.srcState) } if err := sg.syncLocal(ctx); err != nil { t.Fatalf("error on cloning git repo: %s", err) } cvlist, ok := sg.cache.getAllVersions() if !ok || len(cvlist) != 4 { t.Fatalf("repo setup should've cached four versions, got %v: %s", len(cvlist), cvlist) } wanturl := "https://" + id.normalizedSource() goturl, err := sg.sourceURL(ctx) if err != nil { t.Fatalf("got err from sourceURL: %s", err) } if wanturl != goturl { t.Fatalf("Expected %s as source URL, got %s", wanturl, goturl) } vlist, err := sg.listVersions(ctx) if err != nil { t.Fatalf("Unexpected error getting version pairs from git repo: %s", err) } if len(vlist) != 4 { t.Fatalf("git test repo should've produced four versions, got %v: vlist was %s", len(vlist), vlist) } else { SortPairedForUpgrade(vlist) evl := []PairedVersion{ NewVersion("v1.0.0").Pair(Revision("ff2948a2ac8f538c4ecd55962e919d1e13e74baf")), NewVersion("v0.8.1").Pair(Revision("3f4c3bea144e112a69bbe5d8d01c1b09a544253f")), NewVersion("v0.8.0").Pair(Revision("ff2948a2ac8f538c4ecd55962e919d1e13e74baf")), newDefaultBranch("master").Pair(Revision("3f4c3bea144e112a69bbe5d8d01c1b09a544253f")), } if !reflect.DeepEqual(vlist, evl) { t.Fatalf("Version list was not what we expected:\n\t(GOT): %s\n\t(WNT): %s", vlist, evl) } } rev := Revision("c575196502940c07bf89fd6d95e83b999162e051") // check that an expected rev is not in cache _, has := sg.cache.getVersionsFor(rev) if has { t.Fatal("shouldn't have bare revs in cache without specifically requesting them") } is, err := sg.revisionPresentIn(ctx, Revision("c575196502940c07bf89fd6d95e83b999162e051")) if err != nil { t.Fatalf("unexpected error while checking revision presence: %s", err) } else if !is { t.Fatalf("revision that should exist was not present") } // check that an expected rev is not in cache _, has = sg.cache.getVersionsFor(rev) if !has { t.Fatal("bare rev should be in cache after specific request for it") } // Ensure that a bad rev doesn't work on any method that takes // versions badver := NewVersion("notexist") wanterr := fmt.Errorf("version %q does not exist in source", badver) _, _, err = sg.getManifestAndLock(ctx, ProjectRoot("github.com/sdboyer/deptest"), badver, naiveAnalyzer{}) if err == nil { t.Fatal("wanted err on nonexistent version") } else if err.Error() != wanterr.Error() { t.Fatalf("wanted nonexistent err when passing bad version, got: %s", err) } _, err = sg.listPackages(ctx, ProjectRoot("github.com/sdboyer/deptest"), badver) if err == nil { t.Fatal("wanted err on nonexistent version") } else if err.Error() != wanterr.Error() { t.Fatalf("wanted nonexistent err when passing bad version, got: %s", err) } err = sg.exportVersionTo(ctx, badver, cachedir) if err == nil { t.Fatal("wanted err on nonexistent version") } else if err.Error() != wanterr.Error() { t.Fatalf("wanted nonexistent err when passing bad version, got: %s", err) } wantptree := pkgtree.PackageTree{ ImportRoot: "github.com/sdboyer/deptest", Packages: map[string]pkgtree.PackageOrErr{ "github.com/sdboyer/deptest": { P: pkgtree.Package{ ImportPath: "github.com/sdboyer/deptest", Name: "deptest", Imports: []string{}, }, }, }, } ptree, err := sg.listPackages(ctx, ProjectRoot("github.com/sdboyer/deptest"), Revision("ff2948a2ac8f538c4ecd55962e919d1e13e74baf")) if err != nil { t.Fatalf("unexpected err when getting package tree with known rev: %s", err) } if !reflect.DeepEqual(wantptree, ptree) { t.Fatalf("got incorrect PackageTree:\n\t(GOT): %#v\n\t(WNT): %#v", ptree, wantptree) } ptree, err = sg.listPackages(ctx, ProjectRoot("github.com/sdboyer/deptest"), NewVersion("v1.0.0")) if err != nil { t.Fatalf("unexpected err when getting package tree with unpaired good version: %s", err) } if !reflect.DeepEqual(wantptree, ptree) { t.Fatalf("got incorrect PackageTree:\n\t(GOT): %#v\n\t(WNT): %#v", ptree, wantptree) } } } // Run test twice so that we cover both the existing and non-existing case; // only difference in results is the initial setup state. t.Run("empty", do(sourceIsSetUp|sourceExistsUpstream|sourceHasLatestVersionList)) t.Run("exists", do(sourceIsSetUp|sourceExistsLocally|sourceExistsUpstream|sourceHasLatestVersionList)) } dep-0.3.2/internal/gps/strings.go000066400000000000000000000024521317166637100167270ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "unicode" "unicode/utf8" ) // toFold returns a string with the property that strings.EqualFold(s, t) iff // ToFold(s) == ToFold(t) This lets us test a large set of strings for // fold-equivalent duplicates without making a quadratic number of calls to // EqualFold. Note that strings.ToUpper and strings.ToLower do not have the // desired property in some corner cases. // // This is hoisted from toolchain internals: src/cmd/go/internal/str/str.go func toFold(s string) string { // Fast path: all ASCII, no upper case. // Most paths look like this already. for i := 0; i < len(s); i++ { c := s[i] if c >= utf8.RuneSelf || 'A' <= c && c <= 'Z' { goto Slow } } return s Slow: var buf bytes.Buffer for _, r := range s { // SimpleFold(x) cycles to the next equivalent rune > x // or wraps around to smaller values. Iterate until it wraps, // and we've found the minimum value. for { r0 := r r = unicode.SimpleFold(r0) if r <= r0 { break } } // Exception to allow fast path above: A-Z => a-z if 'A' <= r && r <= 'Z' { r += 'a' - 'A' } buf.WriteRune(r) } return buf.String() } dep-0.3.2/internal/gps/strip_vendor.go000066400000000000000000000013531317166637100177530ustar00rootroot00000000000000// Copyright 2017 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 !windows package gps import ( "os" "path/filepath" ) func stripVendor(path string, info os.FileInfo, err error) error { if err != nil { return err } // Skip anything not named vendor if info.Name() != "vendor" { return nil } // If the file is a symlink to a directory, delete the symlink. if (info.Mode() & os.ModeSymlink) != 0 { if realInfo, err := os.Stat(path); err == nil && realInfo.IsDir() { return os.Remove(path) } } if info.IsDir() { if err := os.RemoveAll(path); err != nil { return err } return filepath.SkipDir } return nil } dep-0.3.2/internal/gps/strip_vendor_nonwindows_test.go000066400000000000000000000055471317166637100233100ustar00rootroot00000000000000// Copyright 2017 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 !windows package gps import "testing" func TestStripVendorSymlinks(t *testing.T) { t.Run("vendor symlink", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "_vendor"}, }, links: []fsLink{ { path: fsPath{"package", "vendor"}, to: "_vendor", }, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "_vendor"}, }, }, })) t.Run("nonvendor symlink", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "_vendor"}, }, links: []fsLink{ { path: fsPath{"package", "link"}, to: "_vendor", }, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "_vendor"}, }, links: []fsLink{ { path: fsPath{"package", "link"}, to: "_vendor", }, }, }, })) t.Run("vendor symlink to file", stripVendorTestCase(fsTestCase{ before: filesystemState{ files: []fsPath{ {"file"}, }, links: []fsLink{ { path: fsPath{"vendor"}, to: "file", }, }, }, after: filesystemState{ files: []fsPath{ {"file"}, }, links: []fsLink{ { path: fsPath{"vendor"}, to: "file", }, }, }, })) t.Run("broken vendor symlink", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, }, links: []fsLink{ { path: fsPath{"package", "vendor"}, to: "nonexistence", }, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, }, links: []fsLink{ { path: fsPath{"package", "vendor"}, to: "nonexistence", }, }, }, })) t.Run("chained symlinks", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"_vendor"}, }, links: []fsLink{ { path: fsPath{"vendor"}, to: "vendor2", }, { path: fsPath{"vendor2"}, to: "_vendor", }, }, }, after: filesystemState{ dirs: []fsPath{ {"_vendor"}, }, links: []fsLink{ { path: fsPath{"vendor2"}, to: "_vendor", }, }, }, })) t.Run("circular symlinks", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, }, links: []fsLink{ { path: fsPath{"package", "link1"}, to: "link2", }, { path: fsPath{"package", "link2"}, to: "link1", }, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, }, links: []fsLink{ { path: fsPath{"package", "link1"}, to: "link2", }, { path: fsPath{"package", "link2"}, to: "link1", }, }, }, })) } dep-0.3.2/internal/gps/strip_vendor_test.go000066400000000000000000000025451317166637100210160ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "io/ioutil" "os" "path/filepath" "testing" ) func stripVendorTestCase(tc fsTestCase) func(*testing.T) { return func(t *testing.T) { tempDir, err := ioutil.TempDir("", "TestStripVendor") if err != nil { t.Fatalf("ioutil.TempDir err=%q", err) } defer func() { if err := os.RemoveAll(tempDir); err != nil { t.Errorf("os.RemoveAll(%q) err=%q", tempDir, err) } }() tc.before.root = tempDir tc.after.root = tempDir tc.before.setup(t) if err := filepath.Walk(tempDir, stripVendor); err != nil { t.Errorf("filepath.Walk err=%q", err) } tc.after.assert(t) } } func TestStripVendorDirectory(t *testing.T) { t.Run("vendor directory", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "vendor"}, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, }, }, })) t.Run("vendor file", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, }, files: []fsPath{ {"package", "vendor"}, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, }, files: []fsPath{ {"package", "vendor"}, }, }, })) } dep-0.3.2/internal/gps/strip_vendor_windows.go000066400000000000000000000022161317166637100215240ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "os" "path/filepath" ) func stripVendor(path string, info os.FileInfo, err error) error { if err != nil { return err } if info.Name() != "vendor" { return nil } if _, err := os.Lstat(path); err != nil { return nil } symlink := (info.Mode() & os.ModeSymlink) != 0 dir := info.IsDir() switch { case symlink && dir: // This could be a windows junction directory. Support for these in the // standard library is spotty, and we could easily delete an important // folder if we called os.Remove or os.RemoveAll. Just skip these. // // TODO: If we could distinguish between junctions and Windows symlinks, // we might be able to safely delete symlinks, even though junctions are // dangerous. return filepath.SkipDir case symlink: if realInfo, err := os.Stat(path); err == nil && realInfo.IsDir() { return os.Remove(path) } case dir: if err := os.RemoveAll(path); err != nil { return err } return filepath.SkipDir } return nil } dep-0.3.2/internal/gps/strip_vendor_windows_test.go000066400000000000000000000064611317166637100225710ustar00rootroot00000000000000// Copyright 2017 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 windows package gps import "testing" func TestStripVendorSymlinks(t *testing.T) { // On windows, we skip symlinks, even if they're named 'vendor', because // they're too hard to distinguish from junctions. t.Run("vendor symlink", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "_vendor"}, }, links: []fsLink{ { path: fsPath{"package", "vendor"}, to: "_vendor", }, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "_vendor"}, }, links: []fsLink{ { path: fsPath{"package", "vendor"}, to: "_vendor", }, }, }, })) t.Run("nonvendor symlink", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "_vendor"}, }, links: []fsLink{ { path: fsPath{"package", "link"}, to: "_vendor", }, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, {"package", "_vendor"}, }, links: []fsLink{ { path: fsPath{"package", "link"}, to: "_vendor", }, }, }, })) t.Run("vendor symlink to file", stripVendorTestCase(fsTestCase{ before: filesystemState{ files: []fsPath{ {"file"}, }, links: []fsLink{ { path: fsPath{"vendor"}, to: "file", }, }, }, after: filesystemState{ files: []fsPath{ {"file"}, }, links: []fsLink{ { path: fsPath{"vendor"}, to: "file", }, }, }, })) t.Run("broken vendor symlink", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, }, links: []fsLink{ { path: fsPath{"package", "vendor"}, to: "nonexistence", }, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, }, links: []fsLink{ { path: fsPath{"package", "vendor"}, to: "nonexistence", }, }, }, })) t.Run("chained symlinks", stripVendorTestCase(fsTestCase{ // Curiously, if a symlink on windows points to *another* symlink which // eventually points at a directory, we'll correctly remove that first // symlink, because the first symlink doesn't appear to Go to be a // directory. before: filesystemState{ dirs: []fsPath{ {"_vendor"}, }, links: []fsLink{ { path: fsPath{"vendor"}, to: "vendor2", }, { path: fsPath{"vendor2"}, to: "_vendor", }, }, }, after: filesystemState{ dirs: []fsPath{ {"_vendor"}, }, links: []fsLink{ { path: fsPath{"vendor2"}, to: "_vendor", }, }, }, })) t.Run("circular symlinks", stripVendorTestCase(fsTestCase{ before: filesystemState{ dirs: []fsPath{ {"package"}, }, links: []fsLink{ { path: fsPath{"package", "link1"}, to: "link2", }, { path: fsPath{"package", "link2"}, to: "link1", }, }, }, after: filesystemState{ dirs: []fsPath{ {"package"}, }, links: []fsLink{ { path: fsPath{"package", "link1"}, to: "link2", }, { path: fsPath{"package", "link2"}, to: "link1", }, }, }, })) } dep-0.3.2/internal/gps/trace.go000066400000000000000000000125541317166637100163400ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "strconv" "strings" "github.com/golang/dep/internal/gps/pkgtree" ) const ( successChar = "✓" successCharSp = successChar + " " failChar = "✗" failCharSp = failChar + " " backChar = "←" innerIndent = " " ) func (s *solver) traceCheckPkgs(bmi bimodalIdentifier) { if s.tl == nil { return } prefix := getprei(len(s.vqs) + 1) s.tl.Printf("%s\n", tracePrefix(fmt.Sprintf("? revisit %s to add %v pkgs", bmi.id, len(bmi.pl)), prefix, prefix)) } func (s *solver) traceCheckQueue(q *versionQueue, bmi bimodalIdentifier, cont bool, offset int) { if s.tl == nil { return } prefix := getprei(len(s.vqs) + offset) vlen := strconv.Itoa(len(q.pi)) if !q.allLoaded { vlen = "at least " + vlen } // TODO(sdboyer) how...to list the packages in the limited space we have? var verb string indent := "" if cont { // Continue is an "inner" message.. indenting verb = "continue" vlen = vlen + " more" indent = innerIndent } else { verb = "attempt" } s.tl.Printf("%s\n", tracePrefix(fmt.Sprintf("%s? %s %s with %v pkgs; %s versions to try", indent, verb, bmi.id, len(bmi.pl), vlen), prefix, prefix)) } // traceStartBacktrack is called with the bmi that first failed, thus initiating // backtracking func (s *solver) traceStartBacktrack(bmi bimodalIdentifier, err error, pkgonly bool) { if s.tl == nil { return } var msg string if pkgonly { msg = fmt.Sprintf("%s%s could not add %v pkgs to %s; begin backtrack", innerIndent, backChar, len(bmi.pl), bmi.id) } else { msg = fmt.Sprintf("%s%s no more versions of %s to try; begin backtrack", innerIndent, backChar, bmi.id) } prefix := getprei(len(s.sel.projects)) s.tl.Printf("%s\n", tracePrefix(msg, prefix, prefix)) } // traceBacktrack is called when a package or project is poppped off during // backtracking func (s *solver) traceBacktrack(bmi bimodalIdentifier, pkgonly bool) { if s.tl == nil { return } var msg string if pkgonly { msg = fmt.Sprintf("%s backtrack: popped %v pkgs from %s", backChar, len(bmi.pl), bmi.id) } else { msg = fmt.Sprintf("%s backtrack: no more versions of %s to try", backChar, bmi.id) } prefix := getprei(len(s.sel.projects)) s.tl.Printf("%s\n", tracePrefix(msg, prefix, prefix)) } // Called just once after solving has finished, whether success or not func (s *solver) traceFinish(sol solution, err error) { if s.tl == nil { return } if err == nil { var pkgcount int for _, lp := range sol.Projects() { pkgcount += len(lp.pkgs) } s.tl.Printf("%s%s found solution with %v packages from %v projects", innerIndent, successChar, pkgcount, len(sol.Projects())) } else { s.tl.Printf("%s%s solving failed", innerIndent, failChar) } } // traceSelectRoot is called just once, when the root project is selected func (s *solver) traceSelectRoot(ptree pkgtree.PackageTree, cdeps []completeDep) { if s.tl == nil { return } // This duplicates work a bit, but we're in trace mode and it's only once, // so who cares rm, _ := ptree.ToReachMap(true, true, false, s.rd.ir) s.tl.Printf("Root project is %q", s.rd.rpt.ImportRoot) var expkgs int for _, cdep := range cdeps { expkgs += len(cdep.pl) } // TODO(sdboyer) include info on ignored pkgs/imports, etc. s.tl.Printf(" %v transitively valid internal packages", len(rm)) s.tl.Printf(" %v external packages imported from %v projects", expkgs, len(cdeps)) s.tl.Printf("(0) " + successCharSp + "select (root)") } // traceSelect is called when an atom is successfully selected func (s *solver) traceSelect(awp atomWithPackages, pkgonly bool) { if s.tl == nil { return } var msg string if pkgonly { msg = fmt.Sprintf("%s%s include %v more pkgs from %s", innerIndent, successChar, len(awp.pl), a2vs(awp.a)) } else { msg = fmt.Sprintf("%s select %s w/%v pkgs", successChar, a2vs(awp.a), len(awp.pl)) } prefix := getprei(len(s.sel.projects) - 1) s.tl.Printf("%s\n", tracePrefix(msg, prefix, prefix)) } func (s *solver) traceInfo(args ...interface{}) { if s.tl == nil { return } if len(args) == 0 { panic("must pass at least one param to traceInfo") } preflen := len(s.sel.projects) var msg string switch data := args[0].(type) { case string: msg = tracePrefix(innerIndent+fmt.Sprintf(data, args[1:]...), " ", " ") case traceError: preflen++ // We got a special traceError, use its custom method msg = tracePrefix(innerIndent+data.traceString(), " ", failCharSp) case error: // Regular error; still use the x leader but default Error() string msg = tracePrefix(innerIndent+data.Error(), " ", failCharSp) default: // panic here because this can *only* mean a stupid internal bug panic(fmt.Sprintf("canary - unknown type passed as first param to traceInfo %T", data)) } prefix := getprei(preflen) s.tl.Printf("%s\n", tracePrefix(msg, prefix, prefix)) } func getprei(i int) string { var s string if i < 10 { s = fmt.Sprintf("(%d) ", i) } else if i < 100 { s = fmt.Sprintf("(%d) ", i) } else { s = fmt.Sprintf("(%d) ", i) } return s } func tracePrefix(msg, sep, fsep string) string { parts := strings.Split(strings.TrimSuffix(msg, "\n"), "\n") for k, str := range parts { if k == 0 { parts[k] = fsep + str } else { parts[k] = sep + str } } return strings.Join(parts, "\n") } dep-0.3.2/internal/gps/typed_radix.go000066400000000000000000000052351317166637100175540ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "strings" "sync" "github.com/armon/go-radix" ) // Typed implementations of radix trees. These are just simple wrappers that let // us avoid having to type assert anywhere else, cleaning up other code a bit. // // Some of the more annoying things to implement (like walks) aren't // implemented. They can be added if/when we actually need them. // // Oh generics, where art thou... type deducerTrie struct { sync.RWMutex t *radix.Tree } func newDeducerTrie() *deducerTrie { return &deducerTrie{ t: radix.New(), } } // Suppress unused warning. var _ = (*deducerTrie)(nil).Delete // Delete is used to delete a key, returning the previous value and if it was deleted func (t *deducerTrie) Delete(s string) (pathDeducer, bool) { t.Lock() defer t.Unlock() if d, had := t.t.Delete(s); had { return d.(pathDeducer), had } return nil, false } // Insert is used to add a newentry or update an existing entry. Returns if updated. func (t *deducerTrie) Insert(s string, d pathDeducer) (pathDeducer, bool) { t.Lock() defer t.Unlock() if d2, had := t.t.Insert(s, d); had { return d2.(pathDeducer), had } return nil, false } // LongestPrefix is like Get, but instead of an exact match, it will return the // longest prefix match. func (t *deducerTrie) LongestPrefix(s string) (string, pathDeducer, bool) { t.RLock() defer t.RUnlock() if p, d, has := t.t.LongestPrefix(s); has { return p, d.(pathDeducer), has } return "", nil, false } // isPathPrefixOrEqual is an additional helper check to ensure that the literal // string prefix returned from a radix tree prefix match is also a path tree // match. // // The radix tree gets it mostly right, but we have to guard against // possibilities like this: // // github.com/sdboyer/foo // github.com/sdboyer/foobar/baz // // The latter would incorrectly be conflated with the former. As we know we're // operating on strings that describe import paths, guard against this case by // verifying that either the input is the same length as the match (in which // case we know they're equal), or that the next character is a "/". (Import // paths are defined to always use "/", not the OS-specific path separator.) func isPathPrefixOrEqual(pre, path string) bool { prflen, pathlen := len(pre), len(path) if pathlen == prflen+1 { // this can never be the case return false } // we assume something else (a trie) has done equality check up to the point // of the prefix, so we just check len return prflen == pathlen || strings.Index(path[prflen:], "/") == 0 } dep-0.3.2/internal/gps/typed_radix_test.go000066400000000000000000000012131317166637100206030ustar00rootroot00000000000000// Copyright 2017 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 gps import "testing" // basically a regression test func TestPathPrefixOrEqual(t *testing.T) { if !isPathPrefixOrEqual("foo", "foo") { t.Error("Same path should return true") } if isPathPrefixOrEqual("foo", "fooer") { t.Error("foo is not a path-type prefix of fooer") } if !isPathPrefixOrEqual("foo", "foo/bar") { t.Error("foo is a path prefix of foo/bar") } if isPathPrefixOrEqual("foo", "foo/") { t.Error("special case - foo is not a path prefix of foo/") } } dep-0.3.2/internal/gps/vcs_repo.go000066400000000000000000000233121317166637100170540ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "encoding/xml" "os" "path/filepath" "runtime" "strings" "time" "github.com/Masterminds/vcs" "github.com/pkg/errors" ) type ctxRepo interface { vcs.Repo get(context.Context) error fetch(context.Context) error updateVersion(context.Context, string) error //ping(context.Context) (bool, error) } func newCtxRepo(s vcs.Type, ustr, path string) (r ctxRepo, err error) { r, err = getVCSRepo(s, ustr, path) if err != nil { // if vcs could not initialize the repo due to a local error // then the local repo is in an incorrect state. Remove and // treat it as a new not-yet-cloned repo. // TODO(marwan-at-work): warn/give progress of the above comment. os.RemoveAll(path) r, err = getVCSRepo(s, ustr, path) } return } func getVCSRepo(s vcs.Type, ustr, path string) (r ctxRepo, err error) { switch s { case vcs.Git: var repo *vcs.GitRepo repo, err = vcs.NewGitRepo(ustr, path) r = &gitRepo{repo} case vcs.Bzr: var repo *vcs.BzrRepo repo, err = vcs.NewBzrRepo(ustr, path) r = &bzrRepo{repo} case vcs.Hg: var repo *vcs.HgRepo repo, err = vcs.NewHgRepo(ustr, path) r = &hgRepo{repo} case vcs.Svn: var repo *vcs.SvnRepo repo, err = vcs.NewSvnRepo(ustr, path) r = &svnRepo{repo} } return } // original implementation of these methods come from // https://github.com/Masterminds/vcs type gitRepo struct { *vcs.GitRepo } func newVcsRemoteErrorOr(err error, args []string, out, msg string) error { if err == context.Canceled || err == context.DeadlineExceeded { return err } return vcs.NewRemoteError(msg, errors.Wrapf(err, "command failed: %v", args), out) } func newVcsLocalErrorOr(err error, args []string, out, msg string) error { if err == context.Canceled || err == context.DeadlineExceeded { return err } return vcs.NewLocalError(msg, errors.Wrapf(err, "command failed: %v", args), out) } func (r *gitRepo) get(ctx context.Context) error { cmd := commandContext( ctx, "git", "clone", "--recursive", "-v", "--progress", r.Remote(), r.LocalPath(), ) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to get repository") } return nil } func (r *gitRepo) fetch(ctx context.Context) error { cmd := commandContext( ctx, "git", "fetch", "--tags", "--prune", r.RemoteLocation, ) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to update repository") } return nil } func (r *gitRepo) updateVersion(ctx context.Context, v string) error { cmd := commandContext(ctx, "git", "checkout", v) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsLocalErrorOr(err, cmd.Args(), string(out), "unable to update checked out version") } return r.defendAgainstSubmodules(ctx) } // defendAgainstSubmodules tries to keep repo state sane in the event of // submodules. Or nested submodules. What a great idea, submodules. func (r *gitRepo) defendAgainstSubmodules(ctx context.Context) error { // First, update them to whatever they should be, if there should happen to be any. { cmd := commandContext( ctx, "git", "submodule", "update", "--init", "--recursive", ) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsLocalErrorOr(err, cmd.Args(), string(out), "unexpected error while defensively updating submodules") } } // Now, do a special extra-aggressive clean in case changing versions caused // one or more submodules to go away. { cmd := commandContext(ctx, "git", "clean", "-x", "-d", "-f", "-f") cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsLocalErrorOr(err, cmd.Args(), string(out), "unexpected error while defensively cleaning up after possible derelict submodule directories") } } // Then, repeat just in case there are any nested submodules that went away. { cmd := commandContext( ctx, "git", "submodule", "foreach", "--recursive", "git", "clean", "-x", "-d", "-f", "-f", ) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsLocalErrorOr(err, cmd.Args(), string(out), "unexpected error while defensively cleaning up after possible derelict nested submodule directories") } } return nil } type bzrRepo struct { *vcs.BzrRepo } func (r *bzrRepo) get(ctx context.Context) error { basePath := filepath.Dir(filepath.FromSlash(r.LocalPath())) if _, err := os.Stat(basePath); os.IsNotExist(err) { err = os.MkdirAll(basePath, 0755) if err != nil { return newVcsLocalErrorOr(err, nil, "", "unable to create directory") } } cmd := commandContext(ctx, "bzr", "branch", r.Remote(), r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to get repository") } return nil } func (r *bzrRepo) fetch(ctx context.Context) error { cmd := commandContext(ctx, "bzr", "pull") cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to update repository") } return nil } func (r *bzrRepo) updateVersion(ctx context.Context, version string) error { cmd := commandContext(ctx, "bzr", "update", "-r", version) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsLocalErrorOr(err, cmd.Args(), string(out), "unable to update checked out version") } return nil } type hgRepo struct { *vcs.HgRepo } func (r *hgRepo) get(ctx context.Context) error { cmd := commandContext(ctx, "hg", "clone", r.Remote(), r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to get repository") } return nil } func (r *hgRepo) fetch(ctx context.Context) error { cmd := commandContext(ctx, "hg", "pull") cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to fetch latest changes") } return nil } func (r *hgRepo) updateVersion(ctx context.Context, version string) error { cmd := commandContext(ctx, "hg", "update", version) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to update checked out version") } return nil } type svnRepo struct { *vcs.SvnRepo } func (r *svnRepo) get(ctx context.Context) error { remote := r.Remote() if strings.HasPrefix(remote, "/") { remote = "file://" + remote } else if runtime.GOOS == "windows" && filepath.VolumeName(remote) != "" { remote = "file:///" + remote } cmd := commandContext(ctx, "svn", "checkout", remote, r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to get repository") } return nil } func (r *svnRepo) fetch(ctx context.Context) error { cmd := commandContext(ctx, "svn", "update") cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to update repository") } return nil } func (r *svnRepo) updateVersion(ctx context.Context, version string) error { cmd := commandContext(ctx, "svn", "update", "-r", version) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to update checked out version") } return nil } func (r *svnRepo) CommitInfo(id string) (*vcs.CommitInfo, error) { ctx := context.TODO() // There are cases where Svn log doesn't return anything for HEAD or BASE. // svn info does provide details for these but does not have elements like // the commit message. if id == "HEAD" || id == "BASE" { type commit struct { Revision string `xml:"revision,attr"` } type info struct { Commit commit `xml:"entry>commit"` } cmd := commandContext(ctx, "svn", "info", "-r", id, "--xml") cmd.SetDir(r.LocalPath()) out, err := cmd.CombinedOutput() if err != nil { return nil, newVcsLocalErrorOr(err, cmd.Args(), string(out), "unable to retrieve commit information") } infos := new(info) if err := xml.Unmarshal(out, &infos); err != nil { return nil, newVcsLocalErrorOr(err, cmd.Args(), string(out), "unable to retrieve commit information") } id = infos.Commit.Revision if id == "" { return nil, vcs.ErrRevisionUnavailable } } cmd := commandContext(ctx, "svn", "log", "-r", id, "--xml") cmd.SetDir(r.LocalPath()) out, err := cmd.CombinedOutput() if err != nil { return nil, newVcsRemoteErrorOr(err, cmd.Args(), string(out), "unable to retrieve commit information") } type logentry struct { Author string `xml:"author"` Date string `xml:"date"` Msg string `xml:"msg"` } type log struct { XMLName xml.Name `xml:"log"` Logs []logentry `xml:"logentry"` } logs := new(log) if err := xml.Unmarshal(out, &logs); err != nil { return nil, newVcsLocalErrorOr(err, cmd.Args(), string(out), "unable to retrieve commit information") } if len(logs.Logs) == 0 { return nil, vcs.ErrRevisionUnavailable } ci := &vcs.CommitInfo{ Commit: id, Author: logs.Logs[0].Author, Message: logs.Logs[0].Msg, } if len(logs.Logs[0].Date) > 0 { ci.Date, err = time.Parse(time.RFC3339Nano, logs.Logs[0].Date) if err != nil { return nil, newVcsLocalErrorOr(err, cmd.Args(), string(out), "unable to retrieve commit information") } } return ci, nil } dep-0.3.2/internal/gps/vcs_repo_test.go000066400000000000000000000240241317166637100201140ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "archive/tar" "compress/gzip" "context" "errors" "io" "io/ioutil" "os" "path/filepath" "testing" "time" "github.com/Masterminds/vcs" ) // original implementation of these test files come from // https://github.com/Masterminds/vcs test files const gitRemoteTestRepo = "https://github.com/Masterminds/VCSTestRepo" func TestErrs(t *testing.T) { err := newVcsLocalErrorOr(context.Canceled, nil, "", "") if err != context.Canceled { t.Errorf("context errors should always pass through, got %s", err) } err = newVcsRemoteErrorOr(context.Canceled, nil, "", "") if err != context.Canceled { t.Errorf("context errors should always pass through, got %s", err) } err = newVcsLocalErrorOr(context.DeadlineExceeded, nil, "", "") if err != context.DeadlineExceeded { t.Errorf("context errors should always pass through, got %s", err) } err = newVcsRemoteErrorOr(context.DeadlineExceeded, nil, "", "") if err != context.DeadlineExceeded { t.Errorf("context errors should always pass through, got %s", err) } err = newVcsLocalErrorOr(errors.New("bar"), nil, "foo", "baz") if _, is := err.(*vcs.LocalError); !is { t.Errorf("should have gotten local error, got %T %v", err, err) } err = newVcsRemoteErrorOr(errors.New("bar"), nil, "foo", "baz") if _, is := err.(*vcs.RemoteError); !is { t.Errorf("should have gotten remote error, got %T %v", err, err) } } func TestNewCtxRepoHappyPath(t *testing.T) { t.Parallel() tempDir, err := ioutil.TempDir("", "go-ctx-repo-happy-test") if err != nil { t.Fatal(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() _, err = newCtxRepo(vcs.Git, gitRemoteTestRepo, tempDir) if err != nil { t.Fatal(err) } } func TestNewCtxRepoRecovery(t *testing.T) { t.Parallel() tempDir, err := ioutil.TempDir("", "go-ctx-repo-recovery-test") if err != nil { t.Fatal(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() cwd, err := os.Getwd() if err != nil { t.Fatal(err) } src := filepath.Join(cwd, "_testdata", "badrepo", "corrupt_dot_git_directory.tar") f, err := os.Open(src) if err != nil { t.Fatal(err) } defer f.Close() dest := filepath.Join(tempDir, ".git") err = untar(dest, f) if err != nil { t.Fatalf("could not untar corrupt repo into temp folder: %v\n", err) } _, err = getVCSRepo(vcs.Git, gitRemoteTestRepo, tempDir) if err != nil { if _, ok := err.(*vcs.LocalError); !ok { t.Fatalf("expected a local error but got: %v\n", err) } } else { t.Fatal("expected getVCSRepo to fail when pointing to a corrupt local path. It is possible that vcs.GitNewRepo updated to gracefully handle this test scenario. Check the return of vcs.GitNewRepo.") } _, err = newCtxRepo(vcs.Git, gitRemoteTestRepo, tempDir) if err != nil { t.Fatal(err) } } func testSvnRepo(t *testing.T) { t.Parallel() if testing.Short() { t.Skip("Skipping slow test in short mode") } ctx := context.Background() tempDir, err := ioutil.TempDir("", "go-vcs-svn-tests") if err != nil { t.Fatal(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() rep, err := vcs.NewSvnRepo("https://github.com/Masterminds/VCSTestRepo/trunk", tempDir+string(os.PathSeparator)+"VCSTestRepo") if err != nil { t.Fatal(err) } repo := &svnRepo{rep} // Do an initial checkout. err = repo.get(ctx) if err != nil { t.Fatalf("Unable to checkout SVN repo. Err was %s", err) } // Verify SVN repo is a SVN repo if !repo.CheckLocal() { t.Fatal("Problem checking out repo or SVN CheckLocal is not working") } // Update the version to a previous version. err = repo.updateVersion(ctx, "r2") if err != nil { t.Fatalf("Unable to update SVN repo version. Err was %s", err) } // Use Version to verify we are on the right version. v, err := repo.Version() if err != nil { t.Fatal(err) } if v != "2" { t.Fatal("Error checking checked SVN out version") } // Perform an update which should take up back to the latest version. err = repo.fetch(ctx) if err != nil { t.Fatal(err) } // Make sure we are on a newer version because of the update. v, err = repo.Version() if err != nil { t.Fatal(err) } if v == "2" { t.Fatal("Error with version. Still on old version. Update failed") } ci, err := repo.CommitInfo("2") if err != nil { t.Fatal(err) } if ci.Commit != "2" { t.Error("Svn.CommitInfo wrong commit id") } if ci.Author != "matt.farina" { t.Error("Svn.CommitInfo wrong author") } if ci.Message != "Update README.md" { t.Error("Svn.CommitInfo wrong message") } ti, err := time.Parse(time.RFC3339Nano, "2015-07-29T13:46:20.000000Z") if err != nil { t.Fatal(err) } if !ti.Equal(ci.Date) { t.Error("Svn.CommitInfo wrong date") } _, err = repo.CommitInfo("555555555") if err != vcs.ErrRevisionUnavailable { t.Error("Svn didn't return expected ErrRevisionUnavailable") } } func testHgRepo(t *testing.T) { t.Parallel() if testing.Short() { t.Skip("Skipping slow test in short mode") } ctx := context.Background() tempDir, err := ioutil.TempDir("", "go-vcs-hg-tests") if err != nil { t.Fatal(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() rep, err := vcs.NewHgRepo("https://bitbucket.org/mattfarina/testhgrepo", tempDir+"/testhgrepo") if err != nil { t.Fatal(err) } repo := &hgRepo{rep} // Do an initial clone. err = repo.get(ctx) if err != nil { t.Fatalf("Unable to clone Hg repo. Err was %s", err) } // Verify Hg repo is a Hg repo if !repo.CheckLocal() { t.Fatal("Problem checking out repo or Hg CheckLocal is not working") } // Set the version using the short hash. err = repo.updateVersion(ctx, "a5494ba2177f") if err != nil { t.Fatalf("Unable to update Hg repo version. Err was %s", err) } // Use Version to verify we are on the right version. v, err := repo.Version() if err != nil { t.Fatal(err) } if v != "a5494ba2177ff9ef26feb3c155dfecc350b1a8ef" { t.Fatalf("Error checking checked out Hg version: %s", v) } // Perform an update. err = repo.fetch(ctx) if err != nil { t.Fatal(err) } } func testGitRepo(t *testing.T) { t.Parallel() if testing.Short() { t.Skip("Skipping slow test in short mode") } ctx := context.Background() tempDir, err := ioutil.TempDir("", "go-vcs-git-tests") if err != nil { t.Fatal(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() rep, err := vcs.NewGitRepo(gitRemoteTestRepo, tempDir+"/VCSTestRepo") if err != nil { t.Fatal(err) } repo := &gitRepo{rep} // Do an initial clone. err = repo.get(ctx) if err != nil { t.Fatalf("Unable to clone Git repo. Err was %s", err) } // Verify Git repo is a Git repo if !repo.CheckLocal() { t.Fatal("Problem checking out repo or Git CheckLocal is not working") } // Perform an update. err = repo.fetch(ctx) if err != nil { t.Fatal(err) } v, err := repo.Current() if err != nil { t.Fatalf("Error trying Git Current: %s", err) } if v != "master" { t.Fatalf("Current failed to detect Git on tip of master. Got version: %s", v) } // Set the version using the short hash. err = repo.updateVersion(ctx, "806b07b") if err != nil { t.Fatalf("Unable to update Git repo version. Err was %s", err) } // Once a ref has been checked out the repo is in a detached head state. // Trying to pull in an update in this state will cause an error. Update // should cleanly handle this. Pulling on a branch (tested elsewhere) and // skipping that here. err = repo.fetch(ctx) if err != nil { t.Fatal(err) } // Use Version to verify we are on the right version. v, err = repo.Version() if err != nil { t.Fatal(err) } if v != "806b07b08faa21cfbdae93027904f80174679402" { t.Fatal("Error checking checked out Git version") } } func testBzrRepo(t *testing.T) { t.Parallel() if testing.Short() { t.Skip("Skipping slow test in short mode") } ctx := context.Background() tempDir, err := ioutil.TempDir("", "go-vcs-bzr-tests") if err != nil { t.Fatal(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() rep, err := vcs.NewBzrRepo("https://launchpad.net/govcstestbzrrepo", tempDir+"/govcstestbzrrepo") if err != nil { t.Fatal(err) } repo := &bzrRepo{rep} // Do an initial clone. err = repo.get(ctx) if err != nil { t.Fatalf("Unable to clone Bzr repo. Err was %s", err) } // Verify Bzr repo is a Bzr repo if !repo.CheckLocal() { t.Fatal("Problem checking out repo or Bzr CheckLocal is not working") } v, err := repo.Current() if err != nil { t.Fatalf("Error trying Bzr Current: %s", err) } if v != "-1" { t.Fatalf("Current failed to detect Bzr on tip of branch. Got version: %s", v) } err = repo.updateVersion(ctx, "2") if err != nil { t.Fatalf("Unable to update Bzr repo version. Err was %s", err) } // Use Version to verify we are on the right version. v, err = repo.Version() if err != nil { t.Fatal(err) } if v != "2" { t.Fatal("Error checking checked out Bzr version") } v, err = repo.Current() if err != nil { t.Fatalf("Error trying Bzr Current: %s", err) } if v != "2" { t.Fatalf("Current failed to detect Bzr on rev 2 of branch. Got version: %s", v) } } func untar(dst string, r io.Reader) error { gzr, err := gzip.NewReader(r) if err != nil { return err } defer gzr.Close() tr := tar.NewReader(gzr) for { header, err := tr.Next() switch { case err == io.EOF: return nil case err != nil: return err case header == nil: continue } target := filepath.Join(dst, header.Name) switch header.Typeflag { case tar.TypeDir: if _, err := os.Stat(target); err != nil { if err := os.MkdirAll(target, 0755); err != nil { return err } } case tar.TypeReg: f, err := os.OpenFile(target, os.O_CREATE|os.O_RDWR, os.FileMode(header.Mode)) if err != nil { return err } defer f.Close() if _, err := io.Copy(f, tr); err != nil { return err } } } } dep-0.3.2/internal/gps/vcs_source.go000066400000000000000000000413461317166637100174160ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "bytes" "context" "fmt" "os" "path/filepath" "strings" "github.com/Masterminds/semver" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) type baseVCSSource struct { repo ctxRepo } func (bs *baseVCSSource) sourceType() string { return string(bs.repo.Vcs()) } func (bs *baseVCSSource) existsLocally(ctx context.Context) bool { return bs.repo.CheckLocal() } // TODO reimpl for git func (bs *baseVCSSource) existsUpstream(ctx context.Context) bool { return !bs.repo.Ping() } func (bs *baseVCSSource) upstreamURL() string { return bs.repo.Remote() } func (bs *baseVCSSource) disambiguateRevision(ctx context.Context, r Revision) (Revision, error) { ci, err := bs.repo.CommitInfo(string(r)) if err != nil { return "", err } return Revision(ci.Commit), nil } func (bs *baseVCSSource) getManifestAndLock(ctx context.Context, pr ProjectRoot, r Revision, an ProjectAnalyzer) (Manifest, Lock, error) { err := bs.repo.updateVersion(ctx, r.String()) if err != nil { return nil, nil, unwrapVcsErr(err) } m, l, err := an.DeriveManifestAndLock(bs.repo.LocalPath(), pr) if err != nil { return nil, nil, err } if l != nil && l != Lock(nil) { l = prepLock(l) } return prepManifest(m), l, nil } func (bs *baseVCSSource) revisionPresentIn(r Revision) (bool, error) { return bs.repo.IsReference(string(r)), nil } // initLocal clones/checks out the upstream repository to disk for the first // time. func (bs *baseVCSSource) initLocal(ctx context.Context) error { err := bs.repo.get(ctx) if err != nil { return unwrapVcsErr(err) } return nil } // updateLocal ensures the local data (versions and code) we have about the // source is fully up to date with that of the canonical upstream source. func (bs *baseVCSSource) updateLocal(ctx context.Context) error { err := bs.repo.fetch(ctx) if err != nil { return unwrapVcsErr(err) } return nil } func (bs *baseVCSSource) listPackages(ctx context.Context, pr ProjectRoot, r Revision) (ptree pkgtree.PackageTree, err error) { err = bs.repo.updateVersion(ctx, r.String()) if err != nil { err = unwrapVcsErr(err) } else { ptree, err = pkgtree.ListPackages(bs.repo.LocalPath(), string(pr)) } return } func (bs *baseVCSSource) exportRevisionTo(ctx context.Context, r Revision, to string) error { // Only make the parent dir, as CopyDir will balk on trying to write to an // empty but existing dir. if err := os.MkdirAll(filepath.Dir(to), 0777); err != nil { return err } if err := bs.repo.updateVersion(ctx, r.String()); err != nil { return unwrapVcsErr(err) } return fs.CopyDir(bs.repo.LocalPath(), to) } // gitSource is a generic git repository implementation that should work with // all standard git remotes. type gitSource struct { baseVCSSource } func (s *gitSource) exportRevisionTo(ctx context.Context, rev Revision, to string) error { r := s.repo if err := os.MkdirAll(to, 0777); err != nil { return err } // Back up original index idx, bak := filepath.Join(r.LocalPath(), ".git", "index"), filepath.Join(r.LocalPath(), ".git", "origindex") err := fs.RenameWithFallback(idx, bak) if err != nil { return err } // could have an err here...but it's hard to imagine how? defer fs.RenameWithFallback(bak, idx) { cmd := commandContext(ctx, "git", "read-tree", rev.String()) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return errors.Wrap(err, string(out)) } } // Ensure we have exactly one trailing slash to = strings.TrimSuffix(to, string(os.PathSeparator)) + string(os.PathSeparator) // Checkout from our temporary index to the desired target location on // disk; now it's git's job to make it fast. // // Sadly, this approach *does* also write out vendor dirs. There doesn't // appear to be a way to make checkout-index respect sparse checkout // rules (-a supersedes it). The alternative is using plain checkout, // though we have a bunch of housekeeping to do to set up, then tear // down, the sparse checkout controls, as well as restore the original // index and HEAD. { cmd := commandContext(ctx, "git", "checkout-index", "-a", "--prefix="+to) cmd.SetDir(r.LocalPath()) if out, err := cmd.CombinedOutput(); err != nil { return errors.Wrap(err, string(out)) } } return nil } func (s *gitSource) listVersions(ctx context.Context) (vlist []PairedVersion, err error) { r := s.repo cmd := commandContext(ctx, "git", "ls-remote", r.Remote()) // Ensure no prompting for PWs cmd.SetEnv(append([]string{"GIT_ASKPASS=", "GIT_TERMINAL_PROMPT=0"}, os.Environ()...)) out, err := cmd.CombinedOutput() if err != nil { return nil, errors.Wrap(err, string(out)) } all := bytes.Split(bytes.TrimSpace(out), []byte("\n")) if len(all) == 1 && len(all[0]) == 0 { return nil, fmt.Errorf("no data returned from ls-remote") } // Pull out the HEAD rev (it's always first) so we know what branches to // mark as default. This is, perhaps, not the best way to glean this, but it // was good enough for git itself until 1.8.5. Also, the alternative is // sniffing data out of the pack protocol, which is a separate request, and // also waaaay more than we want to do right now. // // The cost is that we could potentially have multiple branches marked as // the default. If that does occur, a later check (again, emulating git // <1.8.5 behavior) further narrows the failure mode by choosing master as // the sole default branch if a) master exists and b) master is one of the // branches marked as a default. // // This all reduces the failure mode to a very narrow range of // circumstances. Nevertheless, if we do end up emitting multiple // default branches, it is possible that a user could end up following a // non-default branch, IF: // // * Multiple branches match the HEAD rev // * None of them are master // * The solver makes it into the branch list in the version queue // * The user/tool has provided no constraint (so, anyConstraint) // * A branch that is not actually the default, but happens to share the // rev, is lexicographically less than the true default branch // // If all of those conditions are met, then the user would end up with an // erroneous non-default branch in their lock file. var headrev Revision var onedef, multidef, defmaster bool smap := make(map[string]int) uniq := 0 vlist = make([]PairedVersion, len(all)) for _, pair := range all { var v PairedVersion if string(pair[41:]) == "HEAD" { // If HEAD is present, it's always first headrev = Revision(pair[:40]) } else if string(pair[46:51]) == "heads" { rev := Revision(pair[:40]) isdef := rev == headrev n := string(pair[52:]) if isdef { if onedef { multidef = true } onedef = true if n == "master" { defmaster = true } } v = branchVersion{ name: n, isDefault: isdef, }.Pair(rev).(PairedVersion) vlist[uniq] = v uniq++ } else if string(pair[46:50]) == "tags" { vstr := string(pair[51:]) if strings.HasSuffix(vstr, "^{}") { // If the suffix is there, then we *know* this is the rev of // the underlying commit object that we actually want vstr = strings.TrimSuffix(vstr, "^{}") if i, ok := smap[vstr]; ok { v = NewVersion(vstr).Pair(Revision(pair[:40])) vlist[i] = v continue } } else if _, ok := smap[vstr]; ok { // Already saw the deref'd version of this tag, if one // exists, so skip this. continue // Can only hit this branch if we somehow got the deref'd // version first. Which should be impossible, but this // covers us in case of weirdness, anyway. } v = NewVersion(vstr).Pair(Revision(pair[:40])) smap[vstr] = uniq vlist[uniq] = v uniq++ } } // Trim off excess from the slice vlist = vlist[:uniq] // There were multiple default branches, but one was master. So, go through // and strip the default flag from all the non-master branches. if multidef && defmaster { for k, v := range vlist { pv := v.(PairedVersion) if bv, ok := pv.Unpair().(branchVersion); ok { if bv.name != "master" && bv.isDefault { bv.isDefault = false vlist[k] = bv.Pair(pv.Revision()) } } } } return } // gopkginSource is a specialized git source that performs additional filtering // according to the input URL. type gopkginSource struct { gitSource major uint64 unstable bool // The aliased URL we report as being the one we talk to, even though we're // actually talking directly to GitHub. aliasURL string } func (s *gopkginSource) upstreamURL() string { return s.aliasURL } func (s *gopkginSource) listVersions(ctx context.Context) ([]PairedVersion, error) { ovlist, err := s.gitSource.listVersions(ctx) if err != nil { return nil, err } // Apply gopkg.in's filtering rules vlist := make([]PairedVersion, len(ovlist)) k := 0 var dbranch int // index of branch to be marked default var bsv semver.Version for _, v := range ovlist { // all git versions will always be paired pv := v.(versionPair) switch tv := pv.v.(type) { case semVersion: if tv.sv.Major() == s.major && !s.unstable { vlist[k] = v k++ } case branchVersion: // The semver lib isn't exactly the same as gopkg.in's logic, but // it's close enough that it's probably fine to use. We can be more // exact if real problems crop up. sv, err := semver.NewVersion(tv.name) if err != nil || sv.Major() != s.major { // not a semver-shaped branch name at all, or not the same major // version as specified in the import path constraint continue } // Gopkg.in has a special "-unstable" suffix which we need to handle // separately. if s.unstable != strings.HasSuffix(tv.name, gopkgUnstableSuffix) { continue } // Turn off the default branch marker unconditionally; we can't know // which one to mark as default until we've seen them all tv.isDefault = false // Figure out if this is the current leader for default branch if bsv == (semver.Version{}) || bsv.LessThan(sv) { bsv = sv dbranch = k } pv.v = tv vlist[k] = pv k++ } // The switch skips plainVersions because they cannot possibly meet // gopkg.in's requirements } vlist = vlist[:k] if bsv != (semver.Version{}) { dbv := vlist[dbranch].(versionPair) vlist[dbranch] = branchVersion{ name: dbv.v.(branchVersion).name, isDefault: true, }.Pair(dbv.r) } return vlist, nil } // bzrSource is a generic bzr repository implementation that should work with // all standard bazaar remotes. type bzrSource struct { baseVCSSource } func (s *bzrSource) exportRevisionTo(ctx context.Context, rev Revision, to string) error { if err := s.baseVCSSource.exportRevisionTo(ctx, rev, to); err != nil { return err } return os.RemoveAll(filepath.Join(to, ".bzr")) } func (s *bzrSource) listVersions(ctx context.Context) ([]PairedVersion, error) { r := s.repo // TODO(sdboyer) this should be handled through the gateway's FSM if !r.CheckLocal() { err := s.initLocal(ctx) if err != nil { return nil, err } } // Now, list all the tags tagsCmd := commandContext(ctx, "bzr", "tags", "--show-ids", "-v") tagsCmd.SetDir(r.LocalPath()) out, err := tagsCmd.CombinedOutput() if err != nil { return nil, errors.Wrap(err, string(out)) } all := bytes.Split(bytes.TrimSpace(out), []byte("\n")) viCmd := commandContext(ctx, "bzr", "version-info", "--custom", "--template={revision_id}", "--revision=branch:.") viCmd.SetDir(r.LocalPath()) branchrev, err := viCmd.CombinedOutput() if err != nil { return nil, errors.Wrap(err, string(branchrev)) } vlist := make([]PairedVersion, 0, len(all)+1) // Now, all the tags. for _, line := range all { idx := bytes.IndexByte(line, 32) // space v := NewVersion(string(line[:idx])) r := Revision(bytes.TrimSpace(line[idx:])) vlist = append(vlist, v.Pair(r)) } // Last, add the default branch, hardcoding the visual representation of it // that bzr uses when operating in the workflow mode we're using. v := newDefaultBranch("(default)") vlist = append(vlist, v.Pair(Revision(string(branchrev)))) return vlist, nil } func (s *bzrSource) disambiguateRevision(ctx context.Context, r Revision) (Revision, error) { // If we used the default baseVCSSource behavior here, we would return the // bazaar revision number, which is not a globally unique identifier - it is // only unique within a branch. This is just the way that // github.com/Masterminds/vcs chooses to handle bazaar. We want a // disambiguated unique ID, though, so we need slightly different behavior: // check whether r doesn't error when we try to look it up. If so, trust that // it's a revision. _, err := s.repo.CommitInfo(string(r)) if err != nil { return "", err } return r, nil } // hgSource is a generic hg repository implementation that should work with // all standard mercurial servers. type hgSource struct { baseVCSSource } func (s *hgSource) exportRevisionTo(ctx context.Context, rev Revision, to string) error { // TODO: use hg instead of the generic approach in // baseVCSSource.exportRevisionTo to make it faster. if err := s.baseVCSSource.exportRevisionTo(ctx, rev, to); err != nil { return err } return os.RemoveAll(filepath.Join(to, ".hg")) } func (s *hgSource) listVersions(ctx context.Context) ([]PairedVersion, error) { var vlist []PairedVersion r := s.repo // TODO(sdboyer) this should be handled through the gateway's FSM if !r.CheckLocal() { err := s.initLocal(ctx) if err != nil { return nil, err } } // Now, list all the tags tagsCmd := commandContext(ctx, "hg", "tags", "--debug", "--verbose") tagsCmd.SetDir(r.LocalPath()) out, err := tagsCmd.CombinedOutput() if err != nil { return nil, errors.Wrap(err, string(out)) } all := bytes.Split(bytes.TrimSpace(out), []byte("\n")) lbyt := []byte("local") nulrev := []byte("0000000000000000000000000000000000000000") for _, line := range all { if bytes.Equal(lbyt, line[len(line)-len(lbyt):]) { // Skip local tags continue } // tip is magic, don't include it if bytes.HasPrefix(line, []byte("tip")) { continue } // Split on colon; this gets us the rev and the tag plus local revno pair := bytes.Split(line, []byte(":")) if bytes.Equal(nulrev, pair[1]) { // null rev indicates this tag is marked for deletion continue } idx := bytes.IndexByte(pair[0], 32) // space v := NewVersion(string(pair[0][:idx])).Pair(Revision(pair[1])).(PairedVersion) vlist = append(vlist, v) } // bookmarks next, because the presence of the magic @ bookmark has to // determine how we handle the branches var magicAt bool bookmarksCmd := commandContext(ctx, "hg", "bookmarks", "--debug") bookmarksCmd.SetDir(r.LocalPath()) out, err = bookmarksCmd.CombinedOutput() if err != nil { // better nothing than partial and misleading return nil, errors.Wrap(err, string(out)) } out = bytes.TrimSpace(out) if !bytes.Equal(out, []byte("no bookmarks set")) { all = bytes.Split(out, []byte("\n")) for _, line := range all { // Trim leading spaces, and * marker if present line = bytes.TrimLeft(line, " *") pair := bytes.Split(line, []byte(":")) // if this doesn't split exactly once, we have something weird if len(pair) != 2 { continue } // Split on colon; this gets us the rev and the branch plus local revno idx := bytes.IndexByte(pair[0], 32) // space // if it's the magic @ marker, make that the default branch str := string(pair[0][:idx]) var v PairedVersion if str == "@" { magicAt = true v = newDefaultBranch(str).Pair(Revision(pair[1])).(PairedVersion) } else { v = NewBranch(str).Pair(Revision(pair[1])).(PairedVersion) } vlist = append(vlist, v) } } cmd := commandContext(ctx, "hg", "branches", "-c", "--debug") cmd.SetDir(r.LocalPath()) out, err = cmd.CombinedOutput() if err != nil { // better nothing than partial and misleading return nil, errors.Wrap(err, string(out)) } all = bytes.Split(bytes.TrimSpace(out), []byte("\n")) for _, line := range all { // Trim inactive and closed suffixes, if present; we represent these // anyway line = bytes.TrimSuffix(line, []byte(" (inactive)")) line = bytes.TrimSuffix(line, []byte(" (closed)")) // Split on colon; this gets us the rev and the branch plus local revno pair := bytes.Split(line, []byte(":")) idx := bytes.IndexByte(pair[0], 32) // space str := string(pair[0][:idx]) // if there was no magic @ bookmark, and this is mercurial's magic // "default" branch, then mark it as default branch var v PairedVersion if !magicAt && str == "default" { v = newDefaultBranch(str).Pair(Revision(pair[1])).(PairedVersion) } else { v = NewBranch(str).Pair(Revision(pair[1])).(PairedVersion) } vlist = append(vlist, v) } return vlist, nil } dep-0.3.2/internal/gps/vcs_source_test.go000066400000000000000000000530561317166637100204560ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "context" "io/ioutil" "net/url" "os" "os/exec" "path/filepath" "reflect" "strings" "sync" "testing" "github.com/golang/dep/internal/test" ) // Parent test that executes all the slow vcs interaction tests in parallel. func TestSlowVcs(t *testing.T) { t.Run("write-deptree", testWriteDepTree) t.Run("source-gateway", testSourceGateway) t.Run("bzr-repo", testBzrRepo) t.Run("bzr-source", testBzrSourceInteractions) t.Run("svn-repo", testSvnRepo) // TODO(sdboyer) svn-source t.Run("hg-repo", testHgRepo) t.Run("hg-source", testHgSourceInteractions) t.Run("git-repo", testGitRepo) t.Run("git-source", testGitSourceInteractions) t.Run("gopkgin-source", testGopkginSourceInteractions) } func testGitSourceInteractions(t *testing.T) { t.Parallel() // This test is slowish, skip it on -short if testing.Short() { t.Skip("Skipping git source version fetching test in short mode") } requiresBins(t, "git") cpath, err := ioutil.TempDir("", "smcache") if err != nil { t.Errorf("Failed to create temp dir: %s", err) } defer func() { if err := os.RemoveAll(cpath); err != nil { t.Errorf("removeAll failed: %s", err) } }() n := "github.com/sdboyer/gpkt" un := "https://" + n u, err := url.Parse(un) if err != nil { t.Fatalf("Error parsing URL %s: %s", un, err) } mb := maybeGitSource{ url: u, } ctx := context.Background() superv := newSupervisor(ctx) isrc, state, err := mb.try(ctx, cpath, newMemoryCache(), superv) if err != nil { t.Fatalf("Unexpected error while setting up gitSource for test repo: %s", err) } wantstate := sourceIsSetUp | sourceExistsUpstream | sourceHasLatestVersionList if state != wantstate { t.Errorf("Expected return state to be %v, got %v", wantstate, state) } err = isrc.initLocal(ctx) if err != nil { t.Fatalf("Error on cloning git repo: %s", err) } src, ok := isrc.(*gitSource) if !ok { t.Fatalf("Expected a gitSource, got a %T", isrc) } if un != src.upstreamURL() { t.Errorf("Expected %s as source URL, got %s", un, src.upstreamURL()) } pvlist, err := src.listVersions(ctx) if err != nil { t.Fatalf("Unexpected error getting version pairs from git repo: %s", err) } vlist := hidePair(pvlist) // check that an expected rev is present is, err := src.revisionPresentIn(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")) if err != nil { t.Errorf("Unexpected error while checking revision presence: %s", err) } else if !is { t.Errorf("Revision that should exist was not present") } if len(vlist) != 7 { t.Errorf("git test repo should've produced seven versions, got %v: vlist was %s", len(vlist), vlist) } else { SortForUpgrade(vlist) evl := []Version{ NewVersion("v2.0.0").Pair(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")), NewVersion("v1.1.0").Pair(Revision("b2cb48dda625f6640b34d9ffb664533359ac8b91")), NewVersion("v1.0.0").Pair(Revision("bf85021c0405edbc4f3648b0603818d641674f72")), newDefaultBranch("master").Pair(Revision("bf85021c0405edbc4f3648b0603818d641674f72")), NewBranch("v1").Pair(Revision("e3777f683305eafca223aefe56b4e8ecf103f467")), NewBranch("v1.1").Pair(Revision("f1fbc520489a98306eb28c235204e39fa8a89c84")), NewBranch("v3").Pair(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")), } if !reflect.DeepEqual(vlist, evl) { t.Errorf("Version list was not what we expected:\n\t(GOT): %s\n\t(WNT): %s", vlist, evl) } } // recheck that rev is present, this time interacting with cache differently is, err = src.revisionPresentIn(Revision("30605f6ac35fcb075ad0bfa9296f90a7d891523e")) if err != nil { t.Errorf("Unexpected error while re-checking revision presence: %s", err) } else if !is { t.Errorf("Revision that should exist was not present on re-check") } } func testGopkginSourceInteractions(t *testing.T) { t.Parallel() // This test is slowish, skip it on -short if testing.Short() { t.Skip("Skipping gopkg.in source version fetching test in short mode") } requiresBins(t, "git") cpath, err := ioutil.TempDir("", "smcache") if err != nil { t.Errorf("Failed to create temp dir: %s", err) } defer func() { if err := os.RemoveAll(cpath); err != nil { t.Errorf("removeAll failed: %s", err) } }() tfunc := func(opath, n string, major uint64, evl []Version) { un := "https://" + opath u, err := url.Parse("https://" + n) if err != nil { t.Errorf("URL was bad, lolwut? errtext: %s", err) return } unstable := strings.HasSuffix(opath, gopkgUnstableSuffix) mb := maybeGopkginSource{ opath: opath, url: u, major: major, unstable: unstable, } ctx := context.Background() superv := newSupervisor(ctx) isrc, state, err := mb.try(ctx, cpath, newMemoryCache(), superv) if err != nil { t.Errorf("Unexpected error while setting up gopkginSource for test repo: %s", err) return } wantstate := sourceIsSetUp | sourceExistsUpstream | sourceHasLatestVersionList if state != wantstate { t.Errorf("Expected return state to be %v, got %v", wantstate, state) } err = isrc.initLocal(ctx) if err != nil { t.Fatalf("Error on cloning git repo: %s", err) } src, ok := isrc.(*gopkginSource) if !ok { t.Errorf("Expected a gopkginSource, got a %T", isrc) return } if un != src.upstreamURL() { t.Errorf("Expected %s as source URL, got %s", un, src.upstreamURL()) } if src.major != major { t.Errorf("Expected %v as major version filter on gopkginSource, got %v", major, src.major) } // check that an expected rev is present rev := evl[0].(PairedVersion).Revision() is, err := src.revisionPresentIn(rev) if err != nil { t.Errorf("Unexpected error while checking revision presence: %s", err) } else if !is { t.Errorf("Revision %s that should exist was not present", rev) } pvlist, err := src.listVersions(ctx) if err != nil { t.Errorf("Unexpected error getting version pairs from hg repo: %s", err) } vlist := hidePair(pvlist) if len(vlist) != len(evl) { t.Errorf("gopkgin test repo should've produced %v versions, got %v", len(evl), len(vlist)) } else { SortForUpgrade(vlist) if !reflect.DeepEqual(vlist, evl) { t.Errorf("Version list was not what we expected:\n\t(GOT): %s\n\t(WNT): %s", vlist, evl) } } // Run again, this time to ensure cache outputs correctly pvlist, err = src.listVersions(ctx) if err != nil { t.Errorf("Unexpected error getting version pairs from hg repo: %s", err) } vlist = hidePair(pvlist) if len(vlist) != len(evl) { t.Errorf("gopkgin test repo should've produced %v versions, got %v", len(evl), len(vlist)) } else { SortForUpgrade(vlist) if !reflect.DeepEqual(vlist, evl) { t.Errorf("Version list was not what we expected:\n\t(GOT): %s\n\t(WNT): %s", vlist, evl) } } // recheck that rev is present, this time interacting with cache differently is, err = src.revisionPresentIn(rev) if err != nil { t.Errorf("Unexpected error while re-checking revision presence: %s", err) } else if !is { t.Errorf("Revision that should exist was not present on re-check") } } // simultaneously run for v1, v2, and v3 filters of the target repo wg := &sync.WaitGroup{} wg.Add(4) go func() { tfunc("gopkg.in/sdboyer/gpkt.v1", "github.com/sdboyer/gpkt", 1, []Version{ NewVersion("v1.1.0").Pair(Revision("b2cb48dda625f6640b34d9ffb664533359ac8b91")), NewVersion("v1.0.0").Pair(Revision("bf85021c0405edbc4f3648b0603818d641674f72")), newDefaultBranch("v1.1").Pair(Revision("f1fbc520489a98306eb28c235204e39fa8a89c84")), NewBranch("v1").Pair(Revision("e3777f683305eafca223aefe56b4e8ecf103f467")), }) wg.Done() }() go func() { tfunc("gopkg.in/sdboyer/gpkt.v2", "github.com/sdboyer/gpkt", 2, []Version{ NewVersion("v2.0.0").Pair(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")), }) wg.Done() }() go func() { tfunc("gopkg.in/sdboyer/gpkt.v3", "github.com/sdboyer/gpkt", 3, []Version{ newDefaultBranch("v3").Pair(Revision("4a54adf81c75375d26d376459c00d5ff9b703e5e")), }) wg.Done() }() go func() { tfunc("github.com/sdboyer/gpkt2.v1-unstable", "github.com/sdboyer/gpkt2", 1, []Version{ newDefaultBranch("v1-unstable").Pair(Revision("24de0be8f4a0b8a44321562117749b257bfcef69")), }) wg.Done() }() wg.Wait() } func testBzrSourceInteractions(t *testing.T) { t.Parallel() // This test is quite slow (ugh bzr), so skip it on -short if testing.Short() { t.Skip("Skipping bzr source version fetching test in short mode") } requiresBins(t, "bzr") cpath, err := ioutil.TempDir("", "smcache") if err != nil { t.Errorf("Failed to create temp dir: %s", err) } defer func() { if err := os.RemoveAll(cpath); err != nil { t.Errorf("removeAll failed: %s", err) } }() n := "launchpad.net/govcstestbzrrepo" un := "https://" + n u, err := url.Parse(un) if err != nil { t.Fatalf("Error parsing URL %s: %s", un, err) } mb := maybeBzrSource{ url: u, } ctx := context.Background() superv := newSupervisor(ctx) isrc, state, err := mb.try(ctx, cpath, newMemoryCache(), superv) if err != nil { t.Fatalf("Unexpected error while setting up bzrSource for test repo: %s", err) } wantstate := sourceIsSetUp | sourceExistsUpstream if state != wantstate { t.Errorf("Expected return state to be %v, got %v", wantstate, state) } err = isrc.initLocal(ctx) if err != nil { t.Fatalf("Error on cloning bzr repo: %s", err) } src, ok := isrc.(*bzrSource) if !ok { t.Fatalf("Expected a bzrSource, got a %T", isrc) } if state != wantstate { t.Errorf("Expected return state to be %v, got %v", wantstate, state) } if un != src.upstreamURL() { t.Errorf("Expected %s as source URL, got %s", un, src.upstreamURL()) } evl := []Version{ NewVersion("1.0.0").Pair(Revision("matt@mattfarina.com-20150731135137-pbphasfppmygpl68")), newDefaultBranch("(default)").Pair(Revision("matt@mattfarina.com-20150731135137-pbphasfppmygpl68")), } // check that an expected rev is present is, err := src.revisionPresentIn(Revision("matt@mattfarina.com-20150731135137-pbphasfppmygpl68")) if err != nil { t.Errorf("Unexpected error while checking revision presence: %s", err) } else if !is { t.Errorf("Revision that should exist was not present") } pvlist, err := src.listVersions(ctx) if err != nil { t.Errorf("Unexpected error getting version pairs from bzr repo: %s", err) } vlist := hidePair(pvlist) if len(vlist) != 2 { t.Errorf("bzr test repo should've produced two versions, got %v", len(vlist)) } else { SortForUpgrade(vlist) if !reflect.DeepEqual(vlist, evl) { t.Errorf("bzr version list was not what we expected:\n\t(GOT): %s\n\t(WNT): %s", vlist, evl) } } // Run again, this time to ensure cache outputs correctly pvlist, err = src.listVersions(ctx) if err != nil { t.Errorf("Unexpected error getting version pairs from bzr repo: %s", err) } vlist = hidePair(pvlist) if len(vlist) != 2 { t.Errorf("bzr test repo should've produced two versions, got %v", len(vlist)) } else { SortForUpgrade(vlist) if !reflect.DeepEqual(vlist, evl) { t.Errorf("bzr version list was not what we expected:\n\t(GOT): %s\n\t(WNT): %s", vlist, evl) } } // recheck that rev is present, this time interacting with cache differently is, err = src.revisionPresentIn(Revision("matt@mattfarina.com-20150731135137-pbphasfppmygpl68")) if err != nil { t.Errorf("Unexpected error while re-checking revision presence: %s", err) } else if !is { t.Errorf("Revision that should exist was not present on re-check") } } func testHgSourceInteractions(t *testing.T) { t.Parallel() // This test is slow, so skip it on -short if testing.Short() { t.Skip("Skipping hg source version fetching test in short mode") } requiresBins(t, "hg") cpath, err := ioutil.TempDir("", "smcache") if err != nil { t.Errorf("Failed to create temp dir: %s", err) } defer func() { if err := os.RemoveAll(cpath); err != nil { t.Errorf("removeAll failed: %s", err) } }() tfunc := func(n string, evl []Version) { un := "https://" + n u, err := url.Parse(un) if err != nil { t.Errorf("URL was bad, lolwut? errtext: %s", err) return } mb := maybeHgSource{ url: u, } ctx := context.Background() superv := newSupervisor(ctx) isrc, state, err := mb.try(ctx, cpath, newMemoryCache(), superv) if err != nil { t.Errorf("Unexpected error while setting up hgSource for test repo: %s", err) return } wantstate := sourceIsSetUp | sourceExistsUpstream if state != wantstate { t.Errorf("Expected return state to be %v, got %v", wantstate, state) } err = isrc.initLocal(ctx) if err != nil { t.Fatalf("Error on cloning hg repo: %s", err) } src, ok := isrc.(*hgSource) if !ok { t.Errorf("Expected a hgSource, got a %T", isrc) return } if state != wantstate { t.Errorf("Expected return state to be %v, got %v", wantstate, state) } if un != src.upstreamURL() { t.Errorf("Expected %s as source URL, got %s", un, src.upstreamURL()) } // check that an expected rev is present is, err := src.revisionPresentIn(Revision("103d1bddef2199c80aad7c42041223083d613ef9")) if err != nil { t.Errorf("Unexpected error while checking revision presence: %s", err) } else if !is { t.Errorf("Revision that should exist was not present") } pvlist, err := src.listVersions(ctx) if err != nil { t.Errorf("Unexpected error getting version pairs from hg repo: %s", err) } vlist := hidePair(pvlist) if len(vlist) != len(evl) { t.Errorf("hg test repo should've produced %v versions, got %v", len(evl), len(vlist)) } else { SortForUpgrade(vlist) if !reflect.DeepEqual(vlist, evl) { t.Errorf("Version list was not what we expected:\n\t(GOT): %s\n\t(WNT): %s", vlist, evl) } } // Run again, this time to ensure cache outputs correctly pvlist, err = src.listVersions(ctx) if err != nil { t.Errorf("Unexpected error getting version pairs from hg repo: %s", err) } vlist = hidePair(pvlist) if len(vlist) != len(evl) { t.Errorf("hg test repo should've produced %v versions, got %v", len(evl), len(vlist)) } else { SortForUpgrade(vlist) if !reflect.DeepEqual(vlist, evl) { t.Errorf("Version list was not what we expected:\n\t(GOT): %s\n\t(WNT): %s", vlist, evl) } } // recheck that rev is present, this time interacting with cache differently is, err = src.revisionPresentIn(Revision("103d1bddef2199c80aad7c42041223083d613ef9")) if err != nil { t.Errorf("Unexpected error while re-checking revision presence: %s", err) } else if !is { t.Errorf("Revision that should exist was not present on re-check") } } // simultaneously run for both the repo with and without the magic bookmark donech := make(chan struct{}) go func() { tfunc("bitbucket.org/sdboyer/withbm", []Version{ NewVersion("v1.0.0").Pair(Revision("aa110802a0c64195d0a6c375c9f66668827c90b4")), newDefaultBranch("@").Pair(Revision("b10d05d581e5401f383e48ccfeb84b48fde99d06")), NewBranch("another").Pair(Revision("b10d05d581e5401f383e48ccfeb84b48fde99d06")), NewBranch("default").Pair(Revision("3d466f437f6616da594bbab6446cc1cb4328d1bb")), NewBranch("newbranch").Pair(Revision("5e2a01be9aee942098e44590ae545c7143da9675")), }) close(donech) }() tfunc("bitbucket.org/sdboyer/nobm", []Version{ NewVersion("v1.0.0").Pair(Revision("aa110802a0c64195d0a6c375c9f66668827c90b4")), newDefaultBranch("default").Pair(Revision("3d466f437f6616da594bbab6446cc1cb4328d1bb")), NewBranch("another").Pair(Revision("b10d05d581e5401f383e48ccfeb84b48fde99d06")), NewBranch("newbranch").Pair(Revision("5e2a01be9aee942098e44590ae545c7143da9675")), }) <-donech } func TestGitSourceListVersionsNoHEAD(t *testing.T) { t.Parallel() requiresBins(t, "git") h := test.NewHelper(t) defer h.Cleanup() h.TempDir("smcache") cpath := h.Path("smcache") h.TempDir("repo") repoPath := h.Path("repo") // Create test repo with a single commit on the master branch h.RunGit(repoPath, "init") h.RunGit(repoPath, "config", "--local", "user.email", "test@example.com") h.RunGit(repoPath, "config", "--local", "user.name", "Test author") h.RunGit(repoPath, "commit", "--allow-empty", `--message="Initial commit"`) // Make HEAD point at a nonexistent branch (deleting it is not allowed) // The `git ls-remote` that listVersions() calls will not return a HEAD ref // because it points at a nonexistent branch h.RunGit(repoPath, "symbolic-ref", "HEAD", "refs/heads/nonexistent") un := "file://" + filepath.ToSlash(repoPath) u, err := url.Parse(un) if err != nil { t.Fatalf("Error parsing URL %s: %s", un, err) } mb := maybeGitSource{u} ctx := context.Background() superv := newSupervisor(ctx) isrc, _, err := mb.try(ctx, cpath, newMemoryCache(), superv) if err != nil { t.Fatalf("Unexpected error while setting up gitSource for test repo: %s", err) } err = isrc.initLocal(ctx) if err != nil { t.Fatalf("Error on cloning git repo: %s", err) } src, ok := isrc.(*gitSource) if !ok { t.Fatalf("Expected a gitSource, got a %T", isrc) } pvlist, err := src.listVersions(ctx) if err != nil { t.Fatalf("Unexpected error getting version pairs from git repo: %s", err) } if len(pvlist) != 1 { t.Errorf("Unexpected version pair length:\n\t(GOT): %d\n\t(WNT): %d", len(pvlist), 1) } } func TestGitSourceListVersionsNoDupes(t *testing.T) { t.Parallel() // This test is slowish, skip it on -short if testing.Short() { t.Skip("Skipping git source version fetching test in short mode") } requiresBins(t, "git") cpath, err := ioutil.TempDir("", "smcache") if err != nil { t.Errorf("Failed to create temp dir: %s", err) } defer func() { if err := os.RemoveAll(cpath); err != nil { t.Errorf("removeAll failed: %s", err) } }() n := "github.com/carolynvs/deptest-importers" un := "https://" + n u, err := url.Parse(un) if err != nil { t.Fatalf("Error parsing URL %s: %s", un, err) } mb := maybeGitSource{ url: u, } ctx := context.Background() superv := newSupervisor(ctx) src, state, err := mb.try(ctx, cpath, newMemoryCache(), superv) if err != nil { t.Fatalf("Unexpected error while setting up gitSource for test repo: %s", err) } wantstate := sourceIsSetUp | sourceExistsUpstream | sourceHasLatestVersionList if state != wantstate { t.Errorf("Expected return state to be %v, got %v", wantstate, state) } err = src.initLocal(ctx) if err != nil { t.Fatalf("Error on cloning git repo: %s", err) } pvlist, err := src.listVersions(ctx) if err != nil { t.Fatalf("Unexpected error getting version pairs from git repo: %s", err) } for i := range pvlist { pv1 := pvlist[i] uv1 := pv1.Unpair() for j := range pvlist { if i == j { continue } pv2 := pvlist[j] uv2 := pv2.Unpair() if uv1 == uv2 { t.Errorf("duplicate version pair mapping from %#v to both %q and %q", uv1, pv1.Revision(), pv2.Revision()) } } } } func Test_bzrSource_exportRevisionTo_removeVcsFiles(t *testing.T) { t.Parallel() // This test is slow, so skip it on -short if testing.Short() { t.Skip("Skipping hg source version fetching test in short mode") } requiresBins(t, "bzr") h := test.NewHelper(t) defer h.Cleanup() h.TempDir("smcache") cpath := h.Path("smcache") repoPath := filepath.Join(h.Path("."), "repo") rev := Revision("matt@mattfarina.com-20150731135137-pbphasfppmygpl68") n := "launchpad.net/govcstestbzrrepo" un := "https://" + n u, err := url.Parse(un) if err != nil { t.Errorf("URL was bad, lolwut? errtext: %s", err) return } mb := maybeBzrSource{u} ctx := context.Background() superv := newSupervisor(ctx) isrc, _, err := mb.try(ctx, cpath, newMemoryCache(), superv) if err != nil { t.Fatalf("unexpected error while setting up hgSource for test repo: %s", err) } err = isrc.initLocal(ctx) if err != nil { t.Fatalf("Error on cloning bzr repo: %s", err) } src, ok := isrc.(*bzrSource) if !ok { t.Fatalf("expected a bzrSource, got a %T", isrc) } if err := src.exportRevisionTo(ctx, rev, repoPath); err != nil { t.Fatalf("unexpected error: %v", err) } _, err = os.Stat(filepath.Join(repoPath, ".bzr")) if err == nil { t.Fatal("expected .bzr/ to not exists") } else if !os.IsNotExist(err) { t.Fatalf("unexpected error: %v", err) } } func Test_hgSource_exportRevisionTo_removeVcsFiles(t *testing.T) { t.Parallel() // This test is slow, so skip it on -short if testing.Short() { t.Skip("Skipping hg source version fetching test in short mode") } requiresBins(t, "hg") h := test.NewHelper(t) defer h.Cleanup() h.TempDir("smcache") cpath := h.Path("smcache") repoPath := filepath.Join(h.Path("."), "repo") rev := Revision("6f55e1f03d91f8a7cce35d1968eb60a2352e4d59") n := "bitbucket.org/golang-dep/dep-test" un := "https://" + n u, err := url.Parse(un) if err != nil { t.Errorf("URL was bad, lolwut? errtext: %s", err) return } mb := maybeHgSource{u} ctx := context.Background() superv := newSupervisor(ctx) isrc, _, err := mb.try(ctx, cpath, newMemoryCache(), superv) if err != nil { t.Fatalf("unexpected error while setting up hgSource for test repo: %s", err) } err = isrc.initLocal(ctx) if err != nil { t.Fatalf("Error on cloning hg repo: %s", err) } src, ok := isrc.(*hgSource) if !ok { t.Fatalf("expected a hgSource, got a %T", isrc) } if err := src.exportRevisionTo(ctx, rev, repoPath); err != nil { t.Fatalf("unexpected error: %v", err) } _, err = os.Stat(filepath.Join(repoPath, ".hg")) if err == nil { t.Fatal("expected .hg/ to not exists") } else if !os.IsNotExist(err) { t.Fatalf("unexpected error: %v", err) } } // Fail a test if the specified binaries aren't installed. func requiresBins(t *testing.T, bins ...string) { for _, b := range bins { _, err := exec.LookPath(b) if err != nil { t.Fatalf("%s is not installed", b) } } } dep-0.3.2/internal/gps/vcs_version.go000066400000000000000000000032441317166637100175760ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "strings" "github.com/Masterminds/vcs" "github.com/pkg/errors" ) // VCSVersion returns the current project version for an absolute path. func VCSVersion(path string) (Version, error) { repo, err := vcs.NewRepo("", path) if err != nil { return nil, errors.Wrapf(err, "creating new repo for root: %s", path) } ver, err := repo.Current() if err != nil { return nil, errors.Wrapf(err, "finding current branch/version for root: %s", path) } rev, err := repo.Version() if err != nil { return nil, errors.Wrapf(err, "getting repo version for root: %s", path) } // First look through tags. tags, err := repo.Tags() if err != nil { return nil, errors.Wrapf(err, "getting repo tags for root: %s", path) } // Try to match the current version to a tag. if contains(tags, ver) { // Assume semver if it starts with a v. if strings.HasPrefix(ver, "v") { return NewVersion(ver).Pair(Revision(rev)), nil } return nil, errors.Errorf("version for root %s does not start with a v: %q", path, ver) } // Look for the current branch. branches, err := repo.Branches() if err != nil { return nil, errors.Wrapf(err, "getting repo branch for root: %s") } // Try to match the current version to a branch. if contains(branches, ver) { return NewBranch(ver).Pair(Revision(rev)), nil } return Revision(rev), nil } // contains checks if a array of strings contains a value func contains(a []string, b string) bool { for _, v := range a { if b == v { return true } } return false } dep-0.3.2/internal/gps/vcs_version_test.go000066400000000000000000000026021317166637100206320ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "path/filepath" "testing" "github.com/golang/dep/internal/test" ) func TestVCSVersion(t *testing.T) { if testing.Short() { t.Skip("Skipping slow test in short mode") } h := test.NewHelper(t) defer h.Cleanup() requiresBins(t, "git") h.TempDir("src") gopath := h.Path(".") h.Setenv("GOPATH", gopath) importPaths := map[string]struct { rev Version checkout bool }{ "github.com/pkg/errors": { rev: NewVersion("v0.8.0").Pair("645ef00459ed84a119197bfb8d8205042c6df63d"), // semver checkout: true, }, "github.com/sirupsen/logrus": { rev: Revision("42b84f9ec624953ecbf81a94feccb3f5935c5edf"), // random sha checkout: true, }, "github.com/rsc/go-get-default-branch": { rev: NewBranch("another-branch").Pair("8e6902fdd0361e8fa30226b350e62973e3625ed5"), }, } // checkout the specified revisions for ip, info := range importPaths { h.RunGo("get", ip) repoDir := h.Path("src/" + ip) if info.checkout { h.RunGit(repoDir, "checkout", info.rev.String()) } abs := filepath.FromSlash(filepath.Join(gopath, "src", ip)) got, err := VCSVersion(abs) h.Must(err) if got != info.rev { t.Fatalf("expected %q, got %q", got.String(), info.rev.String()) } } } dep-0.3.2/internal/gps/version.go000066400000000000000000000466561317166637100167410ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "sort" "github.com/Masterminds/semver" "github.com/golang/dep/internal/gps/internal/pb" ) // VersionType indicates a type for a Version that conveys some additional // semantics beyond that which is literally embedded on the Go type. type VersionType uint8 // VersionTypes for the four major classes of version we deal with const ( IsRevision VersionType = iota IsVersion IsSemver IsBranch ) // Version represents one of the different types of versions used by gps. // // Version composes Constraint, because all versions can be used as a constraint // (where they allow one, and only one, version - themselves), but constraints // are not necessarily discrete versions. // // Version is an interface, but it contains private methods, which restricts it // to gps's own internal implementations. We do this for the confluence of // two reasons: the implementation of Versions is complete (there is no case in // which we'd need other types), and the implementation relies on type magic // under the hood, which would be unsafe to do if other dynamic types could be // hiding behind the interface. type Version interface { Constraint // Indicates the type of version - Revision, Branch, Version, or Semver Type() VersionType } // PairedVersion represents a normal Version, but paired with its corresponding, // underlying Revision. type PairedVersion interface { Version // Revision returns the immutable Revision that identifies this Version. Revision() Revision // Unpair returns the surface-level UnpairedVersion that half of the pair. // // It does NOT modify the original PairedVersion Unpair() UnpairedVersion // Ensures it is impossible to be both a PairedVersion and an // UnpairedVersion _pair(int) } // UnpairedVersion represents a normal Version, with a method for creating a // VersionPair by indicating the version's corresponding, underlying Revision. type UnpairedVersion interface { Version // Pair takes the underlying Revision that this UnpairedVersion corresponds // to and unites them into a PairedVersion. Pair(Revision) PairedVersion // Ensures it is impossible to be both a PairedVersion and an // UnpairedVersion _pair(bool) } // types are weird func (branchVersion) _pair(bool) {} func (plainVersion) _pair(bool) {} func (semVersion) _pair(bool) {} func (versionPair) _pair(int) {} // NewBranch creates a new Version to represent a floating version (in // general, a branch). func NewBranch(body string) UnpairedVersion { return branchVersion{ name: body, // We always set isDefault to false here, because the property is // specifically designed to be internal-only: only the SourceManager // gets to mark it. This is OK because nothing that client code is // responsible for needs to care about has to touch it it. // // TODO(sdboyer) ...maybe. this just ugly. isDefault: false, } } func newDefaultBranch(body string) UnpairedVersion { return branchVersion{ name: body, isDefault: true, } } // NewVersion creates a Semver-typed Version if the provided version string is // valid semver, and a plain/non-semver version if not. func NewVersion(body string) UnpairedVersion { sv, err := semver.NewVersion(body) if err != nil { return plainVersion(body) } return semVersion{sv: sv} } // A Revision represents an immutable versioning identifier. type Revision string // String converts the Revision back into a string. func (r Revision) String() string { return string(r) } // ImpliedCaretString follows the same rules as String(), but in accordance with // the Constraint interface will always print a leading "=", as all Versions, // when acting as a Constraint, act as exact matches. func (r Revision) ImpliedCaretString() string { return r.String() } func (r Revision) typedString() string { return "r-" + string(r) } // Type indicates the type of version - for revisions, "revision". func (r Revision) Type() VersionType { return IsRevision } // Matches is the Revision acting as a constraint; it checks to see if the provided // version is the same Revision as itself. func (r Revision) Matches(v Version) bool { switch tv := v.(type) { case versionTypeUnion: return tv.Matches(r) case Revision: return r == tv case versionPair: return r == tv.r } return false } // MatchesAny is the Revision acting as a constraint; it checks to see if the provided // version is the same Revision as itself. func (r Revision) MatchesAny(c Constraint) bool { switch tc := c.(type) { case anyConstraint: return true case noneConstraint: return false case versionTypeUnion: return tc.MatchesAny(r) case Revision: return r == tc case versionPair: return r == tc.r } return false } // Intersect computes the intersection of the Constraint with the provided // Constraint. For Revisions, this can only be another, exactly equal // Revision, or a PairedVersion whose underlying Revision is exactly equal. func (r Revision) Intersect(c Constraint) Constraint { switch tc := c.(type) { case anyConstraint: return r case noneConstraint: return none case versionTypeUnion: return tc.Intersect(r) case Revision: if r == tc { return r } case versionPair: if r == tc.r { return r } } return none } func (r Revision) identical(c Constraint) bool { r2, ok := c.(Revision) if !ok { return false } return r == r2 } func (r Revision) copyTo(msg *pb.Constraint) { msg.Type = pb.Constraint_Revision msg.Value = string(r) } type branchVersion struct { name string isDefault bool } func (v branchVersion) String() string { return string(v.name) } func (v branchVersion) ImpliedCaretString() string { return v.String() } func (v branchVersion) typedString() string { return fmt.Sprintf("b-%s", v.String()) } func (v branchVersion) Type() VersionType { return IsBranch } func (v branchVersion) Matches(v2 Version) bool { switch tv := v2.(type) { case versionTypeUnion: return tv.Matches(v) case branchVersion: return v.name == tv.name case versionPair: if tv2, ok := tv.v.(branchVersion); ok { return tv2.name == v.name } } return false } func (v branchVersion) MatchesAny(c Constraint) bool { switch tc := c.(type) { case anyConstraint: return true case noneConstraint: return false case versionTypeUnion: return tc.MatchesAny(v) case branchVersion: return v.name == tc.name case versionPair: if tc2, ok := tc.v.(branchVersion); ok { return tc2.name == v.name } } return false } func (v branchVersion) Intersect(c Constraint) Constraint { switch tc := c.(type) { case anyConstraint: return v case noneConstraint: return none case versionTypeUnion: return tc.Intersect(v) case branchVersion: if v.name == tc.name { return v } case versionPair: if tc2, ok := tc.v.(branchVersion); ok { if v.name == tc2.name { return v } } } return none } func (v branchVersion) Pair(r Revision) PairedVersion { return versionPair{ v: v, r: r, } } func (v branchVersion) identical(c Constraint) bool { v2, ok := c.(branchVersion) if !ok { return false } return v == v2 } func (v branchVersion) copyTo(msg *pb.Constraint) { if v.isDefault { msg.Type = pb.Constraint_DefaultBranch } else { msg.Type = pb.Constraint_Branch } msg.Value = v.name } type plainVersion string func (v plainVersion) String() string { return string(v) } func (v plainVersion) ImpliedCaretString() string { return v.String() } func (v plainVersion) typedString() string { return fmt.Sprintf("pv-%s", v.String()) } func (v plainVersion) Type() VersionType { return IsVersion } func (v plainVersion) Matches(v2 Version) bool { switch tv := v2.(type) { case versionTypeUnion: return tv.Matches(v) case plainVersion: return v == tv case versionPair: if tv2, ok := tv.v.(plainVersion); ok { return tv2 == v } } return false } func (v plainVersion) MatchesAny(c Constraint) bool { switch tc := c.(type) { case anyConstraint: return true case noneConstraint: return false case versionTypeUnion: return tc.MatchesAny(v) case plainVersion: return v == tc case versionPair: if tc2, ok := tc.v.(plainVersion); ok { return tc2 == v } } return false } func (v plainVersion) Intersect(c Constraint) Constraint { switch tc := c.(type) { case anyConstraint: return v case noneConstraint: return none case versionTypeUnion: return tc.Intersect(v) case plainVersion: if v == tc { return v } case versionPair: if tc2, ok := tc.v.(plainVersion); ok { if v == tc2 { return v } } } return none } func (v plainVersion) Pair(r Revision) PairedVersion { return versionPair{ v: v, r: r, } } func (v plainVersion) identical(c Constraint) bool { v2, ok := c.(plainVersion) if !ok { return false } return v == v2 } func (v plainVersion) copyTo(msg *pb.Constraint) { msg.Type = pb.Constraint_Version msg.Value = string(v) } type semVersion struct { sv semver.Version } func (v semVersion) String() string { str := v.sv.Original() if str == "" { str = v.sv.String() } return str } func (v semVersion) ImpliedCaretString() string { return v.sv.ImpliedCaretString() } func (v semVersion) typedString() string { return fmt.Sprintf("sv-%s", v.String()) } func (v semVersion) Type() VersionType { return IsSemver } func (v semVersion) Matches(v2 Version) bool { switch tv := v2.(type) { case versionTypeUnion: return tv.Matches(v) case semVersion: return v.sv.Equal(tv.sv) case versionPair: if tv2, ok := tv.v.(semVersion); ok { return tv2.sv.Equal(v.sv) } } return false } func (v semVersion) MatchesAny(c Constraint) bool { switch tc := c.(type) { case anyConstraint: return true case noneConstraint: return false case versionTypeUnion: return tc.MatchesAny(v) case semVersion: return v.sv.Equal(tc.sv) case semverConstraint: return tc.Intersect(v) != none case versionPair: if tc2, ok := tc.v.(semVersion); ok { return tc2.sv.Equal(v.sv) } } return false } func (v semVersion) Intersect(c Constraint) Constraint { switch tc := c.(type) { case anyConstraint: return v case noneConstraint: return none case versionTypeUnion: return tc.Intersect(v) case semVersion: if v.sv.Equal(tc.sv) { return v } case semverConstraint: return tc.Intersect(v) case versionPair: if tc2, ok := tc.v.(semVersion); ok { if v.sv.Equal(tc2.sv) { return v } } } return none } func (v semVersion) Pair(r Revision) PairedVersion { return versionPair{ v: v, r: r, } } func (v semVersion) identical(c Constraint) bool { v2, ok := c.(semVersion) if !ok { return false } return v == v2 } func (v semVersion) copyTo(msg *pb.Constraint) { msg.Type = pb.Constraint_Semver msg.Value = v.String() //TODO better encoding which doesn't require re-parsing } type versionPair struct { v UnpairedVersion r Revision } func (v versionPair) String() string { return v.v.String() } func (v versionPair) ImpliedCaretString() string { return v.v.ImpliedCaretString() } func (v versionPair) typedString() string { return fmt.Sprintf("%s-%s", v.Unpair().typedString(), v.Revision().typedString()) } func (v versionPair) Type() VersionType { return v.v.Type() } func (v versionPair) Revision() Revision { return v.r } func (v versionPair) Unpair() UnpairedVersion { return v.v } func (v versionPair) Matches(v2 Version) bool { switch tv2 := v2.(type) { case versionTypeUnion: return tv2.Matches(v) case versionPair: return v.r == tv2.r case Revision: return v.r == tv2 } switch tv := v.v.(type) { case plainVersion, branchVersion: if tv.Matches(v2) { return true } case semVersion: if tv2, ok := v2.(semVersion); ok { if tv.sv.Equal(tv2.sv) { return true } } } return false } func (v versionPair) MatchesAny(c2 Constraint) bool { return c2.Matches(v) } func (v versionPair) Intersect(c2 Constraint) Constraint { switch tc := c2.(type) { case anyConstraint: return v case noneConstraint: return none case versionTypeUnion: return tc.Intersect(v) case versionPair: if v.r == tc.r { return v.r } case Revision: if v.r == tc { return v.r } case semverConstraint: if tv, ok := v.v.(semVersion); ok { if tc.Intersect(tv) == v.v { return v } } // If the semver intersection failed, we know nothing could work return none } switch tv := v.v.(type) { case plainVersion, branchVersion: if c2.Matches(v) { return v } case semVersion: if tv2, ok := c2.(semVersion); ok { if tv.sv.Equal(tv2.sv) { return v } } } return none } func (v versionPair) identical(c Constraint) bool { v2, ok := c.(versionPair) if !ok { return false } if v.r != v2.r { return false } return v.v.identical(v2.v) } func (v versionPair) copyTo(*pb.Constraint) { panic("versionPair should never be serialized; it is solver internal-only") } // compareVersionType is a sort func helper that makes a coarse-grained sorting // decision based on version type. // // Make sure that l and r have already been converted from versionPair (if // applicable). func compareVersionType(l, r Version) int { // Big fugly double type switch. No reflect, because this can be smack in a hot loop switch l.(type) { case Revision: switch r.(type) { case Revision: return 0 case branchVersion, plainVersion, semVersion: return 1 } case plainVersion: switch r.(type) { case Revision: return -1 case plainVersion: return 0 case branchVersion, semVersion: return 1 } case branchVersion: switch r.(type) { case Revision, plainVersion: return -1 case branchVersion: return 0 case semVersion: return 1 } case semVersion: switch r.(type) { case Revision, branchVersion, plainVersion: return -1 case semVersion: return 0 } } panic("unknown version type") } // SortForUpgrade sorts a slice of []Version in roughly descending order, so // that presumably newer versions are visited first. The rules are: // // - All semver versions come first, and sort mostly according to the semver // 2.0 spec (as implemented by github.com/Masterminds/semver lib), with one // exception: // - Semver versions with a prerelease are after *all* non-prerelease semver. // Within this subset they are sorted first by their numerical component, then // lexicographically by their prerelease version. // - The default branch(es) is next; the exact semantics of that are specific // to the underlying source. // - All other branches come next, sorted lexicographically. // - All non-semver versions (tags) are next, sorted lexicographically. // - Revisions, if any, are last, sorted lexicographically. Revisions do not // typically appear in version lists, so the only invariant we maintain is // determinism - deeper semantics, like chronology or topology, do not matter. // // So, given a slice of the following versions: // // - Branch: master devel // - Semver tags: v1.0.0, v1.1.0, v1.1.0-alpha1 // - Non-semver tags: footag // - Revision: f6e74e8d // // Sorting for upgrade will result in the following slice. // // [v1.1.0 v1.0.0 v1.1.0-alpha1 footag devel master f6e74e8d] func SortForUpgrade(vl []Version) { sort.Sort(upgradeVersionSorter(vl)) } // SortPairedForUpgrade has the same behavior as SortForUpgrade, but operates on // []PairedVersion types. func SortPairedForUpgrade(vl []PairedVersion) { sort.Sort(pvupgradeVersionSorter(vl)) } // SortForDowngrade sorts a slice of []Version in roughly ascending order, so // that presumably older versions are visited first. // // This is *not* the same as reversing SortForUpgrade (or you could simply // sort.Reverse()). The type precedence is the same, including the semver vs. // semver-with-prerelease relation. Lexicographical comparisons within // non-semver tags, branches, and revisions remains the same as well; because we // treat these domains as having no ordering relation, there can be no real // concept of "upgrade" vs "downgrade", so there is no reason to reverse them. // // Thus, the only binary relation that is reversed for downgrade is within-type // comparisons for semver. // // So, given a slice of the following versions: // // - Branch: master devel // - Semver tags: v1.0.0, v1.1.0, v1.1.0-alpha1 // - Non-semver tags: footag // - Revision: f6e74e8d // // Sorting for downgrade will result in the following slice. // // [v1.0.0 v1.1.0 v1.1.0-alpha1 footag devel master f6e74e8d] func SortForDowngrade(vl []Version) { sort.Sort(downgradeVersionSorter(vl)) } // SortPairedForDowngrade has the same behavior as SortForDowngrade, but // operates on []PairedVersion types. func SortPairedForDowngrade(vl []PairedVersion) { sort.Sort(pvdowngradeVersionSorter(vl)) } type upgradeVersionSorter []Version func (vs upgradeVersionSorter) Len() int { return len(vs) } func (vs upgradeVersionSorter) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } func (vs upgradeVersionSorter) Less(i, j int) bool { l, r := vs[i], vs[j] return vLess(l, r, false) } type pvupgradeVersionSorter []PairedVersion func (vs pvupgradeVersionSorter) Len() int { return len(vs) } func (vs pvupgradeVersionSorter) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } func (vs pvupgradeVersionSorter) Less(i, j int) bool { l, r := vs[i], vs[j] return vLess(l, r, false) } type downgradeVersionSorter []Version func (vs downgradeVersionSorter) Len() int { return len(vs) } func (vs downgradeVersionSorter) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } func (vs downgradeVersionSorter) Less(i, j int) bool { l, r := vs[i], vs[j] return vLess(l, r, true) } type pvdowngradeVersionSorter []PairedVersion func (vs pvdowngradeVersionSorter) Len() int { return len(vs) } func (vs pvdowngradeVersionSorter) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } func (vs pvdowngradeVersionSorter) Less(i, j int) bool { l, r := vs[i], vs[j] return vLess(l, r, true) } func vLess(l, r Version, down bool) bool { if tl, ispair := l.(versionPair); ispair { l = tl.v } if tr, ispair := r.(versionPair); ispair { r = tr.v } switch compareVersionType(l, r) { case -1: return true case 1: return false case 0: break default: panic("unreachable") } switch tl := l.(type) { case branchVersion: tr := r.(branchVersion) if tl.isDefault != tr.isDefault { // If they're not both defaults, then return the left val: if left // is the default, then it is "less" (true) b/c we want it earlier. // Else the right is the default, and so the left should be later // (false). return tl.isDefault } return l.String() < r.String() case Revision, plainVersion: // All that we can do now is alpha sort return l.String() < r.String() } // This ensures that pre-release versions are always sorted after ALL // full-release versions lsv, rsv := l.(semVersion).sv, r.(semVersion).sv lpre, rpre := lsv.Prerelease() == "", rsv.Prerelease() == "" if (lpre && !rpre) || (!lpre && rpre) { return lpre } if down { return lsv.LessThan(rsv) } return lsv.GreaterThan(rsv) } func hidePair(pvl []PairedVersion) []Version { vl := make([]Version, 0, len(pvl)) for _, v := range pvl { vl = append(vl, v) } return vl } // VersionComponentStrings decomposes a Version into the underlying number, branch and revision func VersionComponentStrings(v Version) (revision string, branch string, version string) { switch tv := v.(type) { case UnpairedVersion: case Revision: revision = tv.String() case PairedVersion: revision = tv.Revision().String() } switch v.Type() { case IsBranch: branch = v.String() case IsSemver, IsVersion: version = v.String() } return } dep-0.3.2/internal/gps/version_queue.go000066400000000000000000000075201317166637100201300ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "fmt" "strings" ) type failedVersion struct { v Version f error } type versionQueue struct { id ProjectIdentifier pi []Version lockv, prefv Version fails []failedVersion b sourceBridge failed bool allLoaded bool adverr error } func newVersionQueue(id ProjectIdentifier, lockv, prefv Version, b sourceBridge) (*versionQueue, error) { vq := &versionQueue{ id: id, b: b, } // Lock goes in first, if present if lockv != nil { vq.lockv = lockv vq.pi = append(vq.pi, lockv) } // Preferred version next if prefv != nil { vq.prefv = prefv vq.pi = append(vq.pi, prefv) } if len(vq.pi) == 0 { var err error vq.pi, err = vq.b.listVersions(vq.id) if err != nil { // TODO(sdboyer) pushing this error this early entails that we // unconditionally deep scan (e.g. vendor), as well as hitting the // network. return nil, err } vq.allLoaded = true } return vq, nil } func (vq *versionQueue) current() Version { if len(vq.pi) > 0 { return vq.pi[0] } return nil } // advance moves the versionQueue forward to the next available version, // recording the failure that eliminated the current version. func (vq *versionQueue) advance(fail error) error { // Nothing in the queue means...nothing in the queue, nicely enough if vq.adverr != nil || len(vq.pi) == 0 { // should be a redundant check, but just in case return vq.adverr } // Record the fail reason and pop the queue vq.fails = append(vq.fails, failedVersion{ v: vq.pi[0], f: fail, }) vq.pi = vq.pi[1:] // *now*, if the queue is empty, ensure all versions have been loaded if len(vq.pi) == 0 { if vq.allLoaded { // This branch gets hit when the queue is first fully exhausted, // after a previous advance() already called ListVersions(). return nil } vq.allLoaded = true var vltmp []Version vltmp, vq.adverr = vq.b.listVersions(vq.id) if vq.adverr != nil { return vq.adverr } // defensive copy - calling listVersions here means slice contents may // be modified when removing prefv/lockv. vq.pi = make([]Version, len(vltmp)) copy(vq.pi, vltmp) // search for and remove lockv and prefv, in a pointer GC-safe manner // // could use the version comparator for binary search here to avoid // O(n) each time...if it matters var delkeys []int for k, pi := range vq.pi { if pi == vq.lockv || pi == vq.prefv { delkeys = append(delkeys, k) } } for k, dk := range delkeys { dk -= k copy(vq.pi[dk:], vq.pi[dk+1:]) // write nil to final position for GC safety vq.pi[len(vq.pi)-1] = nil vq.pi = vq.pi[:len(vq.pi)-1] } if len(vq.pi) == 0 { // If listing versions added nothing (new), then return now return nil } } // We're finally sure that there's something in the queue. Remove the // failure marker, as the current version may have failed, but the next one // hasn't yet vq.failed = false // If all have been loaded and the queue is empty, we're definitely out // of things to try. Return empty, though, because vq semantics dictate // that we don't explicitly indicate the end of the queue here. return nil } // isExhausted indicates whether or not the queue has definitely been exhausted, // in which case it will return true. // // It may return false negatives - suggesting that there is more in the queue // when a subsequent call to current() will be empty. Plan accordingly. func (vq *versionQueue) isExhausted() bool { if !vq.allLoaded { return false } return len(vq.pi) == 0 } func (vq *versionQueue) String() string { var vs []string for _, v := range vq.pi { vs = append(vs, v.String()) } return fmt.Sprintf("[%s]", strings.Join(vs, ", ")) } dep-0.3.2/internal/gps/version_queue_test.go000066400000000000000000000166211317166637100211710ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "testing" "github.com/pkg/errors" ) // just need a listVersions method type fakeBridge struct { *bridge vl []Version } var fakevl = []Version{ NewVersion("v2.0.0").Pair("200rev"), NewVersion("v1.1.1").Pair("111rev"), NewVersion("v1.1.0").Pair("110rev"), NewVersion("v1.0.0").Pair("100rev"), NewBranch("master").Pair("masterrev"), } func init() { SortForUpgrade(fakevl) } func (fb *fakeBridge) listVersions(id ProjectIdentifier) ([]Version, error) { // it's a fixture, we only ever do the one, regardless of id return fb.vl, nil } type fakeFailBridge struct { *bridge } var errVQ = errors.New("vqerr") func (fb *fakeFailBridge) listVersions(id ProjectIdentifier) ([]Version, error) { return nil, errVQ } func TestVersionQueueSetup(t *testing.T) { id := ProjectIdentifier{ProjectRoot: ProjectRoot("foo")}.normalize() // shouldn't even need to embed a real bridge fb := &fakeBridge{vl: fakevl} ffb := &fakeFailBridge{} _, err := newVersionQueue(id, nil, nil, ffb) if err == nil { t.Error("Expected err when providing no prefv or lockv, and injected bridge returns err from ListVersions()") } vq, err := newVersionQueue(id, nil, nil, fb) if err != nil { t.Errorf("Unexpected err on vq create: %s", err) } else { if len(vq.pi) != 5 { t.Errorf("Should have five versions from listVersions() when providing no prefv or lockv; got %v:\n\t%s", len(vq.pi), vq.String()) } if !vq.allLoaded { t.Errorf("allLoaded flag should be set, but wasn't") } if vq.prefv != nil || vq.lockv != nil { t.Error("lockv and prefv should be nil") } if vq.current() != fakevl[0] { t.Errorf("current should be head of fakevl (%s), got %s", fakevl[0], vq.current()) } } lockv := fakevl[0] prefv := fakevl[1] vq, err = newVersionQueue(id, lockv, nil, fb) if err != nil { t.Errorf("Unexpected err on vq create: %s", err) } else { if len(vq.pi) != 1 { t.Errorf("Should have one version when providing only a lockv; got %v:\n\t%s", len(vq.pi), vq.String()) } if vq.allLoaded { t.Errorf("allLoaded flag should not be set") } if vq.lockv != lockv { t.Errorf("lockv should be %s, was %s", lockv, vq.lockv) } if vq.current() != lockv { t.Errorf("current should be lockv (%s), got %s", lockv, vq.current()) } } vq, err = newVersionQueue(id, nil, prefv, fb) if err != nil { t.Errorf("Unexpected err on vq create: %s", err) } else { if len(vq.pi) != 1 { t.Errorf("Should have one version when providing only a prefv; got %v:\n\t%s", len(vq.pi), vq.String()) } if vq.allLoaded { t.Errorf("allLoaded flag should not be set") } if vq.prefv != prefv { t.Errorf("prefv should be %s, was %s", prefv, vq.prefv) } if vq.current() != prefv { t.Errorf("current should be prefv (%s), got %s", prefv, vq.current()) } } vq, err = newVersionQueue(id, lockv, prefv, fb) if err != nil { t.Errorf("Unexpected err on vq create: %s", err) } else { if len(vq.pi) != 2 { t.Errorf("Should have two versions when providing both a prefv and lockv; got %v:\n\t%s", len(vq.pi), vq.String()) } if vq.allLoaded { t.Errorf("allLoaded flag should not be set") } if vq.prefv != prefv { t.Errorf("prefv should be %s, was %s", prefv, vq.prefv) } if vq.lockv != lockv { t.Errorf("lockv should be %s, was %s", lockv, vq.lockv) } if vq.current() != lockv { t.Errorf("current should be lockv (%s), got %s", lockv, vq.current()) } } } func TestVersionQueueAdvance(t *testing.T) { fb := &fakeBridge{vl: fakevl} id := ProjectIdentifier{ProjectRoot: ProjectRoot("foo")}.normalize() // First with no prefv or lockv vq, err := newVersionQueue(id, nil, nil, fb) if err != nil { t.Fatalf("Unexpected err on vq create: %s", err) } for k, v := range fakevl[1:] { err = vq.advance(errors.Errorf("advancment fail for %s", fakevl[k])) if err != nil { t.Errorf("error on advancing vq from %s to %s", fakevl[k], v) break } if vq.current() != v { t.Errorf("on advance() %v, current should be %s, got %s", k, v, vq.current()) } } if vq.isExhausted() { t.Error("should not be exhausted until advancing 'past' the end") } if err = vq.advance(errors.Errorf("final advance failure")); err != nil { t.Errorf("should not error on advance, even past end, but got %s", err) } if !vq.isExhausted() { t.Error("advanced past end, should now report exhaustion") } if vq.current() != nil { t.Error("advanced past end, current should return nil") } // now, do one with both a prefv and lockv lockv := fakevl[2] prefv := fakevl[0] vq, err = newVersionQueue(id, lockv, prefv, fb) if err != nil { t.Errorf("error creating version queue: %v", err) } if vq.String() != "[v1.1.0, v2.0.0]" { t.Error("stringifying vq did not have expected outcome, got", vq.String()) } if vq.isExhausted() { t.Error("can't be exhausted, we aren't even 'allLoaded' yet") } err = vq.advance(errors.Errorf("dequeue lockv")) if err != nil { t.Error("unexpected error when advancing past lockv", err) } else { if vq.current() != prefv { t.Errorf("current should be prefv (%s) after first advance, got %s", prefv, vq.current()) } if len(vq.pi) != 1 { t.Errorf("should have just prefv elem left in vq, but there are %v:\n\t%s", len(vq.pi), vq.String()) } } err = vq.advance(errors.Errorf("dequeue prefv")) if err != nil { t.Error("unexpected error when advancing past prefv", err) } else { if !vq.allLoaded { t.Error("allLoaded should now be true") } if len(vq.pi) != 3 { t.Errorf("should have three remaining versions after removing prefv and lockv, but there are %v:\n\t%s", len(vq.pi), vq.String()) } if vq.current() != fakevl[1] { t.Errorf("current should be first elem of fakevl (%s) after advancing into all, got %s", fakevl[1], vq.current()) } } // make sure the queue ordering is still right even with a double-delete vq.advance(nil) if vq.current() != fakevl[3] { t.Errorf("second elem after ListVersions() should be idx 3 of fakevl (%s), got %s", fakevl[3], vq.current()) } vq.advance(nil) if vq.current() != fakevl[4] { t.Errorf("third elem after ListVersions() should be idx 4 of fakevl (%s), got %s", fakevl[4], vq.current()) } vq.advance(nil) if vq.current() != nil || !vq.isExhausted() { t.Error("should be out of versions in the queue") } // Make sure we handle things correctly when listVersions adds nothing new fb = &fakeBridge{vl: []Version{lockv, prefv}} vq, err = newVersionQueue(id, lockv, prefv, fb) if err != nil { t.Errorf("error creating version queue: %v", err) } vq.advance(nil) vq.advance(nil) if vq.current() != nil || !vq.isExhausted() { t.Errorf("should have no versions left, as ListVersions() added nothing new, but still have %s", vq.String()) } err = vq.advance(nil) if err != nil { t.Errorf("should be fine to advance on empty queue, per docs, but got err %s", err) } // Also handle it well when advancing calls ListVersions() and it gets an // error vq, err = newVersionQueue(id, lockv, nil, &fakeFailBridge{}) if err != nil { t.Errorf("should not err on creation when preseeded with lockv, but got err %s", err) } err = vq.advance(nil) if err == nil { t.Error("advancing should trigger call to erroring bridge, but no err") } err = vq.advance(nil) if err == nil { t.Error("err should be stored for reuse on any subsequent calls") } } dep-0.3.2/internal/gps/version_test.go000066400000000000000000000115721317166637100177650ustar00rootroot00000000000000// Copyright 2017 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 gps import "testing" func TestVersionSorts(t *testing.T) { rev := Revision("flooboofoobooo") v1 := NewBranch("master").Pair(rev) v2 := NewBranch("test").Pair(rev) v3 := NewVersion("1.0.0").Pair(rev) v4 := NewVersion("1.0.1").Pair(rev) v5 := NewVersion("v2.0.5").Pair(rev) v6 := NewVersion("2.0.5.2").Pair(rev) v7 := newDefaultBranch("unwrapped").Pair(rev) v8 := NewVersion("20.0.5.2").Pair(rev) v9 := NewVersion("v1.5.5-beta.4").Pair(rev) v10 := NewVersion("v3.0.1-alpha.1").Pair(rev) start := []Version{ v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, rev, } down := make([]Version, len(start)) copy(down, start) up := make([]Version, len(start)) copy(up, start) edown := []Version{ v3, v4, v5, // semvers v9, v10, // prerelease semver v7, v1, v2, // floating/branches v6, v8, // plain versions rev, // revs } eup := []Version{ v5, v4, v3, // semvers v10, v9, // prerelease semver v7, v1, v2, // floating/branches v6, v8, // plain versions rev, // revs } SortForUpgrade(up) var wrong []int for k, v := range up { if eup[k] != v { wrong = append(wrong, k) t.Errorf("Expected version %s in position %v on upgrade sort, but got %s", eup[k], k, v) } } if len(wrong) > 0 { // Just helps with readability a bit t.Errorf("Upgrade sort positions with wrong versions: %v", wrong) } SortForDowngrade(down) wrong = wrong[:0] for k, v := range down { if edown[k] != v { wrong = append(wrong, k) t.Errorf("Expected version %s in position %v on downgrade sort, but got %s", edown[k], k, v) } } if len(wrong) > 0 { // Just helps with readability a bit t.Errorf("Downgrade sort positions with wrong versions: %v", wrong) } // Now make sure we sort back the other way correctly...just because SortForUpgrade(down) wrong = wrong[:0] for k, v := range down { if eup[k] != v { wrong = append(wrong, k) t.Errorf("Expected version %s in position %v on down-then-upgrade sort, but got %s", eup[k], k, v) } } if len(wrong) > 0 { // Just helps with readability a bit t.Errorf("Down-then-upgrade sort positions with wrong versions: %v", wrong) } // Now make sure we sort back the other way correctly...just because SortForDowngrade(up) wrong = wrong[:0] for k, v := range up { if edown[k] != v { wrong = append(wrong, k) t.Errorf("Expected version %s in position %v on up-then-downgrade sort, but got %s", edown[k], k, v) } } if len(wrong) > 0 { // Just helps with readability a bit t.Fatalf("Up-then-downgrade sort positions with wrong versions: %v", wrong) } /////////// // Repeat for PairedVersion slices & sorts pdown, pup := make([]PairedVersion, 0, len(start)), make([]PairedVersion, 0, len(start)) for _, v := range start { if _, ok := v.(Revision); ok { continue } pdown = append(pdown, v.(PairedVersion)) pup = append(pup, v.(PairedVersion)) } pedown, peup := make([]PairedVersion, 0, len(edown)), make([]PairedVersion, 0, len(eup)) for _, v := range edown { if _, ok := v.(Revision); ok { continue } pedown = append(pedown, v.(PairedVersion)) } for _, v := range eup { if _, ok := v.(Revision); ok { continue } peup = append(peup, v.(PairedVersion)) } SortPairedForUpgrade(pup) for k, v := range pup { if peup[k] != v { wrong = append(wrong, k) t.Errorf("Expected version %s in position %v on upgrade sort, but got %s", peup[k], k, v) } } if len(wrong) > 0 { // Just helps with readability a bit t.Errorf("Upgrade sort positions with wrong versions: %v", wrong) } SortPairedForDowngrade(pdown) wrong = wrong[:0] for k, v := range pdown { if pedown[k] != v { wrong = append(wrong, k) t.Errorf("Expected version %s in position %v on downgrade sort, but got %s", pedown[k], k, v) } } if len(wrong) > 0 { // Just helps with readability a bit t.Errorf("Downgrade sort positions with wrong versions: %v", wrong) } // Now make sure we sort back the other way correctly...just because SortPairedForUpgrade(pdown) wrong = wrong[:0] for k, v := range pdown { if peup[k] != v { wrong = append(wrong, k) t.Errorf("Expected version %s in position %v on down-then-upgrade sort, but got %s", peup[k], k, v) } } if len(wrong) > 0 { // Just helps with readability a bit t.Errorf("Down-then-upgrade sort positions with wrong versions: %v", wrong) } // Now make sure we sort back the other way correctly...just because SortPairedForDowngrade(pup) wrong = wrong[:0] for k, v := range pup { if pedown[k] != v { wrong = append(wrong, k) t.Errorf("Expected version %s in position %v on up-then-downgrade sort, but got %s", pedown[k], k, v) } } if len(wrong) > 0 { // Just helps with readability a bit t.Errorf("Up-then-downgrade sort positions with wrong versions: %v", wrong) } } dep-0.3.2/internal/gps/version_unifier.go000066400000000000000000000202301317166637100204360ustar00rootroot00000000000000// Copyright 2017 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 gps import "github.com/golang/dep/internal/gps/internal/pb" // versionUnifier facilitates cross-type version comparison and set operations. type versionUnifier struct { b sourceBridge mtr *metrics } // pairVersion takes an UnpairedVersion and attempts to pair it with an // underlying Revision in the context of the provided ProjectIdentifier by // consulting the canonical version list. func (vu versionUnifier) pairVersion(id ProjectIdentifier, v UnpairedVersion) PairedVersion { vl, err := vu.b.listVersions(id) if err != nil { return nil } vu.mtr.push("b-pair-version") // doing it like this is a bit sloppy for _, v2 := range vl { if p, ok := v2.(PairedVersion); ok { if p.Matches(v) { vu.mtr.pop() return p } } } vu.mtr.pop() return nil } // pairRevision takes a Revision and attempts to pair it with all possible // versionsby consulting the canonical version list of the provided // ProjectIdentifier. func (vu versionUnifier) pairRevision(id ProjectIdentifier, r Revision) []Version { vl, err := vu.b.listVersions(id) if err != nil { return nil } vu.mtr.push("b-pair-rev") p := []Version{r} // doing it like this is a bit sloppy for _, v2 := range vl { if pv, ok := v2.(PairedVersion); ok { if pv.Matches(r) { p = append(p, pv) } } } vu.mtr.pop() return p } // matches performs a typical match check between the provided version and // constraint. If that basic check fails and the provided version is incomplete // (e.g. an unpaired version or bare revision), it will attempt to gather more // information on one or the other and re-perform the comparison. func (vu versionUnifier) matches(id ProjectIdentifier, c Constraint, v Version) bool { if c.Matches(v) { return true } vu.mtr.push("b-matches") // This approach is slightly wasteful, but just SO much less verbose, and // more easily understood. vtu := vu.createTypeUnion(id, v) var uc Constraint if cv, ok := c.(Version); ok { uc = vu.createTypeUnion(id, cv) } else { uc = c } vu.mtr.pop() return uc.Matches(vtu) } // matchesAny is the authoritative version of Constraint.MatchesAny. func (vu versionUnifier) matchesAny(id ProjectIdentifier, c1, c2 Constraint) bool { if c1.MatchesAny(c2) { return true } vu.mtr.push("b-matches-any") // This approach is slightly wasteful, but just SO much less verbose, and // more easily understood. var uc1, uc2 Constraint if v1, ok := c1.(Version); ok { uc1 = vu.createTypeUnion(id, v1) } else { uc1 = c1 } if v2, ok := c2.(Version); ok { uc2 = vu.createTypeUnion(id, v2) } else { uc2 = c2 } vu.mtr.pop() return uc1.MatchesAny(uc2) } // intersect is the authoritative version of Constraint.Intersect. func (vu versionUnifier) intersect(id ProjectIdentifier, c1, c2 Constraint) Constraint { rc := c1.Intersect(c2) if rc != none { return rc } vu.mtr.push("b-intersect") // This approach is slightly wasteful, but just SO much less verbose, and // more easily understood. var uc1, uc2 Constraint if v1, ok := c1.(Version); ok { uc1 = vu.createTypeUnion(id, v1) } else { uc1 = c1 } if v2, ok := c2.(Version); ok { uc2 = vu.createTypeUnion(id, v2) } else { uc2 = c2 } vu.mtr.pop() return uc1.Intersect(uc2) } // createTypeUnion creates a versionTypeUnion for the provided version. // // This union may (and typically will) end up being nothing more than the single // input version, but creating a versionTypeUnion guarantees that 'local' // constraint checks (direct method calls) are authoritative. func (vu versionUnifier) createTypeUnion(id ProjectIdentifier, v Version) versionTypeUnion { switch tv := v.(type) { case Revision: return versionTypeUnion(vu.pairRevision(id, tv)) case PairedVersion: return versionTypeUnion(vu.pairRevision(id, tv.Revision())) case UnpairedVersion: pv := vu.pairVersion(id, tv) if pv == nil { return versionTypeUnion{tv} } return versionTypeUnion(vu.pairRevision(id, pv.Revision())) } return nil } // versionTypeUnion represents a set of versions that are, within the scope of // this solver run, equivalent. // // The simple case here is just a pair - a normal version plus its underlying // revision - but if a tag or branch point at the same rev, then we consider // them equivalent. Again, however, this equivalency is short-lived; it must be // re-assessed during every solver run. // // The union members are treated as being OR'd together: all constraint // operations attempt each member, and will take the most open/optimistic // answer. // // This technically does allow tags to match branches - something we otherwise // try hard to avoid - but because the original input constraint never actually // changes (and is never written out in the Solution), there's no harmful case // of a user suddenly riding a branch when they expected a fixed tag. type versionTypeUnion []Version // This should generally not be called, but is required for the interface. If it // is called, we have a bigger problem (the type has escaped the solver); thus, // panic. func (vtu versionTypeUnion) String() string { panic("versionTypeUnion should never be turned into a string; it is solver internal-only") } // This should generally not be called, but is required for the interface. If it // is called, we have a bigger problem (the type has escaped the solver); thus, // panic. func (vtu versionTypeUnion) ImpliedCaretString() string { panic("versionTypeUnion should never be turned into a string; it is solver internal-only") } func (vtu versionTypeUnion) typedString() string { panic("versionTypeUnion should never be turned into a string; it is solver internal-only") } // This should generally not be called, but is required for the interface. If it // is called, we have a bigger problem (the type has escaped the solver); thus, // panic. func (vtu versionTypeUnion) Type() VersionType { panic("versionTypeUnion should never need to answer a Type() call; it is solver internal-only") } // Matches takes a version, and returns true if that version matches any version // contained in the union. // // This DOES allow tags to match branches, albeit indirectly through a revision. func (vtu versionTypeUnion) Matches(v Version) bool { vtu2, otherIs := v.(versionTypeUnion) for _, v1 := range vtu { if otherIs { for _, v2 := range vtu2 { if v1.Matches(v2) { return true } } } else if v1.Matches(v) { return true } } return false } // MatchesAny returns true if any of the contained versions (which are also // constraints) in the union successfully MatchAny with the provided // constraint. func (vtu versionTypeUnion) MatchesAny(c Constraint) bool { vtu2, otherIs := c.(versionTypeUnion) for _, v1 := range vtu { if otherIs { for _, v2 := range vtu2 { if v1.MatchesAny(v2) { return true } } } else if v1.MatchesAny(c) { return true } } return false } // Intersect takes a constraint, and attempts to intersect it with all the // versions contained in the union until one returns non-none. If that never // happens, then none is returned. // // In order to avoid weird version floating elsewhere in the solver, the union // always returns the input constraint. (This is probably obviously correct, but // is still worth noting.) func (vtu versionTypeUnion) Intersect(c Constraint) Constraint { vtu2, otherIs := c.(versionTypeUnion) for _, v1 := range vtu { if otherIs { for _, v2 := range vtu2 { if rc := v1.Intersect(v2); rc != none { return rc } } } else if rc := v1.Intersect(c); rc != none { return rc } } return none } func (vtu versionTypeUnion) identical(c Constraint) bool { vtu2, ok := c.(versionTypeUnion) if !ok { return false } if len(vtu) != len(vtu2) { return false } used := make([]bool, len(vtu)) outter: for _, v := range vtu { for i, v2 := range vtu2 { if used[i] { continue } if v.identical(v2) { used[i] = true continue outter } } return false } return true } func (vtu versionTypeUnion) copyTo(*pb.Constraint) { panic("versionTypeUnion should never be serialized; it is solver internal-only") } dep-0.3.2/internal/gps/version_unifier_test.go000066400000000000000000000067231317166637100215100ustar00rootroot00000000000000// Copyright 2017 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 gps import ( "testing" "github.com/golang/dep/internal/gps/pkgtree" ) type lvFixBridge []Version var lvfb1 lvFixBridge func init() { rev1 := Revision("revision-one") rev2 := Revision("revision-two") rev3 := Revision("revision-three") lvfb1 = lvFixBridge{ NewBranch("master").Pair(rev1), NewBranch("test").Pair(rev2), NewVersion("1.0.0").Pair(rev1), NewVersion("1.0.1").Pair("other1"), NewVersion("v2.0.5").Pair(rev3), NewVersion("2.0.5.2").Pair(rev3), newDefaultBranch("unwrapped").Pair(rev3), NewVersion("20.0.5.2").Pair(rev1), NewVersion("v1.5.5-beta.4").Pair("other2"), NewVersion("v3.0.1-alpha.1").Pair(rev2), } } func (lb lvFixBridge) listVersions(ProjectIdentifier) ([]Version, error) { return lb, nil } func TestCreateTyepUnion(t *testing.T) { vu := versionUnifier{ b: lvfb1, mtr: newMetrics(), } rev1 := Revision("revision-one") rev2 := Revision("revision-two") id := mkPI("irrelevant") vtu := vu.createTypeUnion(id, rev1) if len(vtu) != 4 { t.Fatalf("wanted a type union with four elements, got %v: \n%#v", len(vtu), vtu) } vtu = vu.createTypeUnion(id, NewBranch("master")) if len(vtu) != 4 { t.Fatalf("wanted a type union with four elements, got %v: \n%#v", len(vtu), vtu) } vtu = vu.createTypeUnion(id, Revision("notexist")) if len(vtu) != 1 { t.Fatalf("wanted a type union with one elements, got %v: \n%#v", len(vtu), vtu) } vtu = vu.createTypeUnion(id, rev2) if len(vtu) != 3 { t.Fatalf("wanted a type union with three elements, got %v: \n%#v", len(vtu), vtu) } vtu = vu.createTypeUnion(id, nil) if vtu != nil { t.Fatalf("wanted a nil return on nil input, got %#v", vtu) } } func TestTypeUnionIntersect(t *testing.T) { vu := versionUnifier{ b: lvfb1, mtr: newMetrics(), } rev1 := Revision("revision-one") rev2 := Revision("revision-two") rev3 := Revision("revision-three") id := mkPI("irrelevant") c, _ := NewSemverConstraint("^2.0.0") gotc := vu.intersect(id, rev2, c) if gotc != none { t.Fatalf("wanted empty set from intersect, got %#v", gotc) } gotc = vu.intersect(id, c, rev1) if gotc != none { t.Fatalf("wanted empty set from intersect, got %#v", gotc) } gotc = vu.intersect(id, c, rev3) if gotc != NewVersion("v2.0.5").Pair(rev3) { t.Fatalf("wanted v2.0.5, got %s from intersect", gotc.typedString()) } } func (lb lvFixBridge) SourceExists(ProjectIdentifier) (bool, error) { panic("not implemented") } func (lb lvFixBridge) SyncSourceFor(ProjectIdentifier) error { panic("not implemented") } func (lb lvFixBridge) RevisionPresentIn(ProjectIdentifier, Revision) (bool, error) { panic("not implemented") } func (lb lvFixBridge) ListPackages(ProjectIdentifier, Version) (pkgtree.PackageTree, error) { panic("not implemented") } func (lb lvFixBridge) GetManifestAndLock(ProjectIdentifier, Version, ProjectAnalyzer) (Manifest, Lock, error) { panic("not implemented") } func (lb lvFixBridge) ExportProject(ProjectIdentifier, Version, string) error { panic("not implemented") } func (lb lvFixBridge) DeduceProjectRoot(ip string) (ProjectRoot, error) { panic("not implemented") } func (lb lvFixBridge) verifyRootDir(path string) error { panic("not implemented") } func (lb lvFixBridge) vendorCodeExists(ProjectIdentifier) (bool, error) { panic("not implemented") } func (lb lvFixBridge) breakLock() { panic("not implemented") } dep-0.3.2/internal/importers/000077500000000000000000000000001317166637100161375ustar00rootroot00000000000000dep-0.3.2/internal/importers/base/000077500000000000000000000000001317166637100170515ustar00rootroot00000000000000dep-0.3.2/internal/importers/base/importer.go000066400000000000000000000226721317166637100212520ustar00rootroot00000000000000// Copyright 2017 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 base import ( "log" "github.com/golang/dep" fb "github.com/golang/dep/internal/feedback" "github.com/golang/dep/internal/gps" "github.com/pkg/errors" ) // Importer provides a common implementation for importing from other // dependency managers. type Importer struct { sm gps.SourceManager Logger *log.Logger Verbose bool Manifest *dep.Manifest Lock *dep.Lock } // NewImporter creates a new Importer for embedding in an importer. func NewImporter(logger *log.Logger, verbose bool, sm gps.SourceManager) *Importer { return &Importer{ Logger: logger, Verbose: verbose, Manifest: dep.NewManifest(), Lock: &dep.Lock{}, sm: sm, } } // isTag determines if the specified value is a tag (plain or semver). func (i *Importer) isTag(pi gps.ProjectIdentifier, value string) (bool, gps.Version, error) { versions, err := i.sm.ListVersions(pi) if err != nil { return false, nil, errors.Wrapf(err, "unable to list versions for %s(%s)", pi.ProjectRoot, pi.Source) } for _, version := range versions { if version.Type() != gps.IsVersion && version.Type() != gps.IsSemver { continue } if value == version.String() { return true, version, nil } } return false, nil, nil } // lookupVersionForLockedProject figures out the appropriate version for a locked // project based on the locked revision and the constraint from the manifest. // First try matching the revision to a version, then try the constraint from the // manifest, then finally the revision. func (i *Importer) lookupVersionForLockedProject(pi gps.ProjectIdentifier, c gps.Constraint, rev gps.Revision) (gps.Version, error) { // Find the version that goes with this revision, if any versions, err := i.sm.ListVersions(pi) if err != nil { return rev, errors.Wrapf(err, "Unable to lookup the version represented by %s in %s(%s). Falling back to locking the revision only.", rev, pi.ProjectRoot, pi.Source) } var branchConstraint gps.PairedVersion gps.SortPairedForUpgrade(versions) // Sort versions in asc order matches := []gps.Version{} for _, v := range versions { if v.Revision() == rev { matches = append(matches, v) } if c != nil && v.Type() == gps.IsBranch && v.String() == c.String() { branchConstraint = v } } // Try to narrow down the matches with the constraint. Otherwise return the first match. if len(matches) > 0 { if c != nil { for _, v := range matches { if i.testConstraint(c, v) { return v, nil } } } return matches[0], nil } // Use branch constraint from the manifest if branchConstraint != nil { return branchConstraint.Unpair().Pair(rev), nil } // Give up and lock only to a revision return rev, nil } // ImportedPackage is a common intermediate representation of a package imported // from an external tool's configuration. type ImportedPackage struct { // Required. The package path, not necessarily the project root. Name string // Required. Text representing a revision or tag. LockHint string // Optional. Alternative source, or fork, for the project. Source string // Optional. Text representing a branch or version. ConstraintHint string } // importedProject is a consolidated representation of a set of imported packages // for the same project root. type importedProject struct { Root gps.ProjectRoot ImportedPackage } // loadPackages consolidates all package references into a set of project roots. func (i *Importer) loadPackages(packages []ImportedPackage) ([]importedProject, error) { // preserve the original order of the packages so that messages that // are printed as they are processed are in a consistent order. orderedProjects := make([]importedProject, 0, len(packages)) projects := make(map[gps.ProjectRoot]*importedProject, len(packages)) for _, pkg := range packages { pr, err := i.sm.DeduceProjectRoot(pkg.Name) if err != nil { return nil, errors.Wrapf(err, "Cannot determine the project root for %s", pkg.Name) } pkg.Name = string(pr) prj, exists := projects[pr] if !exists { prj := importedProject{pr, pkg} orderedProjects = append(orderedProjects, prj) projects[pr] = &orderedProjects[len(orderedProjects)-1] continue } // The config found first "wins", though we allow for incrementally // setting each field because some importers have a config and lock file. if prj.Source == "" && pkg.Source != "" { prj.Source = pkg.Source } if prj.ConstraintHint == "" && pkg.ConstraintHint != "" { prj.ConstraintHint = pkg.ConstraintHint } if prj.LockHint == "" && pkg.LockHint != "" { prj.LockHint = pkg.LockHint } } return orderedProjects, nil } // ImportPackages loads imported packages into the manifest and lock. // - defaultConstraintFromLock specifies if a constraint should be defaulted // based on the locked version when there wasn't a constraint hint. // // Rules: // * When a constraint is ignored, default to *. // * HEAD revisions default to the matching branch. // * Semantic versions default to ^VERSION. // * Revision constraints are ignored. // * Versions that don't satisfy the constraint, drop the constraint. // * Untagged revisions ignore non-branch constraint hints. func (i *Importer) ImportPackages(packages []ImportedPackage, defaultConstraintFromLock bool) (err error) { projects, err := i.loadPackages(packages) if err != nil { return err } for _, prj := range projects { source := prj.Source if len(source) > 0 { isDefault, err := i.isDefaultSource(prj.Root, source) if err != nil { i.Logger.Printf(" Ignoring imported source %s for %s: %s", source, prj.Root, err.Error()) source = "" } else if isDefault { source = "" } } pc := gps.ProjectConstraint{ Ident: gps.ProjectIdentifier{ ProjectRoot: prj.Root, Source: source, }, } pc.Constraint, err = i.sm.InferConstraint(prj.ConstraintHint, pc.Ident) if err != nil { pc.Constraint = gps.Any() } var version gps.Version if prj.LockHint != "" { var isTag bool // Determine if the lock hint is a revision or tag isTag, version, err = i.isTag(pc.Ident, prj.LockHint) if err != nil { return err } // If the hint is a revision, check if it is tagged if !isTag { revision := gps.Revision(prj.LockHint) version, err = i.lookupVersionForLockedProject(pc.Ident, pc.Constraint, revision) if err != nil { version = nil i.Logger.Println(err) } } // Default the constraint based on the locked version if defaultConstraintFromLock && prj.ConstraintHint == "" && version != nil { c := i.convertToConstraint(version) if c != nil { pc.Constraint = c } } } // Ignore pinned constraints if i.isConstraintPinned(pc.Constraint) { if i.Verbose { i.Logger.Printf(" Ignoring pinned constraint %v for %v.\n", pc.Constraint, pc.Ident) } pc.Constraint = gps.Any() } // Ignore constraints which conflict with the locked revision, so that // solve doesn't later change the revision to satisfy the constraint. if !i.testConstraint(pc.Constraint, version) { if i.Verbose { i.Logger.Printf(" Ignoring constraint %v for %v because it would invalidate the locked version %v.\n", pc.Constraint, pc.Ident, version) } pc.Constraint = gps.Any() } i.Manifest.Constraints[pc.Ident.ProjectRoot] = gps.ProjectProperties{ Source: pc.Ident.Source, Constraint: pc.Constraint, } fb.NewConstraintFeedback(pc, fb.DepTypeImported).LogFeedback(i.Logger) if version != nil { lp := gps.NewLockedProject(pc.Ident, version, nil) i.Lock.P = append(i.Lock.P, lp) fb.NewLockedProjectFeedback(lp, fb.DepTypeImported).LogFeedback(i.Logger) } } return nil } // isConstraintPinned returns if a constraint is pinned to a specific revision. func (i *Importer) isConstraintPinned(c gps.Constraint) bool { if version, isVersion := c.(gps.Version); isVersion { switch version.Type() { case gps.IsRevision, gps.IsVersion: return true } } return false } // testConstraint verifies that the constraint won't invalidate the locked version. func (i *Importer) testConstraint(c gps.Constraint, v gps.Version) bool { // Assume branch constraints are satisfied if version, isVersion := c.(gps.Version); isVersion { if version.Type() == gps.IsBranch { return true } } return c.Matches(v) } // convertToConstraint turns a version into a constraint. // Semver tags are converted to a range with the caret operator. func (i *Importer) convertToConstraint(v gps.Version) gps.Constraint { if v.Type() == gps.IsSemver { c, err := gps.NewSemverConstraintIC(v.String()) if err != nil { // This should never fail, because the type is semver. // If it does fail somehow, don't let that impact the import. return nil } return c } return v } func (i *Importer) isDefaultSource(projectRoot gps.ProjectRoot, sourceURL string) (bool, error) { // this condition is mainly for gopkg.in imports, // as some importers specify the repository url as https://gopkg.in/..., // but sm.SourceURLsForPath() returns https://github.com/... urls for gopkg.in if sourceURL == "https://"+string(projectRoot) { return true, nil } sourceURLs, err := i.sm.SourceURLsForPath(string(projectRoot)) if err != nil { return false, err } // The first url in the slice will be the default one (usually https://...) if len(sourceURLs) > 0 && sourceURL == sourceURLs[0].String() { return true, nil } return false, nil } dep-0.3.2/internal/importers/base/importer_test.go000066400000000000000000000251351317166637100223060ustar00rootroot00000000000000// 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 base import ( "log" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/importertest" "github.com/golang/dep/internal/test" ) func TestBaseImporter_IsTag(t *testing.T) { testcases := map[string]struct { input string wantIsTag bool wantTag gps.Version }{ "non-semver tag": { input: importertest.Beta1Tag, wantIsTag: true, wantTag: gps.NewVersion(importertest.Beta1Tag).Pair(importertest.Beta1Rev), }, "semver-tag": { input: importertest.V1PatchTag, wantIsTag: true, wantTag: gps.NewVersion(importertest.V1PatchTag).Pair(importertest.V1PatchRev)}, "untagged revision": { input: importertest.UntaggedRev, wantIsTag: false, }, "branch name": { input: importertest.V2Branch, wantIsTag: false, }, "empty": { input: "", wantIsTag: false, }, } pi := gps.ProjectIdentifier{ProjectRoot: importertest.Project} for name, tc := range testcases { name := name tc := tc t.Run(name, func(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() // Disable parallel tests until we can resolve this error on the Windows builds: // "remote repository at https://github.com/carolynvs/deptest-importers does not exist, or is inaccessible" //h.Parallel() ctx := importertest.NewTestContext(h) sm, err := ctx.SourceManager() h.Must(err) defer sm.Release() i := NewImporter(ctx.Err, ctx.Verbose, sm) gotIsTag, gotTag, err := i.isTag(pi, tc.input) h.Must(err) if tc.wantIsTag != gotIsTag { t.Fatalf("unexpected isTag result for %v: \n\t(GOT) %v \n\t(WNT) %v", tc.input, gotIsTag, tc.wantIsTag) } if tc.wantTag != gotTag { t.Fatalf("unexpected tag for %v: \n\t(GOT) %v \n\t(WNT) %v", tc.input, gotTag, tc.wantTag) } }) } } func TestBaseImporter_LookupVersionForLockedProject(t *testing.T) { testcases := map[string]struct { revision gps.Revision constraint gps.Constraint wantVersion string }{ "match revision to tag": { revision: importertest.V1PatchRev, wantVersion: importertest.V1PatchTag, }, "match revision with multiple tags using constraint": { revision: importertest.MultiTaggedRev, constraint: gps.NewVersion(importertest.MultiTaggedPlainTag), wantVersion: importertest.MultiTaggedPlainTag, }, "revision with multiple tags with no constraint defaults to best match": { revision: importertest.MultiTaggedRev, wantVersion: importertest.MultiTaggedSemverTag, }, "revision with multiple tags with nonmatching constraint defaults to best match": { revision: importertest.MultiTaggedRev, constraint: gps.NewVersion("thismatchesnothing"), wantVersion: importertest.MultiTaggedSemverTag, }, "untagged revision fallback to branch constraint": { revision: importertest.UntaggedRev, constraint: gps.NewBranch("master"), wantVersion: "master", }, "fallback to revision": { revision: importertest.UntaggedRev, wantVersion: importertest.UntaggedRev, }, } pi := gps.ProjectIdentifier{ProjectRoot: importertest.Project} for name, tc := range testcases { name := name tc := tc t.Run(name, func(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() // Disable parallel tests until we can resolve this error on the Windows builds: // "remote repository at https://github.com/carolynvs/deptest-importers does not exist, or is inaccessible" //h.Parallel() ctx := importertest.NewTestContext(h) sm, err := ctx.SourceManager() h.Must(err) defer sm.Release() i := NewImporter(ctx.Err, ctx.Verbose, sm) v, err := i.lookupVersionForLockedProject(pi, tc.constraint, tc.revision) h.Must(err) gotVersion := v.String() if gotVersion != tc.wantVersion { t.Fatalf("unexpected locked version: \n\t(GOT) %v\n\t(WNT) %v", gotVersion, tc.wantVersion) } }) } } func TestBaseImporter_ImportProjects(t *testing.T) { testcases := map[string]struct { importertest.TestCase projects []ImportedPackage }{ "tag constraints are ignored": { importertest.TestCase{ WantConstraint: "*", WantVersion: importertest.Beta1Tag, WantRevision: importertest.Beta1Rev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.Beta1Rev, ConstraintHint: importertest.Beta1Tag, }, }, }, "tag lock hints Lock to tagged revision": { importertest.TestCase{ WantConstraint: "*", WantVersion: importertest.Beta1Tag, WantRevision: importertest.Beta1Rev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.Beta1Tag, }, }, }, "untagged revision ignores range constraint": { importertest.TestCase{ WantConstraint: "*", WantRevision: importertest.UntaggedRev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.UntaggedRev, ConstraintHint: importertest.V1Constraint, }, }, }, "untagged revision keeps branch constraint": { importertest.TestCase{ WantConstraint: "master", WantVersion: "master", WantRevision: importertest.UntaggedRev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.UntaggedRev, ConstraintHint: "master", }, }, }, "HEAD revisions default constraint to the matching branch": { importertest.TestCase{ DefaultConstraintFromLock: true, WantConstraint: importertest.V2Branch, WantVersion: importertest.V2Branch, WantRevision: importertest.V2Rev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.V2Rev, }, }, }, "Semver tagged revisions default to ^VERSION": { importertest.TestCase{ DefaultConstraintFromLock: true, WantConstraint: importertest.V1Constraint, WantVersion: importertest.V1Tag, WantRevision: importertest.V1Rev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.V1Rev, }, }, }, "Semver lock hint defaults constraint to ^VERSION": { importertest.TestCase{ DefaultConstraintFromLock: true, WantConstraint: importertest.V1Constraint, WantVersion: importertest.V1Tag, WantRevision: importertest.V1Rev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.V1Tag, }, }, }, "Semver constraint hint": { importertest.TestCase{ WantConstraint: importertest.V1Constraint, WantVersion: importertest.V1PatchTag, WantRevision: importertest.V1PatchRev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.V1PatchRev, ConstraintHint: importertest.V1Constraint, }, }, }, "Semver prerelease lock hint": { importertest.TestCase{ WantConstraint: importertest.V2Branch, WantVersion: importertest.V2PatchTag, WantRevision: importertest.V2PatchRev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.V2PatchRev, ConstraintHint: importertest.V2Branch, }, }, }, "Revision constraints are ignored": { importertest.TestCase{ WantConstraint: "*", WantVersion: importertest.V1Tag, WantRevision: importertest.V1Rev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.V1Rev, ConstraintHint: importertest.V1Rev, }, }, }, "Branch constraint hint": { importertest.TestCase{ WantConstraint: "master", WantVersion: importertest.V1Tag, WantRevision: importertest.V1Rev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.V1Rev, ConstraintHint: "master", }, }, }, "Non-matching semver constraint is ignored": { importertest.TestCase{ WantConstraint: "*", WantVersion: importertest.V1Tag, WantRevision: importertest.V1Rev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.V1Rev, ConstraintHint: "^2.0.0", }, }, }, "git describe constraint is ignored": { importertest.TestCase{ WantConstraint: "*", WantRevision: importertest.UntaggedRev, }, []ImportedPackage{ { Name: importertest.Project, LockHint: importertest.UntaggedRev, ConstraintHint: importertest.UntaggedRevAbbrv, }, }, }, "consolidate subpackages under root": { importertest.TestCase{ WantConstraint: "master", WantVersion: "master", WantRevision: importertest.UntaggedRev, }, []ImportedPackage{ { Name: importertest.Project + "/subpkA", ConstraintHint: "master", }, { Name: importertest.Project, LockHint: importertest.UntaggedRev, }, }, }, "ignore duplicate packages": { importertest.TestCase{ WantConstraint: "*", WantRevision: importertest.UntaggedRev, }, []ImportedPackage{ { Name: importertest.Project + "/subpkgA", LockHint: importertest.UntaggedRev, // first wins }, { Name: importertest.Project + "/subpkgB", LockHint: importertest.V1Rev, }, }, }, "skip empty lock hints": { importertest.TestCase{ WantConstraint: "*", WantRevision: "", }, []ImportedPackage{ { Name: importertest.Project, LockHint: "", }, }, }, "alternate source": { importertest.TestCase{ WantConstraint: "*", WantSourceRepo: importertest.ProjectSrc, }, []ImportedPackage{ { Name: importertest.Project, Source: importertest.ProjectSrc, }, }, }, "ignoring default source": { importertest.TestCase{ WantConstraint: "*", WantSourceRepo: "", }, []ImportedPackage{ { Name: importertest.Project, Source: "https://" + importertest.Project, }, }, }, } for name, tc := range testcases { name := name tc := tc t.Run(name, func(t *testing.T) { err := tc.Execute(t, func(logger *log.Logger, sm gps.SourceManager) (*dep.Manifest, *dep.Lock, error) { i := NewImporter(logger, true, sm) convertErr := i.ImportPackages(tc.projects, tc.DefaultConstraintFromLock) return i.Manifest, i.Lock, convertErr }) if err != nil { t.Fatalf("%#v", err) } }) } } dep-0.3.2/internal/importers/glide/000077500000000000000000000000001317166637100172235ustar00rootroot00000000000000dep-0.3.2/internal/importers/glide/importer.go000066400000000000000000000130141317166637100214120ustar00rootroot00000000000000// 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 glide import ( "bytes" "io/ioutil" "log" "os" "path" "path/filepath" "github.com/go-yaml/yaml" "github.com/golang/dep" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/base" "github.com/pkg/errors" ) const glideYamlName = "glide.yaml" const glideLockName = "glide.lock" // Importer imports glide configuration into the dep configuration format. type Importer struct { *base.Importer glideConfig glideYaml glideLock glideLock lockFound bool } // NewImporter for glide. func NewImporter(logger *log.Logger, verbose bool, sm gps.SourceManager) *Importer { return &Importer{Importer: base.NewImporter(logger, verbose, sm)} } type glideYaml struct { Name string `yaml:"package"` Ignores []string `yaml:"ignore"` ExcludeDirs []string `yaml:"excludeDirs"` Imports []glidePackage `yaml:"import"` TestImports []glidePackage `yaml:"testImport"` } type glideLock struct { Imports []glideLockedPackage `yaml:"imports"` TestImports []glideLockedPackage `yaml:"testImports"` } type glidePackage struct { Name string `yaml:"package"` Reference string `yaml:"version"` // could contain a semver, tag or branch Repository string `yaml:"repo"` // Unsupported fields that we will warn if used Subpackages []string `yaml:"subpackages"` OS string `yaml:"os"` Arch string `yaml:"arch"` } type glideLockedPackage struct { Name string `yaml:"name"` Revision string `yaml:"version"` Repository string `yaml:"repo"` } // Name of the importer. func (g *Importer) Name() string { return "glide" } // HasDepMetadata checks if a directory contains config that the importer can handle. func (g *Importer) HasDepMetadata(dir string) bool { // Only require glide.yaml, the lock is optional y := filepath.Join(dir, glideYamlName) if _, err := os.Stat(y); err != nil { return false } return true } // Import the config found in the directory. func (g *Importer) Import(dir string, pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { err := g.load(dir) if err != nil { return nil, nil, err } return g.convert(pr) } // load the glide configuration files. func (g *Importer) load(projectDir string) error { g.Logger.Println("Detected glide configuration files...") y := filepath.Join(projectDir, glideYamlName) if g.Verbose { g.Logger.Printf(" Loading %s", y) } yb, err := ioutil.ReadFile(y) if err != nil { return errors.Wrapf(err, "unable to read %s", y) } err = yaml.Unmarshal(yb, &g.glideConfig) if err != nil { return errors.Wrapf(err, "unable to parse %s", y) } l := filepath.Join(projectDir, glideLockName) if exists, _ := fs.IsRegular(l); exists { if g.Verbose { g.Logger.Printf(" Loading %s", l) } g.lockFound = true lb, err := ioutil.ReadFile(l) if err != nil { return errors.Wrapf(err, "unable to read %s", l) } lock := glideLock{} err = yaml.Unmarshal(lb, &lock) if err != nil { return errors.Wrapf(err, "unable to parse %s", l) } g.glideLock = lock } return nil } // convert the glide configuration files into dep configuration files. func (g *Importer) convert(pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { projectName := string(pr) task := bytes.NewBufferString("Converting from glide.yaml") if g.lockFound { task.WriteString(" and glide.lock") } task.WriteString("...") g.Logger.Println(task) numPkgs := len(g.glideConfig.Imports) + len(g.glideConfig.TestImports) + len(g.glideLock.Imports) + len(g.glideLock.TestImports) packages := make([]base.ImportedPackage, 0, numPkgs) // Constraints for _, pkg := range append(g.glideConfig.Imports, g.glideConfig.TestImports...) { // Validate if pkg.Name == "" { return nil, nil, errors.New("invalid glide configuration: Name is required") } // Warn if g.Verbose { if pkg.OS != "" { g.Logger.Printf(" The %s package specified an os, but that isn't supported by dep yet, and will be ignored. See https://github.com/golang/dep/issues/291.\n", pkg.Name) } if pkg.Arch != "" { g.Logger.Printf(" The %s package specified an arch, but that isn't supported by dep yet, and will be ignored. See https://github.com/golang/dep/issues/291.\n", pkg.Name) } } ip := base.ImportedPackage{ Name: pkg.Name, Source: pkg.Repository, ConstraintHint: pkg.Reference, } packages = append(packages, ip) } // Locks for _, pkg := range append(g.glideLock.Imports, g.glideLock.TestImports...) { // Validate if pkg.Name == "" { return nil, nil, errors.New("invalid glide lock: Name is required") } ip := base.ImportedPackage{ Name: pkg.Name, Source: pkg.Repository, LockHint: pkg.Revision, } packages = append(packages, ip) } err := g.ImportPackages(packages, false) if err != nil { return nil, nil, errors.Wrap(err, "invalid glide configuration") } // Ignores g.Manifest.Ignored = append(g.Manifest.Ignored, g.glideConfig.Ignores...) if len(g.glideConfig.ExcludeDirs) > 0 { if g.glideConfig.Name != "" && g.glideConfig.Name != projectName { g.Logger.Printf(" Glide thinks the package is '%s' but dep thinks it is '%s', using dep's value.\n", g.glideConfig.Name, projectName) } for _, dir := range g.glideConfig.ExcludeDirs { pkg := path.Join(projectName, dir) g.Manifest.Ignored = append(g.Manifest.Ignored, pkg) } } return g.Manifest, g.Lock, nil } dep-0.3.2/internal/importers/glide/importer_test.go000066400000000000000000000124171317166637100224570ustar00rootroot00000000000000// 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 glide import ( "bytes" "log" "path/filepath" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/importertest" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) func TestGlideConfig_Convert(t *testing.T) { testCases := map[string]struct { yaml glideYaml lock glideLock importertest.TestCase }{ "project": { glideYaml{ Imports: []glidePackage{ { Name: importertest.Project, Repository: importertest.ProjectSrc, Reference: importertest.V2Branch, }, }, }, glideLock{ Imports: []glideLockedPackage{ { Name: importertest.Project, Repository: importertest.ProjectSrc, Revision: importertest.V2PatchRev, }, }, }, importertest.TestCase{ WantSourceRepo: importertest.ProjectSrc, WantConstraint: importertest.V2Branch, WantRevision: importertest.V2PatchRev, WantVersion: importertest.V2PatchTag, }, }, "test project": { glideYaml{ Imports: []glidePackage{ { Name: importertest.Project, Repository: importertest.ProjectSrc, Reference: importertest.V2Branch, }, }, }, glideLock{ Imports: []glideLockedPackage{ { Name: importertest.Project, Repository: importertest.ProjectSrc, Revision: importertest.V2PatchRev, }, }, }, importertest.TestCase{ WantSourceRepo: importertest.ProjectSrc, WantConstraint: importertest.V2Branch, WantRevision: importertest.V2PatchRev, WantVersion: importertest.V2PatchTag, }, }, "yaml only": { glideYaml{ Imports: []glidePackage{ { Name: importertest.Project, Repository: importertest.ProjectSrc, Reference: importertest.V2Branch, }, }, }, glideLock{}, importertest.TestCase{ WantSourceRepo: importertest.ProjectSrc, WantConstraint: importertest.V2Branch, }, }, "ignored package": { glideYaml{ Ignores: []string{importertest.Project}, }, glideLock{}, importertest.TestCase{ WantIgnored: []string{importertest.Project}, }, }, "exclude dir": { glideYaml{ ExcludeDirs: []string{"samples"}, }, glideLock{}, importertest.TestCase{ WantIgnored: []string{importertest.RootProject + "/samples"}, }, }, "exclude dir ignores mismatched package name": { glideYaml{ Name: "github.com/golang/mismatched-package-name", ExcludeDirs: []string{"samples"}, }, glideLock{}, importertest.TestCase{ WantIgnored: []string{importertest.RootProject + "/samples"}, }, }, "missing package name": { glideYaml{ Imports: []glidePackage{{Name: ""}}, }, glideLock{}, importertest.TestCase{ WantConvertErr: true, }, }, "warn unused os field": { glideYaml{ Imports: []glidePackage{ { Name: importertest.Project, OS: "windows", }, }}, glideLock{}, importertest.TestCase{ WantConstraint: "*", WantWarning: "specified an os", }, }, "warn unused arch field": { glideYaml{ Imports: []glidePackage{ { Name: importertest.Project, Arch: "i686", }, }}, glideLock{}, importertest.TestCase{ WantConstraint: "*", WantWarning: "specified an arch", }, }, } for name, testCase := range testCases { name := name testCase := testCase t.Run(name, func(t *testing.T) { err := testCase.Execute(t, func(logger *log.Logger, sm gps.SourceManager) (*dep.Manifest, *dep.Lock, error) { g := NewImporter(logger, true, sm) g.glideConfig = testCase.yaml g.glideLock = testCase.lock return g.convert(importertest.RootProject) }) if err != nil { t.Fatalf("%#v", err) } }) } } func TestGlideConfig_Import(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() ctx := importertest.NewTestContext(h) sm, err := ctx.SourceManager() h.Must(err) defer sm.Release() h.TempDir(filepath.Join("src", importertest.RootProject)) h.TempCopy(filepath.Join(importertest.RootProject, glideYamlName), "glide.yaml") h.TempCopy(filepath.Join(importertest.RootProject, glideLockName), "glide.lock") projectRoot := h.Path(importertest.RootProject) // Capture stderr so we can verify output verboseOutput := &bytes.Buffer{} ctx.Err = log.New(verboseOutput, "", 0) g := NewImporter(ctx.Err, false, sm) // Disable verbose so that we don't print values that change each test run if !g.HasDepMetadata(projectRoot) { t.Fatal("Expected the importer to detect the glide configuration files") } m, l, err := g.Import(projectRoot, importertest.RootProject) h.Must(err) if m == nil { t.Fatal("Expected the manifest to be generated") } if l == nil { t.Fatal("Expected the lock to be generated") } goldenFile := "golden.txt" got := verboseOutput.String() want := h.GetTestFileString(goldenFile) if want != got { if *test.UpdateGolden { if err := h.WriteTestFile(goldenFile, got); err != nil { t.Fatalf("%+v", errors.Wrapf(err, "Unable to write updated golden file %s", goldenFile)) } } else { t.Fatalf("want %s, got %s", want, got) } } } dep-0.3.2/internal/importers/glide/testdata/000077500000000000000000000000001317166637100210345ustar00rootroot00000000000000dep-0.3.2/internal/importers/glide/testdata/glide.lock000066400000000000000000000007101317166637100227700ustar00rootroot00000000000000hash: 16053c82a71f9bd509b05a4523df6bc418aed2083e4b8bd97a870bbc003256f8 updated: 2017-03-07T17:02:32.214383898-06:00 imports: - name: github.com/sdboyer/deptest repo: https://github.com/sdboyer/deptest.git vcs: git version: 3f4c3bea144e112a69bbe5d8d01c1b09a544253f - name: github.com/sdboyer/deptestdos version: 5c607206be5decd28e6263ffffdcee067266015e testImports: - name: github.com/golang/lint version: cb00e5669539f047b2f4c53a421a01b0c8e172c6 dep-0.3.2/internal/importers/glide/testdata/glide.yaml000066400000000000000000000007031317166637100230040ustar00rootroot00000000000000package: github.com/golang/notexist homepage: http://example.com license: MIT owners: - name: Sam Boyer email: sdboyer@example.com homepage: http://sdboyer.io ignore: - github.com/sdboyer/dep-test excludeDirs: - samples import: - package: github.com/sdboyer/deptest repo: https://github.com/sdboyer/deptest.git vcs: git version: master - package: github.com/sdboyer/deptestdos version: v2.0.0 testImport: - package: github.com/golang/lint dep-0.3.2/internal/importers/glide/testdata/golden.txt000066400000000000000000000010741317166637100230470ustar00rootroot00000000000000Detected glide configuration files... Converting from glide.yaml and glide.lock... Using master as initial constraint for imported dep github.com/sdboyer/deptest Trying v0.8.1 (3f4c3be) as initial lock for imported dep github.com/sdboyer/deptest Using ^2.0.0 as initial constraint for imported dep github.com/sdboyer/deptestdos Trying v2.0.0 (5c60720) as initial lock for imported dep github.com/sdboyer/deptestdos Using * as initial constraint for imported dep github.com/golang/lint Trying * (cb00e56) as initial lock for imported dep github.com/golang/lint dep-0.3.2/internal/importers/godep/000077500000000000000000000000001317166637100172355ustar00rootroot00000000000000dep-0.3.2/internal/importers/godep/importer.go000066400000000000000000000053031317166637100214260ustar00rootroot00000000000000// Copyright 2017 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 godep import ( "encoding/json" "io/ioutil" "log" "os" "path/filepath" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/base" "github.com/pkg/errors" ) const godepPath = "Godeps" + string(os.PathSeparator) + "Godeps.json" // Importer imports godep configuration into the dep configuration format. type Importer struct { *base.Importer json godepJSON } // NewImporter for godep. func NewImporter(logger *log.Logger, verbose bool, sm gps.SourceManager) *Importer { return &Importer{Importer: base.NewImporter(logger, verbose, sm)} } type godepJSON struct { Imports []godepPackage `json:"Deps"` } type godepPackage struct { ImportPath string `json:"ImportPath"` Rev string `json:"Rev"` Comment string `json:"Comment"` } // Name of the importer. func (g *Importer) Name() string { return "godep" } // HasDepMetadata checks if a directory contains config that the importer can handle. func (g *Importer) HasDepMetadata(dir string) bool { y := filepath.Join(dir, godepPath) if _, err := os.Stat(y); err != nil { return false } return true } // Import the config found in the directory. func (g *Importer) Import(dir string, pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { err := g.load(dir) if err != nil { return nil, nil, err } return g.convert(pr) } func (g *Importer) load(projectDir string) error { g.Logger.Println("Detected godep configuration files...") j := filepath.Join(projectDir, godepPath) if g.Verbose { g.Logger.Printf(" Loading %s", j) } jb, err := ioutil.ReadFile(j) if err != nil { return errors.Wrapf(err, "unable to read %s", j) } err = json.Unmarshal(jb, &g.json) if err != nil { return errors.Wrapf(err, "unable to parse %s", j) } return nil } func (g *Importer) convert(pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { g.Logger.Println("Converting from Godeps.json ...") packages := make([]base.ImportedPackage, 0, len(g.json.Imports)) for _, pkg := range g.json.Imports { // Validate if pkg.ImportPath == "" { err := errors.New("invalid godep configuration, ImportPath is required") return nil, nil, err } if pkg.Rev == "" { err := errors.New("invalid godep configuration, Rev is required") return nil, nil, err } ip := base.ImportedPackage{ Name: pkg.ImportPath, LockHint: pkg.Rev, ConstraintHint: pkg.Comment, } packages = append(packages, ip) } err := g.ImportPackages(packages, true) if err != nil { return nil, nil, err } return g.Manifest, g.Lock, nil } dep-0.3.2/internal/importers/godep/importer_test.go000066400000000000000000000112251317166637100224650ustar00rootroot00000000000000// Copyright 2017 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 godep import ( "bytes" "log" "path/filepath" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/importertest" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) func TestGodepConfig_Convert(t *testing.T) { testCases := map[string]struct { importertest.TestCase json godepJSON }{ "package without comment": { importertest.TestCase{ WantConstraint: importertest.V1Constraint, WantRevision: importertest.V1Rev, WantVersion: importertest.V1Tag, }, godepJSON{ Imports: []godepPackage{ { ImportPath: importertest.Project, Rev: importertest.V1Rev, }, }, }, }, "package with comment": { importertest.TestCase{ WantConstraint: importertest.V2Branch, WantRevision: importertest.V2PatchRev, WantVersion: importertest.V2PatchTag, }, godepJSON{ Imports: []godepPackage{ { ImportPath: importertest.Project, Rev: importertest.V2PatchRev, Comment: importertest.V2Branch, }, }, }, }, "missing package name": { importertest.TestCase{ WantConvertErr: true, }, godepJSON{ Imports: []godepPackage{{ImportPath: ""}}, }, }, "missing revision": { importertest.TestCase{ WantConvertErr: true, }, godepJSON{ Imports: []godepPackage{ { ImportPath: importertest.Project, }, }, }, }, } for name, testCase := range testCases { name := name testCase := testCase t.Run(name, func(t *testing.T) { err := testCase.Execute(t, func(logger *log.Logger, sm gps.SourceManager) (*dep.Manifest, *dep.Lock, error) { g := NewImporter(logger, true, sm) g.json = testCase.json return g.convert(importertest.RootProject) }) if err != nil { t.Fatalf("%#v", err) } }) } } func TestGodepConfig_Import(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() cacheDir := "gps-repocache" h.TempDir(cacheDir) h.TempDir("src") h.TempDir(filepath.Join("src", importertest.RootProject)) h.TempCopy(filepath.Join(importertest.RootProject, godepPath), "Godeps.json") projectRoot := h.Path(importertest.RootProject) sm, err := gps.NewSourceManager(gps.SourceManagerConfig{ Cachedir: h.Path(cacheDir), Logger: log.New(test.Writer{TB: t}, "", 0), }) h.Must(err) defer sm.Release() // Capture stderr so we can verify output verboseOutput := &bytes.Buffer{} logger := log.New(verboseOutput, "", 0) g := NewImporter(logger, false, sm) // Disable Verbose so that we don't print values that change each test run if !g.HasDepMetadata(projectRoot) { t.Fatal("Expected the importer to detect godep configuration file") } m, l, err := g.Import(projectRoot, importertest.RootProject) h.Must(err) if m == nil { t.Fatal("Expected the manifest to be generated") } if l == nil { t.Fatal("Expected the lock to be generated") } goldenFile := "golden.txt" got := verboseOutput.String() want := h.GetTestFileString(goldenFile) if want != got { if *test.UpdateGolden { if err := h.WriteTestFile(goldenFile, got); err != nil { t.Fatalf("%+v", errors.Wrapf(err, "Unable to write updated golden file %s", goldenFile)) } } else { t.Fatalf("want %s, got %s", want, got) } } } func TestGodepConfig_JsonLoad(t *testing.T) { // This is same as cmd/dep/testdata/init/Godeps.json wantJSON := godepJSON{ Imports: []godepPackage{ { ImportPath: "github.com/sdboyer/deptest", Rev: "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", }, { ImportPath: "github.com/sdboyer/deptestdos", Rev: "5c607206be5decd28e6263ffffdcee067266015e", Comment: "v2.0.0", }, }, } h := test.NewHelper(t) defer h.Cleanup() ctx := importertest.NewTestContext(h) h.TempCopy(filepath.Join(importertest.RootProject, godepPath), "Godeps.json") projectRoot := h.Path(importertest.RootProject) g := NewImporter(ctx.Err, true, nil) err := g.load(projectRoot) if err != nil { t.Fatalf("Error while loading... %v", err) } if !equalImports(g.json.Imports, wantJSON.Imports) { t.Fatalf("Expected imports to be equal. \n\t(GOT): %v\n\t(WNT): %v", g.json.Imports, wantJSON.Imports) } } // equalImports compares two slices of godepPackage and checks if they are // equal. func equalImports(a, b []godepPackage) bool { if a == nil && b == nil { return true } if a == nil || b == nil { return false } if len(a) != len(b) { return false } for i := range a { if a[i] != b[i] { return false } } return true } dep-0.3.2/internal/importers/godep/testdata/000077500000000000000000000000001317166637100210465ustar00rootroot00000000000000dep-0.3.2/internal/importers/godep/testdata/Godeps.json000066400000000000000000000005771317166637100231730ustar00rootroot00000000000000{ "ImportPath": "github.com/golang/notexist", "GoVersion": "go1.8", "GodepVersion": "vXYZ", "Deps": [ { "ImportPath": "github.com/sdboyer/deptest", "Rev": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" }, { "ImportPath": "github.com/sdboyer/deptestdos", "Comment": "v2.0.0", "Rev": "5c607206be5decd28e6263ffffdcee067266015e" } ] } dep-0.3.2/internal/importers/godep/testdata/golden.txt000066400000000000000000000006321317166637100230600ustar00rootroot00000000000000Detected godep configuration files... Converting from Godeps.json ... Using ^0.8.1 as initial constraint for imported dep github.com/sdboyer/deptest Trying v0.8.1 (3f4c3be) as initial lock for imported dep github.com/sdboyer/deptest Using ^2.0.0 as initial constraint for imported dep github.com/sdboyer/deptestdos Trying v2.0.0 (5c60720) as initial lock for imported dep github.com/sdboyer/deptestdos dep-0.3.2/internal/importers/govend/000077500000000000000000000000001317166637100174215ustar00rootroot00000000000000dep-0.3.2/internal/importers/govend/importer.go000066400000000000000000000054241317166637100216160ustar00rootroot00000000000000// Copyright 2017 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 govend import ( "io/ioutil" "log" "os" "path/filepath" "github.com/go-yaml/yaml" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/base" "github.com/pkg/errors" ) // ToDo: govend supports json and xml formats as well and we will add support for other formats in next PR - @RaviTezu // govend don't have a separate lock file. const govendYAMLName = "vendor.yml" // Importer imports govend configuration in to the dep configuration format. type Importer struct { *base.Importer yaml govendYAML } // NewImporter for govend. func NewImporter(logger *log.Logger, verbose bool, sm gps.SourceManager) *Importer { return &Importer{Importer: base.NewImporter(logger, verbose, sm)} } type govendYAML struct { Imports []govendPackage `yaml:"vendors"` } type govendPackage struct { Path string `yaml:"path"` Revision string `yaml:"rev"` } // Name of the importer. func (g *Importer) Name() string { return "govend" } // HasDepMetadata checks if a directory contains config that the importer can handle. func (g *Importer) HasDepMetadata(dir string) bool { y := filepath.Join(dir, govendYAMLName) if _, err := os.Stat(y); err != nil { return false } return true } // Import the config found in the directory. func (g *Importer) Import(dir string, pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { err := g.load(dir) if err != nil { return nil, nil, err } return g.convert(pr) } // load the govend configuration files. func (g *Importer) load(projectDir string) error { g.Logger.Println("Detected govend configuration files...") y := filepath.Join(projectDir, govendYAMLName) if g.Verbose { g.Logger.Printf(" Loading %s", y) } yb, err := ioutil.ReadFile(y) if err != nil { return errors.Wrapf(err, "unable to read %s", y) } err = yaml.Unmarshal(yb, &g.yaml) if err != nil { return errors.Wrapf(err, "unable to parse %s", y) } return nil } // convert the govend configuration files into dep configuration files. func (g *Importer) convert(pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { g.Logger.Println("Converting from vendor.yaml...") packages := make([]base.ImportedPackage, 0, len(g.yaml.Imports)) for _, pkg := range g.yaml.Imports { // Path must not be empty if pkg.Path == "" || pkg.Revision == "" { return nil, nil, errors.New("invalid govend configuration, path and rev are required") } ip := base.ImportedPackage{ Name: pkg.Path, LockHint: pkg.Revision, } packages = append(packages, ip) } err := g.ImportPackages(packages, true) if err != nil { return nil, nil, err } return g.Manifest, g.Lock, nil } dep-0.3.2/internal/importers/govend/importer_test.go000066400000000000000000000102651317166637100226540ustar00rootroot00000000000000// Copyright 2017 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 govend import ( "bytes" "log" "path/filepath" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/importertest" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) func TestGovendConfig_Convert(t *testing.T) { testCases := map[string]struct { yaml govendYAML importertest.TestCase }{ "package": { govendYAML{ Imports: []govendPackage{ { Path: importertest.Project, Revision: importertest.V1Rev, }, }, }, importertest.TestCase{ WantConstraint: importertest.V1Constraint, WantRevision: importertest.V1Rev, WantVersion: importertest.V1Tag, }, }, "missing package name": { govendYAML{ Imports: []govendPackage{ { Path: "", }, }, }, importertest.TestCase{ WantConvertErr: true, }, }, "missing revision": { govendYAML{ Imports: []govendPackage{ { Path: importertest.Project, }, }, }, importertest.TestCase{ WantConvertErr: true, }, }, } for name, testCase := range testCases { name := name testCase := testCase t.Run(name, func(t *testing.T) { err := testCase.Execute(t, func(logger *log.Logger, sm gps.SourceManager) (*dep.Manifest, *dep.Lock, error) { g := NewImporter(logger, true, sm) g.yaml = testCase.yaml return g.convert(importertest.RootProject) }) if err != nil { t.Fatalf("%#v", err) } }) } } func TestGovendConfig_Import(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() cacheDir := "gps-repocache" h.TempDir(cacheDir) h.TempDir("src") h.TempDir(filepath.Join("src", importertest.RootProject)) h.TempCopy(filepath.Join(importertest.RootProject, govendYAMLName), "vendor.yml") projectRoot := h.Path(importertest.RootProject) sm, err := gps.NewSourceManager(gps.SourceManagerConfig{Cachedir: h.Path(cacheDir)}) h.Must(err) defer sm.Release() // Capture stderr so we can verify the import output verboseOutput := &bytes.Buffer{} logger := log.New(verboseOutput, "", 0) // Disable Verbose so that we don't print values that change each test run g := NewImporter(logger, false, sm) if !g.HasDepMetadata(projectRoot) { t.Fatal("Expected the importer to detect govend configuration file") } m, l, err := g.Import(projectRoot, importertest.RootProject) h.Must(err) if m == nil { t.Fatal("Expected the manifest to be generated") } if l == nil { t.Fatal("Expected the lock to be generated") } govendImportOutputFile := "golden.txt" got := verboseOutput.String() want := h.GetTestFileString(govendImportOutputFile) if want != got { if *test.UpdateGolden { if err := h.WriteTestFile(govendImportOutputFile, got); err != nil { t.Fatalf("%+v", errors.Wrapf(err, "Unable to write updated golden file %s", govendImportOutputFile)) } } else { t.Fatalf("want %s, got %s", want, got) } } } func TestGovendConfig_YAMLLoad(t *testing.T) { // This is same as cmd/testdata/init/govend/vendor.yml wantYaml := govendYAML{ Imports: []govendPackage{ { Path: "github.com/sdboyer/deptest", Revision: "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", }, { Path: "github.com/sdboyer/deptestdos", Revision: "5c607206be5decd28e6263ffffdcee067266015e", }, }, } h := test.NewHelper(t) defer h.Cleanup() ctx := importertest.NewTestContext(h) h.TempCopy(filepath.Join(importertest.RootProject, govendYAMLName), "vendor.yml") projectRoot := h.Path(importertest.RootProject) g := NewImporter(ctx.Err, true, nil) err := g.load(projectRoot) if err != nil { t.Fatalf("Error while loading %v", err) } if !equalGovendImports(g.yaml.Imports, wantYaml.Imports) { t.Fatalf("Expected import to be equal. \n\t(GOT): %v\n\t(WNT): %v", g.yaml.Imports, wantYaml.Imports) } } func equalGovendImports(a, b []govendPackage) bool { if a == nil && b == nil { return true } if a == nil || b == nil { return false } if len(a) != len(b) { return false } for i := range a { if a[i] != b[i] { return false } } return true } dep-0.3.2/internal/importers/govend/testdata/000077500000000000000000000000001317166637100212325ustar00rootroot00000000000000dep-0.3.2/internal/importers/govend/testdata/golden.txt000066400000000000000000000006321317166637100232440ustar00rootroot00000000000000Detected govend configuration files... Converting from vendor.yaml... Using ^0.8.1 as initial constraint for imported dep github.com/sdboyer/deptest Trying v0.8.1 (3f4c3be) as initial lock for imported dep github.com/sdboyer/deptest Using ^2.0.0 as initial constraint for imported dep github.com/sdboyer/deptestdos Trying v2.0.0 (5c60720) as initial lock for imported dep github.com/sdboyer/deptestdos dep-0.3.2/internal/importers/govend/testdata/vendor.yml000066400000000000000000000002631317166637100232530ustar00rootroot00000000000000vendors: - path: github.com/sdboyer/deptest rev: 3f4c3bea144e112a69bbe5d8d01c1b09a544253f - path: github.com/sdboyer/deptestdos rev: 5c607206be5decd28e6263ffffdcee067266015e dep-0.3.2/internal/importers/gvt/000077500000000000000000000000001317166637100167375ustar00rootroot00000000000000dep-0.3.2/internal/importers/gvt/importer.go000066400000000000000000000063631317166637100211370ustar00rootroot00000000000000// Copyright 2017 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 gvt import ( "encoding/json" "io/ioutil" "log" "os" "path/filepath" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/base" "github.com/pkg/errors" ) const gvtPath = "vendor" + string(os.PathSeparator) + "manifest" // Importer imports gvt configuration into the dep configuration format. type Importer struct { *base.Importer gvtConfig gvtManifest } // NewImporter for gvt. It handles gb (gb-vendor) too as they share a common manifest file & format func NewImporter(logger *log.Logger, verbose bool, sm gps.SourceManager) *Importer { return &Importer{Importer: base.NewImporter(logger, verbose, sm)} } type gvtManifest struct { Deps []gvtPkg `json:"dependencies"` } type gvtPkg struct { ImportPath string Repository string Revision string Branch string } // Name of the importer. func (g *Importer) Name() string { return "gvt" } // HasDepMetadata checks if a directory contains config that the importer can handle. func (g *Importer) HasDepMetadata(dir string) bool { y := filepath.Join(dir, gvtPath) if _, err := os.Stat(y); err != nil { return false } return true } // Import the config found in the directory. func (g *Importer) Import(dir string, pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { err := g.load(dir) if err != nil { return nil, nil, err } return g.convert(pr) } func (g *Importer) load(projectDir string) error { g.Logger.Println("Detected gb/gvt configuration files...") j := filepath.Join(projectDir, gvtPath) if g.Verbose { g.Logger.Printf(" Loading %s", j) } jb, err := ioutil.ReadFile(j) if err != nil { return errors.Wrapf(err, "unable to read %s", j) } err = json.Unmarshal(jb, &g.gvtConfig) if err != nil { return errors.Wrapf(err, "unable to parse %s", j) } return nil } func (g *Importer) convert(pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { g.Logger.Println("Converting from vendor/manifest ...") packages := make([]base.ImportedPackage, 0, len(g.gvtConfig.Deps)) for _, pkg := range g.gvtConfig.Deps { // Validate if pkg.ImportPath == "" { err := errors.New("invalid gvt configuration, ImportPath is required") return nil, nil, err } if pkg.Revision == "" { err := errors.New("invalid gvt configuration, Revision is required") return nil, nil, err } var contstraintHint = "" if pkg.Branch == "HEAD" { // gb-vendor sets "branch" to "HEAD", if the package was feteched via -tag or -revision, // we pass the revision as the constraint hint contstraintHint = pkg.Revision } else if pkg.Branch != "master" { // both gvt & gb-vendor set "branch" to "master" unless a different branch was requested. // so it's not realy a constraint unless it's a different branch contstraintHint = pkg.Branch } ip := base.ImportedPackage{ Name: pkg.ImportPath, Source: pkg.Repository, LockHint: pkg.Revision, ConstraintHint: contstraintHint, } packages = append(packages, ip) } err := g.ImportPackages(packages, true) if err != nil { return nil, nil, err } return g.Manifest, g.Lock, nil } dep-0.3.2/internal/importers/gvt/importer_test.go000066400000000000000000000131241317166637100221670ustar00rootroot00000000000000// Copyright 2017 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 gvt import ( "bytes" "log" "path/filepath" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/importertest" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) func TestGvtConfig_Convert(t *testing.T) { testCases := map[string]struct { importertest.TestCase gvtConfig gvtManifest }{ "package with master branch": { importertest.TestCase{ WantConstraint: importertest.V1Constraint, WantRevision: importertest.V1Rev, WantVersion: importertest.V1Tag, }, gvtManifest{ Deps: []gvtPkg{ { ImportPath: importertest.Project, Revision: importertest.V1Rev, Branch: "master", }, }, }, }, "package with non-master branch": { importertest.TestCase{ WantConstraint: importertest.V2Branch, WantRevision: importertest.V2PatchRev, WantVersion: importertest.V2PatchTag, }, gvtManifest{ Deps: []gvtPkg{ { ImportPath: importertest.Project, Revision: importertest.V2PatchRev, Branch: importertest.V2Branch, }, }, }, }, "package with HEAD branch": { importertest.TestCase{ WantConstraint: "*", WantRevision: importertest.V1Rev, WantVersion: importertest.V1Tag, }, gvtManifest{ Deps: []gvtPkg{ { ImportPath: importertest.Project, Revision: importertest.V1Rev, Branch: "HEAD", }, }, }, }, "package with alternate repository": { importertest.TestCase{ WantConstraint: importertest.V1Constraint, WantRevision: importertest.V1Rev, WantVersion: importertest.V1Tag, WantSourceRepo: importertest.ProjectSrc, }, gvtManifest{ Deps: []gvtPkg{ { ImportPath: importertest.Project, Repository: importertest.ProjectSrc, Revision: importertest.V1Rev, Branch: "master", }, }, }, }, "missing package name": { importertest.TestCase{ WantConvertErr: true, }, gvtManifest{ Deps: []gvtPkg{{ImportPath: ""}}, }, }, "missing revision": { importertest.TestCase{ WantConvertErr: true, }, gvtManifest{ Deps: []gvtPkg{ { ImportPath: importertest.Project, }, }, }, }, } for name, testCase := range testCases { name := name testCase := testCase t.Run(name, func(t *testing.T) { err := testCase.Execute(t, func(logger *log.Logger, sm gps.SourceManager) (*dep.Manifest, *dep.Lock, error) { g := NewImporter(logger, true, sm) g.gvtConfig = testCase.gvtConfig return g.convert(importertest.RootProject) }) if err != nil { t.Fatalf("%#v", err) } }) } } func TestGvtConfig_Import(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() cacheDir := "gps-repocache" h.TempDir(cacheDir) h.TempDir("src") h.TempDir(filepath.Join("src", importertest.RootProject)) h.TempCopy(filepath.Join(importertest.RootProject, gvtPath), "manifest") projectRoot := h.Path(importertest.RootProject) sm, err := gps.NewSourceManager(gps.SourceManagerConfig{ Cachedir: h.Path(cacheDir), Logger: log.New(test.Writer{TB: t}, "", 0), }) h.Must(err) defer sm.Release() // Capture stderr so we can verify output verboseOutput := &bytes.Buffer{} logger := log.New(verboseOutput, "", 0) g := NewImporter(logger, false, sm) // Disable verbose so that we don't print values that change each test run if !g.HasDepMetadata(projectRoot) { t.Fatal("Expected the importer to detect gvt configuration file") } m, l, err := g.Import(projectRoot, importertest.RootProject) h.Must(err) if m == nil { t.Fatal("Expected the manifest to be generated") } if l == nil { t.Fatal("Expected the lock to be generated") } goldenFile := "golden.txt" got := verboseOutput.String() want := h.GetTestFileString(goldenFile) if want != got { if *test.UpdateGolden { if err := h.WriteTestFile(goldenFile, got); err != nil { t.Fatalf("%+v", errors.Wrapf(err, "Unable to write updated golden file %s", goldenFile)) } } else { t.Fatalf("want %s, got %s", want, got) } } } func TestGvtConfig_JsonLoad(t *testing.T) { // This is same as testdata/manifest wantConfig := gvtManifest{ Deps: []gvtPkg{ { ImportPath: "github.com/sdboyer/deptest", Revision: "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", Branch: "HEAD", }, { ImportPath: "github.com/sdboyer/deptestdos", Revision: "5c607206be5decd28e6263ffffdcee067266015e", Branch: "master", }, { ImportPath: "github.com/carolynvs/deptest-importers", Revision: "b79bc9482da8bb7402cdc3e3fd984db250718dd7", Branch: "v2", }, }, } h := test.NewHelper(t) defer h.Cleanup() ctx := importertest.NewTestContext(h) h.TempCopy(filepath.Join(importertest.RootProject, gvtPath), "manifest") projectRoot := h.Path(importertest.RootProject) g := NewImporter(ctx.Err, true, nil) err := g.load(projectRoot) if err != nil { t.Fatalf("Error while loading... %v", err) } if !equalImports(g.gvtConfig.Deps, wantConfig.Deps) { t.Fatalf("Expected imports to be equal. \n\t(GOT): %v\n\t(WNT): %v", g.gvtConfig.Deps, wantConfig.Deps) } } // equalImports compares two slices of gvtPkg and checks if they are // equal. func equalImports(a, b []gvtPkg) bool { if a == nil && b == nil { return true } if a == nil || b == nil { return false } if len(a) != len(b) { return false } for i := range a { if a[i] != b[i] { return false } } return true } dep-0.3.2/internal/importers/gvt/testdata/000077500000000000000000000000001317166637100205505ustar00rootroot00000000000000dep-0.3.2/internal/importers/gvt/testdata/golden.txt000066400000000000000000000011211317166637100225540ustar00rootroot00000000000000Detected gb/gvt configuration files... Converting from vendor/manifest ... Using * as initial constraint for imported dep github.com/sdboyer/deptest Trying v0.8.1 (3f4c3be) as initial lock for imported dep github.com/sdboyer/deptest Using ^2.0.0 as initial constraint for imported dep github.com/sdboyer/deptestdos Trying v2.0.0 (5c60720) as initial lock for imported dep github.com/sdboyer/deptestdos Using v2 as initial constraint for imported dep github.com/carolynvs/deptest-importers Trying v2 (b79bc94) as initial lock for imported dep github.com/carolynvs/deptest-importers dep-0.3.2/internal/importers/gvt/testdata/manifest000066400000000000000000000007471317166637100223110ustar00rootroot00000000000000{ "dependencies": [ { "importpath": "github.com/sdboyer/deptest", "revision": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", "branch": "HEAD" }, { "importpath": "github.com/sdboyer/deptestdos", "revision": "5c607206be5decd28e6263ffffdcee067266015e", "branch": "master" }, { "importpath": "github.com/carolynvs/deptest-importers", "revision": "b79bc9482da8bb7402cdc3e3fd984db250718dd7", "branch": "v2" } ] } dep-0.3.2/internal/importers/importers.go000066400000000000000000000024261317166637100205160ustar00rootroot00000000000000// Copyright 2017 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 importers import ( "log" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/glide" "github.com/golang/dep/internal/importers/godep" "github.com/golang/dep/internal/importers/govend" "github.com/golang/dep/internal/importers/gvt" "github.com/golang/dep/internal/importers/vndr" ) // Importer handles importing configuration from other dependency managers into // the dep configuration format. type Importer interface { // Name of the importer. Name() string // Import the config found in the directory. Import(path string, pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) // HasDepMetadata checks if a directory contains config that the importer can handle. HasDepMetadata(dir string) bool } // BuildAll returns a slice of all the importers. func BuildAll(logger *log.Logger, verbose bool, sm gps.SourceManager) []Importer { return []Importer{ glide.NewImporter(logger, verbose, sm), godep.NewImporter(logger, verbose, sm), vndr.NewImporter(logger, verbose, sm), govend.NewImporter(logger, verbose, sm), gvt.NewImporter(logger, verbose, sm), } } dep-0.3.2/internal/importers/importertest/000077500000000000000000000000001317166637100207005ustar00rootroot00000000000000dep-0.3.2/internal/importers/importertest/testcase.go000066400000000000000000000121751317166637100230500ustar00rootroot00000000000000// 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 importertest import ( "bytes" "io/ioutil" "log" "sort" "strings" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) // TestCase is a common set of validations applied to the result // of an importer converting from an external config format to dep's. type TestCase struct { DefaultConstraintFromLock bool WantConvertErr bool WantSourceRepo string WantConstraint string WantRevision gps.Revision WantVersion string WantIgnored []string WantWarning string } // NewTestContext creates a unique context with its own GOPATH for a single test. func NewTestContext(h *test.Helper) *dep.Ctx { h.TempDir("src") pwd := h.Path(".") discardLogger := log.New(ioutil.Discard, "", 0) return &dep.Ctx{ GOPATH: pwd, Out: discardLogger, Err: discardLogger, } } // Execute and validate the test case. func (tc TestCase) Execute(t *testing.T, convert func(logger *log.Logger, sm gps.SourceManager) (*dep.Manifest, *dep.Lock, error)) error { h := test.NewHelper(t) defer h.Cleanup() // Disable parallel tests until we can resolve this error on the Windows builds: // "remote repository at https://github.com/carolynvs/deptest-importers does not exist, or is inaccessible" //h.Parallel() ctx := NewTestContext(h) sm, err := ctx.SourceManager() h.Must(err) defer sm.Release() // Capture stderr so we can verify warnings output := &bytes.Buffer{} ctx.Err = log.New(output, "", 0) manifest, lock, convertErr := convert(ctx.Err, sm) return tc.validate(manifest, lock, convertErr, output) } // validate returns an error if any of the testcase validations failed. func (tc TestCase) validate(manifest *dep.Manifest, lock *dep.Lock, convertErr error, output *bytes.Buffer) error { if tc.WantConvertErr { if convertErr == nil { return errors.New("Expected the conversion to fail, but it did not return an error") } return nil } if convertErr != nil { return errors.Wrap(convertErr, "Expected the conversion to pass, but it returned an error") } if !equalSlice(manifest.Ignored, tc.WantIgnored) { return errors.Errorf("unexpected set of ignored projects: \n\t(GOT) %v \n\t(WNT) %v", manifest.Ignored, tc.WantIgnored) } wantConstraintCount := 0 if tc.WantConstraint != "" { wantConstraintCount = 1 } gotConstraintCount := len(manifest.Constraints) if gotConstraintCount != wantConstraintCount { return errors.Errorf("unexpected number of constraints: \n\t(GOT) %v \n\t(WNT) %v", gotConstraintCount, wantConstraintCount) } if tc.WantConstraint != "" { d, ok := manifest.Constraints[Project] if !ok { return errors.Errorf("Expected the manifest to have a dependency for '%v'", Project) } gotConstraint := d.Constraint.String() if gotConstraint != tc.WantConstraint { return errors.Errorf("unexpected constraint: \n\t(GOT) %v \n\t(WNT) %v", gotConstraint, tc.WantConstraint) } } // Lock checks. wantLockCount := 0 if tc.WantRevision != "" { wantLockCount = 1 } gotLockCount := 0 if lock != nil { gotLockCount = len(lock.P) } if gotLockCount != wantLockCount { return errors.Errorf("unexpected number of locked projects: \n\t(GOT) %v \n\t(WNT) %v", gotLockCount, wantLockCount) } if tc.WantRevision != "" { lp := lock.P[0] gotProjectRoot := lp.Ident().ProjectRoot if gotProjectRoot != Project { return errors.Errorf("unexpected root project in lock: \n\t(GOT) %v \n\t(WNT) %v", gotProjectRoot, Project) } gotSource := lp.Ident().Source if gotSource != tc.WantSourceRepo { return errors.Errorf("unexpected source repository: \n\t(GOT) %v \n\t(WNT) %v", gotSource, tc.WantSourceRepo) } // Break down the locked "version" into a version (optional) and revision var gotVersion string var gotRevision gps.Revision if lpv, ok := lp.Version().(gps.PairedVersion); ok { gotVersion = lpv.String() gotRevision = lpv.Revision() } else if lr, ok := lp.Version().(gps.Revision); ok { gotRevision = lr } else { return errors.New("could not determine the type of the locked version") } if gotRevision != tc.WantRevision { return errors.Errorf("unexpected locked revision: \n\t(GOT) %v \n\t(WNT) %v", gotRevision, tc.WantRevision) } if gotVersion != tc.WantVersion { return errors.Errorf("unexpected locked version: \n\t(GOT) %v \n\t(WNT) %v", gotVersion, tc.WantVersion) } } if tc.WantWarning != "" { if !strings.Contains(output.String(), tc.WantWarning) { return errors.Errorf("Expected the output to include the warning '%s'", tc.WantWarning) } } return nil } // equalSlice is comparing two string slices for equality. func equalSlice(a, b []string) bool { if a == nil && b == nil { return true } if a == nil || b == nil { return false } if len(a) != len(b) { return false } sort.Strings(a) sort.Strings(b) for i := range a { if a[i] != b[i] { return false } } return true } dep-0.3.2/internal/importers/importertest/testdata.go000066400000000000000000000037661317166637100230540ustar00rootroot00000000000000// 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 importertest const ( // RootProject is the containing project performing the import. RootProject = "github.com/golang/notexist" // Project being imported. Project = "github.com/carolynvs/deptest-importers" // ProjectSrc is an alternate source for the imported project. ProjectSrc = "https://github.com/carolynvs/deptest-importers.git" // UntaggedRev is a revision without any tags. UntaggedRev = "9b670d143bfb4a00f7461451d5c4a62f80e9d11d" // UntaggedRevAbbrv is the result of running `git describe` on UntaggedRev UntaggedRevAbbrv = "v1.0.0-1-g9b670d1" // Beta1Tag is a non-semver tag. Beta1Tag = "beta1" // Beta1Rev is the revision of Beta1Tag Beta1Rev = "7913ab26988c6fb1e16225f845a178e8849dd254" // V2Branch is a branch that could be interpreted as a semver tag (but shouldn't). V2Branch = "v2" // V2Rev is the HEAD revision of V2Branch. V2Rev = "45dcf5a09c64b48b6e836028a3bc672b19b9d11d" // V2PatchTag is a prerelease semver tag on the non-default branch. V2PatchTag = "v2.0.0-alpha1" // V2PatchRev is the revision of V2PatchTag. V2PatchRev = "347760b50204948ea63e531dd6560e56a9adde8f" // V1Tag is a semver tag that matches V1Constraint. V1Tag = "v1.0.0" // V1Rev is the revision of V1Tag. V1Rev = "d0c29640b17f77426b111f4c1640d716591aa70e" // V1PatchTag is a semver tag that matches V1Constraint. V1PatchTag = "v1.0.2" // V1PatchRev is the revision of V1PatchTag V1PatchRev = "788963efe22e3e6e24c776a11a57468bb2fcd780" // V1Constraint is a constraint that matches multiple semver tags. V1Constraint = "^1.0.0" // MultiTaggedRev is a revision with multiple tags. MultiTaggedRev = "34cf993cc346f65601fe4356dd68bd54d20a1bfe" // MultiTaggedSemverTag is a semver tag on MultiTaggedRev. MultiTaggedSemverTag = "v1.0.4" // MultiTaggedPlainTag is a non-semver tag on MultiTaggedRev. MultiTaggedPlainTag = "stable" ) dep-0.3.2/internal/importers/vndr/000077500000000000000000000000001317166637100171105ustar00rootroot00000000000000dep-0.3.2/internal/importers/vndr/importer.go000066400000000000000000000064411317166637100213050ustar00rootroot00000000000000// Copyright 2017 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 vndr import ( "bufio" "log" "os" "path/filepath" "strings" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/base" "github.com/pkg/errors" ) func vndrFile(dir string) string { return filepath.Join(dir, "vendor.conf") } // Importer imports vndr configuration into the dep configuration format. type Importer struct { *base.Importer packages []vndrPackage } // NewImporter for vndr. func NewImporter(log *log.Logger, verbose bool, sm gps.SourceManager) *Importer { return &Importer{Importer: base.NewImporter(log, verbose, sm)} } // Name of the importer. func (v *Importer) Name() string { return "vndr" } // HasDepMetadata checks if a directory contains config that the importer can handle. func (v *Importer) HasDepMetadata(dir string) bool { _, err := os.Stat(vndrFile(dir)) return err == nil } // Import the config found in the directory. func (v *Importer) Import(dir string, pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { v.Logger.Println("Detected vndr configuration file...") err := v.loadVndrFile(dir) if err != nil { return nil, nil, errors.Wrapf(err, "unable to load vndr file") } return v.convert(pr) } func (v *Importer) loadVndrFile(dir string) error { v.Logger.Printf("Converting from vendor.conf...") f, err := os.Open(vndrFile(dir)) if err != nil { return errors.Wrapf(err, "unable to open %s", vndrFile(dir)) } defer f.Close() scanner := bufio.NewScanner(f) for scanner.Scan() { pkg, err := parseVndrLine(scanner.Text()) if err != nil { return errors.Wrapf(err, "unable to parse line") } if pkg == nil { // Could be an empty line or one which is just a comment continue } v.packages = append(v.packages, *pkg) } if scanner.Err() != nil { return errors.Wrapf(err, "unable to read %s", vndrFile(dir)) } return nil } func (v *Importer) convert(pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) { packages := make([]base.ImportedPackage, 0, len(v.packages)) for _, pkg := range v.packages { // Validate if pkg.importPath == "" { err := errors.New("invalid vndr configuration: import path is required") return nil, nil, err } if pkg.reference == "" { err := errors.New("invalid vndr configuration: revision is required") return nil, nil, err } ip := base.ImportedPackage{ Name: pkg.importPath, Source: pkg.repository, LockHint: pkg.reference, } packages = append(packages, ip) } err := v.ImportPackages(packages, true) if err != nil { return nil, nil, err } return v.Manifest, v.Lock, nil } type vndrPackage struct { importPath string reference string repository string } func parseVndrLine(line string) (*vndrPackage, error) { commentIdx := strings.Index(line, "#") if commentIdx >= 0 { line = line[:commentIdx] } line = strings.TrimSpace(line) if line == "" { return nil, nil } parts := strings.Fields(line) if !(len(parts) == 2 || len(parts) == 3) { return nil, errors.Errorf("invalid config format: %q", line) } pkg := &vndrPackage{ importPath: parts[0], reference: parts[1], } if len(parts) == 3 { pkg.repository = parts[2] } return pkg, nil } dep-0.3.2/internal/importers/vndr/importer_test.go000066400000000000000000000131751317166637100223460ustar00rootroot00000000000000// Copyright 2017 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 vndr import ( "bytes" "log" "path/filepath" "reflect" "testing" "github.com/golang/dep" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/importers/importertest" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) func TestVndrConfig_Convert(t *testing.T) { testCases := map[string]struct { packages []vndrPackage importertest.TestCase }{ "package": { []vndrPackage{{ importPath: importertest.Project, reference: importertest.V1Rev, repository: importertest.ProjectSrc, }}, importertest.TestCase{ WantSourceRepo: importertest.ProjectSrc, WantConstraint: importertest.V1Constraint, WantRevision: importertest.V1Rev, WantVersion: importertest.V1Tag, }, }, "missing importPath": { []vndrPackage{{ reference: importertest.V1Tag, }}, importertest.TestCase{ WantConvertErr: true, }, }, "missing reference": { []vndrPackage{{ importPath: importertest.Project, }}, importertest.TestCase{ WantConvertErr: true, }, }, } for name, testCase := range testCases { name := name testCase := testCase t.Run(name, func(t *testing.T) { err := testCase.Execute(t, func(logger *log.Logger, sm gps.SourceManager) (*dep.Manifest, *dep.Lock, error) { g := NewImporter(logger, true, sm) g.packages = testCase.packages return g.convert(importertest.RootProject) }) if err != nil { t.Fatalf("%#v", err) } }) } } func TestVndrConfig_Import(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() ctx := importertest.NewTestContext(h) sm, err := ctx.SourceManager() h.Must(err) defer sm.Release() h.TempDir(filepath.Join("src", importertest.RootProject)) h.TempCopy(vndrFile(importertest.RootProject), "vendor.conf") projectRoot := h.Path(importertest.RootProject) logOutput := bytes.NewBuffer(nil) ctx.Err = log.New(logOutput, "", 0) v := NewImporter(ctx.Err, false, sm) if !v.HasDepMetadata(projectRoot) { t.Fatal("Expected the importer to detect vndr configuration file") } m, l, err := v.Import(projectRoot, importertest.RootProject) h.Must(err) wantM := dep.NewManifest() c1, _ := gps.NewSemverConstraint("^0.8.1") wantM.Constraints["github.com/sdboyer/deptest"] = gps.ProjectProperties{ Source: "https://github.com/sdboyer/deptest.git", Constraint: c1, } c2, _ := gps.NewSemverConstraint("^2.0.0") wantM.Constraints["github.com/sdboyer/deptestdos"] = gps.ProjectProperties{ Constraint: c2, } if !reflect.DeepEqual(wantM, m) { t.Errorf("unexpected manifest\nhave=%+v\nwant=%+v", m, wantM) } wantL := &dep.Lock{ P: []gps.LockedProject{ gps.NewLockedProject( gps.ProjectIdentifier{ ProjectRoot: "github.com/sdboyer/deptest", Source: "https://github.com/sdboyer/deptest.git", }, gps.NewVersion("v0.8.1").Pair("3f4c3bea144e112a69bbe5d8d01c1b09a544253f"), nil, ), gps.NewLockedProject( gps.ProjectIdentifier{ ProjectRoot: "github.com/sdboyer/deptestdos", }, gps.NewVersion("v2.0.0").Pair("5c607206be5decd28e6263ffffdcee067266015e"), nil, ), }, } if !reflect.DeepEqual(wantL, l) { t.Errorf("unexpected lock\nhave=%+v\nwant=%+v", l, wantL) } goldenFile := "golden.txt" got := logOutput.String() want := h.GetTestFileString(goldenFile) if want != got { if *test.UpdateGolden { if err := h.WriteTestFile(goldenFile, got); err != nil { t.Fatalf("%+v", errors.Wrapf(err, "Unable to write updated golden file %s", goldenFile)) } } else { t.Fatalf("expected %s, got %s", want, got) } } } func TestParseVndrLine(t *testing.T) { testcase := func(in string, wantPkg *vndrPackage, wantErr error) func(*testing.T) { return func(t *testing.T) { havePkg, haveErr := parseVndrLine(in) switch { case wantPkg == nil: if havePkg != nil { t.Errorf("expected nil package, have %v", havePkg) } case havePkg == nil: if wantPkg != nil { t.Errorf("expected non-nil package %v, have nil", wantPkg) } default: if !reflect.DeepEqual(havePkg, wantPkg) { t.Errorf("unexpected package, have=%v, want=%v", *havePkg, *wantPkg) } } switch { case wantErr == nil: if haveErr != nil { t.Errorf("expected nil err, have %v", haveErr) } case haveErr == nil: if wantErr != nil { t.Errorf("expected non-nil err %v, have nil", wantErr) } default: if haveErr.Error() != wantErr.Error() { t.Errorf("expected err=%q, have err=%q", wantErr.Error(), haveErr.Error()) } } } } t.Run("normal line", testcase("github.com/golang/notreal v1.0.0", &vndrPackage{ importPath: "github.com/golang/notreal", reference: "v1.0.0", }, nil)) t.Run("with repo", testcase("github.com/golang/notreal v1.0.0 https://github.com/golang/notreal", &vndrPackage{ importPath: "github.com/golang/notreal", reference: "v1.0.0", repository: "https://github.com/golang/notreal", }, nil)) t.Run("trailing comment", testcase("github.com/golang/notreal v1.0.0 https://github.com/golang/notreal # cool comment", &vndrPackage{ importPath: "github.com/golang/notreal", reference: "v1.0.0", repository: "https://github.com/golang/notreal", }, nil)) t.Run("empty line", testcase("", nil, nil)) t.Run("comment line", testcase("# comment", nil, nil)) t.Run("comment line with leading whitespace", testcase(" # comment", nil, nil)) t.Run("missing revision", testcase("github.com/golang/notreal", nil, errors.New("invalid config format: \"github.com/golang/notreal\""), )) } dep-0.3.2/internal/importers/vndr/testdata/000077500000000000000000000000001317166637100207215ustar00rootroot00000000000000dep-0.3.2/internal/importers/vndr/testdata/golden.txt000066400000000000000000000006271317166637100227370ustar00rootroot00000000000000Detected vndr configuration file... Converting from vendor.conf... Using ^0.8.1 as initial constraint for imported dep github.com/sdboyer/deptest Trying v0.8.1 (3f4c3be) as initial lock for imported dep github.com/sdboyer/deptest Using ^2.0.0 as initial constraint for imported dep github.com/sdboyer/deptestdos Trying v2.0.0 (5c60720) as initial lock for imported dep github.com/sdboyer/deptestdos dep-0.3.2/internal/importers/vndr/testdata/vendor.conf000066400000000000000000000003061317166637100230640ustar00rootroot00000000000000github.com/sdboyer/deptest 3f4c3bea144e112a69bbe5d8d01c1b09a544253f https://github.com/sdboyer/deptest.git # trailing comment # line comment github.com/sdboyer/deptestdos v2.0.0 # trailing comment dep-0.3.2/internal/test/000077500000000000000000000000001317166637100150725ustar00rootroot00000000000000dep-0.3.2/internal/test/integration/000077500000000000000000000000001317166637100174155ustar00rootroot00000000000000dep-0.3.2/internal/test/integration/testcase.go000066400000000000000000000132241317166637100215610ustar00rootroot00000000000000// Copyright 2017 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 integration import ( "encoding/json" "io/ioutil" "os" "path/filepath" "strings" "testing" "unicode" "github.com/golang/dep/internal/test" ) // TestCase manages a test case directory structure and content type TestCase struct { t *testing.T name string rootPath string initialPath string finalPath string Commands [][]string `json:"commands"` ErrorExpected string `json:"error-expected"` GopathInitial map[string]string `json:"gopath-initial"` VendorInitial map[string]string `json:"vendor-initial"` VendorFinal []string `json:"vendor-final"` InitPath string `json:"init-path"` } // NewTestCase creates a new TestCase. func NewTestCase(t *testing.T, dir, name string) *TestCase { rootPath := filepath.FromSlash(filepath.Join(dir, name)) n := &TestCase{ t: t, name: name, rootPath: rootPath, initialPath: filepath.Join(rootPath, "initial"), finalPath: filepath.Join(rootPath, "final"), } j, err := ioutil.ReadFile(filepath.Join(rootPath, "testcase.json")) if err != nil { t.Fatal(err) } err = json.Unmarshal(j, n) if err != nil { t.Fatal(err) } return n } // InitialPath represents the initial set of files in a project. func (tc *TestCase) InitialPath() string { return tc.initialPath } // UpdateFile updates the golden file with the working result. func (tc *TestCase) UpdateFile(goldenPath, workingPath string) { exists, working, err := getFile(workingPath) if err != nil { tc.t.Fatalf("Error reading project file %s: %s", goldenPath, err) } golden := filepath.Join(tc.finalPath, goldenPath) if exists { if err := tc.WriteFile(golden, working); err != nil { tc.t.Fatal(err) } } else { err := os.Remove(golden) if err != nil && !os.IsNotExist(err) { tc.t.Fatal(err) } } } // CompareFile compares the golden file with the working result. func (tc *TestCase) CompareFile(goldenPath, working string) { golden := filepath.Join(tc.finalPath, goldenPath) gotExists, got, err := getFile(working) if err != nil { tc.t.Fatalf("Error reading project file %q: %s", goldenPath, err) } wantExists, want, err := getFile(golden) if err != nil { tc.t.Fatalf("Error reading testcase file %q: %s", goldenPath, err) } if wantExists && gotExists { if want != got { tc.t.Errorf("%s was not as expected\n(WNT):\n%s\n(GOT):\n%s", filepath.Base(goldenPath), want, got) } } else if !wantExists && gotExists { tc.t.Errorf("%q created where none was expected", goldenPath) } else if wantExists && !gotExists { tc.t.Errorf("%q not created where one was expected", goldenPath) } } // UpdateOutput updates the golden file for stdout with the working result. func (tc *TestCase) UpdateOutput(stdout string) { stdoutPath := filepath.Join(tc.rootPath, "stdout.txt") _, err := os.Stat(stdoutPath) if err != nil { if os.IsNotExist(err) { // Don't update the stdout.txt file if it doesn't exist. return } panic(err) } if err := tc.WriteFile(stdoutPath, stdout); err != nil { tc.t.Fatal(err) } } // CompareOutput compares expected and actual stdout output. func (tc *TestCase) CompareOutput(stdout string) { expected, err := ioutil.ReadFile(filepath.Join(tc.rootPath, "stdout.txt")) if err != nil { if os.IsNotExist(err) { // Nothing to verify return } panic(err) } expStr := normalizeLines(string(expected)) stdout = normalizeLines(stdout) if expStr != stdout { tc.t.Errorf("stdout was not as expected\n(WNT):\n%s\n(GOT):\n%s\n", expStr, stdout) } } // normalizeLines returns a version with trailing whitespace stripped from each line. func normalizeLines(s string) string { lines := strings.Split(s, "\n") for i := range lines { lines[i] = strings.TrimRightFunc(lines[i], unicode.IsSpace) } return strings.Join(lines, "\n") } // CompareError compares expected and actual stderr output. func (tc *TestCase) CompareError(err error, stderr string) { wantExists, want := tc.ErrorExpected != "", tc.ErrorExpected gotExists, got := stderr != "" && err != nil, stderr if wantExists && gotExists { switch c := strings.Count(got, want); c { case 0: tc.t.Errorf("error did not contain expected string:\n\t(GOT): %s\n\t(WNT): %s", got, want) case 1: default: tc.t.Errorf("expected error %s matches %d times to actual error %s", want, c, got) } } else if !wantExists && gotExists { tc.t.Fatalf("error raised where none was expected: \n%v", stderr) } else if wantExists && !gotExists { tc.t.Error("error not raised where one was expected:", want) } } // CompareVendorPaths validates the vendor directory contents. func (tc *TestCase) CompareVendorPaths(gotVendorPaths []string) { if *test.UpdateGolden { tc.VendorFinal = gotVendorPaths } else { wantVendorPaths := tc.VendorFinal if len(gotVendorPaths) != len(wantVendorPaths) { tc.t.Fatalf("Wrong number of vendor paths created: want %d got %d", len(wantVendorPaths), len(gotVendorPaths)) } for ind := range gotVendorPaths { if gotVendorPaths[ind] != wantVendorPaths[ind] { tc.t.Errorf("Mismatch in vendor paths created: want %s got %s", wantVendorPaths, gotVendorPaths) } } } } // WriteFile writes a file using the default file permissions. func (tc *TestCase) WriteFile(src string, content string) error { return ioutil.WriteFile(src, []byte(content), 0666) } func getFile(path string) (bool, string, error) { _, err := os.Stat(path) if err != nil { return false, "", nil } f, err := ioutil.ReadFile(path) if err != nil { return true, "", err } return true, string(f), nil } dep-0.3.2/internal/test/integration/testproj.go000066400000000000000000000177701317166637100216320ustar00rootroot00000000000000// Copyright 2017 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 integration import ( "bytes" "io" "io/ioutil" "os" "os/exec" "path/filepath" "runtime" "sort" "strings" "testing" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) const ( projectRoot string = "src/github.com/golang/notexist" ) // RunFunc defines the function signature for an integration test command to execute. type RunFunc func(prog string, newargs []string, outW, errW io.Writer, dir string, env []string) error // TestProject manages the "virtual" test project directory structure // and content type TestProject struct { t *testing.T preImports []string tempdir string env []string origWd string stdout bytes.Buffer stderr bytes.Buffer run RunFunc } // NewTestProject initializes a new test's project directory. func NewTestProject(t *testing.T, initPath, wd string, run RunFunc) *TestProject { new := &TestProject{ t: t, origWd: wd, env: os.Environ(), run: run, } new.makeRootTempDir() new.TempDir(projectRoot, "vendor") new.CopyTree(initPath) new.Setenv("GOPATH", new.tempdir) return new } // Cleanup (remove) the test project's directory. func (p *TestProject) Cleanup() { os.RemoveAll(p.tempdir) } // Path to the test project directory. func (p *TestProject) Path(args ...string) string { return filepath.Join(p.tempdir, filepath.Join(args...)) } // ProjPath builds an import path for the test project. func (p *TestProject) ProjPath(args ...string) string { localPath := append([]string{projectRoot}, args...) return p.Path(localPath...) } // TempDir creates a temporary directory for the test project. func (p *TestProject) TempDir(args ...string) { fullPath := p.Path(args...) if err := os.MkdirAll(fullPath, 0755); err != nil && !os.IsExist(err) { p.t.Fatalf("%+v", errors.Errorf("Unable to create temp directory: %s", fullPath)) } } // TempProjDir builds the path to a package within the test project. func (p *TestProject) TempProjDir(args ...string) { localPath := append([]string{projectRoot}, args...) p.TempDir(localPath...) } // VendorPath lists the contents of the test project's vendor directory. func (p *TestProject) VendorPath(args ...string) string { localPath := append([]string{projectRoot, "vendor"}, args...) p.TempDir(localPath...) return p.Path(localPath...) } // RunGo runs a go command, and expects it to succeed. func (p *TestProject) RunGo(args ...string) { cmd := exec.Command("go", args...) p.stdout.Reset() p.stderr.Reset() cmd.Stdout = &p.stdout cmd.Stderr = &p.stderr cmd.Dir = p.tempdir cmd.Env = p.env status := cmd.Run() if p.stdout.Len() > 0 { p.t.Log("go standard output:") p.t.Log(p.stdout.String()) } if p.stderr.Len() > 0 { p.t.Log("go standard error:") p.t.Log(p.stderr.String()) } if status != nil { p.t.Logf("go %v failed unexpectedly: %v", args, status) p.t.FailNow() } } // RunGit runs a git command, and expects it to succeed. func (p *TestProject) RunGit(dir string, args ...string) { cmd := exec.Command("git", args...) p.stdout.Reset() p.stderr.Reset() cmd.Stdout = &p.stdout cmd.Stderr = &p.stderr cmd.Dir = dir cmd.Env = p.env status := cmd.Run() if *test.PrintLogs { if p.stdout.Len() > 0 { p.t.Logf("git %v standard output:", args) p.t.Log(p.stdout.String()) } if p.stderr.Len() > 0 { p.t.Logf("git %v standard error:", args) p.t.Log(p.stderr.String()) } } if status != nil { p.t.Logf("git %v failed unexpectedly: %v", args, status) p.t.FailNow() } } // GetStdout gets the Stdout output from test run. func (p *TestProject) GetStdout() string { return p.stdout.String() } // GetStderr gets the Stderr output from test run. func (p *TestProject) GetStderr() string { return p.stderr.String() } // GetVendorGit populates the initial vendor directory for a test project. func (p *TestProject) GetVendorGit(ip string) { parse := strings.Split(ip, "/") gitDir := strings.Join(parse[:len(parse)-1], string(filepath.Separator)) p.TempProjDir("vendor", gitDir) p.RunGit(p.ProjPath("vendor", gitDir), "clone", "http://"+ip) } // DoRun executes the integration test command against the test project. func (p *TestProject) DoRun(args []string) error { if *test.PrintLogs { p.t.Logf("running testdep %v", args) } prog := filepath.Join(p.origWd, "testdep"+test.ExeSuffix) newargs := append([]string{args[0], "-v"}, args[1:]...) p.stdout.Reset() p.stderr.Reset() status := p.run(prog, newargs, &p.stdout, &p.stderr, p.ProjPath(""), p.env) if *test.PrintLogs { if p.stdout.Len() > 0 { p.t.Logf("\nstandard output:%s", p.stdout.String()) } if p.stderr.Len() > 0 { p.t.Logf("standard error:\n%s", p.stderr.String()) } } return status } // CopyTree recursively copies a source directory into the test project's directory. func (p *TestProject) CopyTree(src string) { filepath.Walk(src, func(path string, info os.FileInfo, err error) error { if path != src { localpath := path[len(src)+1:] if info.IsDir() { p.TempDir(projectRoot, localpath) } else { destpath := filepath.Join(p.ProjPath(), localpath) copyFile(destpath, path) } } return nil }) } func copyFile(dest, src string) { in, err := os.Open(src) if err != nil { panic(err) } defer in.Close() out, err := os.Create(dest) if err != nil { panic(err) } defer out.Close() io.Copy(out, in) } // GetVendorPaths collects final vendor paths at a depth of three levels. func (p *TestProject) GetVendorPaths() []string { vendorPath := p.ProjPath("vendor") result := make([]string, 0) filepath.Walk( vendorPath, func(path string, info os.FileInfo, err error) error { if len(path) > len(vendorPath) && info.IsDir() { parse := strings.Split(path[len(vendorPath)+1:], string(filepath.Separator)) if len(parse) == 3 { result = append(result, strings.Join(parse, "/")) return filepath.SkipDir } } return nil }, ) sort.Strings(result) return result } // GetImportPaths collect final vendor paths at a depth of three levels. func (p *TestProject) GetImportPaths() []string { importPath := p.Path("src") result := make([]string, 0) filepath.Walk( importPath, func(path string, info os.FileInfo, err error) error { if len(path) > len(importPath) && info.IsDir() { parse := strings.Split(path[len(importPath)+1:], string(filepath.Separator)) if len(parse) == 3 { result = append(result, strings.Join(parse, "/")) return filepath.SkipDir } } return nil }, ) sort.Strings(result) return result } // RecordImportPaths takes a snapshot of the import paths before test is run. func (p *TestProject) RecordImportPaths() { p.preImports = p.GetImportPaths() } // CompareImportPaths compares import paths before and after test commands. func (p *TestProject) CompareImportPaths() { wantImportPaths := p.preImports gotImportPaths := p.GetImportPaths() if len(gotImportPaths) != len(wantImportPaths) { p.t.Fatalf("Import path count changed during command: pre %d post %d", len(wantImportPaths), len(gotImportPaths)) } for ind := range gotImportPaths { if gotImportPaths[ind] != wantImportPaths[ind] { p.t.Errorf("Change in import paths during: pre %s post %s", gotImportPaths, wantImportPaths) } } } // makeRootTempdir makes a temporary directory for a run of testgo. If // the temporary directory was already created, this does nothing. func (p *TestProject) makeRootTempDir() { if p.tempdir == "" { var err error p.tempdir, err = ioutil.TempDir("", "gotest") p.Must(err) // Fix for OSX where the tempdir is a symlink: if runtime.GOOS == "darwin" { p.tempdir, err = filepath.EvalSymlinks(p.tempdir) p.Must(err) } } } // Setenv sets an environment variable to use when running the test go // command. func (p *TestProject) Setenv(name, val string) { p.env = append(p.env, name+"="+val) } // Must gives a fatal error if err is not nil. func (p *TestProject) Must(err error) { if err != nil { p.t.Fatalf("%+v", err) } } dep-0.3.2/internal/test/test.go000066400000000000000000000424541317166637100164110ustar00rootroot00000000000000// Copyright 2017 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 test import ( "bytes" "flag" "fmt" "go/format" "io" "io/ioutil" "os" "os/exec" "path/filepath" "regexp" "runtime" "strings" "sync" "testing" "github.com/pkg/errors" ) var ( // ExeSuffix is the suffix of executable files; ".exe" on Windows. ExeSuffix string mu sync.Mutex // PrintLogs controls logging of test commands. PrintLogs = flag.Bool("logs", false, "log stdin/stdout of test commands") // UpdateGolden controls updating test fixtures. UpdateGolden = flag.Bool("update", false, "update golden files") ) const ( manifestName string = "Gopkg.toml" lockName string = "Gopkg.lock" ) func init() { switch runtime.GOOS { case "windows": ExeSuffix = ".exe" } } // Helper with utilities for testing. type Helper struct { t *testing.T temps []string wd string origWd string env []string tempdir string ran bool inParallel bool stdout, stderr bytes.Buffer } // NewHelper initializes a new helper for testing. func NewHelper(t *testing.T) *Helper { wd, err := os.Getwd() if err != nil { panic(err) } return &Helper{t: t, origWd: wd} } // Must gives a fatal error if err is not nil. func (h *Helper) Must(err error) { if err != nil { h.t.Fatalf("%+v", err) } } // check gives a test non-fatal error if err is not nil. func (h *Helper) check(err error) { if err != nil { h.t.Errorf("%+v", err) } } // Parallel runs the test in parallel by calling t.Parallel. func (h *Helper) Parallel() { if h.ran { h.t.Fatalf("%+v", errors.New("internal testsuite error: call to parallel after run")) } if h.wd != "" { h.t.Fatalf("%+v", errors.New("internal testsuite error: call to parallel after cd")) } for _, e := range h.env { if strings.HasPrefix(e, "GOROOT=") || strings.HasPrefix(e, "GOPATH=") || strings.HasPrefix(e, "GOBIN=") { val := e[strings.Index(e, "=")+1:] if strings.HasPrefix(val, "testdata") || strings.HasPrefix(val, "./testdata") { h.t.Fatalf("%+v", errors.Errorf("internal testsuite error: call to parallel with testdata in environment (%s)", e)) } } } h.inParallel = true h.t.Parallel() } // pwd returns the current directory. func (h *Helper) pwd() string { wd, err := os.Getwd() if err != nil { h.t.Fatalf("%+v", errors.Wrap(err, "could not get working directory")) } return wd } // Cd changes the current directory to the named directory. Note that // using this means that the test must not be run in parallel with any // other tests. func (h *Helper) Cd(dir string) { if h.inParallel { h.t.Fatalf("%+v", errors.New("internal testsuite error: changing directory when running in parallel")) } if h.wd == "" { h.wd = h.pwd() } abs, err := filepath.Abs(dir) if err == nil { h.Setenv("PWD", abs) } err = os.Chdir(dir) h.Must(errors.Wrapf(err, "Unable to cd to %s", dir)) } // Setenv sets an environment variable to use when running the test go // command. func (h *Helper) Setenv(name, val string) { if h.inParallel && (name == "GOROOT" || name == "GOPATH" || name == "GOBIN") && (strings.HasPrefix(val, "testdata") || strings.HasPrefix(val, "./testdata")) { h.t.Fatalf("%+v", errors.Errorf("internal testsuite error: call to setenv with testdata (%s=%s) after parallel", name, val)) } h.unsetenv(name) h.env = append(h.env, name+"="+val) } // unsetenv removes an environment variable. func (h *Helper) unsetenv(name string) { if h.env == nil { h.env = append([]string(nil), os.Environ()...) } for i, v := range h.env { if strings.HasPrefix(v, name+"=") { h.env = append(h.env[:i], h.env[i+1:]...) break } } } // DoRun runs the test go command, recording stdout and stderr and // returning exit status. func (h *Helper) DoRun(args []string) error { if h.inParallel { for _, arg := range args { if strings.HasPrefix(arg, "testdata") || strings.HasPrefix(arg, "./testdata") { h.t.Fatalf("%+v", errors.New("internal testsuite error: parallel run using testdata")) } } } if *PrintLogs { h.t.Logf("running testdep %v", args) } var prog string if h.wd == "" { prog = "./testdep" + ExeSuffix } else { prog = filepath.Join(h.wd, "testdep"+ExeSuffix) } newargs := []string{args[0], "-v"} newargs = append(newargs, args[1:]...) cmd := exec.Command(prog, newargs...) h.stdout.Reset() h.stderr.Reset() cmd.Stdout = &h.stdout cmd.Stderr = &h.stderr cmd.Env = h.env status := cmd.Run() if *PrintLogs { if h.stdout.Len() > 0 { h.t.Log("standard output:") h.t.Log(h.stdout.String()) } if h.stderr.Len() > 0 { h.t.Log("standard error:") h.t.Log(h.stderr.String()) } } h.ran = true return errors.Wrapf(status, "Error running %s\n%s", strings.Join(newargs, " "), h.stderr.String()) } // Run runs the test go command, and expects it to succeed. func (h *Helper) Run(args ...string) { if runtime.GOOS == "windows" { mu.Lock() defer mu.Unlock() } if status := h.DoRun(args); status != nil { h.t.Logf("go %v failed unexpectedly: %v", args, status) h.t.FailNow() } } // runFail runs the test go command, and expects it to fail. func (h *Helper) runFail(args ...string) { if status := h.DoRun(args); status == nil { h.t.Fatalf("%+v", errors.New("testgo succeeded unexpectedly")) } else { h.t.Log("testgo failed as expected:", status) } } // RunGo runs a go command, and expects it to succeed. func (h *Helper) RunGo(args ...string) { cmd := exec.Command("go", args...) h.stdout.Reset() h.stderr.Reset() cmd.Stdout = &h.stdout cmd.Stderr = &h.stderr cmd.Dir = h.wd cmd.Env = h.env status := cmd.Run() if h.stdout.Len() > 0 { h.t.Log("go standard output:") h.t.Log(h.stdout.String()) } if h.stderr.Len() > 0 { h.t.Log("go standard error:") h.t.Log(h.stderr.String()) } if status != nil { h.t.Logf("go %v failed unexpectedly: %v", args, status) h.t.FailNow() } } // NeedsExternalNetwork makes sure the tests needing external network will not // be run when executing tests in short mode. func NeedsExternalNetwork(t *testing.T) { if testing.Short() { t.Skip("skipping test: no external network in -short mode") } } // NeedsGit will make sure the tests that require git will be skipped if the // git binary is not available. func NeedsGit(t *testing.T) { if _, err := exec.LookPath("git"); err != nil { t.Skip("skipping because git binary not found") } } // RunGit runs a git command, and expects it to succeed. func (h *Helper) RunGit(dir string, args ...string) { cmd := exec.Command("git", args...) h.stdout.Reset() h.stderr.Reset() cmd.Stdout = &h.stdout cmd.Stderr = &h.stderr cmd.Dir = dir cmd.Env = h.env status := cmd.Run() if *PrintLogs { if h.stdout.Len() > 0 { h.t.Logf("git %v standard output:", args) h.t.Log(h.stdout.String()) } if h.stderr.Len() > 0 { h.t.Logf("git %v standard error:", args) h.t.Log(h.stderr.String()) } } if status != nil { h.t.Logf("git %v failed unexpectedly: %v", args, status) h.t.FailNow() } } // getStdout returns standard output of the testgo run as a string. func (h *Helper) getStdout() string { if !h.ran { h.t.Fatalf("%+v", errors.New("internal testsuite error: stdout called before run")) } return h.stdout.String() } // getStderr returns standard error of the testgo run as a string. func (h *Helper) getStderr() string { if !h.ran { h.t.Fatalf("%+v", errors.New("internal testsuite error: stdout called before run")) } return h.stderr.String() } // doGrepMatch looks for a regular expression in a buffer, and returns // whether it is found. The regular expression is matched against // each line separately, as with the grep command. func (h *Helper) doGrepMatch(match string, b *bytes.Buffer) bool { if !h.ran { h.t.Fatalf("%+v", errors.New("internal testsuite error: grep called before run")) } re := regexp.MustCompile(match) for _, ln := range bytes.Split(b.Bytes(), []byte{'\n'}) { if re.Match(ln) { return true } } return false } // doGrep looks for a regular expression in a buffer and fails if it // is not found. The name argument is the name of the output we are // searching, "output" or "error". The msg argument is logged on // failure. func (h *Helper) doGrep(match string, b *bytes.Buffer, name, msg string) { if !h.doGrepMatch(match, b) { h.t.Log(msg) h.t.Logf("pattern %v not found in standard %s", match, name) h.t.FailNow() } } // grepStdout looks for a regular expression in the test run's // standard output and fails, logging msg, if it is not found. func (h *Helper) grepStdout(match, msg string) { h.doGrep(match, &h.stdout, "output", msg) } // grepStderr looks for a regular expression in the test run's // standard error and fails, logging msg, if it is not found. func (h *Helper) grepStderr(match, msg string) { h.doGrep(match, &h.stderr, "error", msg) } // grepBoth looks for a regular expression in the test run's standard // output or stand error and fails, logging msg, if it is not found. func (h *Helper) grepBoth(match, msg string) { if !h.doGrepMatch(match, &h.stdout) && !h.doGrepMatch(match, &h.stderr) { h.t.Log(msg) h.t.Logf("pattern %v not found in standard output or standard error", match) h.t.FailNow() } } // doGrepNot looks for a regular expression in a buffer and fails if // it is found. The name and msg arguments are as for doGrep. func (h *Helper) doGrepNot(match string, b *bytes.Buffer, name, msg string) { if h.doGrepMatch(match, b) { h.t.Log(msg) h.t.Logf("pattern %v found unexpectedly in standard %s", match, name) h.t.FailNow() } } // grepStdoutNot looks for a regular expression in the test run's // standard output and fails, logging msg, if it is found. func (h *Helper) grepStdoutNot(match, msg string) { h.doGrepNot(match, &h.stdout, "output", msg) } // grepStderrNot looks for a regular expression in the test run's // standard error and fails, logging msg, if it is found. func (h *Helper) grepStderrNot(match, msg string) { h.doGrepNot(match, &h.stderr, "error", msg) } // grepBothNot looks for a regular expression in the test run's // standard output or stand error and fails, logging msg, if it is // found. func (h *Helper) grepBothNot(match, msg string) { if h.doGrepMatch(match, &h.stdout) || h.doGrepMatch(match, &h.stderr) { h.t.Log(msg) h.t.Fatalf("%+v", errors.Errorf("pattern %v found unexpectedly in standard output or standard error", match)) } } // doGrepCount counts the number of times a regexp is seen in a buffer. func (h *Helper) doGrepCount(match string, b *bytes.Buffer) int { if !h.ran { h.t.Fatalf("%+v", errors.New("internal testsuite error: doGrepCount called before run")) } re := regexp.MustCompile(match) c := 0 for _, ln := range bytes.Split(b.Bytes(), []byte{'\n'}) { if re.Match(ln) { c++ } } return c } // grepCountBoth returns the number of times a regexp is seen in both // standard output and standard error. func (h *Helper) grepCountBoth(match string) int { return h.doGrepCount(match, &h.stdout) + h.doGrepCount(match, &h.stderr) } // creatingTemp records that the test plans to create a temporary file // or directory. If the file or directory exists already, it will be // removed. When the test completes, the file or directory will be // removed if it exists. func (h *Helper) creatingTemp(path string) { if filepath.IsAbs(path) && !strings.HasPrefix(path, h.tempdir) { h.t.Fatalf("%+v", errors.Errorf("internal testsuite error: creatingTemp(%q) with absolute path not in temporary directory", path)) } // If we have changed the working directory, make sure we have // an absolute path, because we are going to change directory // back before we remove the temporary. if h.wd != "" && !filepath.IsAbs(path) { path = filepath.Join(h.pwd(), path) } h.Must(os.RemoveAll(path)) h.temps = append(h.temps, path) } // makeTempdir makes a temporary directory for a run of testgo. If // the temporary directory was already created, this does nothing. func (h *Helper) makeTempdir() { if h.tempdir == "" { var err error h.tempdir, err = ioutil.TempDir("", "gotest") h.Must(err) } } // TempFile adds a temporary file for a run of testgo. func (h *Helper) TempFile(path, contents string) { h.makeTempdir() h.Must(os.MkdirAll(filepath.Join(h.tempdir, filepath.Dir(path)), 0755)) bytes := []byte(contents) if strings.HasSuffix(path, ".go") { formatted, err := format.Source(bytes) if err == nil { bytes = formatted } } h.Must(ioutil.WriteFile(filepath.Join(h.tempdir, path), bytes, 0644)) } // WriteTestFile writes a file to the testdata directory from memory. src is // relative to ./testdata. func (h *Helper) WriteTestFile(src string, content string) error { err := ioutil.WriteFile(filepath.Join(h.origWd, "testdata", src), []byte(content), 0666) return err } // GetFile reads a file into memory func (h *Helper) GetFile(path string) io.ReadCloser { content, err := os.Open(path) if err != nil { h.t.Fatalf("%+v", errors.Wrapf(err, "Unable to open file: %s", path)) } return content } // GetTestFile reads a file from the testdata directory into memory. src is // relative to ./testdata. func (h *Helper) GetTestFile(src string) io.ReadCloser { fullPath := filepath.Join(h.origWd, "testdata", src) return h.GetFile(fullPath) } // GetTestFileString reads a file from the testdata directory into memory. src is // relative to ./testdata. func (h *Helper) GetTestFileString(src string) string { srcf := h.GetTestFile(src) defer srcf.Close() content, err := ioutil.ReadAll(srcf) if err != nil { h.t.Fatalf("%+v", err) } return string(content) } // TempCopy copies a temporary file from testdata into the temporary directory. // dest is relative to the temp directory location, and src is relative to // ./testdata. func (h *Helper) TempCopy(dest, src string) { in := h.GetTestFile(src) defer in.Close() h.TempDir(filepath.Dir(dest)) out, err := os.Create(filepath.Join(h.tempdir, dest)) if err != nil { panic(err) } defer out.Close() io.Copy(out, in) } // TempDir adds a temporary directory for a run of testgo. func (h *Helper) TempDir(path string) { h.makeTempdir() fullPath := filepath.Join(h.tempdir, path) if err := os.MkdirAll(fullPath, 0755); err != nil && !os.IsExist(err) { h.t.Fatalf("%+v", errors.Errorf("Unable to create temp directory: %s", fullPath)) } } // Path returns the absolute pathname to file with the temporary // directory. func (h *Helper) Path(name string) string { if h.tempdir == "" { h.t.Fatalf("%+v", errors.Errorf("internal testsuite error: path(%q) with no tempdir", name)) } var joined string if name == "." { joined = h.tempdir } else { joined = filepath.Join(h.tempdir, name) } // Ensure it's the absolute, symlink-less path we're returning abs, err := filepath.EvalSymlinks(joined) if err != nil { h.t.Fatalf("%+v", errors.Wrapf(err, "internal testsuite error: could not get absolute path for dir(%q)", joined)) } return abs } // MustExist fails if path does not exist. func (h *Helper) MustExist(path string) { if err := h.ShouldExist(path); err != nil { h.t.Fatalf("%+v", err) } } // ShouldExist returns an error if path does not exist. func (h *Helper) ShouldExist(path string) error { if !h.Exist(path) { return errors.Errorf("%s does not exist but should", path) } return nil } // Exist returns whether or not a path exists func (h *Helper) Exist(path string) bool { if _, err := os.Stat(path); err != nil { if os.IsNotExist(err) { return false } h.t.Fatalf("%+v", errors.Wrapf(err, "Error checking if path exists: %s", path)) } return true } // MustNotExist fails if path exists. func (h *Helper) MustNotExist(path string) { if err := h.ShouldNotExist(path); err != nil { h.t.Fatalf("%+v", err) } } // ShouldNotExist returns an error if path exists. func (h *Helper) ShouldNotExist(path string) error { if h.Exist(path) { return errors.Errorf("%s exists but should not", path) } return nil } // Cleanup cleans up a test that runs testgo. func (h *Helper) Cleanup() { if h.wd != "" { if err := os.Chdir(h.wd); err != nil { // We are unlikely to be able to continue. fmt.Fprintln(os.Stderr, "could not restore working directory, crashing:", err) os.Exit(2) } } // NOTE(mattn): It seems that sometimes git.exe is not dead // when cleanup() is called. But we do not know any way to wait for it. if runtime.GOOS == "windows" { mu.Lock() exec.Command(`taskkill`, `/F`, `/IM`, `git.exe`).Run() mu.Unlock() } for _, path := range h.temps { h.check(os.RemoveAll(path)) } if h.tempdir != "" { h.check(os.RemoveAll(h.tempdir)) } } // ReadManifest returns the manifest in the current directory. func (h *Helper) ReadManifest() string { m := filepath.Join(h.pwd(), manifestName) h.MustExist(m) f, err := ioutil.ReadFile(m) h.Must(err) return string(f) } // ReadLock returns the lock in the current directory. func (h *Helper) ReadLock() string { l := filepath.Join(h.pwd(), lockName) h.MustExist(l) f, err := ioutil.ReadFile(l) h.Must(err) return string(f) } // GetCommit treats repo as a path to a git repository and returns the current // revision. func (h *Helper) GetCommit(repo string) string { repoPath := h.Path("pkg/dep/sources/https---" + strings.Replace(repo, "/", "-", -1)) cmd := exec.Command("git", "rev-parse", "HEAD") cmd.Dir = repoPath out, err := cmd.CombinedOutput() if err != nil { h.t.Fatalf("%+v", errors.Wrapf(err, "git commit failed: out -> %s", string(out))) } return strings.TrimSpace(string(out)) } dep-0.3.2/internal/test/writer.go000066400000000000000000000011161317166637100167340ustar00rootroot00000000000000// Copyright 2017 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 test import ( "strings" "testing" "unicode" ) // Writer adapts a testing.TB to the io.Writer interface type Writer struct { testing.TB } func (t Writer) Write(b []byte) (n int, err error) { str := string(b) if len(str) == 0 { return 0, nil } for _, part := range strings.Split(str, "\n") { str := strings.TrimRightFunc(part, unicode.IsSpace) if len(str) != 0 { t.Log(str) } } return len(b), err } dep-0.3.2/lock.go000066400000000000000000000122531317166637100135610ustar00rootroot00000000000000// 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 dep import ( "bytes" "encoding/hex" "io" "sort" "github.com/golang/dep/internal/gps" "github.com/pelletier/go-toml" "github.com/pkg/errors" ) // LockName is the lock file name used by dep. const LockName = "Gopkg.lock" // Lock holds lock file data and implements gps.Lock. type Lock struct { SolveMeta SolveMeta P []gps.LockedProject } // SolveMeta holds solver meta data. type SolveMeta struct { InputsDigest []byte AnalyzerName string AnalyzerVersion int SolverName string SolverVersion int } type rawLock struct { SolveMeta solveMeta `toml:"solve-meta"` Projects []rawLockedProject `toml:"projects"` } type solveMeta struct { InputsDigest string `toml:"inputs-digest"` AnalyzerName string `toml:"analyzer-name"` AnalyzerVersion int `toml:"analyzer-version"` SolverName string `toml:"solver-name"` SolverVersion int `toml:"solver-version"` } type rawLockedProject struct { Name string `toml:"name"` Branch string `toml:"branch,omitempty"` Revision string `toml:"revision"` Version string `toml:"version,omitempty"` Source string `toml:"source,omitempty"` Packages []string `toml:"packages"` } func readLock(r io.Reader) (*Lock, error) { buf := &bytes.Buffer{} _, err := buf.ReadFrom(r) if err != nil { return nil, errors.Wrap(err, "Unable to read byte stream") } raw := rawLock{} err = toml.Unmarshal(buf.Bytes(), &raw) if err != nil { return nil, errors.Wrap(err, "Unable to parse the lock as TOML") } return fromRawLock(raw) } func fromRawLock(raw rawLock) (*Lock, error) { var err error l := &Lock{ P: make([]gps.LockedProject, len(raw.Projects)), } l.SolveMeta.InputsDigest, err = hex.DecodeString(raw.SolveMeta.InputsDigest) if err != nil { return nil, errors.Errorf("invalid hash digest in lock's memo field") } l.SolveMeta.AnalyzerName = raw.SolveMeta.AnalyzerName l.SolveMeta.AnalyzerVersion = raw.SolveMeta.AnalyzerVersion l.SolveMeta.SolverName = raw.SolveMeta.SolverName l.SolveMeta.SolverVersion = raw.SolveMeta.SolverVersion for i, ld := range raw.Projects { r := gps.Revision(ld.Revision) var v gps.Version = r if ld.Version != "" { if ld.Branch != "" { return nil, errors.Errorf("lock file specified both a branch (%s) and version (%s) for %s", ld.Branch, ld.Version, ld.Name) } v = gps.NewVersion(ld.Version).Pair(r) } else if ld.Branch != "" { v = gps.NewBranch(ld.Branch).Pair(r) } else if r == "" { return nil, errors.Errorf("lock file has entry for %s, but specifies no branch or version", ld.Name) } id := gps.ProjectIdentifier{ ProjectRoot: gps.ProjectRoot(ld.Name), Source: ld.Source, } l.P[i] = gps.NewLockedProject(id, v, ld.Packages) } return l, nil } // InputsDigest returns the hash of inputs which produced this lock data. func (l *Lock) InputsDigest() []byte { return l.SolveMeta.InputsDigest } // Projects returns the list of LockedProjects contained in the lock data. func (l *Lock) Projects() []gps.LockedProject { return l.P } // HasProjectWithRoot checks if the lock contains a project with the provided // ProjectRoot. // // This check is O(n) in the number of projects. func (l *Lock) HasProjectWithRoot(root gps.ProjectRoot) bool { for _, p := range l.P { if p.Ident().ProjectRoot == root { return true } } return false } // toRaw converts the manifest into a representation suitable to write to the lock file func (l *Lock) toRaw() rawLock { raw := rawLock{ SolveMeta: solveMeta{ InputsDigest: hex.EncodeToString(l.SolveMeta.InputsDigest), AnalyzerName: l.SolveMeta.AnalyzerName, AnalyzerVersion: l.SolveMeta.AnalyzerVersion, SolverName: l.SolveMeta.SolverName, SolverVersion: l.SolveMeta.SolverVersion, }, Projects: make([]rawLockedProject, len(l.P)), } sort.Slice(l.P, func(i, j int) bool { return l.P[i].Ident().Less(l.P[j].Ident()) }) for k, lp := range l.P { id := lp.Ident() ld := rawLockedProject{ Name: string(id.ProjectRoot), Source: id.Source, Packages: lp.Packages(), } v := lp.Version() ld.Revision, ld.Branch, ld.Version = gps.VersionComponentStrings(v) raw.Projects[k] = ld } return raw } // MarshalTOML serializes this lock into TOML via an intermediate raw form. func (l *Lock) MarshalTOML() ([]byte, error) { raw := l.toRaw() result, err := toml.Marshal(raw) return result, errors.Wrap(err, "Unable to marshal lock to TOML string") } // LockFromSolution converts a gps.Solution to dep's representation of a lock. // // Data is defensively copied wherever necessary to ensure the resulting *lock // shares no memory with the original lock. func LockFromSolution(in gps.Solution) *Lock { h, p := in.InputsDigest(), in.Projects() l := &Lock{ SolveMeta: SolveMeta{ InputsDigest: make([]byte, len(h)), AnalyzerName: in.AnalyzerName(), AnalyzerVersion: in.AnalyzerVersion(), SolverName: in.SolverName(), SolverVersion: in.SolverVersion(), }, P: make([]gps.LockedProject, len(p)), } copy(l.SolveMeta.InputsDigest, h) copy(l.P, p) return l } dep-0.3.2/lock_test.go000066400000000000000000000102111317166637100146100ustar00rootroot00000000000000// 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 dep import ( "encoding/hex" "reflect" "strings" "testing" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/test" ) func TestReadLock(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() golden := "lock/golden0.toml" g0f := h.GetTestFile(golden) defer g0f.Close() got, err := readLock(g0f) if err != nil { t.Fatalf("Should have read Lock correctly, but got err %q", err) } b, _ := hex.DecodeString("2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e") want := &Lock{ SolveMeta: SolveMeta{ InputsDigest: b, }, P: []gps.LockedProject{ gps.NewLockedProject( gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot("github.com/golang/dep")}, gps.NewBranch("master").Pair(gps.Revision("d05d5aca9f895d19e9265839bffeadd74a2d2ecb")), []string{"."}, ), }, } if !reflect.DeepEqual(got, want) { t.Error("Valid lock did not parse as expected") } golden = "lock/golden1.toml" g1f := h.GetTestFile(golden) defer g1f.Close() got, err = readLock(g1f) if err != nil { t.Fatalf("Should have read Lock correctly, but got err %q", err) } b, _ = hex.DecodeString("2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e") want = &Lock{ SolveMeta: SolveMeta{ InputsDigest: b, }, P: []gps.LockedProject{ gps.NewLockedProject( gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot("github.com/golang/dep")}, gps.NewVersion("0.12.2").Pair(gps.Revision("d05d5aca9f895d19e9265839bffeadd74a2d2ecb")), []string{"."}, ), }, } if !reflect.DeepEqual(got, want) { t.Error("Valid lock did not parse as expected") } } func TestWriteLock(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() golden := "lock/golden0.toml" want := h.GetTestFileString(golden) memo, _ := hex.DecodeString("2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e") l := &Lock{ SolveMeta: SolveMeta{ InputsDigest: memo, }, P: []gps.LockedProject{ gps.NewLockedProject( gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot("github.com/golang/dep")}, gps.NewBranch("master").Pair(gps.Revision("d05d5aca9f895d19e9265839bffeadd74a2d2ecb")), []string{"."}, ), }, } got, err := l.MarshalTOML() if err != nil { t.Fatalf("Error while marshaling valid lock to TOML: %q", err) } if string(got) != want { if *test.UpdateGolden { if err = h.WriteTestFile(golden, string(got)); err != nil { t.Fatal(err) } } else { t.Errorf("Valid lock did not marshal to TOML as expected:\n\t(GOT): %s\n\t(WNT): %s", string(got), want) } } golden = "lock/golden1.toml" want = h.GetTestFileString(golden) memo, _ = hex.DecodeString("2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e") l = &Lock{ SolveMeta: SolveMeta{ InputsDigest: memo, }, P: []gps.LockedProject{ gps.NewLockedProject( gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot("github.com/golang/dep")}, gps.NewVersion("0.12.2").Pair(gps.Revision("d05d5aca9f895d19e9265839bffeadd74a2d2ecb")), []string{"."}, ), }, } got, err = l.MarshalTOML() if err != nil { t.Fatalf("Error while marshaling valid lock to TOML: %q", err) } if string(got) != want { if *test.UpdateGolden { if err = h.WriteTestFile(golden, string(got)); err != nil { t.Fatal(err) } } else { t.Errorf("Valid lock did not marshal to TOML as expected:\n\t(GOT): %s\n\t(WNT): %s", string(got), want) } } } func TestReadLockErrors(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() var err error tests := []struct { name string file string }{ {"specified both", "lock/error0.toml"}, {"invalid hash", "lock/error1.toml"}, {"no branch or version", "lock/error2.toml"}, } for _, tst := range tests { lf := h.GetTestFile(tst.file) defer lf.Close() _, err = readLock(lf) if err == nil { t.Errorf("Reading lock with %s should have caused error, but did not", tst.name) } else if !strings.Contains(err.Error(), tst.name) { t.Errorf("Unexpected error %q; expected %s error", err, tst.name) } } } dep-0.3.2/manifest.go000066400000000000000000000265731317166637100144510ustar00rootroot00000000000000// 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 dep import ( "bytes" "fmt" "io" "reflect" "regexp" "sort" "sync" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pelletier/go-toml" "github.com/pkg/errors" ) // ManifestName is the manifest file name used by dep. const ManifestName = "Gopkg.toml" // Errors var ( errInvalidConstraint = errors.New("\"constraint\" must be a TOML array of tables") errInvalidOverride = errors.New("\"override\" must be a TOML array of tables") errInvalidRequired = errors.New("\"required\" must be a TOML list of strings") errInvalidIgnored = errors.New("\"ignored\" must be a TOML list of strings") errInvalidProjectRoot = errors.New("ProjectRoot name validation failed") ) // Manifest holds manifest file data and implements gps.RootManifest. type Manifest struct { Constraints gps.ProjectConstraints Ovr gps.ProjectConstraints Ignored []string Required []string } type rawManifest struct { Constraints []rawProject `toml:"constraint,omitempty"` Overrides []rawProject `toml:"override,omitempty"` Ignored []string `toml:"ignored,omitempty"` Required []string `toml:"required,omitempty"` } type rawProject struct { Name string `toml:"name"` Branch string `toml:"branch,omitempty"` Revision string `toml:"revision,omitempty"` Version string `toml:"version,omitempty"` Source string `toml:"source,omitempty"` } // NewManifest instantiates a new manifest. func NewManifest() *Manifest { return &Manifest{ Constraints: make(gps.ProjectConstraints), Ovr: make(gps.ProjectConstraints), } } func validateManifest(s string) ([]error, error) { var warns []error // Load the TomlTree from string tree, err := toml.Load(s) if err != nil { return warns, errors.Wrap(err, "Unable to load TomlTree from string") } // Convert tree to a map manifest := tree.ToMap() // match abbreviated git hash (7chars) or hg hash (12chars) abbrevRevHash := regexp.MustCompile("^[a-f0-9]{7}([a-f0-9]{5})?$") // Look for unknown fields and collect errors for prop, val := range manifest { switch prop { case "metadata": // Check if metadata is of Map type if reflect.TypeOf(val).Kind() != reflect.Map { warns = append(warns, errors.New("metadata should be a TOML table")) } case "constraint", "override": valid := true // Invalid if type assertion fails. Not a TOML array of tables. if rawProj, ok := val.([]interface{}); ok { // Check element type. Must be a map. Checking one element would be // enough because TOML doesn't allow mixing of types. if reflect.TypeOf(rawProj[0]).Kind() != reflect.Map { valid = false } if valid { // Iterate through each array of tables for _, v := range rawProj { // Check the individual field's key to be valid for key, value := range v.(map[string]interface{}) { // Check if the key is valid switch key { case "name", "branch", "version", "source": // valid key case "revision": if valueStr, ok := value.(string); ok { if abbrevRevHash.MatchString(valueStr) { warns = append(warns, fmt.Errorf("revision %q should not be in abbreviated form", valueStr)) } } case "metadata": // Check if metadata is of Map type if reflect.TypeOf(value).Kind() != reflect.Map { warns = append(warns, fmt.Errorf("metadata in %q should be a TOML table", prop)) } default: // unknown/invalid key warns = append(warns, fmt.Errorf("Invalid key %q in %q", key, prop)) } } } } } else { valid = false } if !valid { if prop == "constraint" { return warns, errInvalidConstraint } if prop == "override" { return warns, errInvalidOverride } } case "ignored", "required": valid := true if rawList, ok := val.([]interface{}); ok { // Check element type of the array. TOML doesn't let mixing of types in // array. Checking one element would be enough. Empty array is valid. if len(rawList) > 0 && reflect.TypeOf(rawList[0]).Kind() != reflect.String { valid = false } } else { valid = false } if !valid { if prop == "ignored" { return warns, errInvalidIgnored } if prop == "required" { return warns, errInvalidRequired } } default: warns = append(warns, fmt.Errorf("Unknown field in manifest: %v", prop)) } } return warns, nil } // ValidateProjectRoots validates the project roots present in manifest. func ValidateProjectRoots(c *Ctx, m *Manifest, sm gps.SourceManager) error { // Channel to receive all the errors errorCh := make(chan error, len(m.Constraints)+len(m.Ovr)) var wg sync.WaitGroup validate := func(pr gps.ProjectRoot) { defer wg.Done() origPR, err := sm.DeduceProjectRoot(string(pr)) if err != nil { errorCh <- err } else if origPR != pr { errorCh <- fmt.Errorf("the name for %q should be changed to %q", pr, origPR) } } for pr := range m.Constraints { wg.Add(1) go validate(pr) } for pr := range m.Ovr { wg.Add(1) go validate(pr) } wg.Wait() close(errorCh) var valErr error if len(errorCh) > 0 { valErr = errInvalidProjectRoot c.Err.Printf("The following issues were found in Gopkg.toml:\n\n") for err := range errorCh { c.Err.Println(" ✗", err.Error()) } c.Err.Println() } return valErr } // readManifest returns a Manifest read from r and a slice of validation warnings. func readManifest(r io.Reader) (*Manifest, []error, error) { buf := &bytes.Buffer{} _, err := buf.ReadFrom(r) if err != nil { return nil, nil, errors.Wrap(err, "Unable to read byte stream") } warns, err := validateManifest(buf.String()) if err != nil { return nil, warns, errors.Wrap(err, "Manifest validation failed") } raw := rawManifest{} err = toml.Unmarshal(buf.Bytes(), &raw) if err != nil { return nil, warns, errors.Wrap(err, "Unable to parse the manifest as TOML") } m, err := fromRawManifest(raw) return m, warns, err } func fromRawManifest(raw rawManifest) (*Manifest, error) { m := NewManifest() m.Constraints = make(gps.ProjectConstraints, len(raw.Constraints)) m.Ovr = make(gps.ProjectConstraints, len(raw.Overrides)) m.Ignored = raw.Ignored m.Required = raw.Required for i := 0; i < len(raw.Constraints); i++ { name, prj, err := toProject(raw.Constraints[i]) if err != nil { return nil, err } if _, exists := m.Constraints[name]; exists { return nil, errors.Errorf("multiple dependencies specified for %s, can only specify one", name) } m.Constraints[name] = prj } for i := 0; i < len(raw.Overrides); i++ { name, prj, err := toProject(raw.Overrides[i]) if err != nil { return nil, err } if _, exists := m.Ovr[name]; exists { return nil, errors.Errorf("multiple overrides specified for %s, can only specify one", name) } m.Ovr[name] = prj } return m, nil } // toProject interprets the string representations of project information held in // a rawProject, converting them into a proper gps.ProjectProperties. An // error is returned if the rawProject contains some invalid combination - // for example, if both a branch and version constraint are specified. func toProject(raw rawProject) (n gps.ProjectRoot, pp gps.ProjectProperties, err error) { n = gps.ProjectRoot(raw.Name) if raw.Branch != "" { if raw.Version != "" || raw.Revision != "" { return n, pp, errors.Errorf("multiple constraints specified for %s, can only specify one", n) } pp.Constraint = gps.NewBranch(raw.Branch) } else if raw.Version != "" { if raw.Revision != "" { return n, pp, errors.Errorf("multiple constraints specified for %s, can only specify one", n) } // always semver if we can pp.Constraint, err = gps.NewSemverConstraintIC(raw.Version) if err != nil { // but if not, fall back on plain versions pp.Constraint = gps.NewVersion(raw.Version) } } else if raw.Revision != "" { pp.Constraint = gps.Revision(raw.Revision) } else { // If the user specifies nothing, it means an open constraint (accept // anything). pp.Constraint = gps.Any() } pp.Source = raw.Source return n, pp, nil } // toRaw converts the manifest into a representation suitable to write to the manifest file func (m *Manifest) toRaw() rawManifest { raw := rawManifest{ Constraints: make([]rawProject, 0, len(m.Constraints)), Overrides: make([]rawProject, 0, len(m.Ovr)), Ignored: m.Ignored, Required: m.Required, } for n, prj := range m.Constraints { raw.Constraints = append(raw.Constraints, toRawProject(n, prj)) } sort.Sort(sortedRawProjects(raw.Constraints)) for n, prj := range m.Ovr { raw.Overrides = append(raw.Overrides, toRawProject(n, prj)) } sort.Sort(sortedRawProjects(raw.Overrides)) return raw } type sortedRawProjects []rawProject func (s sortedRawProjects) Len() int { return len(s) } func (s sortedRawProjects) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s sortedRawProjects) Less(i, j int) bool { l, r := s[i], s[j] if l.Name < r.Name { return true } if r.Name < l.Name { return false } return l.Source < r.Source } // MarshalTOML serializes this manifest into TOML via an intermediate raw form. func (m *Manifest) MarshalTOML() ([]byte, error) { raw := m.toRaw() result, err := toml.Marshal(raw) return result, errors.Wrap(err, "Unable to marshal the lock to a TOML string") } func toRawProject(name gps.ProjectRoot, project gps.ProjectProperties) rawProject { raw := rawProject{ Name: string(name), Source: project.Source, } if v, ok := project.Constraint.(gps.Version); ok { switch v.Type() { case gps.IsRevision: raw.Revision = v.String() case gps.IsBranch: raw.Branch = v.String() case gps.IsSemver, gps.IsVersion: raw.Version = v.ImpliedCaretString() } return raw } // We simply don't allow for a case where the user could directly // express a 'none' constraint, so we can ignore it here. We also ignore // the 'any' case, because that's the other possibility, and it's what // we interpret not having any constraint expressions at all to mean. // if !gps.IsAny(pp.Constraint) && !gps.IsNone(pp.Constraint) { if !gps.IsAny(project.Constraint) && project.Constraint != nil { // Has to be a semver range. raw.Version = project.Constraint.ImpliedCaretString() } return raw } // DependencyConstraints returns a list of project-level constraints. func (m *Manifest) DependencyConstraints() gps.ProjectConstraints { return m.Constraints } // Overrides returns a list of project-level override constraints. func (m *Manifest) Overrides() gps.ProjectConstraints { return m.Ovr } // IgnoredPackages returns a set of import paths to ignore. func (m *Manifest) IgnoredPackages() *pkgtree.IgnoredRuleset { return pkgtree.NewIgnoredRuleset(m.Ignored) } // HasConstraintsOn checks if the manifest contains either constraints or // overrides on the provided ProjectRoot. func (m *Manifest) HasConstraintsOn(root gps.ProjectRoot) bool { if _, has := m.Constraints[root]; has { return true } if _, has := m.Ovr[root]; has { return true } return false } // RequiredPackages returns a set of import paths to require. func (m *Manifest) RequiredPackages() map[string]bool { if len(m.Required) == 0 { return nil } mp := make(map[string]bool, len(m.Required)) for _, i := range m.Required { mp[i] = true } return mp } dep-0.3.2/manifest_test.go000066400000000000000000000253021317166637100154750ustar00rootroot00000000000000// 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 dep import ( "bytes" "errors" "io/ioutil" "log" "reflect" "strings" "testing" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/test" ) func TestReadManifest(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() mf := h.GetTestFile("manifest/golden.toml") defer mf.Close() got, _, err := readManifest(mf) if err != nil { t.Fatalf("Should have read Manifest correctly, but got err %q", err) } c, _ := gps.NewSemverConstraint("^0.12.0") want := Manifest{ Constraints: map[gps.ProjectRoot]gps.ProjectProperties{ gps.ProjectRoot("github.com/golang/dep/internal/gps"): { Constraint: c, }, gps.ProjectRoot("github.com/babble/brook"): { Constraint: gps.Revision("d05d5aca9f895d19e9265839bffeadd74a2d2ecb"), }, }, Ovr: map[gps.ProjectRoot]gps.ProjectProperties{ gps.ProjectRoot("github.com/golang/dep/internal/gps"): { Source: "https://github.com/golang/dep/internal/gps", Constraint: gps.NewBranch("master"), }, }, Ignored: []string{"github.com/foo/bar"}, } if !reflect.DeepEqual(got.Constraints, want.Constraints) { t.Error("Valid manifest's dependencies did not parse as expected") } if !reflect.DeepEqual(got.Ovr, want.Ovr) { t.Error("Valid manifest's overrides did not parse as expected") } if !reflect.DeepEqual(got.Ignored, want.Ignored) { t.Error("Valid manifest's ignored did not parse as expected") } } func TestWriteManifest(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() golden := "manifest/golden.toml" want := h.GetTestFileString(golden) c, _ := gps.NewSemverConstraint("^0.12.0") m := NewManifest() m.Constraints[gps.ProjectRoot("github.com/golang/dep/internal/gps")] = gps.ProjectProperties{ Constraint: c, } m.Constraints[gps.ProjectRoot("github.com/babble/brook")] = gps.ProjectProperties{ Constraint: gps.Revision("d05d5aca9f895d19e9265839bffeadd74a2d2ecb"), } m.Ovr[gps.ProjectRoot("github.com/golang/dep/internal/gps")] = gps.ProjectProperties{ Source: "https://github.com/golang/dep/internal/gps", Constraint: gps.NewBranch("master"), } m.Ignored = []string{"github.com/foo/bar"} got, err := m.MarshalTOML() if err != nil { t.Fatalf("Error while marshaling valid manifest to TOML: %q", err) } if string(got) != want { if *test.UpdateGolden { if err = h.WriteTestFile(golden, string(got)); err != nil { t.Fatal(err) } } else { t.Errorf("Valid manifest did not marshal to TOML as expected:\n\t(GOT): %s\n\t(WNT): %s", string(got), want) } } } func TestReadManifestErrors(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() var err error tests := []struct { name string file string }{ {"multiple constraints", "manifest/error1.toml"}, {"multiple dependencies", "manifest/error2.toml"}, {"multiple overrides", "manifest/error3.toml"}, } for _, tst := range tests { mf := h.GetTestFile(tst.file) defer mf.Close() _, _, err = readManifest(mf) if err == nil { t.Errorf("Reading manifest with %s should have caused error, but did not", tst.name) } else if !strings.Contains(err.Error(), tst.name) { t.Errorf("Unexpected error %q; expected %s error", err, tst.name) } } } func TestValidateManifest(t *testing.T) { cases := []struct { tomlString string wantWarn []error wantError error }{ { tomlString: ` required = ["github.com/foo/bar"] `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` required = "github.com/foo/bar" `, wantWarn: []error{}, wantError: errInvalidRequired, }, { tomlString: ` required = [] `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` required = [1, 2, 3] `, wantWarn: []error{}, wantError: errInvalidRequired, }, { tomlString: ` [[required]] name = "foo" `, wantWarn: []error{}, wantError: errInvalidRequired, }, { tomlString: ` ignored = ["foo"] `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` ignored = "foo" `, wantWarn: []error{}, wantError: errInvalidIgnored, }, { tomlString: ` ignored = [] `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` ignored = [1, 2, 3] `, wantWarn: []error{}, wantError: errInvalidIgnored, }, { tomlString: ` [[ignored]] name = "foo" `, wantWarn: []error{}, wantError: errInvalidIgnored, }, { tomlString: ` [metadata] authors = "foo" version = "1.0.0" `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` foo = "some-value" version = 14 [[bar]] author = "xyz" [[constraint]] name = "github.com/foo/bar" version = "" `, wantWarn: []error{ errors.New("Unknown field in manifest: foo"), errors.New("Unknown field in manifest: bar"), errors.New("Unknown field in manifest: version"), }, wantError: nil, }, { tomlString: ` metadata = "project-name" [[constraint]] name = "github.com/foo/bar" `, wantWarn: []error{errors.New("metadata should be a TOML table")}, wantError: nil, }, { tomlString: ` [[constraint]] name = "github.com/foo/bar" `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` [[constraint]] `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` constraint = "foo" `, wantWarn: []error{}, wantError: errInvalidConstraint, }, { tomlString: ` constraint = ["foo", "bar"] `, wantWarn: []error{}, wantError: errInvalidConstraint, }, { tomlString: ` [[override]] name = "github.com/foo/bar" `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` [[override]] `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` override = "bar" `, wantWarn: []error{}, wantError: errInvalidOverride, }, { tomlString: ` override = ["foo", "bar"] `, wantWarn: []error{}, wantError: errInvalidOverride, }, { tomlString: ` [[constraint]] name = "github.com/foo/bar" location = "some-value" link = "some-other-value" metadata = "foo" [[override]] nick = "foo" `, wantWarn: []error{ errors.New("Invalid key \"location\" in \"constraint\""), errors.New("Invalid key \"link\" in \"constraint\""), errors.New("Invalid key \"nick\" in \"override\""), errors.New("metadata in \"constraint\" should be a TOML table"), }, wantError: nil, }, { tomlString: ` [[constraint]] name = "github.com/foo/bar" [constraint.metadata] color = "blue" `, wantWarn: []error{}, wantError: nil, }, { tomlString: ` [[constraint]] name = "github.com/foo/bar" revision = "b86ad16" `, wantWarn: []error{errors.New("revision \"b86ad16\" should not be in abbreviated form")}, wantError: nil, }, { tomlString: ` [[constraint]] name = "foobar.com/hg" revision = "8d43f8c0b836" `, wantWarn: []error{errors.New("revision \"8d43f8c0b836\" should not be in abbreviated form")}, wantError: nil, }, } // contains for error contains := func(s []error, e error) bool { for _, a := range s { if a.Error() == e.Error() { return true } } return false } for _, c := range cases { errs, err := validateManifest(c.tomlString) // compare validation errors if err != c.wantError { t.Fatalf("Manifest errors are not as expected: \n\t(GOT) %v \n\t(WNT) %v", err, c.wantError) } // compare length of error slice if len(errs) != len(c.wantWarn) { t.Fatalf("Number of manifest errors are not as expected: \n\t(GOT) %v errors(%v)\n\t(WNT) %v errors(%v).", len(errs), errs, len(c.wantWarn), c.wantWarn) } // check if the expected errors exist in actual errors slice for _, er := range errs { if !contains(c.wantWarn, er) { t.Fatalf("Manifest errors are not as expected: \n\t(MISSING) %v\n\t(FROM) %v", er, c.wantWarn) } } } } func TestValidateProjectRoots(t *testing.T) { cases := []struct { name string manifest Manifest wantError error wantWarn []string }{ { name: "empty Manifest", manifest: Manifest{}, wantError: nil, wantWarn: []string{}, }, { name: "valid project root", manifest: Manifest{ Constraints: map[gps.ProjectRoot]gps.ProjectProperties{ gps.ProjectRoot("github.com/golang/dep"): { Constraint: gps.Any(), }, }, }, wantError: nil, wantWarn: []string{}, }, { name: "invalid project roots in Constraints and Overrides", manifest: Manifest{ Constraints: map[gps.ProjectRoot]gps.ProjectProperties{ gps.ProjectRoot("github.com/golang/dep/foo"): { Constraint: gps.Any(), }, gps.ProjectRoot("github.com/golang/go/xyz"): { Constraint: gps.Any(), }, gps.ProjectRoot("github.com/golang/fmt"): { Constraint: gps.Any(), }, }, Ovr: map[gps.ProjectRoot]gps.ProjectProperties{ gps.ProjectRoot("github.com/golang/mock/bar"): { Constraint: gps.Any(), }, gps.ProjectRoot("github.com/golang/mock"): { Constraint: gps.Any(), }, }, }, wantError: errInvalidProjectRoot, wantWarn: []string{ "the name for \"github.com/golang/dep/foo\" should be changed to \"github.com/golang/dep\"", "the name for \"github.com/golang/mock/bar\" should be changed to \"github.com/golang/mock\"", "the name for \"github.com/golang/go/xyz\" should be changed to \"github.com/golang/go\"", }, }, { name: "invalid source path", manifest: Manifest{ Constraints: map[gps.ProjectRoot]gps.ProjectProperties{ gps.ProjectRoot("github.com/golang"): { Constraint: gps.Any(), }, }, }, wantError: errInvalidProjectRoot, wantWarn: []string{}, }, } h := test.NewHelper(t) defer h.Cleanup() h.TempDir("src") pwd := h.Path(".") // Capture the stderr to verify the warnings stderrOutput := &bytes.Buffer{} errLogger := log.New(stderrOutput, "", 0) ctx := &Ctx{ GOPATH: pwd, Out: log.New(ioutil.Discard, "", 0), Err: errLogger, } sm, err := ctx.SourceManager() h.Must(err) defer sm.Release() for _, c := range cases { t.Run(c.name, func(t *testing.T) { // Empty the buffer for every case stderrOutput.Reset() err := ValidateProjectRoots(ctx, &c.manifest, sm) if err != c.wantError { t.Fatalf("Unexpected error while validating project roots:\n\t(GOT): %v\n\t(WNT): %v", err, c.wantError) } warnings := stderrOutput.String() for _, warn := range c.wantWarn { if !strings.Contains(warnings, warn) { t.Fatalf("Expected ValidateProjectRoot errors to contain: %q", warn) } } }) } } dep-0.3.2/project.go000066400000000000000000000132751317166637100143040ustar00rootroot00000000000000// 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 dep import ( "fmt" "os" "path/filepath" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) var ( errProjectNotFound = fmt.Errorf("could not find project %s, use dep init to initiate a manifest", ManifestName) errVendorBackupFailed = fmt.Errorf("failed to create vendor backup. File with same name exists") ) // findProjectRoot searches from the starting directory upwards looking for a // manifest file until we get to the root of the filesystem. func findProjectRoot(from string) (string, error) { for { mp := filepath.Join(from, ManifestName) _, err := os.Stat(mp) if err == nil { return from, nil } if !os.IsNotExist(err) { // Some err other than non-existence - return that out return "", err } parent := filepath.Dir(from) if parent == from { return "", errProjectNotFound } from = parent } } // checkGopkgFilenames validates filename case for the manifest and lock files. // // This is relevant on case-insensitive file systems like the defaults in Windows and // macOS. // // If manifest file is not found, it returns an error indicating the project could not be // found. If it is found but the case does not match, an error is returned. If a lock // file is not found, no error is returned as lock file is optional. If it is found but // the case does not match, an error is returned. func checkGopkgFilenames(projectRoot string) error { // ReadActualFilenames is actually costly. Since the check to validate filename case // for Gopkg filenames is not relevant to case-sensitive filesystems like // ext4(linux), try for an early return. caseSensitive, err := fs.IsCaseSensitiveFilesystem(projectRoot) if err != nil { return errors.Wrap(err, "could not check validity of configuration filenames") } if caseSensitive { return nil } actualFilenames, err := fs.ReadActualFilenames(projectRoot, []string{ManifestName, LockName}) if err != nil { return errors.Wrap(err, "could not check validity of configuration filenames") } actualMfName, found := actualFilenames[ManifestName] if !found { // Ideally this part of the code won't ever be executed if it is called after // `findProjectRoot`. But be thorough and handle it anyway. return errProjectNotFound } if actualMfName != ManifestName { return fmt.Errorf("manifest filename %q does not match %q", actualMfName, ManifestName) } // If a file is not found, the string map returned by `fs.ReadActualFilenames` will // not have an entry for the given filename. Since the lock file is optional, we // should check for equality only if it was found. actualLfName, found := actualFilenames[LockName] if found && actualLfName != LockName { return fmt.Errorf("lock filename %q does not match %q", actualLfName, LockName) } return nil } // A Project holds a Manifest and optional Lock for a project. type Project struct { // AbsRoot is the absolute path to the root directory of the project. AbsRoot string // ResolvedAbsRoot is the resolved absolute path to the root directory of the project. // If AbsRoot is not a symlink, then ResolvedAbsRoot should equal AbsRoot. ResolvedAbsRoot string // ImportRoot is the import path of the project's root directory. ImportRoot gps.ProjectRoot Manifest *Manifest Lock *Lock // Optional } // SetRoot sets the project AbsRoot and ResolvedAbsRoot. If root is a not symlink, ResolvedAbsRoot will be set to root. func (p *Project) SetRoot(root string) error { rroot, err := filepath.EvalSymlinks(root) if err != nil { return err } p.ResolvedAbsRoot, p.AbsRoot = rroot, root return nil } // MakeParams is a simple helper to create a gps.SolveParameters without setting // any nils incorrectly. func (p *Project) MakeParams() gps.SolveParameters { params := gps.SolveParameters{ RootDir: p.AbsRoot, ProjectAnalyzer: Analyzer{}, } if p.Manifest != nil { params.Manifest = p.Manifest } if p.Lock != nil { params.Lock = p.Lock } return params } // ParseRootPackageTree analyzes the root project's disk contents to create a // PackageTree, trimming out packages that are not relevant for root projects // along the way. func (p *Project) ParseRootPackageTree() (pkgtree.PackageTree, error) { ptree, err := pkgtree.ListPackages(p.ResolvedAbsRoot, string(p.ImportRoot)) if err != nil { return pkgtree.PackageTree{}, errors.Wrap(err, "analysis of current project's packages failed") } // We don't care about (unreachable) hidden packages for the root project, // so drop all of those. var ig *pkgtree.IgnoredRuleset if p.Manifest != nil { ig = p.Manifest.IgnoredPackages() } return ptree.TrimHiddenPackages(true, true, ig), nil } // BackupVendor looks for existing vendor directory and if it's not empty, // creates a backup of it to a new directory with the provided suffix. func BackupVendor(vpath, suffix string) (string, error) { // Check if there's a non-empty vendor directory vendorExists, err := fs.IsNonEmptyDir(vpath) if err != nil && !os.IsNotExist(err) { return "", err } if vendorExists { // vpath is a full filepath. We need to split it to prefix the backup dir // with an "_" vpathDir, name := filepath.Split(vpath) vendorbak := filepath.Join(vpathDir, "_"+name+"-"+suffix) // Check if a directory with same name exists if _, err = os.Stat(vendorbak); os.IsNotExist(err) { // Copy existing vendor to vendor-{suffix} if err := fs.CopyDir(vpath, vendorbak); err != nil { return "", err } return vendorbak, nil } return "", errVendorBackupFailed } return "", nil } dep-0.3.2/project_test.go000066400000000000000000000150611317166637100153360ustar00rootroot00000000000000// Copyright 2017 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 dep import ( "fmt" "os" "path/filepath" "runtime" "strings" "testing" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/test" ) func TestFindRoot(t *testing.T) { wd, err := os.Getwd() if err != nil { t.Fatal(err) } want := filepath.Join(wd, "testdata", "rootfind") got1, err := findProjectRoot(want) if err != nil { t.Errorf("Unexpected error while finding root: %s", err) } else if want != got1 { t.Errorf("findProjectRoot directly on root dir should have found %s, got %s", want, got1) } got2, err := findProjectRoot(filepath.Join(want, "subdir")) if err != nil { t.Errorf("Unexpected error while finding root: %s", err) } else if want != got2 { t.Errorf("findProjectRoot on subdir should have found %s, got %s", want, got2) } got3, err := findProjectRoot(filepath.Join(want, "nonexistent")) if err != nil { t.Errorf("Unexpected error while finding root: %s", err) } else if want != got3 { t.Errorf("findProjectRoot on nonexistent subdir should still work and give %s, got %s", want, got3) } root := "/" p, err := findProjectRoot(root) if p != "" { t.Errorf("findProjectRoot with path %s returned non empty string: %s", root, p) } if err != errProjectNotFound { t.Errorf("findProjectRoot want: %#v got: %#v", errProjectNotFound, err) } // The following test does not work on windows because syscall.Stat does not // return a "not a directory" error. if runtime.GOOS != "windows" { got4, err := findProjectRoot(filepath.Join(want, ManifestName)) if err == nil { t.Errorf("Should have err'd when trying subdir of file, but returned %s", got4) } } } func TestCheckGopkgFilenames(t *testing.T) { // We are trying to skip this test on file systems which are case-sensiive. We could // have used `fs.IsCaseSensitiveFilesystem` for this check. However, the code we are // testing also relies on `fs.IsCaseSensitiveFilesystem`. So a bug in // `fs.IsCaseSensitiveFilesystem` could prevent this test from being run. This is the // only scenario where we prefer the OS heuristic over doing the actual work of // validating filesystem case sensitivity via `fs.IsCaseSensitiveFilesystem`. if runtime.GOOS != "windows" && runtime.GOOS != "darwin" { t.Skip("skip this test on non-Windows, non-macOS") } errMsgFor := func(filetype, filename string) func(string) string { return func(name string) string { return fmt.Sprintf("%s filename %q does not match %q", filetype, name, filename) } } manifestErrMsg := errMsgFor("manifest", ManifestName) lockErrMsg := errMsgFor("lock", LockName) invalidMfName := strings.ToLower(ManifestName) invalidLfName := strings.ToLower(LockName) cases := []struct { wantErr bool createFiles []string wantErrMsg string }{ // No error should be returned when the project contains a valid manifest file // but no lock file. {false, []string{ManifestName}, ""}, // No error should be returned when the project contains a valid manifest file as // well as a valid lock file. {false, []string{ManifestName, LockName}, ""}, // Error indicating the project was not found should be returned if a manifest // file is not found. {true, nil, errProjectNotFound.Error()}, // Error should be returned if the project has a manifest file with invalid name // but no lock file. {true, []string{invalidMfName}, manifestErrMsg(invalidMfName)}, // Error should be returned if the project has a valid manifest file and an // invalid lock file. {true, []string{ManifestName, invalidLfName}, lockErrMsg(invalidLfName)}, } for _, c := range cases { h := test.NewHelper(t) defer h.Cleanup() // Create a temporary directory which we will use as the project folder. h.TempDir("") tmpPath := h.Path(".") // Create any files that are needed for the test before invoking // `checkGopkgFilenames`. for _, file := range c.createFiles { h.TempFile(file, "") } err := checkGopkgFilenames(tmpPath) if c.wantErr { if err == nil { // We were expecting an error but did not get one. t.Fatalf("unexpected error message: \n\t(GOT) nil\n\t(WNT) %s", c.wantErrMsg) } else if err.Error() != c.wantErrMsg { // We got an error but it is not the one we were expecting. t.Fatalf("unexpected error message: \n\t(GOT) %s\n\t(WNT) %s", err.Error(), c.wantErrMsg) } } else if err != nil { // Error was not expected but still we got one t.Fatalf("unexpected error message: \n\t(GOT) %+v", err) } } } func TestProjectMakeParams(t *testing.T) { m := NewManifest() m.Ignored = []string{"ignoring this"} p := Project{ AbsRoot: "someroot", ImportRoot: gps.ProjectRoot("Some project root"), Manifest: m, Lock: &Lock{}, } solveParam := p.MakeParams() if solveParam.Manifest != p.Manifest { t.Error("makeParams() returned gps.SolveParameters with incorrect Manifest") } if solveParam.Lock != p.Lock { t.Error("makeParams() returned gps.SolveParameters with incorrect Lock") } } func TestBackupVendor(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, "vendorbackupproject") defer pc.Release() dummyFile := filepath.Join("vendor", "badinput_fileroot") pc.CopyFile(dummyFile, "txn_writer/badinput_fileroot") pc.Load() if err := pc.VendorShouldExist(); err != nil { t.Fatal(err) } // Create a backup wantName := "_vendor-sfx" vendorbak, err := BackupVendor("vendor", "sfx") if err != nil { t.Fatal(err) } if vendorbak != wantName { t.Fatalf("Vendor backup name is not as expected: \n\t(GOT) %v\n\t(WNT) %v", vendorbak, wantName) } if err = pc.h.ShouldExist(vendorbak); err != nil { t.Fatal(err) } if err = pc.h.ShouldExist(vendorbak + string(filepath.Separator) + "badinput_fileroot"); err != nil { t.Fatal(err) } // Should return error on creating backup with existing filename vendorbak, err = BackupVendor("vendor", "sfx") if err != errVendorBackupFailed { t.Fatalf("Vendor backup error is not as expected: \n\t(GOT) %v\n\t(WNT) %v", err, errVendorBackupFailed) } if vendorbak != "" { t.Fatalf("Vendor backup name is not as expected: \n\t(GOT) %v\n\t(WNT) %v", vendorbak, "") } // Delete vendor if err = os.RemoveAll("vendor"); err != nil { t.Fatal(err) } // Should return empty backup file name when no vendor exists vendorbak, err = BackupVendor("vendor", "sfx") if err != nil { t.Fatal(err) } if vendorbak != "" { t.Fatalf("Vendor backup name is not as expected: \n\t(GOT) %v\n\t(WNT) %v", vendorbak, "") } } dep-0.3.2/test_project_context_test.go000066400000000000000000000132041317166637100201360ustar00rootroot00000000000000// 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 dep import ( "path/filepath" "github.com/golang/dep/internal/gps" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) // TestProjectContext groups together test project files and helps test them type TestProjectContext struct { h *test.Helper tempDir string // Full path to the temp directory tempProjectDir string // Relative path of the project under the temp directory Context *Ctx Project *Project SourceManager gps.SourceManager } // NewTestProjectContext creates a new on-disk test project func NewTestProjectContext(h *test.Helper, projectName string) *TestProjectContext { pc := &TestProjectContext{h: h} // Create the test project directory pc.tempProjectDir = filepath.Join("src", projectName) h.TempDir(pc.tempProjectDir) pc.tempDir = h.Path(".") pc.Project = &Project{AbsRoot: filepath.Join(pc.tempDir, pc.tempProjectDir)} h.Cd(pc.Project.AbsRoot) h.Setenv("GOPATH", pc.tempDir) // Set up a Source Manager var err error pc.Context = &Ctx{ GOPATH: pc.tempDir, Out: discardLogger(), Err: discardLogger(), } pc.SourceManager, err = pc.Context.SourceManager() h.Must(errors.Wrap(err, "Unable to create a SourceManager")) return pc } // CopyFile copies a file from the testdata directory into the project // projectPath is the destination file path, relative to the project directory // testdataPath is the source path, relative to the testdata directory func (pc *TestProjectContext) CopyFile(projectPath string, testdataPath string) string { path := filepath.Join(pc.tempProjectDir, projectPath) pc.h.TempCopy(path, testdataPath) return path } func (pc *TestProjectContext) Load() { // TODO(carolynvs): Can't use Ctx.LoadProject until dep doesn't require a manifest at the project root or it also looks for lock var err error var m *Manifest mp := pc.getManifestPath() if pc.h.Exist(mp) { mf := pc.h.GetFile(mp) defer mf.Close() var warns []error m, warns, err = readManifest(mf) for _, warn := range warns { pc.Context.Err.Printf("dep: WARNING: %v\n", warn) } pc.h.Must(errors.Wrapf(err, "Unable to read manifest at %s", mp)) } var l *Lock lp := pc.getLockPath() if pc.h.Exist(lp) { lf := pc.h.GetFile(lp) defer lf.Close() l, err = readLock(lf) pc.h.Must(errors.Wrapf(err, "Unable to read lock at %s", lp)) } pc.Project.Manifest = m pc.Project.Lock = l } // GetLockPath returns the full path to the lock func (pc *TestProjectContext) getLockPath() string { return filepath.Join(pc.Project.AbsRoot, LockName) } // GetManifestPath returns the full path to the manifest func (pc *TestProjectContext) getManifestPath() string { return filepath.Join(pc.Project.AbsRoot, ManifestName) } // GetVendorPath returns the full path to the vendor directory func (pc *TestProjectContext) getVendorPath() string { return filepath.Join(pc.Project.AbsRoot, "vendor") } // LockShouldMatchGolden returns an error when the lock does not match the golden lock. // goldenLockPath is the path to the golden lock file relative to the testdata directory // Updates the golden file when -UpdateGolden flag is present. func (pc *TestProjectContext) LockShouldMatchGolden(goldenLockPath string) error { got := pc.h.ReadLock() return pc.ShouldMatchGolden(goldenLockPath, got) } // LockShouldNotExist returns an error when the lock exists. func (pc *TestProjectContext) LockShouldNotExist() error { return pc.h.ShouldNotExist(pc.getLockPath()) } // ManifestShouldMatchGolden returns an error when the manifest does not match the golden manifest. // goldenManifestPath is the path to the golden manifest file, relative to the testdata directory // Updates the golden file when -UpdateGolden flag is present func (pc *TestProjectContext) ManifestShouldMatchGolden(goldenManifestPath string) error { got := pc.h.ReadManifest() return pc.ShouldMatchGolden(goldenManifestPath, got) } // ManifestShouldNotExist returns an error when the lock exists. func (pc *TestProjectContext) ManifestShouldNotExist() error { return pc.h.ShouldNotExist(pc.getManifestPath()) } // ShouldMatchGolden returns an error when a file does not match the golden file. // goldenFile is the path to the golden file, relative to the testdata directory // Updates the golden file when -UpdateGolden flag is present func (pc *TestProjectContext) ShouldMatchGolden(goldenFile string, got string) error { want := pc.h.GetTestFileString(goldenFile) if want != got { if *test.UpdateGolden { if err := pc.h.WriteTestFile(goldenFile, got); err != nil { return errors.Wrapf(err, "Unable to write updated golden file %s", goldenFile) } } else { return errors.Errorf("expected %s, got %s", want, got) } } return nil } // VendorShouldExist returns an error when the vendor directory does not exist. func (pc *TestProjectContext) VendorShouldExist() error { return pc.h.ShouldExist(pc.getVendorPath()) } // VendorFileShouldExist returns an error when the specified file does not exist in vendor. // filePath is the relative path to the file within vendor func (pc *TestProjectContext) VendorFileShouldExist(filePath string) error { fullPath := filepath.Join(pc.getVendorPath(), filePath) return pc.h.ShouldExist(fullPath) } // VendorShouldNotExist returns an error when the vendor directory exists. func (pc *TestProjectContext) VendorShouldNotExist() error { return pc.h.ShouldNotExist(pc.getVendorPath()) } // Release cleans up after test objects created by this instance func (pc *TestProjectContext) Release() { if pc.SourceManager != nil { pc.SourceManager.Release() } } dep-0.3.2/testdata/000077500000000000000000000000001317166637100141105ustar00rootroot00000000000000dep-0.3.2/testdata/analyzer/000077500000000000000000000000001317166637100157355ustar00rootroot00000000000000dep-0.3.2/testdata/analyzer/Gopkg.toml000066400000000000000000000002371317166637100177030ustar00rootroot00000000000000 [[constraint]] name = "github.com/golang/dep" version = ">=0.12.0, <1.0.0" [[constraint]] name = "github.com/pkg/errors" version = ">=0.8.0, <1.0.0" dep-0.3.2/testdata/lock/000077500000000000000000000000001317166637100150405ustar00rootroot00000000000000dep-0.3.2/testdata/lock/error0.toml000066400000000000000000000004061317166637100171460ustar00rootroot00000000000000[solve-meta] inputs-digest = "2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e" [[projects]] name = "github.com/golang/dep" branch = "master" version = "v0.12.0" revision = "d05d5aca9f895d19e9265839bffeadd74a2d2ecb" packages = ["."] dep-0.3.2/testdata/lock/error1.toml000066400000000000000000000003631317166637100171510ustar00rootroot00000000000000[[projects]] name = "github.com/golang/dep" branch = "master" revision = "d05d5aca9f895d19e9265839bffeadd74a2d2ecb" packages = ["."] [solve-meta] inputs-digest = "000aaa2a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e" dep-0.3.2/testdata/lock/error2.toml000066400000000000000000000002441317166637100171500ustar00rootroot00000000000000[[projects]] name = "github.com/golang/dep" packages = ["."] [solve-meta] inputs-digest = "2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e" dep-0.3.2/testdata/lock/golden0.toml000066400000000000000000000005051317166637100172650ustar00rootroot00000000000000 [[projects]] branch = "master" name = "github.com/golang/dep" packages = ["."] revision = "d05d5aca9f895d19e9265839bffeadd74a2d2ecb" [solve-meta] analyzer-name = "" analyzer-version = 0 inputs-digest = "2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e" solver-name = "" solver-version = 0 dep-0.3.2/testdata/lock/golden1.toml000066400000000000000000000005061317166637100172670ustar00rootroot00000000000000 [[projects]] name = "github.com/golang/dep" packages = ["."] revision = "d05d5aca9f895d19e9265839bffeadd74a2d2ecb" version = "0.12.2" [solve-meta] analyzer-name = "" analyzer-version = 0 inputs-digest = "2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e" solver-name = "" solver-version = 0 dep-0.3.2/testdata/manifest/000077500000000000000000000000001317166637100157165ustar00rootroot00000000000000dep-0.3.2/testdata/manifest/error1.toml000066400000000000000000000006351317166637100200310ustar00rootroot00000000000000ignored = ["github.com/foo/bar"] [[constraint]] name = "github.com/golang/dep" branch = "master" revision = "d05d5aca9f895d19e9265839bffeadd74a2d2ecb" version = "^v0.12.0" source = "https://github.com/golang/dep" [[override]] name = "github.com/golang/dep" branch = "master" revision = "d05d5aca9f895d19e9265839bffeadd74a2d2ecb" version = "^v0.12.0" source = "https://github.com/golang/dep" dep-0.3.2/testdata/manifest/error2.toml000066400000000000000000000002531317166637100200260ustar00rootroot00000000000000ignored = ["github.com/foo/bar"] [[constraint]] name = "github.com/golang/dep" branch = "master" [[constraint]] name = "github.com/golang/dep" branch = "master" dep-0.3.2/testdata/manifest/error3.toml000066400000000000000000000002471317166637100200320ustar00rootroot00000000000000ignored = ["github.com/foo/bar"] [[override]] name = "github.com/golang/dep" branch = "master" [[override]] name = "github.com/golang/dep" branch = "master" dep-0.3.2/testdata/manifest/golden.toml000066400000000000000000000005471317166637100200710ustar00rootroot00000000000000ignored = ["github.com/foo/bar"] [[constraint]] name = "github.com/babble/brook" revision = "d05d5aca9f895d19e9265839bffeadd74a2d2ecb" [[constraint]] name = "github.com/golang/dep/internal/gps" version = "0.12.0" [[override]] branch = "master" name = "github.com/golang/dep/internal/gps" source = "https://github.com/golang/dep/internal/gps" dep-0.3.2/testdata/rootfind/000077500000000000000000000000001317166637100157345ustar00rootroot00000000000000dep-0.3.2/testdata/rootfind/Gopkg.toml000066400000000000000000000000001317166637100176660ustar00rootroot00000000000000dep-0.3.2/testdata/rootfind/subdir/000077500000000000000000000000001317166637100172245ustar00rootroot00000000000000dep-0.3.2/testdata/rootfind/subdir/.gitkeep000066400000000000000000000000001317166637100206430ustar00rootroot00000000000000dep-0.3.2/testdata/txn_writer/000077500000000000000000000000001317166637100163155ustar00rootroot00000000000000dep-0.3.2/testdata/txn_writer/badinput_fileroot000066400000000000000000000000001317166637100217370ustar00rootroot00000000000000dep-0.3.2/testdata/txn_writer/expected_diff_output.txt000066400000000000000000000015631317166637100232740ustar00rootroot00000000000000Memo: 595716d270828e763c811ef79c9c41f85b1d1bfbdfe85280036405c03772206c -> 2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e Add: [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" [[projects]] name = "github.com/stuff/realthing" packages = ["."] revision = "1f02e52d6bac308da54ab84a234c58a98ca82347" version = "2.0.0" Remove: [[projects]] name = "github.com/stuff/placeholder" packages = ["."] revision = "6694017eeb4e20fd277b049bf29dba4895c97234" version = "2.0.0" Modify: [[projects]] branch = "- master" name = "github.com/foo/bar" packages = ["- placeholder","+ thing"] revision = "f24338400f072ef18125ae0fbe6b06fe6d1783e7 -> 2a3a211e171803acb82d1d5d42ceb53228f51751" source = "+ http://github.example.com/foo/bar" version = "+ 1.2.0" dep-0.3.2/testdata/txn_writer/expected_lock.toml000066400000000000000000000006471317166637100220320ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/sdboyer/dep-test" packages = ["."] revision = "2a3a211e171803acb82d1d5d42ceb53228f51751" version = "1.0.0" [solve-meta] analyzer-name = "" analyzer-version = 0 inputs-digest = "595716d270828e763c811ef79c9c41f85b1d1bfbdfe85280036405c03772206c" solver-name = "" solver-version = 0 dep-0.3.2/testdata/txn_writer/expected_manifest.toml000066400000000000000000000011421317166637100226770ustar00rootroot00000000000000 # Gopkg.toml example # # Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md # for detailed Gopkg.toml documentation. # # required = ["github.com/user/thing/cmd/thing"] # ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] # # [[constraint]] # name = "github.com/user/project" # version = "1.0.0" # # [[constraint]] # name = "github.com/user/project2" # branch = "dev" # source = "github.com/myfork/project2" # # [[override]] # name = "github.com/x/y" # version = "2.4.0" [[constraint]] name = "github.com/sdboyer/dep-test" version = "1.0.0" dep-0.3.2/testdata/txn_writer/original_lock.toml000066400000000000000000000006241317166637100220300ustar00rootroot00000000000000[solve-meta] inputs-digest = "595716d270828e763c811ef79c9c41f85b1d1bfbdfe85280036405c03772206c" [[projects]] name = "github.com/foo/bar" branch = "master" revision = "f24338400f072ef18125ae0fbe6b06fe6d1783e7" packages = ["placeholder", "util"] [[projects]] name = "github.com/stuff/placeholder" version = "2.0.0" revision = "6694017eeb4e20fd277b049bf29dba4895c97234" packages = ["."] dep-0.3.2/testdata/txn_writer/updated_lock.toml000066400000000000000000000011161317166637100216470ustar00rootroot00000000000000[solve-meta] inputs-digest = "2252a285ab27944a4d7adcba8dbd03980f59ba652f12db39fa93b927c345593e" [[projects]] name = "github.com/foo/bar" source = "http://github.example.com/foo/bar" version = "1.2.0" revision = "2a3a211e171803acb82d1d5d42ceb53228f51751" packages = ["thing","util"] [[projects]] name = "github.com/stuff/realthing" version = "2.0.0" revision = "1f02e52d6bac308da54ab84a234c58a98ca82347" packages = ["."] [[projects]] name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" version = "v1.0.0" dep-0.3.2/txn_writer.go000066400000000000000000000316161317166637100150420ustar00rootroot00000000000000// 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 dep import ( "bytes" "fmt" "io/ioutil" "log" "os" "path/filepath" "github.com/golang/dep/internal/fs" "github.com/golang/dep/internal/gps" "github.com/pelletier/go-toml" "github.com/pkg/errors" ) // Example string to be written to the manifest file // if no dependencies are found in the project // during `dep init` var exampleTOML = []byte(` # Gopkg.toml example # # Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md # for detailed Gopkg.toml documentation. # # required = ["github.com/user/thing/cmd/thing"] # ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] # # [[constraint]] # name = "github.com/user/project" # version = "1.0.0" # # [[constraint]] # name = "github.com/user/project2" # branch = "dev" # source = "github.com/myfork/project2" # # [[override]] # name = "github.com/x/y" # version = "2.4.0" `) // String added on top of lock file var lockFileComment = []byte(`# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. `) // SafeWriter transactionalizes writes of manifest, lock, and vendor dir, both // individually and in any combination, into a pseudo-atomic action with // transactional rollback. // // It is not impervious to errors (writing to disk is hard), but it should // guard against non-arcane failure conditions. type SafeWriter struct { Manifest *Manifest lock *Lock lockDiff *gps.LockDiff writeVendor bool writeLock bool } // NewSafeWriter sets up a SafeWriter to write a set of manifest, lock, and // vendor tree. // // - If manifest is provided, it will be written to the standard manifest file // name beneath root. // // - If newLock is provided, it will be written to the standard lock file // name beneath root. // // - If vendor is VendorAlways, or is VendorOnChanged and the locks are different, // the vendor directory will be written beneath root based on newLock. // // - If oldLock is provided without newLock, error. // // - If vendor is VendorAlways without a newLock, error. func NewSafeWriter(manifest *Manifest, oldLock, newLock *Lock, vendor VendorBehavior) (*SafeWriter, error) { sw := &SafeWriter{ Manifest: manifest, lock: newLock, } if oldLock != nil { if newLock == nil { return nil, errors.New("must provide newLock when oldLock is specified") } sw.lockDiff = gps.DiffLocks(oldLock, newLock) if sw.lockDiff != nil { sw.writeLock = true } } else if newLock != nil { sw.writeLock = true } switch vendor { case VendorAlways: sw.writeVendor = true case VendorOnChanged: sw.writeVendor = sw.lockDiff != nil || (newLock != nil && oldLock == nil) } if sw.writeVendor && newLock == nil { return nil, errors.New("must provide newLock in order to write out vendor") } return sw, nil } // HasLock checks if a Lock is present in the SafeWriter func (sw *SafeWriter) HasLock() bool { return sw.lock != nil } // HasManifest checks if a Manifest is present in the SafeWriter func (sw *SafeWriter) HasManifest() bool { return sw.Manifest != nil } type rawStringDiff struct { *gps.StringDiff } // MarshalTOML serializes the diff as a string. func (diff rawStringDiff) MarshalTOML() ([]byte, error) { return []byte(diff.String()), nil } type rawLockedProjectDiff struct { Name gps.ProjectRoot `toml:"name"` Source *rawStringDiff `toml:"source,omitempty"` Version *rawStringDiff `toml:"version,omitempty"` Branch *rawStringDiff `toml:"branch,omitempty"` Revision *rawStringDiff `toml:"revision,omitempty"` Packages []rawStringDiff `toml:"packages,omitempty"` } func toRawLockedProjectDiff(diff gps.LockedProjectDiff) rawLockedProjectDiff { // this is a shallow copy since we aren't modifying the raw diff raw := rawLockedProjectDiff{Name: diff.Name} if diff.Source != nil { raw.Source = &rawStringDiff{diff.Source} } if diff.Version != nil { raw.Version = &rawStringDiff{diff.Version} } if diff.Branch != nil { raw.Branch = &rawStringDiff{diff.Branch} } if diff.Revision != nil { raw.Revision = &rawStringDiff{diff.Revision} } raw.Packages = make([]rawStringDiff, len(diff.Packages)) for i := 0; i < len(diff.Packages); i++ { raw.Packages[i] = rawStringDiff{&diff.Packages[i]} } return raw } type rawLockedProjectDiffs struct { Projects []rawLockedProjectDiff `toml:"projects"` } func toRawLockedProjectDiffs(diffs []gps.LockedProjectDiff) rawLockedProjectDiffs { raw := rawLockedProjectDiffs{ Projects: make([]rawLockedProjectDiff, len(diffs)), } for i := 0; i < len(diffs); i++ { raw.Projects[i] = toRawLockedProjectDiff(diffs[i]) } return raw } func formatLockDiff(diff gps.LockDiff) (string, error) { var buf bytes.Buffer if diff.HashDiff != nil { buf.WriteString(fmt.Sprintf("Memo: %s\n\n", diff.HashDiff)) } writeDiffs := func(diffs []gps.LockedProjectDiff) error { raw := toRawLockedProjectDiffs(diffs) chunk, err := toml.Marshal(raw) if err != nil { return err } buf.Write(chunk) buf.WriteString("\n") return nil } if len(diff.Add) > 0 { buf.WriteString("Add:") err := writeDiffs(diff.Add) if err != nil { return "", errors.Wrap(err, "Unable to format LockDiff.Add") } } if len(diff.Remove) > 0 { buf.WriteString("Remove:") err := writeDiffs(diff.Remove) if err != nil { return "", errors.Wrap(err, "Unable to format LockDiff.Remove") } } if len(diff.Modify) > 0 { buf.WriteString("Modify:") err := writeDiffs(diff.Modify) if err != nil { return "", errors.Wrap(err, "Unable to format LockDiff.Modify") } } return buf.String(), nil } // VendorBehavior defines when the vendor directory should be written. type VendorBehavior int const ( // VendorOnChanged indicates that the vendor directory should be written when the lock is new or changed. VendorOnChanged VendorBehavior = iota // VendorAlways forces the vendor directory to always be written. VendorAlways // VendorNever indicates the vendor directory should never be written. VendorNever ) func (sw SafeWriter) validate(root string, sm gps.SourceManager) error { if root == "" { return errors.New("root path must be non-empty") } if is, err := fs.IsDir(root); !is { if err != nil && !os.IsNotExist(err) { return err } return errors.Errorf("root path %q does not exist", root) } if sw.writeVendor && sm == nil { return errors.New("must provide a SourceManager if writing out a vendor dir") } return nil } // Write saves some combination of config yaml, lock, and a vendor tree. // root is the absolute path of root dir in which to write. // sm is only required if vendor is being written. // // It first writes to a temp dir, then moves them in place if and only if all the write // operations succeeded. It also does its best to roll back if any moves fail. // This mostly guarantees that dep cannot exit with a partial write that would // leave an undefined state on disk. func (sw *SafeWriter) Write(root string, sm gps.SourceManager, examples bool, logger *log.Logger) error { err := sw.validate(root, sm) if err != nil { return err } if !sw.HasManifest() && !sw.writeLock && !sw.writeVendor { // nothing to do return nil } mpath := filepath.Join(root, ManifestName) lpath := filepath.Join(root, LockName) vpath := filepath.Join(root, "vendor") td, err := ioutil.TempDir(os.TempDir(), "dep") if err != nil { return errors.Wrap(err, "error while creating temp dir for writing manifest/lock/vendor") } defer os.RemoveAll(td) if sw.HasManifest() { // Always write the example text to the bottom of the TOML file. tb, err := sw.Manifest.MarshalTOML() if err != nil { return errors.Wrap(err, "failed to marshal manifest to TOML") } var initOutput []byte // If examples are enabled, use the example text if examples { initOutput = exampleTOML } if err = ioutil.WriteFile(filepath.Join(td, ManifestName), append(initOutput, tb...), 0666); err != nil { return errors.Wrap(err, "failed to write manifest file to temp dir") } } if sw.writeLock { l, err := sw.lock.MarshalTOML() if err != nil { return errors.Wrap(err, "failed to marshal lock to TOML") } if err = ioutil.WriteFile(filepath.Join(td, LockName), append(lockFileComment, l...), 0666); err != nil { return errors.Wrap(err, "failed to write lock file to temp dir") } } if sw.writeVendor { err = gps.WriteDepTree(filepath.Join(td, "vendor"), sw.lock, sm, true, logger) if err != nil { return errors.Wrap(err, "error while writing out vendor tree") } } // Ensure vendor/.git is preserved if present if hasDotGit(vpath) { err = fs.RenameWithFallback(filepath.Join(vpath, ".git"), filepath.Join(td, "vendor/.git")) if _, ok := err.(*os.LinkError); ok { return errors.Wrap(err, "failed to preserve vendor/.git") } } // Move the existing files and dirs to the temp dir while we put the new // ones in, to provide insurance against errors for as long as possible. type pathpair struct { from, to string } var restore []pathpair var failerr error var vendorbak string if sw.HasManifest() { if _, err := os.Stat(mpath); err == nil { // Move out the old one. tmploc := filepath.Join(td, ManifestName+".orig") failerr = fs.RenameWithFallback(mpath, tmploc) if failerr != nil { goto fail } restore = append(restore, pathpair{from: tmploc, to: mpath}) } // Move in the new one. failerr = fs.RenameWithFallback(filepath.Join(td, ManifestName), mpath) if failerr != nil { goto fail } } if sw.writeLock { if _, err := os.Stat(lpath); err == nil { // Move out the old one. tmploc := filepath.Join(td, LockName+".orig") failerr = fs.RenameWithFallback(lpath, tmploc) if failerr != nil { goto fail } restore = append(restore, pathpair{from: tmploc, to: lpath}) } // Move in the new one. failerr = fs.RenameWithFallback(filepath.Join(td, LockName), lpath) if failerr != nil { goto fail } } if sw.writeVendor { if _, err := os.Stat(vpath); err == nil { // Move out the old vendor dir. just do it into an adjacent dir, to // try to mitigate the possibility of a pointless cross-filesystem // move with a temp directory. vendorbak = vpath + ".orig" if _, err := os.Stat(vendorbak); err == nil { // If the adjacent dir already exists, bite the bullet and move // to a proper tempdir. vendorbak = filepath.Join(td, "vendor.orig") } failerr = fs.RenameWithFallback(vpath, vendorbak) if failerr != nil { goto fail } restore = append(restore, pathpair{from: vendorbak, to: vpath}) } // Move in the new one. failerr = fs.RenameWithFallback(filepath.Join(td, "vendor"), vpath) if failerr != nil { goto fail } } // Renames all went smoothly. The deferred os.RemoveAll will get the temp // dir, but if we wrote vendor, we have to clean that up directly if sw.writeVendor { // Nothing we can really do about an error at this point, so ignore it os.RemoveAll(vendorbak) } return nil fail: // If we failed at any point, move all the things back into place, then bail. for _, pair := range restore { // Nothing we can do on err here, as we're already in recovery mode. fs.RenameWithFallback(pair.from, pair.to) } return failerr } // PrintPreparedActions logs the actions a call to Write would perform. func (sw *SafeWriter) PrintPreparedActions(output *log.Logger, verbose bool) error { if sw.HasManifest() { if verbose { m, err := sw.Manifest.MarshalTOML() if err != nil { return errors.Wrap(err, "ensure DryRun cannot serialize manifest") } output.Printf("Would have written the following %s:\n%s\n", ManifestName, string(m)) } else { output.Printf("Would have written %s.\n", ManifestName) } } if sw.writeLock { if sw.lockDiff == nil { if verbose { l, err := sw.lock.MarshalTOML() if err != nil { return errors.Wrap(err, "ensure DryRun cannot serialize lock") } output.Printf("Would have written the following %s:\n%s\n", LockName, string(l)) } else { output.Printf("Would have written %s.\n", LockName) } } else { output.Printf("Would have written the following changes to %s:\n", LockName) diff, err := formatLockDiff(*sw.lockDiff) if err != nil { return errors.Wrap(err, "ensure DryRun cannot serialize the lock diff") } output.Println(diff) } } if sw.writeVendor { if verbose { output.Printf("Would have written the following %d projects to the vendor directory:\n", len(sw.lock.Projects())) lps := sw.lock.Projects() for i, p := range lps { output.Printf("(%d/%d) %s@%s\n", i+1, len(lps), p.Ident(), p.Version()) } } else { output.Printf("Would have written %d projects to the vendor directory.\n", len(sw.lock.Projects())) } } return nil } // hasDotGit checks if a given path has .git file or directory in it. func hasDotGit(path string) bool { gitfilepath := filepath.Join(path, ".git") _, err := os.Stat(gitfilepath) return err == nil } dep-0.3.2/txn_writer_test.go000066400000000000000000000404231317166637100160750ustar00rootroot00000000000000// Copyright 2017 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 dep import ( "io/ioutil" "os" "path/filepath" "strings" "testing" "github.com/golang/dep/internal/test" "github.com/pkg/errors" ) const safeWriterProject = "safewritertest" const safeWriterGoldenManifest = "txn_writer/expected_manifest.toml" const safeWriterGoldenLock = "txn_writer/expected_lock.toml" func TestSafeWriter_BadInput_MissingRoot(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() sw, _ := NewSafeWriter(nil, nil, nil, VendorOnChanged) err := sw.Write("", pc.SourceManager, true, discardLogger()) if err == nil { t.Fatal("should have errored without a root path, but did not") } else if !strings.Contains(err.Error(), "root path") { t.Fatalf("expected root path error, got %s", err.Error()) } } func TestSafeWriter_BadInput_MissingSourceManager(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(LockName, safeWriterGoldenLock) pc.Load() sw, _ := NewSafeWriter(nil, nil, pc.Project.Lock, VendorAlways) err := sw.Write(pc.Project.AbsRoot, nil, true, discardLogger()) if err == nil { t.Fatal("should have errored without a source manager when forceVendor is true, but did not") } else if !strings.Contains(err.Error(), "SourceManager") { t.Fatalf("expected SourceManager error, got %s", err.Error()) } } func TestSafeWriter_BadInput_ForceVendorMissingLock(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() _, err := NewSafeWriter(nil, nil, nil, VendorAlways) if err == nil { t.Fatal("should have errored without a lock when forceVendor is true, but did not") } else if !strings.Contains(err.Error(), "newLock") { t.Fatalf("expected newLock error, got %s", err.Error()) } } func TestSafeWriter_BadInput_OldLockOnly(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(LockName, safeWriterGoldenLock) pc.Load() _, err := NewSafeWriter(nil, pc.Project.Lock, nil, VendorAlways) if err == nil { t.Fatal("should have errored with only an old lock, but did not") } else if !strings.Contains(err.Error(), "oldLock") { t.Fatalf("expected oldLock error, got %s", err.Error()) } } func TestSafeWriter_BadInput_NonexistentRoot(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() sw, _ := NewSafeWriter(nil, nil, nil, VendorOnChanged) missingroot := filepath.Join(pc.Project.AbsRoot, "nonexistent") err := sw.Write(missingroot, pc.SourceManager, true, discardLogger()) if err == nil { t.Fatal("should have errored with nonexistent dir for root path, but did not") } else if !strings.Contains(err.Error(), "does not exist") { t.Fatalf("expected does not exist error, got %s", err.Error()) } } func TestSafeWriter_BadInput_RootIsFile(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() sw, _ := NewSafeWriter(nil, nil, nil, VendorOnChanged) fileroot := pc.CopyFile("fileroot", "txn_writer/badinput_fileroot") err := sw.Write(fileroot, pc.SourceManager, true, discardLogger()) if err == nil { t.Fatal("should have errored when root path is a file, but did not") } else if !strings.Contains(err.Error(), "does not exist") { t.Fatalf("expected does not exist error, got %s", err.Error()) } } func TestSafeWriter_Manifest(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(ManifestName, safeWriterGoldenManifest) pc.Load() sw, _ := NewSafeWriter(pc.Project.Manifest, nil, nil, VendorOnChanged) // Verify prepared actions if !sw.HasManifest() { t.Fatal("Expected the payload to contain the manifest") } if sw.HasLock() { t.Fatal("Did not expect the payload to contain the lock") } if sw.writeVendor { t.Fatal("Did not expect the payload to contain the vendor directory") } // Write changes err := sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldMatchGolden(safeWriterGoldenManifest); err != nil { t.Fatal(err) } if err := pc.LockShouldNotExist(); err != nil { t.Fatal(err) } if err := pc.VendorShouldNotExist(); err != nil { t.Fatal(err) } } func TestSafeWriter_ManifestAndUnmodifiedLock(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(ManifestName, safeWriterGoldenManifest) pc.CopyFile(LockName, safeWriterGoldenLock) pc.Load() sw, _ := NewSafeWriter(pc.Project.Manifest, pc.Project.Lock, pc.Project.Lock, VendorOnChanged) // Verify prepared actions if !sw.HasManifest() { t.Fatal("Expected the payload to contain the manifest") } if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock.") } if sw.writeLock { t.Fatal("Did not expect that the writer should plan to write the lock") } if sw.writeVendor { t.Fatal("Did not expect the payload to contain the vendor directory") } // Write changes err := sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldMatchGolden(safeWriterGoldenManifest); err != nil { t.Fatal(err) } if err := pc.LockShouldMatchGolden(safeWriterGoldenLock); err != nil { t.Fatal(err) } if err := pc.VendorShouldNotExist(); err != nil { t.Fatal(err) } } func TestSafeWriter_ManifestAndUnmodifiedLockWithForceVendor(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(ManifestName, safeWriterGoldenManifest) pc.CopyFile(LockName, safeWriterGoldenLock) pc.Load() sw, _ := NewSafeWriter(pc.Project.Manifest, pc.Project.Lock, pc.Project.Lock, VendorAlways) // Verify prepared actions if !sw.HasManifest() { t.Fatal("Expected the payload to contain the manifest") } if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } if sw.writeLock { t.Fatal("Did not expect that the writer should plan to write the lock") } if !sw.writeVendor { t.Fatal("Expected the payload to contain the vendor directory") } // Write changes err := sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldMatchGolden(safeWriterGoldenManifest); err != nil { t.Fatal(err) } if err := pc.LockShouldMatchGolden(safeWriterGoldenLock); err != nil { t.Fatal(err) } if err := pc.VendorShouldExist(); err != nil { t.Fatal(err) } if err := pc.VendorFileShouldExist("github.com/sdboyer/dep-test"); err != nil { t.Fatal(err) } } func TestSafeWriter_ModifiedLock(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(LockName, safeWriterGoldenLock) pc.Load() originalLock := new(Lock) *originalLock = *pc.Project.Lock originalLock.SolveMeta.InputsDigest = []byte{} // zero out the input hash to ensure non-equivalency sw, _ := NewSafeWriter(nil, originalLock, pc.Project.Lock, VendorOnChanged) // Verify prepared actions if sw.HasManifest() { t.Fatal("Did not expect the manifest to be written") } if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } if !sw.writeLock { t.Fatal("Expected that the writer should plan to write the lock") } if !sw.writeVendor { t.Fatal("Expected that the writer should plan to write the vendor directory") } // Write changes err := sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldNotExist(); err != nil { t.Fatal(err) } if err := pc.LockShouldMatchGolden(safeWriterGoldenLock); err != nil { t.Fatal(err) } if err := pc.VendorShouldExist(); err != nil { t.Fatal(err) } if err := pc.VendorFileShouldExist("github.com/sdboyer/dep-test"); err != nil { t.Fatal(err) } } func TestSafeWriter_ModifiedLockSkipVendor(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(LockName, safeWriterGoldenLock) pc.Load() originalLock := new(Lock) *originalLock = *pc.Project.Lock originalLock.SolveMeta.InputsDigest = []byte{} // zero out the input hash to ensure non-equivalency sw, _ := NewSafeWriter(nil, originalLock, pc.Project.Lock, VendorNever) // Verify prepared actions if sw.HasManifest() { t.Fatal("Did not expect the payload to contain the manifest") } if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } if !sw.writeLock { t.Fatal("Expected that the writer should plan to write the lock") } if sw.writeVendor { t.Fatal("Did not expect the payload to contain the vendor directory") } // Write changes err := sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldNotExist(); err != nil { t.Fatal(err) } if err := pc.LockShouldMatchGolden(safeWriterGoldenLock); err != nil { t.Fatal(err) } if err := pc.VendorShouldNotExist(); err != nil { t.Fatal(err) } } func TestSafeWriter_ForceVendorWhenVendorAlreadyExists(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(LockName, safeWriterGoldenLock) pc.Load() sw, _ := NewSafeWriter(nil, pc.Project.Lock, pc.Project.Lock, VendorAlways) err := sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify prepared actions sw, _ = NewSafeWriter(nil, nil, pc.Project.Lock, VendorAlways) if sw.HasManifest() { t.Fatal("Did not expect the payload to contain the manifest") } if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } if !sw.writeLock { t.Fatal("Expected that the writer should plan to write the lock") } if !sw.writeVendor { t.Fatal("Expected the payload to contain the vendor directory ") } err = sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldNotExist(); err != nil { t.Fatal(err) } if err := pc.LockShouldMatchGolden(safeWriterGoldenLock); err != nil { t.Fatal(err) } if err := pc.VendorShouldExist(); err != nil { t.Fatal(err) } if err := pc.VendorFileShouldExist("github.com/sdboyer/dep-test"); err != nil { t.Fatal(err) } } func TestSafeWriter_NewLock(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.Load() lf := h.GetTestFile(safeWriterGoldenLock) defer lf.Close() newLock, err := readLock(lf) h.Must(err) sw, _ := NewSafeWriter(nil, nil, newLock, VendorOnChanged) // Verify prepared actions if sw.HasManifest() { t.Fatal("Did not expect the payload to contain the manifest") } if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } if !sw.writeLock { t.Fatal("Expected that the writer should plan to write the lock") } if !sw.writeVendor { t.Fatal("Expected the payload to contain the vendor directory") } // Write changes err = sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldNotExist(); err != nil { t.Fatal(err) } if err := pc.LockShouldMatchGolden(safeWriterGoldenLock); err != nil { t.Fatal(err) } if err := pc.VendorShouldExist(); err != nil { t.Fatal(err) } } func TestSafeWriter_NewLockSkipVendor(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.Load() lf := h.GetTestFile(safeWriterGoldenLock) defer lf.Close() newLock, err := readLock(lf) h.Must(err) sw, _ := NewSafeWriter(nil, nil, newLock, VendorNever) // Verify prepared actions if sw.HasManifest() { t.Fatal("Did not expect the payload to contain the manifest") } if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } if !sw.writeLock { t.Fatal("Expected that the writer should plan to write the lock") } if sw.writeVendor { t.Fatal("Did not expect the payload to contain the vendor directory") } // Write changes err = sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldNotExist(); err != nil { t.Fatal(err) } if err := pc.LockShouldMatchGolden(safeWriterGoldenLock); err != nil { t.Fatal(err) } if err := pc.VendorShouldNotExist(); err != nil { t.Fatal(err) } } func TestSafeWriter_DiffLocks(t *testing.T) { test.NeedsExternalNetwork(t) test.NeedsGit(t) h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() pc.CopyFile(LockName, "txn_writer/original_lock.toml") pc.Load() ulf := h.GetTestFile("txn_writer/updated_lock.toml") defer ulf.Close() updatedLock, err := readLock(ulf) h.Must(err) sw, _ := NewSafeWriter(nil, pc.Project.Lock, updatedLock, VendorOnChanged) // Verify lock diff diff := sw.lockDiff if diff == nil { t.Fatal("Expected the payload to contain a diff of the lock files") } output, err := formatLockDiff(*diff) h.Must(err) goldenOutput := "txn_writer/expected_diff_output.txt" if err = pc.ShouldMatchGolden(goldenOutput, output); err != nil { t.Fatal(err) } } func TestHasDotGit(t *testing.T) { // Create a tempdir with .git file td, err := ioutil.TempDir(os.TempDir(), "dotGitFile") if err != nil { t.Fatal(err) } defer os.RemoveAll(td) os.OpenFile(td+string(filepath.Separator)+".git", os.O_CREATE, 0777) if !hasDotGit(td) { t.Fatal("Expected hasDotGit to find .git") } } func TestSafeWriter_VendorDotGitPreservedWithForceVendor(t *testing.T) { h := test.NewHelper(t) defer h.Cleanup() pc := NewTestProjectContext(h, safeWriterProject) defer pc.Release() gitDirPath := filepath.Join(pc.Project.AbsRoot, "vendor", ".git") os.MkdirAll(gitDirPath, 0777) dummyFile := filepath.Join("vendor", ".git", "badinput_fileroot") pc.CopyFile(dummyFile, "txn_writer/badinput_fileroot") pc.CopyFile(ManifestName, safeWriterGoldenManifest) pc.CopyFile(LockName, safeWriterGoldenLock) pc.Load() sw, _ := NewSafeWriter(pc.Project.Manifest, pc.Project.Lock, pc.Project.Lock, VendorAlways) // Verify prepared actions if !sw.HasManifest() { t.Fatal("Expected the payload to contain the manifest") } if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } if sw.writeLock { t.Fatal("Did not expect that the writer should plan to write the lock") } if !sw.writeVendor { t.Fatal("Expected the payload to contain the vendor directory") } err := sw.Write(pc.Project.AbsRoot, pc.SourceManager, true, discardLogger()) h.Must(errors.Wrap(err, "SafeWriter.Write failed")) // Verify file system changes if err := pc.ManifestShouldMatchGolden(safeWriterGoldenManifest); err != nil { t.Fatal(err) } if err := pc.LockShouldMatchGolden(safeWriterGoldenLock); err != nil { t.Fatal(err) } if err := pc.VendorShouldExist(); err != nil { t.Fatal(err) } if err := pc.VendorFileShouldExist("github.com/sdboyer/dep-test"); err != nil { t.Fatal(err) } if err := pc.VendorFileShouldExist(".git/badinput_fileroot"); err != nil { t.Fatal(err) } } dep-0.3.2/vendor/000077500000000000000000000000001317166637100135745ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/000077500000000000000000000000001317166637100156335ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/Masterminds/000077500000000000000000000000001317166637100201215ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/Masterminds/semver/000077500000000000000000000000001317166637100214225ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/Masterminds/semver/.travis.yml000066400000000000000000000012421317166637100235320ustar00rootroot00000000000000language: go go: - 1.6 - 1.7 - tip # Setting sudo access to false will let Travis CI use containers rather than # VMs to run the tests. For more details see: # - http://docs.travis-ci.com/user/workers/container-based-infrastructure/ # - http://docs.travis-ci.com/user/workers/standard-infrastructure/ sudo: false script: - make setup - make test notifications: webhooks: urls: - https://webhooks.gitter.im/e/06e3328629952dabe3e0 on_success: change # options: [always|never|change] default: always on_failure: always # options: [always|never|change] default: always on_start: never # options: [always|never|change] default: always dep-0.3.2/vendor/github.com/Masterminds/semver/CHANGELOG.md000066400000000000000000000006161317166637100232360ustar00rootroot00000000000000# Release 1.x.x (xxxx-xx-xx) - Issue #9: Speed up version comparison performance (thanks @sdboyer) - Issue #8: Added benchmarks (thanks @sdboyer) # Release 1.1.0 (2015-03-11) - Issue #2: Implemented validation to provide reasons a versions failed a constraint. # Release 1.0.1 (2015-12-31) - Fixed #1: * constraint failing on valid versions. # Release 1.0.0 (2015-10-20) - Initial release dep-0.3.2/vendor/github.com/Masterminds/semver/LICENSE.txt000066400000000000000000000021061317166637100232440ustar00rootroot00000000000000The Masterminds Copyright (C) 2014-2015, Matt Butcher and Matt Farina 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. dep-0.3.2/vendor/github.com/Masterminds/semver/Makefile000066400000000000000000000012331317166637100230610ustar00rootroot00000000000000.PHONY: setup setup: go get -u gopkg.in/alecthomas/gometalinter.v1 gometalinter.v1 --install .PHONY: test test: validate lint @echo "==> Running tests" go test -v .PHONY: validate validate: @echo "==> Running static validations" @gometalinter.v1 \ --disable-all \ --enable deadcode \ --severity deadcode:error \ --enable gofmt \ --enable gosimple \ --enable ineffassign \ --enable misspell \ --enable vet \ --tests \ --vendor \ --deadline 60s \ ./... || exit_code=1 .PHONY: lint lint: @echo "==> Running linters" @gometalinter.v1 \ --disable-all \ --enable golint \ --vendor \ --deadline 60s \ ./... || : dep-0.3.2/vendor/github.com/Masterminds/semver/README.md000066400000000000000000000121451317166637100227040ustar00rootroot00000000000000# SemVer The `semver` package provides the ability to work with [Semantic Versions](http://semver.org) in Go. Specifically it provides the ability to: * Parse semantic versions * Sort semantic versions * Check if a semantic version fits within a set of constraints * Optionally work with a `v` prefix [![Build Status](https://travis-ci.org/Masterminds/semver.svg)](https://travis-ci.org/Masterminds/semver) [![Build status](https://ci.appveyor.com/api/projects/status/jfk66lib7hb985k8/branch/master?svg=true&passingText=windows%20build%20passing&failingText=windows%20build%20failing)](https://ci.appveyor.com/project/mattfarina/semver/branch/master) [![GoDoc](https://godoc.org/github.com/Masterminds/semver?status.png)](https://godoc.org/github.com/Masterminds/semver) [![Go Report Card](http://goreportcard.com/badge/Masterminds/semver)](http://goreportcard.com/report/Masterminds/semver) ## Parsing Semantic Versions To parse a semantic version use the `NewVersion` function. For example, v, err := semver.NewVersion("1.2.3-beta.1+build345") If there is an error the version wasn't parseable. The version object has methods to get the parts of the version, compare it to other versions, convert the version back into a string, and get the original string. For more details please see the [documentation](https://godoc.org/github.com/Masterminds/semver). ## Sorting Semantic Versions A set of versions can be sorted using the [`sort`](https://golang.org/pkg/sort/) package from the standard library. For example, raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",} vs := make([]*semver.Version, len(raw)) for i, r := range raw { v, err := semver.NewVersion(r) if err != nil { t.Errorf("Error parsing version: %s", err) } vs[i] = v } sort.Sort(semver.Collection(vs)) ## Checking Version Constraints Checking a version against version constraints is one of the most featureful parts of the package. c, err := semver.NewConstraint(">= 1.2.3") if err != nil { // Handle constraint not being parseable. } v, _ := semver.NewVersion("1.3") if err != nil { // Handle version not being parseable. } // Check if the version meets the constraints. The a variable will be true. a := c.Check(v) ## Basic Comparisons There are two elements to the comparisons. First, a comparison string is a list of comma separated and comparisons. These are then separated by || separated or comparisons. For example, `">= 1.2, < 3.0.0 || >= 4.2.3"` is looking for a comparison that's greater than or equal to 1.2 and less than 3.0.0 or is greater than or equal to 4.2.3. The basic comparisons are: * `=`: equal (aliased to no operator) * `!=`: not equal * `>`: greater than * `<`: less than * `>=`: greater than or equal to * `<=`: less than or equal to ## Hyphen Range Comparisons There are multiple methods to handle ranges and the first is hyphens ranges. These look like: * `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5` * `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5` ## Wildcards In Comparisons The `x`, `X`, and `*` characters can be used as a wildcard character. This works for all comparison operators. When used on the `=` operator it falls back to the pack level comparison (see tilde below). For example, * `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` * `>= 1.2.x` is equivalent to `>= 1.2.0` * `<= 2.x` is equivalent to `<= 3` * `*` is equivalent to `>= 0.0.0` ## Tilde Range Comparisons (Patch) The tilde (`~`) comparison operator is for patch level ranges when a minor version is specified and major level changes when the minor number is missing. For example, * `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0` * `~1` is equivalent to `>= 1, < 2` * `~2.3` is equivalent to `>= 2.3, < 2.4` * `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` * `~1.x` is equivalent to `>= 1, < 2` ## Caret Range Comparisons (Major) The caret (`^`) comparison operator is for major level changes. This is useful when comparisons of API versions as a major change is API breaking. For example, * `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0` * `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0` * `^2.3` is equivalent to `>= 2.3, < 3` * `^2.x` is equivalent to `>= 2.0.0, < 3` # Validation In addition to testing a version against a constraint, a version can be validated against a constraint. When validation fails a slice of errors containing why a version didn't meet the constraint is returned. For example, c, err := semver.NewConstraint("<= 1.2.3, >= 1.4") if err != nil { // Handle constraint not being parseable. } v, _ := semver.NewVersion("1.3") if err != nil { // Handle version not being parseable. } // Validate a version against a constraint. a, msgs := c.Validate(v) // a is false for _, m := range msgs { fmt.Println(m) // Loops over the errors which would read // "1.3 is greater than 1.2.3" // "1.3 is less than 1.4" } # Contribute If you find an issue or want to contribute please file an [issue](https://github.com/Masterminds/semver/issues) or [create a pull request](https://github.com/Masterminds/semver/pulls). dep-0.3.2/vendor/github.com/Masterminds/semver/appveyor.yml000066400000000000000000000014631317166637100240160ustar00rootroot00000000000000version: build-{build}.{branch} clone_folder: C:\gopath\src\github.com\Masterminds\semver shallow_clone: true environment: GOPATH: C:\gopath platform: - x64 install: - go version - go env - go get -u gopkg.in/alecthomas/gometalinter.v1 - set PATH=%PATH%;%GOPATH%\bin - gometalinter.v1.exe --install build_script: - go install -v ./... test_script: - "gometalinter.v1 \ --disable-all \ --enable deadcode \ --severity deadcode:error \ --enable gofmt \ --enable gosimple \ --enable ineffassign \ --enable misspell \ --enable vet \ --tests \ --vendor \ --deadline 60s \ ./... || cmd /C EXIT 0" - "gometalinter.v1 \ --disable-all \ --enable golint \ --vendor \ --deadline 60s \ ./... || cmd /C EXIT 0" - go test -v deploy: off dep-0.3.2/vendor/github.com/Masterminds/semver/benchmark_test.go000066400000000000000000000120411317166637100247400ustar00rootroot00000000000000package semver import "testing" func init() { // disable constraint and version creation caching CacheConstraints = false CacheVersions = false } var ( rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), includeMax: true, } rc2 = rangeConstraint{ min: newV(2, 0, 0), max: newV(3, 0, 0), } rc3 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), } rc4 = rangeConstraint{ min: newV(1, 7, 0), max: newV(4, 0, 0), } rc5 = rangeConstraint{ min: newV(2, 7, 0), max: newV(3, 0, 0), } rc6 = rangeConstraint{ min: newV(3, 0, 1), max: newV(3, 0, 4), } rc7 = rangeConstraint{ min: newV(1, 0, 0), max: newV(1, 2, 0), } // Two fully non-overlapping unions u1 = rc1.Union(rc7) u2 = rc5.Union(rc6) ) /* Constraint creation benchmarks */ func benchNewConstraint(c string, b *testing.B) { for i := 0; i < b.N; i++ { NewConstraint(c) } } func BenchmarkNewConstraintUnary(b *testing.B) { benchNewConstraint("=2.0", b) } func BenchmarkNewConstraintTilde(b *testing.B) { benchNewConstraint("~2.0.0", b) } func BenchmarkNewConstraintCaret(b *testing.B) { benchNewConstraint("^2.0.0", b) } func BenchmarkNewConstraintWildcard(b *testing.B) { benchNewConstraint("1.x", b) } func BenchmarkNewConstraintRange(b *testing.B) { benchNewConstraint(">=2.1.x, <3.1.0", b) } func BenchmarkNewConstraintUnion(b *testing.B) { benchNewConstraint("~2.0.0 || =3.1.0", b) } /* Validate benchmarks, including fails */ func benchValidateVersion(c, v string, b *testing.B) { version, _ := NewVersion(v) constraint, _ := NewConstraint(c) for i := 0; i < b.N; i++ { constraint.Matches(version) } } func BenchmarkValidateVersionUnary(b *testing.B) { benchValidateVersion("=2.0", "2.0.0", b) } func BenchmarkValidateVersionUnaryFail(b *testing.B) { benchValidateVersion("=2.0", "2.0.1", b) } func BenchmarkValidateVersionTilde(b *testing.B) { benchValidateVersion("~2.0.0", "2.0.5", b) } func BenchmarkValidateVersionTildeFail(b *testing.B) { benchValidateVersion("~2.0.0", "1.0.5", b) } func BenchmarkValidateVersionCaret(b *testing.B) { benchValidateVersion("^2.0.0", "2.1.0", b) } func BenchmarkValidateVersionCaretFail(b *testing.B) { benchValidateVersion("^2.0.0", "4.1.0", b) } func BenchmarkValidateVersionWildcard(b *testing.B) { benchValidateVersion("1.x", "1.4.0", b) } func BenchmarkValidateVersionWildcardFail(b *testing.B) { benchValidateVersion("1.x", "2.4.0", b) } func BenchmarkValidateVersionRange(b *testing.B) { benchValidateVersion(">=2.1.x, <3.1.0", "2.4.5", b) } func BenchmarkValidateVersionRangeFail(b *testing.B) { benchValidateVersion(">=2.1.x, <3.1.0", "1.4.5", b) } func BenchmarkValidateVersionUnion(b *testing.B) { benchValidateVersion("~2.0.0 || =3.1.0", "3.1.0", b) } func BenchmarkValidateVersionUnionFail(b *testing.B) { benchValidateVersion("~2.0.0 || =3.1.0", "3.1.1", b) } /* Version creation benchmarks */ func benchNewVersion(v string, b *testing.B) { for i := 0; i < b.N; i++ { NewVersion(v) } } func BenchmarkNewVersionSimple(b *testing.B) { benchNewVersion("1.0.0", b) } func BenchmarkNewVersionPre(b *testing.B) { benchNewVersion("1.0.0-alpha", b) } func BenchmarkNewVersionMeta(b *testing.B) { benchNewVersion("1.0.0+metadata", b) } func BenchmarkNewVersionMetaDash(b *testing.B) { benchNewVersion("1.0.0+metadata-dash", b) } /* Union benchmarks */ func BenchmarkAdjacentRangeUnion(b *testing.B) { for i := 0; i < b.N; i++ { Union(rc1, rc2) } } func BenchmarkAdjacentRangeUnionMethod(b *testing.B) { for i := 0; i < b.N; i++ { rc1.Union(rc2) } } func BenchmarkDisjointRangeUnion(b *testing.B) { for i := 0; i < b.N; i++ { Union(rc2, rc3) } } func BenchmarkDisjointRangeUnionMethod(b *testing.B) { for i := 0; i < b.N; i++ { rc2.Union(rc3) } } func BenchmarkOverlappingRangeUnion(b *testing.B) { for i := 0; i < b.N; i++ { Union(rc1, rc4) } } func BenchmarkOverlappingRangeUnionMethod(b *testing.B) { for i := 0; i < b.N; i++ { rc1.Union(rc4) } } func BenchmarkUnionUnion(b *testing.B) { for i := 0; i < b.N; i++ { Union(u1, u2) } } func BenchmarkUnionUnionMethod(b *testing.B) { for i := 0; i < b.N; i++ { u1.Union(u2) } } /* Intersection benchmarks */ func BenchmarkSubsetRangeIntersection(b *testing.B) { for i := 0; i < b.N; i++ { Intersection(rc2, rc4) } } func BenchmarkSubsetRangeIntersectionMethod(b *testing.B) { for i := 0; i < b.N; i++ { rc2.Intersect(rc4) } } func BenchmarkDisjointRangeIntersection(b *testing.B) { for i := 0; i < b.N; i++ { Intersection(rc2, rc3) } } func BenchmarkDisjointRangeIntersectionMethod(b *testing.B) { for i := 0; i < b.N; i++ { rc2.Intersect(rc3) } } func BenchmarkOverlappingRangeIntersection(b *testing.B) { for i := 0; i < b.N; i++ { Intersection(rc1, rc4) } } func BenchmarkOverlappingRangeIntersectionMethod(b *testing.B) { for i := 0; i < b.N; i++ { rc1.Intersect(rc4) } } func BenchmarkUnionIntersection(b *testing.B) { for i := 0; i < b.N; i++ { Intersection(u1, u2) } } func BenchmarkUnionIntersectionMethod(b *testing.B) { for i := 0; i < b.N; i++ { u1.Intersect(u2) } } dep-0.3.2/vendor/github.com/Masterminds/semver/collection.go000066400000000000000000000013301317166637100241010ustar00rootroot00000000000000package semver // Collection is a collection of Version instances and implements the sort // interface. See the sort package for more details. // https://golang.org/pkg/sort/ type Collection []Version // Len returns the length of a collection. The number of Version instances // on the slice. func (c Collection) Len() int { return len(c) } // Less is needed for the sort interface to compare two Version objects on the // slice. If checks if one is less than the other. func (c Collection) Less(i, j int) bool { return c[i].LessThan(c[j]) } // Swap is needed for the sort interface to replace the Version objects // at two different positions in the slice. func (c Collection) Swap(i, j int) { c[i], c[j] = c[j], c[i] } dep-0.3.2/vendor/github.com/Masterminds/semver/collection_test.go000066400000000000000000000011141317166637100251400ustar00rootroot00000000000000package semver import ( "reflect" "sort" "testing" ) func TestCollection(t *testing.T) { raw := []string{ "1.2.3", "1.0", "1.3", "2", "0.4.2", } vs := make([]Version, len(raw)) for i, r := range raw { v, err := NewVersion(r) if err != nil { t.Errorf("Error parsing version: %s", err) } vs[i] = v } sort.Sort(Collection(vs)) e := []string{ "0.4.2", "1.0.0", "1.2.3", "1.3.0", "2.0.0", } a := make([]string, len(vs)) for i, v := range vs { a[i] = v.String() } if !reflect.DeepEqual(a, e) { t.Error("Sorting Collection failed") } } dep-0.3.2/vendor/github.com/Masterminds/semver/constraints.go000066400000000000000000000216471317166637100243320ustar00rootroot00000000000000package semver import ( "fmt" "regexp" "sort" "strings" "sync" ) var constraintRegex *regexp.Regexp var constraintRangeRegex *regexp.Regexp const cvRegex string = `v?([0-9|x|X|\*]+)(\.[0-9|x|X|\*]+)?(\.[0-9|x|X|\*]+)?` + `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` func init() { constraintOps := []string{ "", "=", "!=", ">", "<", ">=", "=>", "<=", "=<", "~", "~>", "^", } ops := make([]string, 0, len(constraintOps)) for _, op := range constraintOps { ops = append(ops, regexp.QuoteMeta(op)) } constraintRegex = regexp.MustCompile(fmt.Sprintf( `^\s*(%s)\s*(%s)\s*$`, strings.Join(ops, "|"), cvRegex)) constraintRangeRegex = regexp.MustCompile(fmt.Sprintf( `\s*(%s)\s*-\s*(%s)\s*`, cvRegex, cvRegex)) } // Constraint is the interface that wraps checking a semantic version against // one or more constraints to find a match. type Constraint interface { // Constraints compose the fmt.Stringer interface. This method is the // bijective inverse of NewConstraint(): if a string yielded from this // method is passed to NewConstraint(), a byte-identical instance of the // original Constraint will be returend. fmt.Stringer // ImpliedCaretString converts the Constraint to a string in the same manner // as String(), but treats the empty operator as equivalent to ^, rather // than =. // // In the same way that String() is the inverse of NewConstraint(), this // method is the inverse of to NewConstraintIC(). ImpliedCaretString() string // Matches checks that a version satisfies the constraint. If it does not, // an error is returned indcating the problem; if it does, the error is nil. Matches(v Version) error // Intersect computes the intersection between the receiving Constraint and // passed Constraint, and returns a new Constraint representing the result. Intersect(Constraint) Constraint // Union computes the union between the receiving Constraint and the passed // Constraint, and returns a new Constraint representing the result. Union(Constraint) Constraint // MatchesAny returns a bool indicating whether there exists any version that // satisfies both the receiver constraint, and the passed Constraint. // // In other words, this reports whether an intersection would be non-empty. MatchesAny(Constraint) bool // Restrict implementation of this interface to this package. We need the // flexibility of an interface, but we cover all possibilities here; closing // off the interface to external implementation lets us safely do tricks // with types for magic types (none and any) _private() } // realConstraint is used internally to differentiate between any, none, and // unionConstraints, vs. Version and rangeConstraints. type realConstraint interface { Constraint _real() } // CacheConstraints controls whether or not parsed constraints are cached var CacheConstraints = true var constraintCache = make(map[string]ccache) var constraintCacheIC = make(map[string]ccache) var constraintCacheLock sync.RWMutex type ccache struct { c Constraint err error } // NewConstraint takes a string representing a set of semver constraints, and // returns a corresponding Constraint object. Constraints are suitable // for checking Versions for admissibility, or combining with other Constraint // objects. // // If an invalid constraint string is passed, more information is provided in // the returned error string. func NewConstraint(in string) (Constraint, error) { return newConstraint(in, false, constraintCache) } // NewConstraintIC ("Implied Caret") is the same as NewConstraint, except that // it treats an absent operator as being equivalent to ^ instead of =. func NewConstraintIC(in string) (Constraint, error) { return newConstraint(in, true, constraintCacheIC) } func newConstraint(in string, ic bool, cache map[string]ccache) (Constraint, error) { if CacheConstraints { constraintCacheLock.RLock() if final, exists := cache[in]; exists { constraintCacheLock.RUnlock() return final.c, final.err } constraintCacheLock.RUnlock() } // Rewrite - ranges into a comparison operation. c := rewriteRange(in) ors := strings.Split(c, "||") or := make([]Constraint, len(ors)) for k, v := range ors { cs := strings.Split(v, ",") result := make([]Constraint, len(cs)) for i, s := range cs { pc, err := parseConstraint(s, ic) if err != nil { if CacheConstraints { constraintCacheLock.Lock() cache[in] = ccache{err: err} constraintCacheLock.Unlock() } return nil, err } result[i] = pc } or[k] = Intersection(result...) } final := Union(or...) if CacheConstraints { constraintCacheLock.Lock() cache[in] = ccache{c: final} constraintCacheLock.Unlock() } return final, nil } // Intersection computes the intersection between N Constraints, returning as // compact a representation of the intersection as possible. // // No error is indicated if all the sets are collectively disjoint; you must inspect the // return value to see if the result is the empty set (by calling IsNone() on // it). func Intersection(cg ...Constraint) Constraint { // If there's zero or one constraints in the group, we can quit fast switch len(cg) { case 0: // Zero members, only sane thing to do is return none return None() case 1: // Just one member means that's our final constraint return cg[0] } car, cdr := cg[0], cg[1:] for _, c := range cdr { if IsNone(car) { return None() } car = car.Intersect(c) } return car } // Union takes a variable number of constraints, and returns the most compact // possible representation of those constraints. // // This effectively ORs together all the provided constraints. If any of the // included constraints are the set of all versions (any), that supercedes // everything else. func Union(cg ...Constraint) Constraint { // If there's zero or one constraints in the group, we can quit fast switch len(cg) { case 0: // Zero members, only sane thing to do is return none return None() case 1: // One member, so the result will just be that return cg[0] } // Preliminary pass to look for 'any' in the current set (and bail out early // if found), but also construct a []realConstraint for everything else var real constraintList for _, c := range cg { switch tc := c.(type) { case any: return c case none: continue case Version: //heap.Push(&real, tc) real = append(real, tc) case rangeConstraint: //heap.Push(&real, tc) real = append(real, tc) case unionConstraint: real = append(real, tc...) //for _, c2 := range tc { //heap.Push(&real, c2) //} default: panic("unknown constraint type") } } // TODO wtf why isn't heap working...so, ugh, have to do this // Sort both the versions and ranges into ascending order sort.Sort(real) // Iteratively merge the constraintList elements var nuc unionConstraint for _, c := range real { if len(nuc) == 0 { nuc = append(nuc, c) continue } last := nuc[len(nuc)-1] switch lt := last.(type) { case Version: switch ct := c.(type) { case Version: // Two versions in a row; only append if they're not equal if !lt.Equal(ct) { nuc = append(nuc, ct) } case rangeConstraint: // Last was version, current is range. constraintList sorts by // min version, so it's guaranteed that the version will be less // than the range's min, guaranteeing that these are disjoint. // // ...almost. If the min of the range is the same as the // version, then a union should merge the two by making the // range inclusive at the bottom. if lt.Equal(ct.min) { ct.includeMin = true nuc[len(nuc)-1] = ct } else { nuc = append(nuc, c) } } case rangeConstraint: switch ct := c.(type) { case Version: // Last was range, current is version. constraintList sort invariants guarantee // that the version will be greater than the min, so we have to // determine if the version is less than the max. If it is, we // subsume it into the range with a Union call. // // Lazy version: just union them and let rangeConstraint figure // it out, then switch on the result type. c2 := lt.Union(ct) if crc, ok := c2.(realConstraint); ok { nuc[len(nuc)-1] = crc } else { // Otherwise, all it can be is a union constraint. First // item in the union will be the same range, second will be the // version, so append onto nuc from one back from the end nuc = append(nuc[:len(nuc)-1], c2.(unionConstraint)...) } case rangeConstraint: if lt.MatchesAny(ct) || areAdjacent(lt, ct) { // If the previous range overlaps or is adjacent to the // current range, we know they'll be able to merge together, // so overwrite the last item in nuc with the result of that // merge (which is what Union will produce) nuc[len(nuc)-1] = lt.Union(ct).(realConstraint) } else { nuc = append(nuc, c) } } } } if len(nuc) == 1 { return nuc[0] } return nuc } dep-0.3.2/vendor/github.com/Masterminds/semver/constraints_test.go000066400000000000000000000415401317166637100253630ustar00rootroot00000000000000package semver import "testing" func TestParseConstraint(t *testing.T) { tests := []struct { in string c Constraint err bool }{ {"*", Any(), false}, {">= 1.2", rangeConstraint{ min: newV(1, 2, 0), max: Version{special: infiniteVersion}, includeMin: true, }, false}, {"1.0", newV(1, 0, 0), false}, {"foo", nil, true}, {"<= 1.2", rangeConstraint{ min: Version{special: zeroVersion}, max: newV(1, 2, 0), includeMax: true, }, false}, {"=< 1.2", rangeConstraint{ min: Version{special: zeroVersion}, max: newV(1, 2, 0), includeMax: true, }, false}, {"=> 1.2", rangeConstraint{ min: newV(1, 2, 0), max: Version{special: infiniteVersion}, includeMin: true, }, false}, {"v1.2", newV(1, 2, 0), false}, {"=1.5", newV(1, 5, 0), false}, {"> 1.3", rangeConstraint{ min: newV(1, 3, 0), max: Version{special: infiniteVersion}, }, false}, {"< 1.4.1", rangeConstraint{ min: Version{special: zeroVersion}, max: newV(1, 4, 1), }, false}, {"~1.1.0", rangeConstraint{ min: newV(1, 1, 0), max: newV(1, 2, 0), includeMin: true, includeMax: false, }, false}, {"^1.1.0", rangeConstraint{ min: newV(1, 1, 0), max: newV(2, 0, 0), includeMin: true, includeMax: false, }, false}, {"^1.1.0-12-abc123", rangeConstraint{ min: Version{major: 1, minor: 1, patch: 0, pre: "12-abc123"}, max: newV(2, 0, 0), includeMin: true, includeMax: false, }, false}, } for _, tc := range tests { c, err := parseConstraint(tc.in, false) if tc.err && err == nil { t.Errorf("Expected error for %s didn't occur", tc.in) } else if !tc.err && err != nil { t.Errorf("Unexpected error %q for %s", err, tc.in) } // If an error was expected continue the loop and don't try the other // tests as they will cause errors. if tc.err { continue } if !constraintEq(tc.c, c) { t.Errorf("%q produced constraint %q, but expected %q", tc.in, c, tc.c) } } } func constraintEq(c1, c2 Constraint) bool { switch tc1 := c1.(type) { case any: if _, ok := c2.(any); !ok { return false } return true case none: if _, ok := c2.(none); !ok { return false } return true case Version: if tc2, ok := c2.(Version); ok { return tc1.Equal(tc2) } return false case rangeConstraint: if tc2, ok := c2.(rangeConstraint); ok { if len(tc1.excl) != len(tc2.excl) { return false } if !tc1.minIsZero() { if !(tc1.includeMin == tc2.includeMin && tc1.min.Equal(tc2.min)) { return false } } else if !tc2.minIsZero() { return false } if !tc1.maxIsInf() { if !(tc1.includeMax == tc2.includeMax && tc1.max.Equal(tc2.max)) { return false } } else if !tc2.maxIsInf() { return false } for k, e := range tc1.excl { if !e.Equal(tc2.excl[k]) { return false } } return true } return false case unionConstraint: if tc2, ok := c2.(unionConstraint); ok { if len(tc1) != len(tc2) { return false } for k, c := range tc1 { if !constraintEq(c, tc2[k]) { return false } } return true } return false } panic("unknown type") } // newV is a helper to create a new Version object. func newV(major, minor, patch uint64) Version { return Version{ major: major, minor: minor, patch: patch, } } func TestConstraintCheck(t *testing.T) { tests := []struct { constraint string version string check bool }{ {"= 2.0", "1.2.3", false}, {"= 2.0", "2.0.0", true}, {"4.1", "4.1.0", true}, {"!=4.1", "4.1.0", false}, {"!=4.1", "5.1.0", true}, {">1.1", "4.1.0", true}, {">1.1", "1.1.0", false}, {"<1.1", "0.1.0", true}, {"<1.1", "1.1.0", false}, {"<1.1", "1.1.1", false}, {">=1.1", "4.1.0", true}, {">=1.1", "1.1.0", true}, {">=1.1", "0.0.9", false}, {"<=1.1", "0.1.0", true}, {"<=1.1", "1.1.0", true}, {"<=1.1", "1.1.1", false}, {"<=1.1-alpha1", "1.1", false}, {"<=2.x", "3.0.0", false}, {"<=2.x", "2.9.9", true}, {"<2.x", "2.0.0", false}, {"<2.x", "1.9.9", true}, {">=2.x", "3.0.0", true}, {">=2.x", "2.9.9", true}, {">=2.x", "1.9.9", false}, {">2.x", "3.0.0", true}, {">2.x", "2.9.9", false}, {">2.x", "1.9.9", false}, {"<=2.x-alpha2", "3.0.0-alpha3", false}, {"<=2.0.0", "2.0.0-alpha1", false}, {">2.x-beta1", "3.0.0-alpha2", false}, {"^2.0.0", "3.0.0-alpha2", false}, {"^2.0.0", "2.0.0-alpha1", false}, {"^2.1.0-alpha1", "2.1.0-alpha2", true}, // allow prerelease match within same major/minor/patch {"^2.1.0-alpha1", "2.1.1-alpha2", false}, // but ONLY within same major/minor/patch {"^2.1.0-alpha3", "2.1.0-alpha2", false}, // still respect prerelease ordering {"^2.0.0", "2.0.0-alpha2", false}, // and only if the min has a prerelease } for _, tc := range tests { if testing.Verbose() { t.Logf("Testing if %q allows %q", tc.constraint, tc.version) } c, err := parseConstraint(tc.constraint, false) if err != nil { t.Errorf("err: %s", err) continue } v, err := NewVersion(tc.version) if err != nil { t.Errorf("err: %s", err) continue } a := c.Matches(v) == nil if a != tc.check { if tc.check { t.Errorf("%q should have matched %q", tc.constraint, tc.version) } else { t.Errorf("%q should not have matched %q", tc.constraint, tc.version) } } } } func TestNewConstraint(t *testing.T) { tests := []struct { input string c Constraint err bool }{ {">= 1.1", rangeConstraint{ min: newV(1, 1, 0), max: Version{special: infiniteVersion}, includeMin: true, }, false}, {"2.0", newV(2, 0, 0), false}, {">= bar", nil, true}, {"^1.1.0", rangeConstraint{ min: newV(1, 1, 0), max: newV(2, 0, 0), includeMin: true, }, false}, {">= 1.2.3, < 2.0 || => 3.0, < 4", unionConstraint{ rangeConstraint{ min: newV(1, 2, 3), max: newV(2, 0, 0), includeMin: true, }, rangeConstraint{ min: newV(3, 0, 0), max: newV(4, 0, 0), includeMin: true, }, }, false}, {"3-4 || => 1.0, < 2", Union( rangeConstraint{ min: newV(3, 0, 0), max: newV(4, 0, 0), includeMin: true, includeMax: true, }, rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), includeMin: true, }, ), false}, // demonstrates union compression {"3-4 || => 3.0, < 4", rangeConstraint{ min: newV(3, 0, 0), max: newV(4, 0, 0), includeMin: true, includeMax: true, }, false}, {">=1.1.0, <2.0.0", rangeConstraint{ min: newV(1, 1, 0), max: newV(2, 0, 0), includeMin: true, includeMax: false, }, false}, {"!=1.4.0", rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, excl: []Version{ newV(1, 4, 0), }, }, false}, {">=1.1.0, !=1.4.0", rangeConstraint{ min: newV(1, 1, 0), max: Version{special: infiniteVersion}, includeMin: true, excl: []Version{ newV(1, 4, 0), }, }, false}, } for _, tc := range tests { c, err := NewConstraint(tc.input) if tc.err && err == nil { t.Errorf("expected but did not get error for: %s", tc.input) continue } else if !tc.err && err != nil { t.Errorf("unexpectederror for input %s: %s", tc.input, err) continue } if tc.err { continue } if !constraintEq(tc.c, c) { t.Errorf("%q produced constraint %q, but expected %q", tc.input, c, tc.c) } } } func TestNewConstraintIC(t *testing.T) { tests := []struct { input string c Constraint err bool }{ {"=2.0", newV(2, 0, 0), false}, {"= 2.0", newV(2, 0, 0), false}, {"1.1.0", rangeConstraint{ min: newV(1, 1, 0), max: newV(2, 0, 0), includeMin: true, }, false}, {"1.1", rangeConstraint{ min: newV(1, 1, 0), max: newV(2, 0, 0), includeMin: true, }, false}, {"v1.1.0-12-abc123", rangeConstraint{ min: Version{major: 1, minor: 1, patch: 0, pre: "12-abc123"}, max: newV(2, 0, 0), includeMin: true, includeMax: false, }, false}, } for _, tc := range tests { c, err := NewConstraintIC(tc.input) if tc.err && err == nil { t.Errorf("expected but did not get error for: %s", tc.input) continue } else if !tc.err && err != nil { t.Errorf("unexpectederror for input %s: %s", tc.input, err) continue } if tc.err { continue } if !constraintEq(tc.c, c) { t.Errorf("%q produced constraint %q, but expected %q", tc.input, c, tc.c) } } } func TestConstraintsCheck(t *testing.T) { tests := []struct { constraint string version string check bool }{ {"*", "1.2.3", true}, {"~0.0.0", "1.2.3", false}, {"0.x.x", "1.2.3", false}, {"0.0.x", "1.2.3", false}, {"~0.0.0", "0.1.9", false}, {"~0.0.0", "0.0.9", true}, {"^0.0.0", "0.0.9", true}, {"^0.0.0", "0.1.9", false}, // caret behaves like tilde below 1.0.0 {"= 2.0", "1.2.3", false}, {"= 2.0", "2.0.0", true}, {"4.1", "4.1.0", true}, {"4.1.x", "4.1.3", true}, {"1.x", "1.4", true}, {"!=4.1", "4.1.0", false}, {"!=4.1", "5.1.0", true}, {"!=4.x", "5.1.0", true}, {"!=4.x", "4.1.0", false}, {"!=4.1.x", "4.2.0", true}, {"!=4.2.x", "4.2.3", false}, {">1.1", "4.1.0", true}, {">1.1", "1.1.0", false}, {"<1.1", "0.1.0", true}, {"<1.1", "1.1.0", false}, {"<1.1", "1.1.1", false}, {"<1.x", "1.1.1", false}, {"<1.x", "0.9.1", true}, {"<1.x", "2.1.1", false}, {"<1.1.x", "1.2.1", false}, {"<1.1.x", "1.1.500", false}, {"<1.1.x", "1.0.500", true}, {"<1.2.x", "1.1.1", true}, {">=1.1", "4.1.0", true}, {">=1.1", "1.1.0", true}, {">=1.1", "0.0.9", false}, {"<=1.1", "0.1.0", true}, {"<=1.1", "1.1.0", true}, {"<=1.x", "1.1.0", true}, {"<=2.x", "3.1.0", false}, {"<=1.1", "1.1.1", false}, {"<=1.1.x", "1.2.500", false}, {">1.1, <2", "1.1.1", true}, {">1.1, <3", "4.3.2", false}, {">=1.1, <2, !=1.2.3", "1.2.3", false}, {">=1.1, <2, !=1.2.3 || > 3", "3.1.2", true}, {">=1.1, <2, !=1.2.3 || >= 3", "3.0.0", true}, {">=1.1, <2, !=1.2.3 || > 3", "3.0.0", false}, {">=1.1, <2, !=1.2.3 || > 3", "1.2.3", false}, {"1.1 - 2", "1.1.1", true}, {"1.1-3", "4.3.2", false}, {"^1.1", "1.1.1", true}, {"^1.1", "4.3.2", false}, {"^1.x", "1.1.1", true}, {"^2.x", "1.1.1", false}, {"^1.x", "2.1.1", false}, {"~*", "2.1.1", true}, {"~1.x", "2.1.1", false}, {"~1.x", "1.3.5", true}, {"~1.x", "1.4", true}, {"~1.1", "1.1.1", true}, {"~1.2.3", "1.2.5", true}, {"~1.2.3", "1.2.2", false}, {"~1.2.3", "1.3.2", false}, {"~1.1", "1.2.3", false}, {"~1.3", "2.4.5", false}, } for _, tc := range tests { c, err := NewConstraint(tc.constraint) if err != nil { t.Errorf("err: %s", err) continue } v, err := NewVersion(tc.version) if err != nil { t.Errorf("err: %s", err) continue } a := c.Matches(v) == nil if a != tc.check { if a { t.Errorf("Input %q produced constraint %q; should not have admitted %q, but did", tc.constraint, c, tc.version) } else { t.Errorf("Input %q produced constraint %q; should have admitted %q, but did not", tc.constraint, c, tc.version) } } } } func TestBidirectionalSerialization(t *testing.T) { tests := []struct { io string eq bool }{ {"*", true}, // any {"~0.0.0", false}, // tildes expand into ranges {"=2.0", false}, // abbreviated versions print as full {"4.1.x", false}, // wildcards expand into ranges {">= 1.1.0", false}, // does not produce spaces on ranges {"4.1.0", true}, {"!=4.1.0", true}, {">=1.1.0", true}, {">1.0.0, <=1.1.0", true}, {"<=1.1.0", true}, {">=1.1.7, <1.3.0", true}, // tilde width {">=1.1.0, <=2.0.0", true}, // no unary op on lte max {">1.1.3, <2.0.0", true}, // no unary op on gt min {">1.1.0, <=2.0.0", true}, // no unary op on gt min and lte max {">=1.1.0, <=1.2.0", true}, // no unary op on lte max {">1.1.1, <1.2.0", true}, // no unary op on gt min {">1.1.7, <=2.0.0", true}, // no unary op on gt min and lte max {">1.1.7, <=2.0.0", true}, // no unary op on gt min and lte max {">=0.1.7, <1.0.0", true}, // caret shifting below 1.0.0 {">=0.1.7, <0.3.0", true}, // caret shifting width below 1.0.0 } for _, fix := range tests { c, err := NewConstraint(fix.io) if err != nil { t.Errorf("Valid constraint string produced unexpected error: %s", err) } eq := fix.io == c.String() if eq != fix.eq { if eq { t.Errorf("Constraint %q should not have reproduced input string %q, but did", c, fix.io) } else { t.Errorf("Constraint should have reproduced input string %q, but instead produced %q", fix.io, c) } } } } func TestBidirectionalSerializationIC(t *testing.T) { tests := []struct { io string eq bool }{ {"*", true}, // any {"=2.0.0", true}, // versions retain leading = {"2.0.0", true}, // (no) caret in, (no) caret out } for _, fix := range tests { c, err := NewConstraintIC(fix.io) if err != nil { t.Errorf("Valid constraint string produced unexpected error: %s", err) } eq := fix.io == c.ImpliedCaretString() if eq != fix.eq { if eq { t.Errorf("Constraint %q should not have reproduced input string %q, but did", c, fix.io) } else { t.Errorf("Constraint should have reproduced input string %q, but instead produced %q", fix.io, c) } } } } func TestPreferUnaryOpForm(t *testing.T) { tests := []struct { in, out string }{ {">=0.1.7, <0.2.0", "^0.1.7"}, // caret shifting below 1.0.0 {">=1.1.0, <2.0.0", "^1.1.0"}, {">=1.1.0, <2.0.0, !=1.2.3", "^1.1.0, !=1.2.3"}, } for _, fix := range tests { c, err := NewConstraint(fix.in) if err != nil { t.Errorf("Valid constraint string produced unexpected error: %s", err) } if fix.out != c.String() { t.Errorf("Constraint %q was not transformed into expected output string %q", fix.in, fix.out) } } } func TestRewriteRange(t *testing.T) { tests := []struct { c string nc string }{ {"2-3", ">= 2, <= 3"}, {"2-3, 2-3", ">= 2, <= 3,>= 2, <= 3"}, {"2-3, 4.0.0-5.1", ">= 2, <= 3,>= 4.0.0, <= 5.1"}, {"v2-3, 2-3", "v2-3,>= 2, <= 3"}, } for _, tc := range tests { o := rewriteRange(tc.c) if o != tc.nc { t.Errorf("Range %s rewritten incorrectly as '%s'", tc.c, o) } } } func TestIsX(t *testing.T) { tests := []struct { t string c bool }{ {"A", false}, {"%", false}, {"X", true}, {"x", true}, {"*", true}, } for _, tc := range tests { a := isX(tc.t) if a != tc.c { t.Errorf("Function isX error on %s", tc.t) } } } func TestUnionErr(t *testing.T) { u1 := Union( rangeConstraint{ min: newV(3, 0, 0), max: newV(4, 0, 0), includeMin: true, includeMax: true, }, rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), includeMin: true, }, ) fail := u1.Matches(newV(2, 5, 0)) failstr := `2.5.0 is greater than or equal to the maximum of ^1.0.0 2.5.0 is less than the minimum of >=3.0.0, <=4.0.0` if fail.Error() != failstr { t.Errorf("Did not get expected failure message from union, got %q", fail) } } func TestIsSuperset(t *testing.T) { rc := []rangeConstraint{ { min: newV(1, 2, 0), max: newV(2, 0, 0), includeMin: true, }, { min: newV(1, 2, 0), max: newV(2, 1, 0), }, { min: Version{special: zeroVersion}, max: newV(1, 10, 0), }, { min: newV(2, 0, 0), max: Version{special: infiniteVersion}, }, { min: newV(1, 2, 0), max: newV(2, 0, 0), includeMax: true, }, } for _, c := range rc { // Superset comparison is not strict, so a range should always be a superset // of itself. if !c.isSupersetOf(c) { t.Errorf("Ranges should be supersets of themselves; %s indicated it was not", c) } } pairs := []struct{ l, r rangeConstraint }{ { // ensures lte is handled correctly (min side) l: rc[0], r: rc[1], }, { // ensures nil on min side works well l: rc[0], r: rc[2], }, { // ensures nil on max side works well l: rc[0], r: rc[3], }, { // ensures nils on both sides work well l: rc[2], r: rc[3], }, { // ensures gte is handled correctly (max side) l: rc[2], r: rc[4], }, } for _, p := range pairs { if p.l.isSupersetOf(p.r) { t.Errorf("%s is not a superset of %s", p.l, p.r) } if p.r.isSupersetOf(p.l) { t.Errorf("%s is not a superset of %s", p.r, p.l) } } rc[1].max.minor = 0 if !rc[0].isSupersetOf(rc[1]) { t.Errorf("%s is a superset of %s", rc[0], rc[1]) } rc[1].includeMax = true if rc[1].isSupersetOf(rc[0]) { t.Errorf("%s is not a superset of %s", rc[1], rc[0]) } rc[0].includeMin = false if !rc[1].isSupersetOf(rc[0]) { t.Errorf("%s is a superset of %s", rc[1], rc[0]) } // isSupersetOf ignores excludes, so even though this would make rc[1] not a // superset of rc[0] anymore, it should still say it is. rc[1].excl = []Version{ newV(1, 5, 0), } if !rc[1].isSupersetOf(rc[0]) { t.Errorf("%s is still a superset of %s, because isSupersetOf is supposed to ignore excluded versions", rc[1], rc[0]) } } dep-0.3.2/vendor/github.com/Masterminds/semver/doc.go000066400000000000000000000072101317166637100225160ustar00rootroot00000000000000/* Package semver provides the ability to work with Semantic Versions (http://semver.org) in Go. Specifically it provides the ability to: * Parse semantic versions * Sort semantic versions * Check if a semantic version fits within a set of constraints * Optionally work with a `v` prefix Parsing Semantic Versions To parse a semantic version use the `NewVersion` function. For example, v, err := semver.NewVersion("1.2.3-beta.1+build345") If there is an error the version wasn't parseable. The version object has methods to get the parts of the version, compare it to other versions, convert the version back into a string, and get the original string. For more details please see the documentation at https://godoc.org/github.com/Masterminds/semver. Sorting Semantic Versions A set of versions can be sorted using the `sort` package from the standard library. For example, raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",} vs := make([]*semver.Version, len(raw)) for i, r := range raw { v, err := semver.NewVersion(r) if err != nil { t.Errorf("Error parsing version: %s", err) } vs[i] = v } sort.Sort(semver.Collection(vs)) Checking Version Constraints Checking a version against version constraints is one of the most featureful parts of the package. c, err := semver.NewConstraint(">= 1.2.3") if err != nil { // Handle constraint not being parseable. } v, _ := semver.NewVersion("1.3") if err != nil { // Handle version not being parseable. } // Check if the version meets the constraints. The a variable will be true. a := c.Check(v) Basic Comparisons There are two elements to the comparisons. First, a comparison string is a list of comma separated and comparisons. These are then separated by || separated or comparisons. For example, `">= 1.2, < 3.0.0 || >= 4.2.3"` is looking for a comparison that's greater than or equal to 1.2 and less than 3.0.0 or is greater than or equal to 4.2.3. The basic comparisons are: * `=`: equal (aliased to no operator) * `!=`: not equal * `>`: greater than * `<`: less than * `>=`: greater than or equal to * `<=`: less than or equal to Hyphen Range Comparisons There are multiple methods to handle ranges and the first is hyphens ranges. These look like: * `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5` * `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5` Wildcards In Comparisons The `x`, `X`, and `*` characters can be used as a wildcard character. This works for all comparison operators. When used on the `=` operator it falls back to the pack level comparison (see tilde below). For example, * `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` * `>= 1.2.x` is equivalent to `>= 1.2.0` * `<= 2.x` is equivalent to `<= 3` * `*` is equivalent to `>= 0.0.0` Tilde Range Comparisons (Patch) The tilde (`~`) comparison operator is for patch level ranges when a minor version is specified and major level changes when the minor number is missing. For example, * `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0` * `~1` is equivalent to `>= 1, < 2` * `~2.3` is equivalent to `>= 2.3, < 2.4` * `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` * `~1.x` is equivalent to `>= 1, < 2` Caret Range Comparisons (Major) The caret (`^`) comparison operator is for major level changes. This is useful when comparisons of API versions as a major change is API breaking. For example, * `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0` * `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0` * `^2.3` is equivalent to `>= 2.3, < 3` * `^2.x` is equivalent to `>= 2.0.0, < 3` */ package semver dep-0.3.2/vendor/github.com/Masterminds/semver/error.go000066400000000000000000000036151317166637100231070ustar00rootroot00000000000000package semver import ( "bytes" "fmt" ) var rangeErrs = [...]string{ "%s is less than the minimum of %s", "%s is less than or equal to the minimum of %s", "%s is greater than the maximum of %s", "%s is greater than or equal to the maximum of %s", "%s is specifically disallowed in %s", "%s has prerelease data, so is omitted by the range %s", } const ( rerrLT = iota rerrLTE rerrGT rerrGTE rerrNE rerrPre ) // MatchFailure is an interface for failures to find a Constraint match. type MatchFailure interface { error // Pair returns the version and constraint that did not match prompting // the error. Pair() (v Version, c Constraint) } // RangeMatchFailure occurs when a version is not within a constraint range. type RangeMatchFailure struct { v Version rc rangeConstraint typ int8 } func (rce RangeMatchFailure) Error() string { return fmt.Sprintf(rangeErrs[rce.typ], rce.v, rce.rc) } // Pair returns the version and constraint that did not match. Part of the // MatchFailure interface. func (rce RangeMatchFailure) Pair() (v Version, r Constraint) { return rce.v, rce.rc } // VersionMatchFailure occurs when two versions do not match each other. type VersionMatchFailure struct { v, other Version } func (vce VersionMatchFailure) Error() string { return fmt.Sprintf("%s is not equal to %s", vce.v, vce.other) } // Pair returns the two versions that did not match. Part of the // MatchFailure interface. func (vce VersionMatchFailure) Pair() (v Version, r Constraint) { return vce.v, vce.other } // MultiMatchFailure errors occur when there are multiple constraints a version // is being checked against and there are failures. type MultiMatchFailure []MatchFailure func (mmf MultiMatchFailure) Error() string { var buf bytes.Buffer for k, e := range mmf { if k < len(mmf)-1 { fmt.Fprintf(&buf, "%s\n", e) } else { fmt.Fprintf(&buf, e.Error()) } } return buf.String() } dep-0.3.2/vendor/github.com/Masterminds/semver/magic.go000066400000000000000000000051311317166637100230310ustar00rootroot00000000000000package semver import "errors" var errNone = errors.New("The 'None' constraint admits no versions.") // Any is a constraint that is satisfied by any valid semantic version. type any struct{} // Any creates a constraint that will match any version. func Any() Constraint { return any{} } func (any) String() string { return "*" } func (any) ImpliedCaretString() string { return "*" } // Matches checks that a version satisfies the constraint. As all versions // satisfy Any, this always returns nil. func (any) Matches(v Version) error { return nil } // Intersect computes the intersection between two constraints. // // As Any is the set of all possible versions, any intersection with that // infinite set will necessarily be the entirety of the second set. Thus, this // simply returns the passed constraint. func (any) Intersect(c Constraint) Constraint { return c } // MatchesAny indicates whether there exists any version that can satisfy both // this constraint, and the passed constraint. As all versions // satisfy Any, this is always true - unless none is passed. func (any) MatchesAny(c Constraint) bool { if _, ok := c.(none); ok { return false } return true } func (any) Union(c Constraint) Constraint { return Any() } func (any) _private() {} // None is an unsatisfiable constraint - it represents the empty set. type none struct{} // None creates a constraint that matches no versions (the empty set). func None() Constraint { return none{} } func (none) String() string { return "" } func (none) ImpliedCaretString() string { return "" } // Matches checks that a version satisfies the constraint. As no version can // satisfy None, this always fails (returns an error). func (none) Matches(v Version) error { return errNone } // Intersect computes the intersection between two constraints. // // None is the empty set of versions, and any intersection with the empty set is // necessarily the empty set. Thus, this always returns None. func (none) Intersect(Constraint) Constraint { return None() } func (none) Union(c Constraint) Constraint { return c } // MatchesAny indicates whether there exists any version that can satisfy the // constraint. As no versions satisfy None, this is always false. func (none) MatchesAny(c Constraint) bool { return false } func (none) _private() {} // IsNone indicates if a constraint will match no versions - that is, the // constraint represents the empty set. func IsNone(c Constraint) bool { _, ok := c.(none) return ok } // IsAny indicates if a constraint will match any and all versions. func IsAny(c Constraint) bool { _, ok := c.(any) return ok } dep-0.3.2/vendor/github.com/Masterminds/semver/parse.go000066400000000000000000000126171317166637100230720ustar00rootroot00000000000000package semver import ( "errors" "fmt" "strings" ) func rewriteRange(i string) string { m := constraintRangeRegex.FindAllStringSubmatch(i, -1) if m == nil { return i } o := i for _, v := range m { if strings.HasPrefix(v[0], "v") && versionRegex.MatchString(v[0]) { continue } t := fmt.Sprintf(">= %s, <= %s", v[1], v[11]) o = strings.Replace(o, v[0], t, 1) } return o } func parseConstraint(c string, cbd bool) (Constraint, error) { m := constraintRegex.FindStringSubmatch(c) if m == nil { return nil, fmt.Errorf("Malformed constraint: %s", c) } // Handle the full wildcard case first - easy! if isX(m[3]) { return any{}, nil } ver := m[2] var wildPatch, wildMinor bool if isX(strings.TrimPrefix(m[4], ".")) { wildPatch = true wildMinor = true ver = fmt.Sprintf("%s.0.0%s", m[3], m[6]) } else if isX(strings.TrimPrefix(m[5], ".")) { wildPatch = true ver = fmt.Sprintf("%s%s.0%s", m[3], m[4], m[6]) } v, err := NewVersion(ver) if err != nil { // The constraintRegex should catch any regex parsing errors. So, // we should never get here. return nil, errors.New("constraint Parser Error") } // We never want to keep the "original" data in a constraint, and keeping it // around can disrupt simple equality comparisons. So, strip it out. v.original = "" // If caret-by-default flag is on and there's no operator, convert the // operator to a caret. if cbd && m[1] == "" { m[1] = "^" } switch m[1] { case "^": // Caret always expands to a range return expandCaret(v), nil case "~": // Tilde always expands to a range return expandTilde(v, wildMinor), nil case "!=": // Not equals expands to a range if no element isX(); otherwise expands // to a union of ranges return expandNeq(v, wildMinor, wildPatch), nil case "", "=": if wildPatch || wildMinor { // Equalling a wildcard has the same behavior as expanding tilde return expandTilde(v, wildMinor), nil } return v, nil case ">": return expandGreater(v, wildMinor, wildPatch, false), nil case ">=", "=>": return expandGreater(v, wildMinor, wildPatch, true), nil case "<": return expandLess(v, wildMinor, wildPatch, false), nil case "<=", "=<": return expandLess(v, wildMinor, wildPatch, true), nil default: // Shouldn't be possible to get here, unless the regex is allowing // predicate we don't know about... return nil, fmt.Errorf("Unrecognized predicate %q", m[1]) } } func expandCaret(v Version) Constraint { var maxv Version // Caret behaves like tilde below 1.0.0 if v.major == 0 { maxv.minor = v.minor + 1 } else { maxv.major = v.major + 1 } return rangeConstraint{ min: v, max: maxv, includeMin: true, includeMax: false, } } func expandTilde(v Version, wildMinor bool) Constraint { if wildMinor { // When minor is wild on a tilde, behavior is same as caret return expandCaret(v) } maxv := Version{ major: v.major, minor: v.minor + 1, patch: 0, } return rangeConstraint{ min: v, max: maxv, includeMin: true, includeMax: false, } } // expandNeq expands a "not-equals" constraint. // // If the constraint has any wildcards, it will expand into a unionConstraint // (which is how we represent a disjoint set). If there are no wildcards, it // will expand to a rangeConstraint with no min or max, but having the one // exception. func expandNeq(v Version, wildMinor, wildPatch bool) Constraint { if !(wildMinor || wildPatch) { return rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, excl: []Version{v}, } } // Create the low range with no min, and the max as the floor admitted by // the wildcard lr := rangeConstraint{ min: Version{special: zeroVersion}, max: v, includeMax: false, } // The high range uses the derived version (bumped depending on where the // wildcards were) as the min, and is inclusive minv := Version{ major: v.major, minor: v.minor, patch: v.patch, } if wildMinor { minv.major++ } else { minv.minor++ } hr := rangeConstraint{ min: minv, max: Version{special: infiniteVersion}, includeMin: true, } return Union(lr, hr) } func expandGreater(v Version, wildMinor, wildPatch, eq bool) Constraint { if (wildMinor || wildPatch) && !eq { // wildcards negate the meaning of prerelease and other info v = Version{ major: v.major, minor: v.minor, patch: v.patch, } // Not equal but with wildcards is the weird case - we have to bump up // the next version AND make it equal if wildMinor { v.major++ } else { v.minor++ } return rangeConstraint{ min: v, max: Version{special: infiniteVersion}, includeMin: true, } } return rangeConstraint{ min: v, max: Version{special: infiniteVersion}, includeMin: eq, } } func expandLess(v Version, wildMinor, wildPatch, eq bool) Constraint { if eq && (wildMinor || wildPatch) { // wildcards negate the meaning of prerelease and other info v = Version{ major: v.major, minor: v.minor, patch: v.patch, } if wildMinor { v.major++ } else if wildPatch { v.minor++ } return rangeConstraint{ min: Version{special: zeroVersion}, max: v, includeMax: false, } } return rangeConstraint{ min: Version{special: zeroVersion}, max: v, includeMax: eq, } } func isX(x string) bool { l := strings.ToLower(x) return l == "x" || l == "*" } dep-0.3.2/vendor/github.com/Masterminds/semver/range.go000066400000000000000000000305451317166637100230540ustar00rootroot00000000000000package semver import ( "fmt" "sort" "strings" ) type rangeConstraint struct { min, max Version includeMin, includeMax bool excl []Version } func (rc rangeConstraint) Matches(v Version) error { var fail bool ispre := v.Prerelease() != "" rce := RangeMatchFailure{ v: v, rc: rc, } if !rc.minIsZero() { cmp := rc.min.Compare(v) if rc.includeMin { rce.typ = rerrLT fail = cmp == 1 } else { rce.typ = rerrLTE fail = cmp != -1 } if fail { return rce } } if !rc.maxIsInf() { cmp := rc.max.Compare(v) if rc.includeMax { rce.typ = rerrGT fail = cmp == -1 } else { rce.typ = rerrGTE fail = cmp != 1 } if fail { return rce } } for _, excl := range rc.excl { if excl.Equal(v) { rce.typ = rerrNE return rce } } // If the incoming version has prerelease info, it's usually a match failure // - unless all the numeric parts are equal between the incoming and the // minimum. if !fail && ispre && !numPartsEq(rc.min, v) { rce.typ = rerrPre return rce } return nil } func (rc rangeConstraint) dup() rangeConstraint { // Only need to do anything if there are some excludes if len(rc.excl) == 0 { return rc } var excl []Version excl = make([]Version, len(rc.excl)) copy(excl, rc.excl) return rangeConstraint{ min: rc.min, max: rc.max, includeMin: rc.includeMin, includeMax: rc.includeMax, excl: excl, } } func (rc rangeConstraint) minIsZero() bool { return rc.min.special == zeroVersion } func (rc rangeConstraint) maxIsInf() bool { return rc.max.special == infiniteVersion } func (rc rangeConstraint) Intersect(c Constraint) Constraint { switch oc := c.(type) { case any: return rc case none: return None() case unionConstraint: return oc.Intersect(rc) case Version: if err := rc.Matches(oc); err != nil { return None() } return c case rangeConstraint: nr := rangeConstraint{ min: rc.min, max: rc.max, includeMin: rc.includeMin, includeMax: rc.includeMax, } if !oc.minIsZero() { if nr.minIsZero() || nr.min.LessThan(oc.min) { nr.min = oc.min nr.includeMin = oc.includeMin } else if oc.min.Equal(nr.min) && !oc.includeMin { // intersection means we must follow the least inclusive nr.includeMin = false } } if !oc.maxIsInf() { if nr.maxIsInf() || nr.max.GreaterThan(oc.max) { nr.max = oc.max nr.includeMax = oc.includeMax } else if oc.max.Equal(nr.max) && !oc.includeMax { // intersection means we must follow the least inclusive nr.includeMax = false } } // Ensure any applicable excls from oc are included in nc for _, e := range append(rc.excl, oc.excl...) { if nr.Matches(e) == nil { nr.excl = append(nr.excl, e) } } if nr.minIsZero() || nr.maxIsInf() { return nr } if nr.min.Equal(nr.max) { // min and max are equal. if range is inclusive, return that // version; otherwise, none if nr.includeMin && nr.includeMax { return nr.min } return None() } if nr.min.GreaterThan(nr.max) { // min is greater than max - not possible, so we return none return None() } // range now fully validated, return what we have return nr default: panic("unknown type") } } func (rc rangeConstraint) Union(c Constraint) Constraint { switch oc := c.(type) { case any: return Any() case none: return rc case unionConstraint: return Union(rc, oc) case Version: if err := rc.Matches(oc); err == nil { return rc } else if len(rc.excl) > 0 { // TODO (re)checking like this is wasteful // ensure we don't have an excl-specific mismatch; if we do, remove // it and return that for k, e := range rc.excl { if e.Equal(oc) { excl := make([]Version, len(rc.excl)-1) if k == len(rc.excl)-1 { copy(excl, rc.excl[:k]) } else { copy(excl, append(rc.excl[:k], rc.excl[k+1:]...)) } return rangeConstraint{ min: rc.min, max: rc.max, includeMin: rc.includeMin, includeMax: rc.includeMax, excl: excl, } } } } if oc.LessThan(rc.min) { return unionConstraint{oc, rc.dup()} } if oc.Equal(rc.min) { ret := rc.dup() ret.includeMin = true return ret } if oc.Equal(rc.max) { ret := rc.dup() ret.includeMax = true return ret } // Only possibility left is gt return unionConstraint{rc.dup(), oc} case rangeConstraint: if (rc.minIsZero() && oc.maxIsInf()) || (rc.maxIsInf() && oc.minIsZero()) { rcl, ocl := len(rc.excl), len(oc.excl) // Quick check for open case if rcl == 0 && ocl == 0 { return Any() } // This is inefficient, but it's such an absurdly corner case... if len(dedupeExcls(rc.excl, oc.excl)) == rcl+ocl { // If deduped excludes are the same length as the individual // excludes, then they have no overlapping elements, so the // union knocks out the excludes and we're back to Any. return Any() } // There's at least some dupes, which are all we need to include nc := rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, } for _, e1 := range rc.excl { for _, e2 := range oc.excl { if e1.Equal(e2) { nc.excl = append(nc.excl, e1) } } } return nc } else if areAdjacent(rc, oc) { // Receiver adjoins the input from below nc := rc.dup() nc.max = oc.max nc.includeMax = oc.includeMax nc.excl = append(nc.excl, oc.excl...) return nc } else if areAdjacent(oc, rc) { // Input adjoins the receiver from below nc := oc.dup() nc.max = rc.max nc.includeMax = rc.includeMax nc.excl = append(nc.excl, rc.excl...) return nc } else if rc.MatchesAny(oc) { // Receiver and input overlap; form a new range accordingly. nc := rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, } // For efficiency, we simultaneously determine if either of the // ranges are supersets of the other, while also selecting the min // and max of the new range var info uint8 const ( lminlt uint8 = 1 << iota // left (rc) min less than right rminlt // right (oc) min less than left lmaxgt // left max greater than right rmaxgt // right max greater than left lsupr = lminlt | lmaxgt // left is superset of right rsupl = rminlt | rmaxgt // right is superset of left ) // Pick the min if !rc.minIsZero() { if oc.minIsZero() || rc.min.GreaterThan(oc.min) || (rc.min.Equal(oc.min) && !rc.includeMin && oc.includeMin) { info |= rminlt nc.min = oc.min nc.includeMin = oc.includeMin } else { info |= lminlt nc.min = rc.min nc.includeMin = rc.includeMin } } else if !oc.minIsZero() { info |= lminlt nc.min = rc.min nc.includeMin = rc.includeMin } // Pick the max if !rc.maxIsInf() { if oc.maxIsInf() || rc.max.LessThan(oc.max) || (rc.max.Equal(oc.max) && !rc.includeMax && oc.includeMax) { info |= rmaxgt nc.max = oc.max nc.includeMax = oc.includeMax } else { info |= lmaxgt nc.max = rc.max nc.includeMax = rc.includeMax } } else if oc.maxIsInf() { info |= lmaxgt nc.max = rc.max nc.includeMax = rc.includeMax } // Reincorporate any excluded versions if info&lsupr != lsupr { // rc is not superset of oc, so must walk oc.excl for _, e := range oc.excl { if rc.Matches(e) != nil { nc.excl = append(nc.excl, e) } } } if info&rsupl != rsupl { // oc is not superset of rc, so must walk rc.excl for _, e := range rc.excl { if oc.Matches(e) != nil { nc.excl = append(nc.excl, e) } } } return nc } else { // Don't call Union() here b/c it would duplicate work uc := constraintList{rc, oc} sort.Sort(uc) return unionConstraint(uc) } } panic("unknown type") } // isSupersetOf computes whether the receiver rangeConstraint is a superset of // the passed rangeConstraint. // // This is NOT a strict superset comparison, so identical ranges will both // report being supersets of each other. // // Note also that this does *not* compare excluded versions - it only compares // range endpoints. func (rc rangeConstraint) isSupersetOf(rc2 rangeConstraint) bool { if !rc.minIsZero() { if rc2.minIsZero() || rc.min.GreaterThan(rc2.min) || (rc.min.Equal(rc2.min) && !rc.includeMin && rc2.includeMin) { return false } } if !rc.maxIsInf() { if rc2.maxIsInf() || rc.max.LessThan(rc2.max) || (rc.max.Equal(rc2.max) && !rc.includeMax && rc2.includeMax) { return false } } return true } func (rc rangeConstraint) String() string { return rc.toString(false) } func (rc rangeConstraint) ImpliedCaretString() string { return rc.toString(true) } func (rc rangeConstraint) toString(impliedCaret bool) string { var pieces []string // We need to trigger the standard verbose handling from various points, so // wrap it in a function. noshort := func() { if !rc.minIsZero() { if rc.includeMin { pieces = append(pieces, fmt.Sprintf(">=%s", rc.min)) } else { pieces = append(pieces, fmt.Sprintf(">%s", rc.min)) } } if !rc.maxIsInf() { if rc.includeMax { pieces = append(pieces, fmt.Sprintf("<=%s", rc.max)) } else { pieces = append(pieces, fmt.Sprintf("<%s", rc.max)) } } } // Handle the possibility that we might be able to express the range // with a caret or tilde, as we prefer those forms. var caretstr string if impliedCaret { caretstr = "%s" } else { caretstr = "^%s" } switch { case rc.minIsZero() && rc.maxIsInf(): // This if is internal because it's useful to know for the other cases // that we don't have special values at both bounds if len(rc.excl) == 0 { // Shouldn't be possible to reach from anything that can be done // outside the package, but best to cover it and be safe return "*" } case rc.minIsZero(), rc.includeMax, !rc.includeMin: // tilde and caret could never apply here noshort() case !rc.maxIsInf() && rc.max.Minor() == 0 && rc.max.Patch() == 0: // basic caret if rc.min.Major() == rc.max.Major()-1 && rc.min.Major() != 0 { pieces = append(pieces, fmt.Sprintf(caretstr, rc.min)) } else { // range is too wide for caret, need standard operators noshort() } case !rc.maxIsInf() && rc.max.Major() != 0 && rc.max.Patch() == 0: // basic tilde if rc.min.Minor() == rc.max.Minor()-1 && rc.min.Major() == rc.max.Major() { pieces = append(pieces, fmt.Sprintf("~%s", rc.min)) } else { // range is too wide for tilde, need standard operators noshort() } case !rc.maxIsInf() && rc.max.Major() == 0 && rc.max.Patch() == 0 && rc.max.Minor() != 0: // below 1.0.0, tilde is meaningless but caret is shifted to the // right (so it basically behaves the same as tilde does above 1.0.0) if rc.min.Minor() == rc.max.Minor()-1 { pieces = append(pieces, fmt.Sprintf(caretstr, rc.min)) } else { noshort() } default: noshort() } for _, e := range rc.excl { pieces = append(pieces, fmt.Sprintf("!=%s", e)) } return strings.Join(pieces, ", ") } // areAdjacent tests two constraints to determine if they are adjacent, // but non-overlapping. // // If either constraint is not a range, returns false. We still allow it at the // type level, however, to make the check convenient elsewhere. // // Assumes the first range is less than the second; it is incumbent on the // caller to arrange the inputs appropriately. func areAdjacent(c1, c2 Constraint) bool { var rc1, rc2 rangeConstraint var ok bool if rc1, ok = c1.(rangeConstraint); !ok { return false } if rc2, ok = c2.(rangeConstraint); !ok { return false } if !rc1.max.Equal(rc2.min) { return false } return (rc1.includeMax && !rc2.includeMin) || (!rc1.includeMax && rc2.includeMin) } func (rc rangeConstraint) MatchesAny(c Constraint) bool { if _, ok := rc.Intersect(c).(none); ok { return false } return true } func dedupeExcls(ex1, ex2 []Version) []Version { // TODO stupid inefficient, but these are really only ever going to be // small, so not worth optimizing right now var ret []Version oloop: for _, e1 := range ex1 { for _, e2 := range ex2 { if e1.Equal(e2) { continue oloop } } ret = append(ret, e1) } return append(ret, ex2...) } func (rangeConstraint) _private() {} func (rangeConstraint) _real() {} dep-0.3.2/vendor/github.com/Masterminds/semver/set_ops_test.go000066400000000000000000000621611317166637100244720ustar00rootroot00000000000000package semver import "testing" func TestIntersection(t *testing.T) { var actual Constraint rc1 := rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } if actual = Intersection(); !IsNone(actual) { t.Errorf("Intersection of nothing should always produce None; got %q", actual) } if actual = Intersection(rc1); !constraintEq(actual, rc1) { t.Errorf("Intersection of one item should always return that item; got %q", actual) } if actual = Intersection(rc1, None()); !IsNone(actual) { t.Errorf("Intersection of anything with None should always produce None; got %q", actual) } if actual = Intersection(rc1, Any()); !constraintEq(actual, rc1) { t.Errorf("Intersection of anything with Any should return self; got %q", actual) } v1 := newV(1, 5, 0) if actual = Intersection(rc1, v1); !constraintEq(actual, v1) { t.Errorf("Got constraint %q, but expected %q", actual, v1) } rc2 := rangeConstraint{ min: newV(1, 2, 0), max: newV(2, 2, 0), } result := rangeConstraint{ min: newV(1, 2, 0), max: newV(2, 0, 0), } if actual = Intersection(rc1, rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } u1 := unionConstraint{ rangeConstraint{ min: newV(1, 2, 0), max: newV(3, 0, 0), }, newV(3, 1, 0), } if actual = Intersection(u1, rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = Intersection(rc1, newV(2, 0, 5), u1); !IsNone(actual) { t.Errorf("First two are disjoint, should have gotten None but got %q", actual) } } func TestRangeIntersection(t *testing.T) { var actual Constraint // Test magic cases rc1 := rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } if actual = rc1.Intersect(Any()); !constraintEq(actual, rc1) { t.Errorf("Intersection of anything with Any should return self; got %q", actual) } if actual = rc1.Intersect(None()); !IsNone(actual) { t.Errorf("Intersection of anything with None should always produce None; got %q", actual) } // Test single version cases // single v, in range v1 := newV(1, 5, 0) if actual = rc1.Intersect(v1); !constraintEq(actual, v1) { t.Errorf("Intersection of version with matching range should return the version; got %q", actual) } // now exclude just that version rc1.excl = []Version{v1} if actual = rc1.Intersect(v1); !IsNone(actual) { t.Errorf("Intersection of version with range having specific exclude for that version should produce None; got %q", actual) } // and, of course, none if the version is out of range v2 := newV(0, 5, 0) if actual = rc1.Intersect(v2); !IsNone(actual) { t.Errorf("Intersection of version with non-matching range should produce None; got %q", actual) } // Test basic overlap case rc1 = rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } rc2 := rangeConstraint{ min: newV(1, 2, 0), max: newV(2, 2, 0), } result := rangeConstraint{ min: newV(1, 2, 0), max: newV(2, 0, 0), } if actual = rc1.Intersect(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // And with includes rc1.includeMin = true rc1.includeMax = true rc2.includeMin = true rc2.includeMax = true result.includeMin = true result.includeMax = true if actual = rc1.Intersect(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Overlaps with nils rc1 = rangeConstraint{ min: newV(1, 0, 0), max: Version{special: infiniteVersion}, } rc2 = rangeConstraint{ min: Version{special: zeroVersion}, max: newV(2, 2, 0), } result = rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 2, 0), } if actual = rc1.Intersect(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // And with includes rc1.includeMin = true rc2.includeMax = true result.includeMin = true result.includeMax = true if actual = rc1.Intersect(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Test superset overlap case rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), } rc2 = rangeConstraint{ min: newV(1, 0, 0), max: newV(3, 0, 0), } result = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), } if actual = rc1.Intersect(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Make sure irrelevant includes don't leak in rc2.includeMin = true rc2.includeMax = true if actual = rc1.Intersect(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // But relevant includes get used rc1.includeMin = true rc1.includeMax = true result.includeMin = true result.includeMax = true if actual = rc1.Intersect(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Test disjoint case rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(1, 6, 0), } rc2 = rangeConstraint{ min: newV(2, 0, 0), max: newV(3, 0, 0), } if actual = rc1.Intersect(rc2); !constraintEq(actual, None()) { t.Errorf("Got constraint %q, but expected %q", actual, None()) } if actual = rc2.Intersect(rc1); !constraintEq(actual, None()) { t.Errorf("Got constraint %q, but expected %q", actual, None()) } // Test disjoint at gt/lt boundary (non-adjacent) rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), } rc2 = rangeConstraint{ min: newV(2, 0, 0), max: newV(3, 0, 0), } if actual = rc1.Intersect(rc2); !constraintEq(actual, None()) { t.Errorf("Got constraint %q, but expected %q", actual, None()) } if actual = rc2.Intersect(rc1); !constraintEq(actual, None()) { t.Errorf("Got constraint %q, but expected %q", actual, None()) } // Now, just have them touch at a single version rc1.includeMax = true rc2.includeMin = true vresult := newV(2, 0, 0) if actual = rc1.Intersect(rc2); !constraintEq(actual, vresult) { t.Errorf("Got constraint %q, but expected %q", actual, vresult) } if actual = rc2.Intersect(rc1); !constraintEq(actual, vresult) { t.Errorf("Got constraint %q, but expected %q", actual, vresult) } // Test excludes in intersection range rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), excl: []Version{ newV(1, 6, 0), }, } rc2 = rangeConstraint{ min: newV(1, 0, 0), max: newV(3, 0, 0), } if actual = rc1.Intersect(rc2); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } if actual = rc2.Intersect(rc1); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } // Test excludes not in intersection range rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), } rc2 = rangeConstraint{ min: newV(1, 0, 0), max: newV(3, 0, 0), excl: []Version{ newV(1, 1, 0), }, } if actual = rc1.Intersect(rc2); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } if actual = rc2.Intersect(rc1); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } // Test min, and greater min rc1 = rangeConstraint{ min: newV(1, 0, 0), max: Version{special: infiniteVersion}, } rc2 = rangeConstraint{ min: newV(1, 5, 0), max: Version{special: infiniteVersion}, includeMin: true, } if actual = rc1.Intersect(rc2); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Test max, and lesser max rc1 = rangeConstraint{ max: newV(1, 0, 0), } rc2 = rangeConstraint{ max: newV(1, 5, 0), } result = rangeConstraint{ max: newV(1, 0, 0), } if actual = rc1.Intersect(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Intersect(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Ensure pure excludes come through as they should rc1 = rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, excl: []Version{ newV(1, 6, 0), }, } rc2 = rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, excl: []Version{ newV(1, 6, 0), newV(1, 7, 0), }, } if actual = Any().Intersect(rc1); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } if actual = rc1.Intersect(Any()); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } if actual = rc1.Intersect(rc2); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, rc2) } // TODO test the pre-release special range stuff } func TestRangeUnion(t *testing.T) { var actual Constraint // Test magic cases rc1 := rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } if actual = rc1.Union(Any()); !IsAny(actual) { t.Errorf("Union of anything with Any should always produce Any; got %q", actual) } if actual = rc1.Union(None()); !constraintEq(actual, rc1) { t.Errorf("Union of anything with None should return self; got %q", actual) } // Test single version cases // single v, in range v1 := newV(1, 5, 0) if actual = rc1.Union(v1); !constraintEq(actual, rc1) { t.Errorf("Union of version with matching range should return the range; got %q", actual) } // now exclude just that version rc2 := rc1.dup() rc2.excl = []Version{v1} if actual = rc2.Union(v1); !constraintEq(actual, rc1) { t.Errorf("Union of version with range having specific exclude for that version should produce the range without that exclude; got %q", actual) } // and a union if the version is not within the range v2 := newV(0, 5, 0) uresult := unionConstraint{v2, rc1} if actual = rc1.Union(v2); !constraintEq(actual, uresult) { t.Errorf("Union of version with non-matching range should produce a unionConstraint with those two; got %q", actual) } // union with version at the min should ensure "oreq" v2 = newV(1, 0, 0) rc3 := rc1 rc3.includeMin = true if actual = rc1.Union(v2); !constraintEq(actual, rc3) { t.Errorf("Union of range with version at min end should add includeMin (%q), but got %q", rc3, actual) } if actual = v2.Union(rc1); !constraintEq(actual, rc3) { t.Errorf("Union of range with version at min end should add includeMin (%q), but got %q", rc3, actual) } // same at max end v2 = newV(2, 0, 0) rc3.includeMin = false rc3.includeMax = true if actual = rc1.Union(v2); !constraintEq(actual, rc3) { t.Errorf("Union of range with version at max end should add includeMax (%q), but got %q", rc3, actual) } if actual = v2.Union(rc1); !constraintEq(actual, rc3) { t.Errorf("Union of range with version at max end should add includeMax (%q), but got %q", rc3, actual) } // Test basic overlap case rc1 = rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } rc2 = rangeConstraint{ min: newV(1, 2, 0), max: newV(2, 2, 0), } result := rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 2, 0), } if actual = rc1.Union(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Union(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // And with includes rc1.includeMin = true rc1.includeMax = true rc2.includeMin = true rc2.includeMax = true result.includeMin = true result.includeMax = true if actual = rc1.Union(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Union(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Overlaps with nils rc1 = rangeConstraint{ min: newV(1, 0, 0), max: Version{special: infiniteVersion}, } rc2 = rangeConstraint{ min: Version{special: zeroVersion}, max: newV(2, 2, 0), } if actual = rc1.Union(rc2); !constraintEq(actual, Any()) { t.Errorf("Got constraint %q, but expected %q", actual, Any()) } if actual = rc2.Union(rc1); !constraintEq(actual, Any()) { t.Errorf("Got constraint %q, but expected %q", actual, Any()) } // Just one nil in overlap rc1.max = newV(2, 0, 0) result = rangeConstraint{ min: Version{special: zeroVersion}, max: newV(2, 2, 0), } if actual = rc1.Union(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Union(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } rc1.max = Version{special: infiniteVersion} rc2.min = newV(1, 5, 0) result = rangeConstraint{ min: newV(1, 0, 0), max: Version{special: infiniteVersion}, } if actual = rc1.Union(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Union(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Test superset overlap case rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), } rc2 = rangeConstraint{ min: newV(1, 0, 0), max: newV(3, 0, 0), } if actual = rc1.Union(rc2); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, rc2) } if actual = rc2.Union(rc1); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, rc2) } // Test disjoint case rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(1, 6, 0), } rc2 = rangeConstraint{ min: newV(2, 0, 0), max: newV(3, 0, 0), } uresult = unionConstraint{rc1, rc2} if actual = rc1.Union(rc2); !constraintEq(actual, uresult) { t.Errorf("Got constraint %q, but expected %q", actual, uresult) } if actual = rc2.Union(rc1); !constraintEq(actual, uresult) { t.Errorf("Got constraint %q, but expected %q", actual, uresult) } // Test disjoint at gt/lt boundary (non-adjacent) rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), } rc2 = rangeConstraint{ min: newV(2, 0, 0), max: newV(3, 0, 0), } uresult = unionConstraint{rc1, rc2} if actual = rc1.Union(rc2); !constraintEq(actual, uresult) { t.Errorf("Got constraint %q, but expected %q", actual, uresult) } if actual = rc2.Union(rc1); !constraintEq(actual, uresult) { t.Errorf("Got constraint %q, but expected %q", actual, uresult) } // Now, just have them touch at a single version rc1.includeMax = true rc2.includeMin = true result = rangeConstraint{ min: newV(1, 5, 0), max: newV(3, 0, 0), } if actual = rc1.Union(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Union(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // And top-adjacent at that version rc2.includeMin = false if actual = rc1.Union(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Union(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // And bottom-adjacent at that version rc1.includeMax = false rc2.includeMin = true if actual = rc1.Union(rc2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = rc2.Union(rc1); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } // Test excludes in overlapping range rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), excl: []Version{ newV(1, 6, 0), }, } rc2 = rangeConstraint{ min: newV(1, 0, 0), max: newV(3, 0, 0), } if actual = rc1.Union(rc2); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, rc2) } if actual = rc2.Union(rc1); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, rc2) } // Test excludes not in non-overlapping range rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(2, 0, 0), } rc2 = rangeConstraint{ min: newV(1, 0, 0), max: newV(3, 0, 0), excl: []Version{ newV(1, 1, 0), }, } if actual = rc1.Union(rc2); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, rc2) } if actual = rc2.Union(rc1); !constraintEq(actual, rc2) { t.Errorf("Got constraint %q, but expected %q", actual, rc2) } // Ensure pure excludes come through as they should rc1 = rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, excl: []Version{ newV(1, 6, 0), }, } rc2 = rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, excl: []Version{ newV(1, 6, 0), newV(1, 7, 0), }, } if actual = rc1.Union(rc2); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } if actual = rc2.Union(rc1); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } rc1 = rangeConstraint{ min: Version{special: zeroVersion}, max: Version{special: infiniteVersion}, excl: []Version{ newV(1, 5, 0), }, } if actual = rc1.Union(rc2); !constraintEq(actual, Any()) { t.Errorf("Got constraint %q, but expected %q", actual, Any()) } if actual = rc2.Union(rc1); !constraintEq(actual, Any()) { t.Errorf("Got constraint %q, but expected %q", actual, Any()) } // TODO test the pre-release special range stuff } func TestUnionIntersection(t *testing.T) { var actual Constraint // magic first u1 := unionConstraint{ newV(1, 1, 0), newV(1, 2, 0), newV(1, 3, 0), } if actual = u1.Intersect(Any()); !constraintEq(actual, u1) { t.Errorf("Intersection of anything with Any should return self; got %s", actual) } if actual = u1.Intersect(None()); !IsNone(actual) { t.Errorf("Intersection of anything with None should always produce None; got %s", actual) } if u1.MatchesAny(None()) { t.Errorf("Can't match any when intersected with None") } // intersect of unions with single versions v1 := newV(1, 1, 0) if actual = u1.Intersect(v1); !constraintEq(actual, v1) { t.Errorf("Got constraint %q, but expected %q", actual, v1) } if actual = v1.Intersect(u1); !constraintEq(actual, v1) { t.Errorf("Got constraint %q, but expected %q", actual, v1) } // intersect of range with union of versions u1 = unionConstraint{ newV(1, 1, 0), newV(1, 2, 0), newV(1, 3, 0), } rc1 := rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } if actual = u1.Intersect(rc1); !constraintEq(actual, u1) { t.Errorf("Got constraint %q, but expected %q", actual, u1) } if actual = rc1.Intersect(u1); !constraintEq(actual, u1) { t.Errorf("Got constraint %q, but expected %q", actual, u1) } u2 := unionConstraint{ newV(1, 1, 0), newV(1, 2, 0), } if actual = u1.Intersect(u2); !constraintEq(actual, u2) { t.Errorf("Got constraint %q, but expected %q", actual, u2) } // Overlapping sub/supersets rc1 = rangeConstraint{ min: newV(1, 5, 0), max: newV(1, 6, 0), } rc2 := rangeConstraint{ min: newV(2, 0, 0), max: newV(3, 0, 0), } rc3 = rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } rc4 := rangeConstraint{ min: newV(2, 5, 0), max: newV(2, 6, 0), } u1 = unionConstraint{rc1, rc2} u2 = unionConstraint{rc3, rc4} ur := unionConstraint{rc1, rc4} if actual = u1.Intersect(u2); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } if actual = u2.Intersect(u1); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } // Ensure excludes carry as they should rc1.excl = []Version{newV(1, 5, 5)} u1 = unionConstraint{rc1, rc2} ur = unionConstraint{rc1, rc4} if actual = u1.Intersect(u2); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } if actual = u2.Intersect(u1); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } } func TestUnionUnion(t *testing.T) { var actual Constraint // magic first u1 := unionConstraint{ newV(1, 1, 0), newV(1, 2, 0), newV(1, 3, 0), } if actual = u1.Union(Any()); !IsAny(actual) { t.Errorf("Union of anything with Any should always return Any; got %s", actual) } if actual = u1.Union(None()); !constraintEq(actual, u1) { t.Errorf("Union of anything with None should always return self; got %s", actual) } // union of uc with single versions // already present v1 := newV(1, 2, 0) if actual = u1.Union(v1); !constraintEq(actual, u1) { t.Errorf("Got constraint %q, but expected %q", actual, u1) } if actual = v1.Union(u1); !constraintEq(actual, u1) { t.Errorf("Got constraint %q, but expected %q", actual, u1) } // not present v2 := newV(1, 4, 0) ur := append(u1, v2) if actual = u1.Union(v2); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } if actual = v2.Union(u1); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } // union of uc with uc, all versions u2 := unionConstraint{ newV(1, 3, 0), newV(1, 4, 0), newV(1, 5, 0), } ur = unionConstraint{ newV(1, 1, 0), newV(1, 2, 0), newV(1, 3, 0), newV(1, 4, 0), newV(1, 5, 0), } if actual = u1.Union(u2); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } if actual = u2.Union(u1); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } // union that should compress versions into range rc1 := rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } if actual = u1.Union(rc1); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } if actual = rc1.Union(u1); !constraintEq(actual, rc1) { t.Errorf("Got constraint %q, but expected %q", actual, rc1) } rc1.max = newV(1, 4, 5) u3 := append(u2, newV(1, 7, 0)) ur = unionConstraint{ rc1, newV(1, 5, 0), newV(1, 7, 0), } if actual = u3.Union(rc1); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } if actual = rc1.Union(u3); !constraintEq(actual, ur) { t.Errorf("Got constraint %q, but expected %q", actual, ur) } } // Most version stuff got tested by range and/or union b/c most tests were // repeated bidirectionally (set operations are commutative; testing in pairs // helps us catch any situation where we fail to maintain that invariant) func TestVersionSetOps(t *testing.T) { var actual Constraint v1 := newV(1, 0, 0) if actual = v1.Intersect(v1); !constraintEq(actual, v1) { t.Errorf("Version intersected with itself should be itself, got %q", actual) } if !v1.MatchesAny(v1) { t.Errorf("MatchesAny should work with a version against itself") } v2 := newV(2, 0, 0) if actual = v1.Intersect(v2); !IsNone(actual) { t.Errorf("Versions should only intersect with themselves, got %q", actual) } if v1.MatchesAny(v2) { t.Errorf("MatchesAny should not work when combined with anything other than itself") } result := unionConstraint{v1, v2} if actual = v1.Union(v1); !constraintEq(actual, v1) { t.Errorf("Version union with itself should return self, got %q", actual) } if actual = v1.Union(v2); !constraintEq(actual, result) { t.Errorf("Got constraint %q, but expected %q", actual, result) } if actual = v1.Union(v2); !constraintEq(actual, result) { // Duplicate just to make sure ordering works right t.Errorf("Got constraint %q, but expected %q", actual, result) } } func TestAreAdjacent(t *testing.T) { rc1 := rangeConstraint{ min: newV(1, 0, 0), max: newV(2, 0, 0), } rc2 := rangeConstraint{ min: newV(1, 2, 0), max: newV(2, 2, 0), } if areAdjacent(rc1, rc2) { t.Errorf("Ranges overlap, should not indicate as adjacent") } rc2 = rangeConstraint{ min: newV(2, 0, 0), } if areAdjacent(rc1, rc2) { t.Errorf("Ranges are non-overlapping and non-adjacent, but reported as adjacent") } rc2.includeMin = true if !areAdjacent(rc1, rc2) { t.Errorf("Ranges are non-overlapping and adjacent, but reported as non-adjacent") } rc1.includeMax = true if areAdjacent(rc1, rc2) { t.Errorf("Ranges are overlapping at a single version, but reported as adjacent") } rc2.includeMin = false if !areAdjacent(rc1, rc2) { t.Errorf("Ranges are non-overlapping and adjacent, but reported as non-adjacent") } } dep-0.3.2/vendor/github.com/Masterminds/semver/union.go000066400000000000000000000055211317166637100231040ustar00rootroot00000000000000package semver import "strings" type unionConstraint []realConstraint func (uc unionConstraint) Matches(v Version) error { var uce MultiMatchFailure for _, c := range uc { err := c.Matches(v) if err == nil { return nil } uce = append(uce, err.(MatchFailure)) } return uce } func (uc unionConstraint) Intersect(c2 Constraint) Constraint { var other []realConstraint switch tc2 := c2.(type) { case none: return None() case any: return uc case Version: return c2 case rangeConstraint: other = append(other, tc2) case unionConstraint: other = c2.(unionConstraint) default: panic("unknown type") } var newc []Constraint // TODO there's a smarter way to do this than NxN, but...worth it? for _, c := range uc { for _, oc := range other { i := c.Intersect(oc) if !IsNone(i) { newc = append(newc, i) } } } return Union(newc...) } func (uc unionConstraint) MatchesAny(c Constraint) bool { for _, ic := range uc { if ic.MatchesAny(c) { return true } } return false } func (uc unionConstraint) Union(c Constraint) Constraint { return Union(uc, c) } func (uc unionConstraint) String() string { var pieces []string for _, c := range uc { pieces = append(pieces, c.String()) } return strings.Join(pieces, " || ") } func (uc unionConstraint) ImpliedCaretString() string { var pieces []string for _, c := range uc { pieces = append(pieces, c.ImpliedCaretString()) } return strings.Join(pieces, " || ") } func (unionConstraint) _private() {} type constraintList []realConstraint func (cl constraintList) Len() int { return len(cl) } func (cl constraintList) Swap(i, j int) { cl[i], cl[j] = cl[j], cl[i] } func (cl constraintList) Less(i, j int) bool { ic, jc := cl[i], cl[j] switch tic := ic.(type) { case Version: switch tjc := jc.(type) { case Version: return tic.LessThan(tjc) case rangeConstraint: if tjc.minIsZero() { return false } // Because we don't assume stable sort, always put versions ahead of // range mins if they're equal and includeMin is on if tjc.includeMin && tic.Equal(tjc.min) { return false } return tic.LessThan(tjc.min) } case rangeConstraint: switch tjc := jc.(type) { case Version: if tic.minIsZero() { return true } // Because we don't assume stable sort, always put versions ahead of // range mins if they're equal and includeMin is on if tic.includeMin && tjc.Equal(tic.min) { return false } return tic.min.LessThan(tjc) case rangeConstraint: if tic.minIsZero() { return true } if tjc.minIsZero() { return false } return tic.min.LessThan(tjc.min) } } panic("unreachable") } func (cl *constraintList) Push(x interface{}) { *cl = append(*cl, x.(realConstraint)) } func (cl *constraintList) Pop() interface{} { o := *cl c := o[len(o)-1] *cl = o[:len(o)-1] return c } dep-0.3.2/vendor/github.com/Masterminds/semver/version.go000066400000000000000000000234661317166637100234510ustar00rootroot00000000000000package semver import ( "bytes" "errors" "fmt" "regexp" "strconv" "strings" "sync" ) // The compiled version of the regex created at init() is cached here so it // only needs to be created once. var versionRegex *regexp.Regexp var ( // ErrInvalidSemVer is returned a version is found to be invalid when // being parsed. ErrInvalidSemVer = errors.New("Invalid Semantic Version") ) // Error type; lets us defer string interpolation type badVersionSegment struct { e error } func (b badVersionSegment) Error() string { return fmt.Sprintf("Error parsing version segment: %s", b.e) } // CacheVersions controls whether or not parsed constraints are cached. Defaults // to true. var CacheVersions = true var versionCache = make(map[string]vcache) var versionCacheLock sync.RWMutex type vcache struct { v Version err error } // SemVerRegex id the regular expression used to parse a semantic version. const SemVerRegex string = `v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` + `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` type specialVersion uint8 const ( notSpecial specialVersion = iota zeroVersion infiniteVersion ) // Version represents a single semantic version. type Version struct { major, minor, patch uint64 pre string metadata string original string special specialVersion } func init() { versionRegex = regexp.MustCompile("^" + SemVerRegex + "$") } // NewVersion parses a given version and returns an instance of Version or // an error if unable to parse the version. func NewVersion(v string) (Version, error) { if CacheVersions { versionCacheLock.RLock() if sv, exists := versionCache[v]; exists { versionCacheLock.RUnlock() return sv.v, sv.err } versionCacheLock.RUnlock() } m := versionRegex.FindStringSubmatch(v) if m == nil { if CacheVersions { versionCacheLock.Lock() versionCache[v] = vcache{err: ErrInvalidSemVer} versionCacheLock.Unlock() } return Version{}, ErrInvalidSemVer } sv := Version{ metadata: m[8], pre: m[5], original: v, } var temp uint64 temp, err := strconv.ParseUint(m[1], 10, 32) if err != nil { bvs := badVersionSegment{e: err} if CacheVersions { versionCacheLock.Lock() versionCache[v] = vcache{err: bvs} versionCacheLock.Unlock() } return Version{}, bvs } sv.major = temp if m[2] != "" { temp, err = strconv.ParseUint(strings.TrimPrefix(m[2], "."), 10, 32) if err != nil { bvs := badVersionSegment{e: err} if CacheVersions { versionCacheLock.Lock() versionCache[v] = vcache{err: bvs} versionCacheLock.Unlock() } return Version{}, bvs } sv.minor = temp } else { sv.minor = 0 } if m[3] != "" { temp, err = strconv.ParseUint(strings.TrimPrefix(m[3], "."), 10, 32) if err != nil { bvs := badVersionSegment{e: err} if CacheVersions { versionCacheLock.Lock() versionCache[v] = vcache{err: bvs} versionCacheLock.Unlock() } return Version{}, bvs } sv.patch = temp } else { sv.patch = 0 } if CacheVersions { versionCacheLock.Lock() versionCache[v] = vcache{v: sv} versionCacheLock.Unlock() } return sv, nil } // String converts a Version object to a string. // Note, if the original version contained a leading v this version will not. // See the Original() method to retrieve the original value. Semantic Versions // don't contain a leading v per the spec. Instead it's optional on // impelementation. func (v Version) String() string { return v.toString(false) } // ImpliedCaretString follows the same rules as String(), but in accordance with // the Constraint interface will always print a leading "=", as all Versions, // when acting as a Constraint, act as exact matches. func (v Version) ImpliedCaretString() string { return v.toString(true) } func (v Version) toString(ic bool) string { var buf bytes.Buffer var base string if ic { base = "=%d.%d.%d" } else { base = "%d.%d.%d" } fmt.Fprintf(&buf, base, v.major, v.minor, v.patch) if v.pre != "" { fmt.Fprintf(&buf, "-%s", v.pre) } if v.metadata != "" { fmt.Fprintf(&buf, "+%s", v.metadata) } return buf.String() } // Original returns the original value passed in to be parsed. func (v Version) Original() string { return v.original } // Major returns the major version. func (v *Version) Major() uint64 { return v.major } // Minor returns the minor version. func (v *Version) Minor() uint64 { return v.minor } // Patch returns the patch version. func (v *Version) Patch() uint64 { return v.patch } // Prerelease returns the pre-release version. func (v Version) Prerelease() string { return v.pre } // Metadata returns the metadata on the version. func (v Version) Metadata() string { return v.metadata } // LessThan tests if one version is less than another one. func (v Version) LessThan(o Version) bool { return v.Compare(o) < 0 } // GreaterThan tests if one version is greater than another one. func (v Version) GreaterThan(o Version) bool { return v.Compare(o) > 0 } // Equal tests if two versions are equal to each other. // Note, versions can be equal with different metadata since metadata // is not considered part of the comparable version. func (v Version) Equal(o Version) bool { return v.Compare(o) == 0 } // Compare compares this version to another one. It returns -1, 0, or 1 if // the version smaller, equal, or larger than the other version. // // Versions are compared by X.Y.Z. Build metadata is ignored. Prerelease is // lower than the version without a prerelease. func (v Version) Compare(o Version) int { // The special field supercedes all the other information. If it's not // equal, we can skip out early if v.special != o.special { switch v.special { case zeroVersion: return -1 case notSpecial: if o.special == zeroVersion { return 1 } return -1 case infiniteVersion: return 1 } } else if v.special != notSpecial { // If special fields are equal and not notSpecial, then they're // necessarily equal return 0 } // Compare the major, minor, and patch version for differences. If a // difference is found return the comparison. if d := compareSegment(v.Major(), o.Major()); d != 0 { return d } if d := compareSegment(v.Minor(), o.Minor()); d != 0 { return d } if d := compareSegment(v.Patch(), o.Patch()); d != 0 { return d } // At this point the major, minor, and patch versions are the same. ps := v.pre po := o.Prerelease() if ps == "" && po == "" { return 0 } if ps == "" { return 1 } if po == "" { return -1 } return comparePrerelease(ps, po) } // Matches checks that a verstions match. If they do not, // an error is returned indcating the problem; if it does, the error is nil. // This is part of the Constraint interface. func (v Version) Matches(v2 Version) error { if v.Equal(v2) { return nil } return VersionMatchFailure{v: v, other: v2} } // MatchesAny checks if an instance of a version matches a constraint which can // include anything matching the Constraint interface. func (v Version) MatchesAny(c Constraint) bool { if v2, ok := c.(Version); ok { return v.Equal(v2) } // The other implementations all have specific handling for this; fall // back on theirs. return c.MatchesAny(v) } // Intersect computes the intersection between the receiving Constraint and // passed Constraint, and returns a new Constraint representing the result. // This is part of the Constraint interface. func (v Version) Intersect(c Constraint) Constraint { if v2, ok := c.(Version); ok { if v.Equal(v2) { return v } return none{} } return c.Intersect(v) } // Union computes the union between the receiving Constraint and the passed // Constraint, and returns a new Constraint representing the result. // This is part of the Constraint interface. func (v Version) Union(c Constraint) Constraint { if v2, ok := c.(Version); ok && v.Equal(v2) { return v } return Union(v, c) } func (Version) _private() {} func (Version) _real() {} func compareSegment(v, o uint64) int { if v < o { return -1 } if v > o { return 1 } return 0 } func comparePrerelease(v, o string) int { // split the prelease versions by their part. The separator, per the spec, // is a . sparts := strings.Split(v, ".") oparts := strings.Split(o, ".") // Find the longer length of the parts to know how many loop iterations to // go through. slen := len(sparts) olen := len(oparts) l := slen if olen > slen { l = olen } // Iterate over each part of the prereleases to compare the differences. for i := 0; i < l; i++ { // Since the length of the parts can be different we need to create // a placeholder. This is to avoid out of bounds issues. stemp := "" if i < slen { stemp = sparts[i] } otemp := "" if i < olen { otemp = oparts[i] } d := comparePrePart(stemp, otemp) if d != 0 { return d } } // Reaching here means two versions are of equal value but have different // metadata (the part following a +). They are not identical in string form // but the version comparison finds them to be equal. return 0 } func comparePrePart(s, o string) int { // Fastpath if they are equal if s == o { return 0 } // When s or o are empty we can use the other in an attempt to determine // the response. if o == "" { _, n := strconv.ParseUint(s, 10, 64) if n != nil { return -1 } return 1 } if s == "" { _, n := strconv.ParseUint(o, 10, 64) if n != nil { return 1 } return -1 } if s > o { return 1 } return -1 } func numPartsEq(v1, v2 Version) bool { if v1.special != v2.special { return false } if v1.special != notSpecial { // If special fields are equal and not notSpecial, then the versions are // necessarily equal, so their numeric parts are too. return true } if v1.major != v2.major { return false } if v1.minor != v2.minor { return false } if v1.patch != v2.patch { return false } return true } dep-0.3.2/vendor/github.com/Masterminds/semver/version_test.go000066400000000000000000000150631317166637100245020ustar00rootroot00000000000000package semver import ( "testing" ) func TestNewVersion(t *testing.T) { tests := []struct { version string err bool }{ {"1.2.3", false}, {"v1.2.3", false}, {"1.0", false}, {"v1.0", false}, {"1", false}, {"v1", false}, {"1.2.beta", true}, {"v1.2.beta", true}, {"foo", true}, {"1.2-5", false}, {"v1.2-5", false}, {"1.2-beta.5", false}, {"v1.2-beta.5", false}, {"\n1.2", true}, {"\nv1.2", true}, {"1.2.0-x.Y.0+metadata", false}, {"v1.2.0-x.Y.0+metadata", false}, {"1.2.0-x.Y.0+metadata-width-hypen", false}, {"v1.2.0-x.Y.0+metadata-width-hypen", false}, {"1.2.3-rc1-with-hypen", false}, {"v1.2.3-rc1-with-hypen", false}, {"1.2.3.4", true}, {"v1.2.3.4", true}, } for _, tc := range tests { _, err := NewVersion(tc.version) if tc.err && err == nil { t.Fatalf("expected error for version: %s", tc.version) } else if !tc.err && err != nil { t.Fatalf("error for version %s: %s", tc.version, err) } } } func TestOriginal(t *testing.T) { tests := []string{ "1.2.3", "v1.2.3", "1.0", "v1.0", "1", "v1", "1.2-5", "v1.2-5", "1.2-beta.5", "v1.2-beta.5", "1.2.0-x.Y.0+metadata", "v1.2.0-x.Y.0+metadata", "1.2.0-x.Y.0+metadata-width-hypen", "v1.2.0-x.Y.0+metadata-width-hypen", "1.2.3-rc1-with-hypen", "v1.2.3-rc1-with-hypen", } for _, tc := range tests { v, err := NewVersion(tc) if err != nil { t.Errorf("Error parsing version %s", tc) } o := v.Original() if o != tc { t.Errorf("Error retrieving originl. Expected '%s' but got '%s'", tc, v) } } } func TestParts(t *testing.T) { v, err := NewVersion("1.2.3-beta.1+build.123") if err != nil { t.Error("Error parsing version 1.2.3-beta.1+build.123") } if v.Major() != 1 { t.Error("Major() returning wrong value") } if v.Minor() != 2 { t.Error("Minor() returning wrong value") } if v.Patch() != 3 { t.Error("Patch() returning wrong value") } if v.Prerelease() != "beta.1" { t.Error("Prerelease() returning wrong value") } if v.Metadata() != "build.123" { t.Error("Metadata() returning wrong value") } } func TestString(t *testing.T) { tests := []struct { version string expected string }{ {"1.2.3", "1.2.3"}, {"v1.2.3", "1.2.3"}, {"1.0", "1.0.0"}, {"v1.0", "1.0.0"}, {"1", "1.0.0"}, {"v1", "1.0.0"}, {"1.2-5", "1.2.0-5"}, {"v1.2-5", "1.2.0-5"}, {"1.2-beta.5", "1.2.0-beta.5"}, {"v1.2-beta.5", "1.2.0-beta.5"}, {"1.2.0-x.Y.0+metadata", "1.2.0-x.Y.0+metadata"}, {"v1.2.0-x.Y.0+metadata", "1.2.0-x.Y.0+metadata"}, {"1.2.0-x.Y.0+metadata-width-hypen", "1.2.0-x.Y.0+metadata-width-hypen"}, {"v1.2.0-x.Y.0+metadata-width-hypen", "1.2.0-x.Y.0+metadata-width-hypen"}, {"1.2.3-rc1-with-hypen", "1.2.3-rc1-with-hypen"}, {"v1.2.3-rc1-with-hypen", "1.2.3-rc1-with-hypen"}, } for _, tc := range tests { v, err := NewVersion(tc.version) if err != nil { t.Errorf("Error parsing version %s", tc) } s := v.String() if s != tc.expected { t.Errorf("Error generating string. Expected '%s' but got '%s'", tc.expected, s) } } } func TestCompare(t *testing.T) { tests := []struct { v1 string v2 string expected int }{ {"1.2.3", "1.5.1", -1}, {"2.2.3", "1.5.1", 1}, {"2.2.3", "2.2.2", 1}, {"3.2-beta", "3.2-beta", 0}, {"1.3", "1.1.4", 1}, {"4.2", "4.2-beta", 1}, {"4.2-beta", "4.2", -1}, {"4.2-alpha", "4.2-beta", -1}, {"4.2-alpha", "4.2-alpha", 0}, {"4.2-beta.2", "4.2-beta.1", 1}, {"4.2-beta2", "4.2-beta1", 1}, {"4.2-beta", "4.2-beta.2", -1}, {"4.2-beta", "4.2-beta.foo", 1}, {"4.2-beta.2", "4.2-beta", 1}, {"4.2-beta.foo", "4.2-beta", -1}, {"1.2+bar", "1.2+baz", 0}, } for _, tc := range tests { v1, err := NewVersion(tc.v1) if err != nil { t.Errorf("Error parsing version: %s", err) } v2, err := NewVersion(tc.v2) if err != nil { t.Errorf("Error parsing version: %s", err) } a := v1.Compare(v2) e := tc.expected if a != e { t.Errorf( "Comparison of '%s' and '%s' failed. Expected '%d', got '%d'", tc.v1, tc.v2, e, a, ) } } // One-off tests for special version comparisons zero := Version{special: zeroVersion} inf := Version{special: infiniteVersion} if zero.Compare(inf) != -1 { t.Error("Zero version should always be less than infinite version") } if zero.Compare(zero) != 0 { t.Error("Zero version should equal itself") } if inf.Compare(zero) != 1 { t.Error("Infinite version should always be greater than zero version") } if inf.Compare(inf) != 0 { t.Error("Infinite version should equal itself") } // Need to work vs. a normal version, too. v := Version{} if zero.Compare(v) != -1 { t.Error("Zero version should always be less than any normal version") } if inf.Compare(v) != 1 { t.Error("Infinite version should always be greater than any normal version") } } func TestLessThan(t *testing.T) { tests := []struct { v1 string v2 string expected bool }{ {"1.2.3", "1.5.1", true}, {"2.2.3", "1.5.1", false}, {"3.2-beta", "3.2-beta", false}, } for _, tc := range tests { v1, err := NewVersion(tc.v1) if err != nil { t.Errorf("Error parsing version: %s", err) } v2, err := NewVersion(tc.v2) if err != nil { t.Errorf("Error parsing version: %s", err) } a := v1.LessThan(v2) e := tc.expected if a != e { t.Errorf( "Comparison of '%s' and '%s' failed. Expected '%t', got '%t'", tc.v1, tc.v2, e, a, ) } } } func TestGreaterThan(t *testing.T) { tests := []struct { v1 string v2 string expected bool }{ {"1.2.3", "1.5.1", false}, {"2.2.3", "1.5.1", true}, {"3.2-beta", "3.2-beta", false}, } for _, tc := range tests { v1, err := NewVersion(tc.v1) if err != nil { t.Errorf("Error parsing version: %s", err) } v2, err := NewVersion(tc.v2) if err != nil { t.Errorf("Error parsing version: %s", err) } a := v1.GreaterThan(v2) e := tc.expected if a != e { t.Errorf( "Comparison of '%s' and '%s' failed. Expected '%t', got '%t'", tc.v1, tc.v2, e, a, ) } } } func TestEqual(t *testing.T) { tests := []struct { v1 string v2 string expected bool }{ {"1.2.3", "1.5.1", false}, {"2.2.3", "1.5.1", false}, {"3.2-beta", "3.2-beta", true}, {"3.2-beta+foo", "3.2-beta+bar", true}, } for _, tc := range tests { v1, err := NewVersion(tc.v1) if err != nil { t.Errorf("Error parsing version: %s", err) } v2, err := NewVersion(tc.v2) if err != nil { t.Errorf("Error parsing version: %s", err) } a := v1.Equal(v2) e := tc.expected if a != e { t.Errorf( "Comparison of '%s' and '%s' failed. Expected '%t', got '%t'", tc.v1, tc.v2, e, a, ) } } } dep-0.3.2/vendor/github.com/Masterminds/vcs/000077500000000000000000000000001317166637100207145ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/Masterminds/vcs/.gitignore000066400000000000000000000004121317166637100227010ustar00rootroot00000000000000# 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 dep-0.3.2/vendor/github.com/Masterminds/vcs/.travis.yml000066400000000000000000000013341317166637100230260ustar00rootroot00000000000000language: go go: - 1.6 - 1.7 - 1.8 - tip before_script: - git version - svn --version # Setting sudo access to false will let Travis CI use containers rather than # VMs to run the tests. For more details see: # - http://docs.travis-ci.com/user/workers/container-based-infrastructure/ # - http://docs.travis-ci.com/user/workers/standard-infrastructure/ sudo: false script: - make setup - make test notifications: webhooks: urls: - https://webhooks.gitter.im/e/06e3328629952dabe3e0 on_success: change # options: [always|never|change] default: always on_failure: always # options: [always|never|change] default: always on_start: never # options: [always|never|change] default: always dep-0.3.2/vendor/github.com/Masterminds/vcs/CHANGELOG.md000066400000000000000000000100731317166637100225260ustar00rootroot00000000000000# 1.11.1 (2017-04-28) ## Fixed - #76: Fix submodule handling for Windows (thanks @m0j0hn) # 1.11.0 (2017-03-23) ## Added - #65: Exposed CmdFromDir function (thanks @erizocosmico) ## Changed - #69: Updated testing for Go 1.8 ## Fixed - #64: Testing fatal error if bzr not installed (thanks @kevinburke) # 1.10.2 (2017-01-24) ## Fixed - #63: Remove extra quotes in submodule export (thanks @dt) # 1.10.1 (2017-01-18) ## Fixed - #62: Added windows testing via appveyor and fixed issues under windows. # 1.10.0 (2017-01-09) ## Added - #60: Handle Git submodules (thanks @sdboyer) - #61: Add gometalinter to testing # 1.9.0 (2016-11-18) ## Added - #50: Auto-detect remotes with file:// prefix. - #59: Testing against Go 1.7 ## Changed - Removed auto-detection for Google Code as the service is deprecated - Added auto-detection of git.openstack.org ## Fixed - #53: Git not fetching tags off branch # 1.8.0 (2016-06-29) ## Added - #43: Detect when tool (e.g., git, svn, etc) not installed - #49: Detect access denied and not found situations ## Changed - #48: Updated Go Report Gard url to new format - Refactored SVN handling to detect when not in a top level directory - Updating tagging to v[SemVer] structure for compatibility with other tools. ## Fixed - #45: Fixed hg's update method so that it pulls from remote before updates # 1.7.0 (2016-05-05) - Adds a glide.yaml file with some limited information. - Implements #37: Ability to export source as a directory. - Implements #36: Get current version-ish with Current method. This returns a branch (if on tip) or equivalent tip, a tag if on a tag, or a revision if on an individual revision. Note, the tip of branch is VCS specific so usage may require detecting VCS type. # 1.6.1 (2016-04-27) - Fixed #30: tags from commit should not have ^{} appended (seen in git) - Fixed #29: isDetachedHead fails with non-english locales (git) - Fixed #33: Access denied and not found http errors causing xml parsing errors # 1.6.0 (2016-04-18) - Issue #26: Added Init method to initialize a repo at the local location (thanks tony). - Issue #19: Added method to retrieve tags for a commit. - Issue #24: Reworked errors returned from common methods. Now differing VCS implementations return the same errors. The original VCS specific error is available on the error. See the docs for more details. - Issue #25: Export the function RunFromDir which runs VCS commands from the root of the local directory. This is useful for those that want to build and extend on top of the vcs package (thanks tony). - Issue #22: Added Ping command to test if remote location is present and accessible. # 1.5.1 (2016-03-23) - Fixing bug parsing some Git commit dates. # 1.5.0 (2016-03-22) - Add Travis CI testing for Go 1.6. - Issue #17: Add CommitInfo method allowing for a common way to get commit metadata from all VCS. - Autodetect types that have git@ or hg@ users. - Autodetect git+ssh, bzr+ssh, git, and svn+ssh scheme urls. - On Bitbucket for ssh style URLs retrieve the type from the URL. This allows for private repo type detection. - Issue #14: Autodetect ssh/scp style urls (thanks chonthu). # 1.4.1 (2016-03-07) - Fixes #16: some windows situations are unable to create parent directory. # 1.4.0 (2016-02-15) - Adding support for IBM JazzHub. # 1.3.1 (2016-01-27) - Issue #12: Failed to checkout Bzr repo when parent directory didn't exist (thanks cyrilleverrier). # 1.3.0 (2015-11-09) - Issue #9: Added Date method to get the date/time of latest commit (thanks kamilchm). # 1.2.0 (2015-10-29) - Adding IsDirty method to detect a checkout with uncommitted changes. # 1.1.4 (2015-10-28) - Fixed #8: Git IsReference not detecting branches that have not been checked out yet. # 1.1.3 (2015-10-21) - Fixing issue where there are multiple go-import statements for go redirects # 1.1.2 (2015-10-20) - Fixes #7: hg not checking out code when Get is called # 1.1.1 (2015-10-20) - Issue #6: Allow VCS commands to be run concurrently. # 1.1.0 (2015-10-19) - #5: Added output of failed command to returned errors. # 1.0.0 (2015-10-06) - Initial release. dep-0.3.2/vendor/github.com/Masterminds/vcs/LICENSE.txt000066400000000000000000000021061317166637100225360ustar00rootroot00000000000000The Masterminds Copyright (C) 2014-2015, Matt Butcher and Matt Farina 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. dep-0.3.2/vendor/github.com/Masterminds/vcs/Makefile000066400000000000000000000017171317166637100223620ustar00rootroot00000000000000.PHONY: setup setup: go get -u gopkg.in/alecthomas/gometalinter.v1 gometalinter.v1 --install .PHONY: test test: validate lint @echo "==> Running tests" go test -v .PHONY: validate validate: # misspell finds the work adresář (used in bzr.go) as a mispelling of # address. It finds adres. An issue has been filed at # https://github.com/client9/misspell/issues/99. In the meantime adding # adres to the ignore list. @echo "==> Running static validations" @gometalinter.v1 \ --disable-all \ --linter "misspell:misspell -i adres -j 1 {path}/*.go:PATH:LINE:COL:MESSAGE" \ --enable deadcode \ --severity deadcode:error \ --enable gofmt \ --enable gosimple \ --enable ineffassign \ --enable misspell \ --enable vet \ --tests \ --vendor \ --deadline 60s \ ./... || exit_code=1 .PHONY: lint lint: @echo "==> Running linters" @gometalinter.v1 \ --disable-all \ --enable golint \ --vendor \ --deadline 60s \ ./... || : dep-0.3.2/vendor/github.com/Masterminds/vcs/README.md000066400000000000000000000042611317166637100221760ustar00rootroot00000000000000# VCS Repository Management for Go Manage repos in varying version control systems with ease through a common interface. [![Build Status](https://travis-ci.org/Masterminds/vcs.svg)](https://travis-ci.org/Masterminds/vcs) [![GoDoc](https://godoc.org/github.com/Masterminds/vcs?status.png)](https://godoc.org/github.com/Masterminds/vcs) [![Go Report Card](https://goreportcard.com/badge/github.com/Masterminds/vcs)](https://goreportcard.com/report/github.com/Masterminds/vcs) [![Build status](https://ci.appveyor.com/api/projects/status/vg3cjc561q2trobm?svg=true&passingText=windows%20build%20passing&failingText=windows%20build%20failing)](https://ci.appveyor.com/project/mattfarina/vcs) ## Quick Usage Quick usage: remote := "https://github.com/Masterminds/vcs" local, _ := ioutil.TempDir("", "go-vcs") repo, err := NewRepo(remote, local) In this case `NewRepo` will detect the VCS is Git and return a `GitRepo`. All of the repos implement the `Repo` interface with a common set of features between them. ## Supported VCS Git, SVN, Bazaar (Bzr), and Mercurial (Hg) are currently supported. They each have their own type (e.g., `GitRepo`) that follow a simple naming pattern. Each type implements the `Repo` interface and has a constructor (e.g., `NewGitRepo`). The constructors have the same signature as `NewRepo`. ## Features - Clone or checkout a repository depending on the version control system. - Pull updates to a repository. - Get the currently checked out commit id. - Checkout a commit id, branch, or tag (depending on the availability in the VCS). - Get a list of tags and branches in the VCS. - Check if a string value is a valid reference within the VCS. - More... For more details see [the documentation](https://godoc.org/github.com/Masterminds/vcs). ## Motivation The package `golang.org/x/tools/go/vcs` provides some valuable functionality for working with packages in repositories in varying source control management systems. That package, while useful and well tested, is designed with a specific purpose in mind. Our uses went beyond the scope of that package. To implement our scope we built a package that went beyond the functionality and scope of `golang.org/x/tools/go/vcs`. dep-0.3.2/vendor/github.com/Masterminds/vcs/appveyor.yml000066400000000000000000000005641317166637100233110ustar00rootroot00000000000000 version: build-{build}.{branch} clone_folder: C:\gopath\src\github.com\Masterminds\vcs shallow_clone: true environment: GOPATH: C:\gopath platform: - x64 install: - go version - go env - choco install -y bzr - set PATH=C:\Program Files (x86)\Bazaar;%PATH% - bzr --version build_script: - go install -v ./... test_script: - go test -v deploy: off dep-0.3.2/vendor/github.com/Masterminds/vcs/bzr.go000066400000000000000000000235671317166637100220550ustar00rootroot00000000000000package vcs import ( "fmt" "net/url" "os" "os/exec" "path/filepath" "regexp" "strings" "time" ) var bzrDetectURL = regexp.MustCompile("parent branch: (?P.+)\n") // NewBzrRepo creates a new instance of BzrRepo. The remote and local directories // need to be passed in. func NewBzrRepo(remote, local string) (*BzrRepo, error) { ins := depInstalled("bzr") if !ins { return nil, NewLocalError("bzr is not installed", nil, "") } ltype, err := DetectVcsFromFS(local) // Found a VCS other than Bzr. Need to report an error. if err == nil && ltype != Bzr { return nil, ErrWrongVCS } r := &BzrRepo{} r.setRemote(remote) r.setLocalPath(local) r.Logger = Logger // With the other VCS we can check if the endpoint locally is different // from the one configured internally. But, with Bzr you can't. For example, // if you do `bzr branch https://launchpad.net/govcstestbzrrepo` and then // use `bzr info` to get the parent branch you'll find it set to // http://bazaar.launchpad.net/~mattfarina/govcstestbzrrepo/trunk/. Notice // the change from https to http and the path chance. // Here we set the remote to be the local one if none is passed in. if err == nil && r.CheckLocal() && remote == "" { c := exec.Command("bzr", "info") c.Dir = local c.Env = envForDir(c.Dir) out, err := c.CombinedOutput() if err != nil { return nil, NewLocalError("Unable to retrieve local repo information", err, string(out)) } m := bzrDetectURL.FindStringSubmatch(string(out)) // If no remote was passed in but one is configured for the locally // checked out Bzr repo use that one. if m[1] != "" { r.setRemote(m[1]) } } return r, nil } // BzrRepo implements the Repo interface for the Bzr source control. type BzrRepo struct { base } // Vcs retrieves the underlying VCS being implemented. func (s BzrRepo) Vcs() Type { return Bzr } // Get is used to perform an initial clone of a repository. func (s *BzrRepo) Get() error { basePath := filepath.Dir(filepath.FromSlash(s.LocalPath())) if _, err := os.Stat(basePath); os.IsNotExist(err) { err = os.MkdirAll(basePath, 0755) if err != nil { return NewLocalError("Unable to create directory", err, "") } } out, err := s.run("bzr", "branch", s.Remote(), s.LocalPath()) if err != nil { return NewRemoteError("Unable to get repository", err, string(out)) } return nil } // Init initializes a bazaar repository at local location. func (s *BzrRepo) Init() error { out, err := s.run("bzr", "init", s.LocalPath()) // There are some windows cases where bazaar cannot create the parent // directory if it does not already exist, to the location it's trying // to create the repo. Catch that error and try to handle it. if err != nil && s.isUnableToCreateDir(err) { basePath := filepath.Dir(filepath.FromSlash(s.LocalPath())) if _, err := os.Stat(basePath); os.IsNotExist(err) { err = os.MkdirAll(basePath, 0755) if err != nil { return NewLocalError("Unable to initialize repository", err, "") } out, err = s.run("bzr", "init", s.LocalPath()) if err != nil { return NewLocalError("Unable to initialize repository", err, string(out)) } return nil } } else if err != nil { return NewLocalError("Unable to initialize repository", err, string(out)) } return nil } // Update performs a Bzr pull and update to an existing checkout. func (s *BzrRepo) Update() error { out, err := s.RunFromDir("bzr", "pull") if err != nil { return NewRemoteError("Unable to update repository", err, string(out)) } out, err = s.RunFromDir("bzr", "update") if err != nil { return NewRemoteError("Unable to update repository", err, string(out)) } return nil } // UpdateVersion sets the version of a package currently checked out via Bzr. func (s *BzrRepo) UpdateVersion(version string) error { out, err := s.RunFromDir("bzr", "update", "-r", version) if err != nil { return NewLocalError("Unable to update checked out version", err, string(out)) } return nil } // Version retrieves the current version. func (s *BzrRepo) Version() (string, error) { out, err := s.RunFromDir("bzr", "revno", "--tree") if err != nil { return "", NewLocalError("Unable to retrieve checked out version", err, string(out)) } return strings.TrimSpace(string(out)), nil } // Current returns the current version-ish. This means: // * -1 if on the tip of the branch (this is the Bzr value for HEAD) // * A tag if on a tag // * Otherwise a revision func (s *BzrRepo) Current() (string, error) { tip, err := s.CommitInfo("-1") if err != nil { return "", err } curr, err := s.Version() if err != nil { return "", err } if tip.Commit == curr { return "-1", nil } ts, err := s.TagsFromCommit(curr) if err != nil { return "", err } if len(ts) > 0 { return ts[0], nil } return curr, nil } // Date retrieves the date on the latest commit. func (s *BzrRepo) Date() (time.Time, error) { out, err := s.RunFromDir("bzr", "version-info", "--custom", "--template={date}") if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, string(out)) } t, err := time.Parse(longForm, string(out)) if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, string(out)) } return t, nil } // CheckLocal verifies the local location is a Bzr repo. func (s *BzrRepo) CheckLocal() bool { if _, err := os.Stat(s.LocalPath() + "/.bzr"); err == nil { return true } return false } // Branches returns a list of available branches on the repository. // In Bazaar (Bzr) clones and branches are the same. A different branch will // have a different URL location which we cannot detect from the repo. This // is a little different from other VCS. func (s *BzrRepo) Branches() ([]string, error) { var branches []string return branches, nil } // Tags returns a list of available tags on the repository. func (s *BzrRepo) Tags() ([]string, error) { out, err := s.RunFromDir("bzr", "tags") if err != nil { return []string{}, NewLocalError("Unable to retrieve tags", err, string(out)) } tags := s.referenceList(string(out), `(?m-s)^(\S+)`) return tags, nil } // IsReference returns if a string is a reference. A reference can be a // commit id or tag. func (s *BzrRepo) IsReference(r string) bool { _, err := s.RunFromDir("bzr", "revno", "-r", r) return err == nil } // IsDirty returns if the checkout has been modified from the checked // out reference. func (s *BzrRepo) IsDirty() bool { out, err := s.RunFromDir("bzr", "diff") return err != nil || len(out) != 0 } // CommitInfo retrieves metadata about a commit. func (s *BzrRepo) CommitInfo(id string) (*CommitInfo, error) { r := "-r" + id out, err := s.RunFromDir("bzr", "log", r, "--log-format=long") if err != nil { return nil, ErrRevisionUnavailable } ci := &CommitInfo{} lines := strings.Split(string(out), "\n") const format = "Mon 2006-01-02 15:04:05 -0700" var track int var trackOn bool // Note, bzr does not appear to use i18m. for i, l := range lines { if strings.HasPrefix(l, "revno:") { ci.Commit = strings.TrimSpace(strings.TrimPrefix(l, "revno:")) } else if strings.HasPrefix(l, "committer:") { ci.Author = strings.TrimSpace(strings.TrimPrefix(l, "committer:")) } else if strings.HasPrefix(l, "timestamp:") { ts := strings.TrimSpace(strings.TrimPrefix(l, "timestamp:")) ci.Date, err = time.Parse(format, ts) if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } } else if strings.TrimSpace(l) == "message:" { track = i trackOn = true } else if trackOn && i > track { ci.Message = ci.Message + l } } ci.Message = strings.TrimSpace(ci.Message) // Didn't find the revision if ci.Author == "" { return nil, ErrRevisionUnavailable } return ci, nil } // TagsFromCommit retrieves tags from a commit id. func (s *BzrRepo) TagsFromCommit(id string) ([]string, error) { out, err := s.RunFromDir("bzr", "tags", "-r", id) if err != nil { return []string{}, NewLocalError("Unable to retrieve tags", err, string(out)) } tags := s.referenceList(string(out), `(?m-s)^(\S+)`) return tags, nil } // Ping returns if remote location is accessible. func (s *BzrRepo) Ping() bool { // Running bzr info is slow. Many of the projects are on launchpad which // has a public 1.0 API we can use. u, err := url.Parse(s.Remote()) if err == nil { if u.Host == "launchpad.net" { try := strings.TrimPrefix(u.Path, "/") // get returns the body and an err. If the status code is not a 200 // an error is returned. Launchpad returns a 404 for a codebase that // does not exist. Otherwise it returns a JSON object describing it. _, er := get("https://api.launchpad.net/1.0/" + try) return er == nil } } // This is the same command that Go itself uses but it's not fast (or fast // enough by my standards). A faster method would be useful. _, err = s.run("bzr", "info", s.Remote()) return err == nil } // ExportDir exports the current revision to the passed in directory. func (s *BzrRepo) ExportDir(dir string) error { out, err := s.RunFromDir("bzr", "export", dir) s.log(out) if err != nil { return NewLocalError("Unable to export source", err, string(out)) } return nil } // Multi-lingual manner check for the VCS error that it couldn't create directory. // https://bazaar.launchpad.net/~bzr-pqm/bzr/bzr.dev/files/head:/po/ func (s *BzrRepo) isUnableToCreateDir(err error) bool { msg := err.Error() if strings.HasPrefix(msg, fmt.Sprintf("Parent directory of %s does not exist.", s.LocalPath())) || strings.HasPrefix(msg, fmt.Sprintf("Nadřazený adresář %s neexistuje.", s.LocalPath())) || strings.HasPrefix(msg, fmt.Sprintf("El directorio padre de %s no existe.", s.LocalPath())) || strings.HasPrefix(msg, fmt.Sprintf("%s の親ディレクトリがありません。", s.LocalPath())) || strings.HasPrefix(msg, fmt.Sprintf("Родительская директория для %s не существует.", s.LocalPath())) { return true } return false } dep-0.3.2/vendor/github.com/Masterminds/vcs/bzr_test.go000066400000000000000000000163611317166637100231060ustar00rootroot00000000000000package vcs import ( "io/ioutil" "path/filepath" "time" //"log" "os" "testing" ) // Canary test to ensure BzrRepo implements the Repo interface. var _ Repo = &BzrRepo{} // To verify bzr is working we perform integration testing // with a known bzr service. Due to the long time of repeatedly checking out // repos these tests are structured to work together. func TestBzr(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-bzr-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewBzrRepo("https://launchpad.net/govcstestbzrrepo", tempDir+"/govcstestbzrrepo") if err != nil { t.Fatal(err) } if repo.Vcs() != Bzr { t.Error("Bzr is detecting the wrong type") } // Check the basic getters. if repo.Remote() != "https://launchpad.net/govcstestbzrrepo" { t.Error("Remote not set properly") } if repo.LocalPath() != tempDir+"/govcstestbzrrepo" { t.Error("Local disk location not set properly") } //Logger = log.New(os.Stdout, "", log.LstdFlags) // Do an initial clone. err = repo.Get() if err != nil { t.Errorf("Unable to clone Bzr repo. Err was %s", err) } // Verify Bzr repo is a Bzr repo if !repo.CheckLocal() { t.Error("Problem checking out repo or Bzr CheckLocal is not working") } // Test internal lookup mechanism used outside of Bzr specific functionality. ltype, err := DetectVcsFromFS(tempDir + "/govcstestbzrrepo") if err != nil { t.Error("detectVcsFromFS unable to Bzr repo") } if ltype != Bzr { t.Errorf("detectVcsFromFS detected %s instead of Bzr type", ltype) } // Test NewRepo on existing checkout. This should simply provide a working // instance without error based on looking at the local directory. nrepo, nrerr := NewRepo("https://launchpad.net/govcstestbzrrepo", tempDir+"/govcstestbzrrepo") if nrerr != nil { t.Error(nrerr) } // Verify the right oject is returned. It will check the local repo type. if !nrepo.CheckLocal() { t.Error("Wrong version returned from NewRepo") } v, err := repo.Current() if err != nil { t.Errorf("Error trying Bzr Current: %s", err) } if v != "-1" { t.Errorf("Current failed to detect Bzr on tip of branch. Got version: %s", v) } err = repo.UpdateVersion("2") if err != nil { t.Errorf("Unable to update Bzr repo version. Err was %s", err) } // Use Version to verify we are on the right version. v, err = repo.Version() if v != "2" { t.Error("Error checking checked out Bzr version") } if err != nil { t.Error(err) } v, err = repo.Current() if err != nil { t.Errorf("Error trying Bzr Current: %s", err) } if v != "2" { t.Errorf("Current failed to detect Bzr on rev 2 of branch. Got version: %s", v) } // Use Date to verify we are on the right commit. d, err := repo.Date() if d.Format(longForm) != "2015-07-31 09:50:42 -0400" { t.Error("Error checking checked out Bzr commit date") } if err != nil { t.Error(err) } // Perform an update. err = repo.Update() if err != nil { t.Error(err) } v, err = repo.Version() if v != "3" { t.Error("Error checking checked out Bzr version") } if err != nil { t.Error(err) } tags, err := repo.Tags() if err != nil { t.Error(err) } if tags[0] != "1.0.0" { t.Error("Bzr tags is not reporting the correct version") } tags, err = repo.TagsFromCommit("2") if err != nil { t.Error(err) } if len(tags) != 0 { t.Error("Bzr is incorrectly returning tags for a commit") } tags, err = repo.TagsFromCommit("3") if err != nil { t.Error(err) } if len(tags) != 1 || tags[0] != "1.0.0" { t.Error("Bzr is incorrectly returning tags for a commit") } branches, err := repo.Branches() if err != nil { t.Error(err) } if len(branches) != 0 { t.Error("Bzr is incorrectly returning branches") } if !repo.IsReference("1.0.0") { t.Error("Bzr is reporting a reference is not one") } if repo.IsReference("foo") { t.Error("Bzr is reporting a non-existent reference is one") } if repo.IsDirty() { t.Error("Bzr incorrectly reporting dirty") } ci, err := repo.CommitInfo("3") if err != nil { t.Error(err) } if ci.Commit != "3" { t.Error("Bzr.CommitInfo wrong commit id") } if ci.Author != "Matt Farina " { t.Error("Bzr.CommitInfo wrong author") } if ci.Message != "Updated Readme with pointer." { t.Error("Bzr.CommitInfo wrong message") } ti, err := time.Parse(time.RFC1123Z, "Fri, 31 Jul 2015 09:51:37 -0400") if err != nil { t.Error(err) } if !ti.Equal(ci.Date) { t.Error("Bzr.CommitInfo wrong date") } _, err = repo.CommitInfo("asdfasdfasdf") if err != ErrRevisionUnavailable { t.Error("Bzr didn't return expected ErrRevisionUnavailable") } tempDir2, err := ioutil.TempDir("", "go-vcs-bzr-tests-export") if err != nil { t.Fatalf("Error creating temp directory: %s", err) } defer func() { err = os.RemoveAll(tempDir2) if err != nil { t.Error(err) } }() exportDir := filepath.Join(tempDir2, "src") err = repo.ExportDir(exportDir) if err != nil { t.Errorf("Unable to export Bzr repo. Err was %s", err) } _, err = os.Stat(filepath.Join(exportDir, "Readme.md")) if err != nil { t.Errorf("Error checking exported file in Bzr: %s", err) } _, err = os.Stat(filepath.Join(exportDir, string(repo.Vcs()))) if err != nil { if found := os.IsNotExist(err); !found { t.Errorf("Error checking exported metadata in Bzr: %s", err) } } else { t.Error("Error checking Bzr metadata. It exists.") } } func TestBzrCheckLocal(t *testing.T) { // Verify repo.CheckLocal fails for non-Bzr directories. // TestBzr is already checking on a valid repo tempDir, err := ioutil.TempDir("", "go-vcs-bzr-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, _ := NewBzrRepo("", tempDir) if repo.CheckLocal() { t.Error("Bzr CheckLocal does not identify non-Bzr location") } // Test NewRepo when there's no local. This should simply provide a working // instance without error based on looking at the remote localtion. _, nrerr := NewRepo("https://launchpad.net/govcstestbzrrepo", tempDir+"/govcstestbzrrepo") if nrerr != nil { t.Error(nrerr) } } func TestBzrPing(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-bzr-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewBzrRepo("https://launchpad.net/govcstestbzrrepo", tempDir) if err != nil { t.Error(err) } ping := repo.Ping() if !ping { t.Error("Bzr unable to ping working repo") } repo, err = NewBzrRepo("https://launchpad.net/ihopethisneverexistsbecauseitshouldnt", tempDir) if err != nil { t.Error(err) } ping = repo.Ping() if ping { t.Error("Bzr got a ping response from when it should not have") } } func TestBzrInit(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-bzr-tests") repoDir := tempDir + "/repo" if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewBzrRepo(repoDir, repoDir) if err != nil { t.Error(err) } err = repo.Init() if err != nil { t.Error(err) } v, err := repo.Version() if err != nil { t.Error(err) } if v != "0" { t.Errorf("Bzr Init returns wrong version: %s", v) } } dep-0.3.2/vendor/github.com/Masterminds/vcs/errors.go000066400000000000000000000057531317166637100225710ustar00rootroot00000000000000package vcs import "errors" // The vcs package provides ways to work with errors that hide the underlying // implementation details but make them accessible if needed. For basic errors // that do not have underlying implementation specific details or the underlying // details are not necessary there are errors for comparison. // // For example: // // ci, err := repo.CommitInfo("123") // if err == vcs.ErrRevisionUnavailable { // // The commit id was not available in the VCS. // } // // There are other times where getting the details are more useful. For example, // if you're performing a repo.Get() and an error occurs. In general you'll want // to consistently know it failed. But, you may want to know the underlying // details (opt-in) to them. For those cases there is a different form of error // handling. // // For example: // // err := repo.Get() // if err != nil { // // A RemoteError was returned. This has access to the output of the // // vcs command, original error, and has a consistent cross vcs message. // } // // The errors returned here can be used in type switches to detect the underlying // error. For example: // // switch err.(type) { // case *vcs.RemoteError: // // This an error connecting to a remote system. // } // // For more information on using type switches to detect error types you can // read the Go wiki at https://github.com/golang/go/wiki/Errors var ( // ErrWrongVCS is returned when an action is tried on the wrong VCS. ErrWrongVCS = errors.New("Wrong VCS detected") // ErrCannotDetectVCS is returned when VCS cannot be detected from URI string. ErrCannotDetectVCS = errors.New("Cannot detect VCS") // ErrWrongRemote occurs when the passed in remote does not match the VCS // configured endpoint. ErrWrongRemote = errors.New("The Remote does not match the VCS endpoint") // ErrRevisionUnavailable happens when commit revision information is // unavailable. ErrRevisionUnavailable = errors.New("Revision unavailable") ) // RemoteError is returned when an operation fails against a remote repo type RemoteError struct { vcsError } // NewRemoteError constructs a RemoteError func NewRemoteError(msg string, err error, out string) error { e := &RemoteError{} e.s = msg e.e = err e.o = out return e } // LocalError is returned when a local operation has an error type LocalError struct { vcsError } // NewLocalError constructs a LocalError func NewLocalError(msg string, err error, out string) error { e := &LocalError{} e.s = msg e.e = err e.o = out return e } type vcsError struct { s string e error // The original error o string // The output from executing the command } // Error implements the Error interface func (e *vcsError) Error() string { return e.s } // Original retrieves the underlying implementation specific error. func (e *vcsError) Original() error { return e.e } // Out retrieves the output of the original command that was run. func (e *vcsError) Out() string { return e.o } dep-0.3.2/vendor/github.com/Masterminds/vcs/errors_test.go000066400000000000000000000012301317166637100236120ustar00rootroot00000000000000package vcs import ( "errors" "testing" ) func TestNewRemoteError(t *testing.T) { base := errors.New("Foo error") out := "This is a test" msg := "remote error msg" e := NewRemoteError(msg, base, out) switch e.(type) { case *RemoteError: // This is the right error type default: t.Error("Wrong error type returned from NewRemoteError") } } func TestNewLocalError(t *testing.T) { base := errors.New("Foo error") out := "This is a test" msg := "local error msg" e := NewLocalError(msg, base, out) switch e.(type) { case *LocalError: // This is the right error type default: t.Error("Wrong error type returned from NewLocalError") } } dep-0.3.2/vendor/github.com/Masterminds/vcs/git.go000066400000000000000000000336031317166637100220330ustar00rootroot00000000000000package vcs import ( "bytes" "encoding/xml" "io/ioutil" "os" "os/exec" "path/filepath" "runtime" "strings" "time" ) // NewGitRepo creates a new instance of GitRepo. The remote and local directories // need to be passed in. func NewGitRepo(remote, local string) (*GitRepo, error) { ins := depInstalled("git") if !ins { return nil, NewLocalError("git is not installed", nil, "") } ltype, err := DetectVcsFromFS(local) // Found a VCS other than Git. Need to report an error. if err == nil && ltype != Git { return nil, ErrWrongVCS } r := &GitRepo{} r.setRemote(remote) r.setLocalPath(local) r.RemoteLocation = "origin" r.Logger = Logger // Make sure the local Git repo is configured the same as the remote when // A remote value was passed in. if err == nil && r.CheckLocal() { c := exec.Command("git", "config", "--get", "remote.origin.url") c.Dir = local c.Env = envForDir(c.Dir) out, err := c.CombinedOutput() if err != nil { return nil, NewLocalError("Unable to retrieve local repo information", err, string(out)) } localRemote := strings.TrimSpace(string(out)) if remote != "" && localRemote != remote { return nil, ErrWrongRemote } // If no remote was passed in but one is configured for the locally // checked out Git repo use that one. if remote == "" && localRemote != "" { r.setRemote(localRemote) } } return r, nil } // GitRepo implements the Repo interface for the Git source control. type GitRepo struct { base RemoteLocation string } // Vcs retrieves the underlying VCS being implemented. func (s GitRepo) Vcs() Type { return Git } // Get is used to perform an initial clone of a repository. func (s *GitRepo) Get() error { out, err := s.run("git", "clone", "--recursive", s.Remote(), s.LocalPath()) // There are some windows cases where Git cannot create the parent directory, // if it does not already exist, to the location it's trying to create the // repo. Catch that error and try to handle it. if err != nil && s.isUnableToCreateDir(err) { basePath := filepath.Dir(filepath.FromSlash(s.LocalPath())) if _, err := os.Stat(basePath); os.IsNotExist(err) { err = os.MkdirAll(basePath, 0755) if err != nil { return NewLocalError("Unable to create directory", err, "") } out, err = s.run("git", "clone", s.Remote(), s.LocalPath()) if err != nil { return NewRemoteError("Unable to get repository", err, string(out)) } return err } } else if err != nil { return NewRemoteError("Unable to get repository", err, string(out)) } return nil } // Init initializes a git repository at local location. func (s *GitRepo) Init() error { out, err := s.run("git", "init", s.LocalPath()) // There are some windows cases where Git cannot create the parent directory, // if it does not already exist, to the location it's trying to create the // repo. Catch that error and try to handle it. if err != nil && s.isUnableToCreateDir(err) { basePath := filepath.Dir(filepath.FromSlash(s.LocalPath())) if _, err := os.Stat(basePath); os.IsNotExist(err) { err = os.MkdirAll(basePath, 0755) if err != nil { return NewLocalError("Unable to initialize repository", err, "") } out, err = s.run("git", "init", s.LocalPath()) if err != nil { return NewLocalError("Unable to initialize repository", err, string(out)) } return nil } } else if err != nil { return NewLocalError("Unable to initialize repository", err, string(out)) } return nil } // Update performs an Git fetch and pull to an existing checkout. func (s *GitRepo) Update() error { // Perform a fetch to make sure everything is up to date. out, err := s.RunFromDir("git", "fetch", "--tags", s.RemoteLocation) if err != nil { return NewRemoteError("Unable to update repository", err, string(out)) } // When in a detached head state, such as when an individual commit is checked // out do not attempt a pull. It will cause an error. detached, err := isDetachedHead(s.LocalPath()) if err != nil { return NewLocalError("Unable to update repository", err, "") } if detached { return nil } out, err = s.RunFromDir("git", "pull") if err != nil { return NewRemoteError("Unable to update repository", err, string(out)) } return s.defendAgainstSubmodules() } // UpdateVersion sets the version of a package currently checked out via Git. func (s *GitRepo) UpdateVersion(version string) error { out, err := s.RunFromDir("git", "checkout", version) if err != nil { return NewLocalError("Unable to update checked out version", err, string(out)) } return s.defendAgainstSubmodules() } // defendAgainstSubmodules tries to keep repo state sane in the event of // submodules. Or nested submodules. What a great idea, submodules. func (s *GitRepo) defendAgainstSubmodules() error { // First, update them to whatever they should be, if there should happen to be any. out, err := s.RunFromDir("git", "submodule", "update", "--init", "--recursive") if err != nil { return NewLocalError("Unexpected error while defensively updating submodules", err, string(out)) } // Now, do a special extra-aggressive clean in case changing versions caused // one or more submodules to go away. out, err = s.RunFromDir("git", "clean", "-x", "-d", "-f", "-f") if err != nil { return NewLocalError("Unexpected error while defensively cleaning up after possible derelict submodule directories", err, string(out)) } // Then, repeat just in case there are any nested submodules that went away. out, err = s.RunFromDir("git", "submodule", "foreach", "--recursive", "git", "clean", "-x", "-d", "-f", "-f") if err != nil { return NewLocalError("Unexpected error while defensively cleaning up after possible derelict nested submodule directories", err, string(out)) } return nil } // Version retrieves the current version. func (s *GitRepo) Version() (string, error) { out, err := s.RunFromDir("git", "rev-parse", "HEAD") if err != nil { return "", NewLocalError("Unable to retrieve checked out version", err, string(out)) } return strings.TrimSpace(string(out)), nil } // Current returns the current version-ish. This means: // * Branch name if on the tip of the branch // * Tag if on a tag // * Otherwise a revision id func (s *GitRepo) Current() (string, error) { out, err := s.RunFromDir("git", "symbolic-ref", "HEAD") if err == nil { o := bytes.TrimSpace(bytes.TrimPrefix(out, []byte("refs/heads/"))) return string(o), nil } v, err := s.Version() if err != nil { return "", err } ts, err := s.TagsFromCommit(v) if err != nil { return "", err } if len(ts) > 0 { return ts[0], nil } return v, nil } // Date retrieves the date on the latest commit. func (s *GitRepo) Date() (time.Time, error) { out, err := s.RunFromDir("git", "log", "-1", "--date=iso", "--pretty=format:%cd") if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, string(out)) } t, err := time.Parse(longForm, string(out)) if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, string(out)) } return t, nil } // Branches returns a list of available branches on the RemoteLocation func (s *GitRepo) Branches() ([]string, error) { out, err := s.RunFromDir("git", "show-ref") if err != nil { return []string{}, NewLocalError("Unable to retrieve branches", err, string(out)) } branches := s.referenceList(string(out), `(?m-s)(?:`+s.RemoteLocation+`)/(\S+)$`) return branches, nil } // Tags returns a list of available tags on the RemoteLocation func (s *GitRepo) Tags() ([]string, error) { out, err := s.RunFromDir("git", "show-ref") if err != nil { return []string{}, NewLocalError("Unable to retrieve tags", err, string(out)) } tags := s.referenceList(string(out), `(?m-s)(?:tags)/(\S+)$`) return tags, nil } // CheckLocal verifies the local location is a Git repo. func (s *GitRepo) CheckLocal() bool { if _, err := os.Stat(s.LocalPath() + "/.git"); err == nil { return true } return false } // IsReference returns if a string is a reference. A reference can be a // commit id, branch, or tag. func (s *GitRepo) IsReference(r string) bool { _, err := s.RunFromDir("git", "rev-parse", "--verify", r) if err == nil { return true } // Some refs will fail rev-parse. For example, a remote branch that has // not been checked out yet. This next step should pickup the other // possible references. _, err = s.RunFromDir("git", "show-ref", r) return err == nil } // IsDirty returns if the checkout has been modified from the checked // out reference. func (s *GitRepo) IsDirty() bool { out, err := s.RunFromDir("git", "diff") return err != nil || len(out) != 0 } // CommitInfo retrieves metadata about a commit. func (s *GitRepo) CommitInfo(id string) (*CommitInfo, error) { fm := `--pretty=format:"%H%an <%ae>%aD%s"` out, err := s.RunFromDir("git", "log", id, fm, "-1") if err != nil { return nil, ErrRevisionUnavailable } cis := struct { Commit string `xml:"commit"` Author string `xml:"author"` Date string `xml:"date"` Message string `xml:"message"` }{} err = xml.Unmarshal(out, &cis) if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } t, err := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700", cis.Date) if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } ci := &CommitInfo{ Commit: cis.Commit, Author: cis.Author, Date: t, Message: cis.Message, } return ci, nil } // TagsFromCommit retrieves tags from a commit id. func (s *GitRepo) TagsFromCommit(id string) ([]string, error) { // This is imperfect and a better method would be great. var re []string out, err := s.RunFromDir("git", "show-ref", "-d") if err != nil { return []string{}, NewLocalError("Unable to retrieve tags", err, string(out)) } lines := strings.Split(string(out), "\n") var list []string for _, i := range lines { if strings.HasPrefix(strings.TrimSpace(i), id) { list = append(list, i) } } tags := s.referenceList(strings.Join(list, "\n"), `(?m-s)(?:tags)/(\S+)$`) for _, t := range tags { // Dereferenced tags have ^{} appended to them. re = append(re, strings.TrimSuffix(t, "^{}")) } return re, nil } // Ping returns if remote location is accessible. func (s *GitRepo) Ping() bool { c := exec.Command("git", "ls-remote", s.Remote()) // If prompted for a username and password, which GitHub does for all things // not public, it's considered not available. To make it available the // remote needs to be different. c.Env = mergeEnvLists([]string{"GIT_TERMINAL_PROMPT=0"}, os.Environ()) _, err := c.CombinedOutput() return err == nil } // EscapePathSeparator escapes the path separator by replacing it with several. // Note: this is harmless on Unix, and needed on Windows. func EscapePathSeparator(path string) (string) { switch runtime.GOOS { case `windows`: // On Windows, triple all path separators. // Needed to escape backslash(s) preceding doublequotes, // because of how Windows strings treats backslash+doublequote combo, // and Go seems to be implicitly passing around a doublequoted string on Windows, // so we cannnot use default string instead. // See: https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/everyone-quotes-command-line-arguments-the-wrong-way/ // e.g., C:\foo\bar\ -> C:\\\foo\\\bar\\\ // used with --prefix, like this: --prefix=C:\foo\bar\ -> --prefix=C:\\\foo\\\bar\\\ return strings.Replace(path, string(os.PathSeparator), string(os.PathSeparator) + string(os.PathSeparator) + string(os.PathSeparator), -1) default: return path } } // ExportDir exports the current revision to the passed in directory. func (s *GitRepo) ExportDir(dir string) error { var path string // Without the trailing / there can be problems. if !strings.HasSuffix(dir, string(os.PathSeparator)) { dir = dir + string(os.PathSeparator) } // checkout-index on some systems, such as some Windows cases, does not // create the parent directory to export into if it does not exist. Explicitly // creating it. err := os.MkdirAll(dir, 0755) if err != nil { return NewLocalError("Unable to create directory", err, "") } path = EscapePathSeparator( dir ) out, err := s.RunFromDir("git", "checkout-index", "-f", "-a", "--prefix="+path) s.log(out) if err != nil { return NewLocalError("Unable to export source", err, string(out)) } // and now, the horror of submodules path = EscapePathSeparator( dir + "$path" + string(os.PathSeparator) ) out, err = s.RunFromDir("git", "submodule", "foreach", "--recursive", "git checkout-index -f -a --prefix="+path) s.log(out) if err != nil { return NewLocalError("Error while exporting submodule sources", err, string(out)) } return nil } // isDetachedHead will detect if git repo is in "detached head" state. func isDetachedHead(dir string) (bool, error) { p := filepath.Join(dir, ".git", "HEAD") contents, err := ioutil.ReadFile(p) if err != nil { return false, err } contents = bytes.TrimSpace(contents) if bytes.HasPrefix(contents, []byte("ref: ")) { return false, nil } return true, nil } // isUnableToCreateDir checks for an error in Init() to see if an error // where the parent directory of the VCS local path doesn't exist. This is // done in a multi-lingual manner. func (s *GitRepo) isUnableToCreateDir(err error) bool { msg := err.Error() if strings.HasPrefix(msg, "could not create work tree dir") || strings.HasPrefix(msg, "不能创建工作区目录") || strings.HasPrefix(msg, "no s'ha pogut crear el directori d'arbre de treball") || strings.HasPrefix(msg, "impossible de créer le répertoire de la copie de travail") || strings.HasPrefix(msg, "kunde inte skapa arbetskatalogen") || (strings.HasPrefix(msg, "Konnte Arbeitsverzeichnis") && strings.Contains(msg, "nicht erstellen")) || (strings.HasPrefix(msg, "작업 디렉터리를") && strings.Contains(msg, "만들 수 없습니다")) { return true } return false } dep-0.3.2/vendor/github.com/Masterminds/vcs/git_test.go000066400000000000000000000363501317166637100230740ustar00rootroot00000000000000package vcs import ( "fmt" "io/ioutil" "path/filepath" "time" //"log" "os" "testing" ) // Canary test to ensure GitRepo implements the Repo interface. var _ Repo = &GitRepo{} // To verify git is working we perform integration testing // with a known git service. func TestGit(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-git-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewGitRepo("https://github.com/Masterminds/VCSTestRepo", tempDir+"/VCSTestRepo") if err != nil { t.Error(err) } if repo.Vcs() != Git { t.Error("Git is detecting the wrong type") } // Check the basic getters. if repo.Remote() != "https://github.com/Masterminds/VCSTestRepo" { t.Error("Remote not set properly") } if repo.LocalPath() != tempDir+"/VCSTestRepo" { t.Error("Local disk location not set properly") } //Logger = log.New(os.Stdout, "", log.LstdFlags) // Do an initial clone. err = repo.Get() if err != nil { t.Errorf("Unable to clone Git repo. Err was %s", err) } // Verify Git repo is a Git repo if !repo.CheckLocal() { t.Error("Problem checking out repo or Git CheckLocal is not working") } // Test internal lookup mechanism used outside of Git specific functionality. ltype, err := DetectVcsFromFS(tempDir + "/VCSTestRepo") if err != nil { t.Error("detectVcsFromFS unable to Git repo") } if ltype != Git { t.Errorf("detectVcsFromFS detected %s instead of Git type", ltype) } // Test NewRepo on existing checkout. This should simply provide a working // instance without error based on looking at the local directory. nrepo, nrerr := NewRepo("https://github.com/Masterminds/VCSTestRepo", tempDir+"/VCSTestRepo") if nrerr != nil { t.Error(nrerr) } // Verify the right oject is returned. It will check the local repo type. if !nrepo.CheckLocal() { t.Error("Wrong version returned from NewRepo") } // Perform an update. err = repo.Update() if err != nil { t.Error(err) } v, err := repo.Current() if err != nil { t.Errorf("Error trying Git Current: %s", err) } if v != "master" { t.Errorf("Current failed to detect Git on tip of master. Got version: %s", v) } // Set the version using the short hash. err = repo.UpdateVersion("806b07b") if err != nil { t.Errorf("Unable to update Git repo version. Err was %s", err) } // Once a ref has been checked out the repo is in a detached head state. // Trying to pull in an update in this state will cause an error. Update // should cleanly handle this. Pulling on a branch (tested elsewhere) and // skipping that here. err = repo.Update() if err != nil { t.Error(err) } // Use Version to verify we are on the right version. v, err = repo.Version() if v != "806b07b08faa21cfbdae93027904f80174679402" { t.Error("Error checking checked out Git version") } if err != nil { t.Error(err) } v, err = repo.Current() if err != nil { t.Errorf("Error trying Git Current for ref: %s", err) } if v != "806b07b08faa21cfbdae93027904f80174679402" { t.Errorf("Current failed to detect Git on ref of branch. Got version: %s", v) } // Use Date to verify we are on the right commit. d, err := repo.Date() if d.Format(longForm) != "2015-07-29 09:46:39 -0400" { t.Error("Error checking checked out Git commit date") } if err != nil { t.Error(err) } // Verify that we can set the version something other than short hash err = repo.UpdateVersion("master") if err != nil { t.Errorf("Unable to update Git repo version. Err was %s", err) } err = repo.UpdateVersion("806b07b08faa21cfbdae93027904f80174679402") if err != nil { t.Errorf("Unable to update Git repo version. Err was %s", err) } v, err = repo.Version() if v != "806b07b08faa21cfbdae93027904f80174679402" { t.Error("Error checking checked out Git version") } if err != nil { t.Error(err) } tags, err := repo.Tags() if err != nil { t.Error(err) } var hasRelTag bool var hasOffMasterTag bool for _, tv := range tags { if tv == "1.0.0" { hasRelTag = true } else if tv == "off-master-tag" { hasOffMasterTag = true } } if !hasRelTag { t.Error("Git tags unable to find release tag on master") } if !hasOffMasterTag { t.Error("Git tags did not fetch tags not on master") } tags, err = repo.TagsFromCommit("74dd547545b7df4aa285bcec1b54e2b76f726395") if err != nil { t.Error(err) } if len(tags) != 0 { t.Error("Git is incorrectly returning tags for a commit") } tags, err = repo.TagsFromCommit("30605f6ac35fcb075ad0bfa9296f90a7d891523e") if err != nil { t.Error(err) } if len(tags) != 1 || tags[0] != "1.0.0" { t.Error("Git is incorrectly returning tags for a commit") } branches, err := repo.Branches() if err != nil { t.Error(err) } // The branches should be HEAD, master, other, and test. if branches[3] != "test" { t.Error("Git is incorrectly returning branches") } if !repo.IsReference("1.0.0") { t.Error("Git is reporting a reference is not one") } if repo.IsReference("foo") { t.Error("Git is reporting a non-existent reference is one") } if repo.IsDirty() { t.Error("Git incorrectly reporting dirty") } ci, err := repo.CommitInfo("806b07b08faa21cfbdae93027904f80174679402") if err != nil { t.Error(err) } if ci.Commit != "806b07b08faa21cfbdae93027904f80174679402" { t.Error("Git.CommitInfo wrong commit id") } if ci.Author != "Matt Farina " { t.Error("Git.CommitInfo wrong author") } if ci.Message != "Update README.md" { t.Error("Git.CommitInfo wrong message") } ti, err := time.Parse(time.RFC1123Z, "Wed, 29 Jul 2015 09:46:39 -0400") if err != nil { t.Error(err) } if !ti.Equal(ci.Date) { t.Error("Git.CommitInfo wrong date") } _, err = repo.CommitInfo("asdfasdfasdf") if err != ErrRevisionUnavailable { t.Error("Git didn't return expected ErrRevisionUnavailable") } tempDir2, err := ioutil.TempDir("", "go-vcs-git-tests-export") if err != nil { t.Fatalf("Error creating temp directory: %s", err) } defer func() { err = os.RemoveAll(tempDir2) if err != nil { t.Error(err) } }() exportDir := filepath.Join(tempDir2, "src") err = repo.ExportDir(exportDir) if err != nil { t.Errorf("Unable to export Git repo. Err was %s", err) } _, err = os.Stat(filepath.Join(exportDir, "README.md")) if err != nil { t.Errorf("Error checking exported file in Git: %s", err) } _, err = os.Stat(filepath.Join(exportDir, string(repo.Vcs()))) if err != nil { if found := os.IsNotExist(err); !found { t.Errorf("Error checking exported metadata in Git: %s", err) } } else { t.Error("Error checking Git metadata. It exists.") } } func TestGitCheckLocal(t *testing.T) { // Verify repo.CheckLocal fails for non-Git directories. // TestGit is already checking on a valid repo tempDir, err := ioutil.TempDir("", "go-vcs-git-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, _ := NewGitRepo("", tempDir) if repo.CheckLocal() { t.Error("Git CheckLocal does not identify non-Git location") } // Test NewRepo when there's no local. This should simply provide a working // instance without error based on looking at the remote localtion. _, nrerr := NewRepo("https://github.com/Masterminds/VCSTestRepo", tempDir+"/VCSTestRepo") if nrerr != nil { t.Error(nrerr) } } func TestGitPing(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-git-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewGitRepo("https://github.com/Masterminds/VCSTestRepo", tempDir) if err != nil { t.Error(err) } ping := repo.Ping() if !ping { t.Error("Git unable to ping working repo") } repo, err = NewGitRepo("https://github.com/Masterminds/ihopethisneverexistsbecauseitshouldnt", tempDir) if err != nil { t.Error(err) } ping = repo.Ping() if ping { t.Error("Git got a ping response from when it should not have") } } func TestGitInit(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-git-tests") repoDir := tempDir + "/repo" if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewGitRepo(repoDir, repoDir) if err != nil { t.Error(err) } err = repo.Init() if err != nil { t.Error(err) } _, err = repo.RunFromDir("git", "status") if err != nil { t.Error(err) } } func TestGitSubmoduleHandling(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-git-submodule-tests") if err != nil { t.Fatal(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() dumplocal := func(err error) string { if terr, ok := err.(*LocalError); ok { return fmt.Sprintf("msg: %s\norig: %s\nout: %s", terr.Error(), terr.Original(), terr.Out()) } return err.Error() } subdirExists := func(dir ...string) bool { _, err := os.Stat(filepath.Join(append([]string{tempDir}, dir...)...)) return err == nil } // Initial clone should get version with two submodules, each of which have // their own submodule repo, err := NewGitRepo("https://github.com/sdboyer/subm", tempDir) if err != nil { t.Fatal(dumplocal(err)) } err = repo.Get() if err != nil { t.Fatalf("unable to clone Git repo. Err was %s", dumplocal(err)) } // Verify we are on the right version. v, err := repo.Version() if v != "18e3a5f6fc7f6d577e732e7a5ab2caf990efbf8f" { t.Fatalf("did not start from expected rev, tests could fail - bailing out (got %s)", v) } if err != nil { t.Fatal(dumplocal(err)) } if !subdirExists("subm1", ".git") { t.Fatal("subm1 submodule does not exist on initial clone/checkout") } if !subdirExists("subm1", "dep-test", ".git") { t.Fatal("dep-test submodule nested under subm1 does not exist on initial clone/checkout") } if !subdirExists("subm-again", ".git") { t.Fatal("subm-again submodule does not exist on initial clone/checkout") } if !subdirExists("subm-again", "dep-test", ".git") { t.Fatal("dep-test submodule nested under subm-again does not exist on initial clone/checkout") } // Now switch to version with no submodules, make sure they all go away err = repo.UpdateVersion("e677f82015f72ac1c8fafa66b5463163b3597af2") if err != nil { t.Fatalf("checking out needed version failed with err: %s", dumplocal(err)) } if subdirExists("subm1") { t.Fatal("checking out version without submodule did not clean up immediate submodules") } if subdirExists("subm1", "dep-test") { t.Fatal("checking out version without submodule did not clean up nested submodules") } if subdirExists("subm-again") { t.Fatal("checking out version without submodule did not clean up immediate submodules") } if subdirExists("subm-again", "dep-test") { t.Fatal("checking out version without submodule did not clean up nested submodules") } err = repo.UpdateVersion("aaf7aa1bc4c3c682cc530eca8f80417088ee8540") if err != nil { t.Fatalf("checking out needed version failed with err: %s", dumplocal(err)) } if !subdirExists("subm1", ".git") { t.Fatal("checking out version with immediate submodule did not set up git subrepo") } err = repo.UpdateVersion("6cc4669af468f3b4f16e7e96275ad01ade5b522f") if err != nil { t.Fatalf("checking out needed version failed with err: %s", dumplocal(err)) } if !subdirExists("subm1", "dep-test", ".git") { t.Fatal("checking out version with nested submodule did not set up nested git subrepo") } err = repo.UpdateVersion("aaf7aa1bc4c3c682cc530eca8f80417088ee8540") if err != nil { t.Fatalf("checking out needed version failed with err: %s", dumplocal(err)) } if subdirExists("subm1", "dep-test") { t.Fatal("rolling back to version without nested submodule did not clean up the nested submodule") } err = repo.UpdateVersion("18e3a5f6fc7f6d577e732e7a5ab2caf990efbf8f") if err != nil { t.Fatalf("checking out needed version failed with err: %s", dumplocal(err)) } if !subdirExists("subm1", ".git") { t.Fatal("subm1 submodule does not exist after switch from other commit") } if !subdirExists("subm1", "dep-test", ".git") { t.Fatal("dep-test submodule nested under subm1 does not exist after switch from other commit") } if !subdirExists("subm-again", ".git") { t.Fatal("subm-again submodule does not exist after switch from other commit") } if !subdirExists("subm-again", "dep-test", ".git") { t.Fatal("dep-test submodule nested under subm-again does not exist after switch from other commit") } } func TestGitSubmoduleHandling2(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-git-submodule-tests2") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewGitRepo("https://github.com/cloudfoundry/sonde-go", tempDir+"/VCSTestRepo2") if err != nil { t.Error(err) } if repo.Vcs() != Git { t.Error("Git is detecting the wrong type") } // Check the basic getters. if repo.Remote() != "https://github.com/cloudfoundry/sonde-go" { t.Error("Remote not set properly") } if repo.LocalPath() != tempDir+"/VCSTestRepo2" { t.Error("Local disk location not set properly") } //Logger = log.New(os.Stdout, "", log.LstdFlags) // Do an initial clone. err = repo.Get() if err != nil { t.Errorf("Unable to clone Git repo. Err was %s", err) } // Verify Git repo is a Git repo if !repo.CheckLocal() { t.Error("Problem checking out repo or Git CheckLocal is not working") } // Test internal lookup mechanism used outside of Git specific functionality. ltype, err := DetectVcsFromFS(tempDir + "/VCSTestRepo2") if err != nil { t.Error("detectVcsFromFS unable to Git repo") } if ltype != Git { t.Errorf("detectVcsFromFS detected %s instead of Git type", ltype) } // Test NewRepo on existing checkout. This should simply provide a working // instance without error based on looking at the local directory. nrepo, nrerr := NewRepo("https://github.com/cloudfoundry/sonde-go", tempDir+"/VCSTestRepo2") if nrerr != nil { t.Error(nrerr) } // Verify the right oject is returned. It will check the local repo type. if !nrepo.CheckLocal() { t.Error("Wrong version returned from NewRepo") } // Perform an update. err = repo.Update() if err != nil { t.Error(err) } v, err := repo.Current() if err != nil { t.Errorf("Error trying Git Current: %s", err) } if v != "master" { t.Errorf("Current failed to detect Git on tip of master. Got version: %s", v) } tempDir2, err := ioutil.TempDir("", "go-vcs-git-tests-export") if err != nil { t.Fatalf("Error creating temp directory: %s", err) } defer func() { err = os.RemoveAll(tempDir2) if err != nil { t.Error(err) } }() exportDir := filepath.Join(tempDir2, "src") err = repo.ExportDir(exportDir) if err != nil { t.Errorf("Unable to export Git repo. Err was %s", err) } _, err = os.Stat(filepath.Join(exportDir, "README.md")) if err != nil { t.Errorf("Error checking exported file in Git: %s", err) } _, err = os.Stat(filepath.Join( filepath.Join(exportDir, "definitions"), "README.md")) if err != nil { t.Errorf("Error checking exported file in Git: %s", err) } _, err = os.Stat(filepath.Join(exportDir, string(repo.Vcs()))) if err != nil { if found := os.IsNotExist(err); !found { t.Errorf("Error checking exported metadata in Git: %s", err) } } else { t.Error("Error checking Git metadata. It exists.") } } dep-0.3.2/vendor/github.com/Masterminds/vcs/glide.yaml000066400000000000000000000003121317166637100226600ustar00rootroot00000000000000package: github.com/Masterminds/vcs homepage: https://github.com/Masterminds/vcs license: MIT owners: - name: Matt Farina email: matt@mattfarina.com homepage: https://www.mattfarina.com/ import: [] dep-0.3.2/vendor/github.com/Masterminds/vcs/hg.go000066400000000000000000000200441317166637100216410ustar00rootroot00000000000000package vcs import ( "encoding/xml" "os" "os/exec" "regexp" "strings" "time" ) var hgDetectURL = regexp.MustCompile("default = (?P.+)\n") // NewHgRepo creates a new instance of HgRepo. The remote and local directories // need to be passed in. func NewHgRepo(remote, local string) (*HgRepo, error) { ins := depInstalled("hg") if !ins { return nil, NewLocalError("hg is not installed", nil, "") } ltype, err := DetectVcsFromFS(local) // Found a VCS other than Hg. Need to report an error. if err == nil && ltype != Hg { return nil, ErrWrongVCS } r := &HgRepo{} r.setRemote(remote) r.setLocalPath(local) r.Logger = Logger // Make sure the local Hg repo is configured the same as the remote when // A remote value was passed in. if err == nil && r.CheckLocal() { // An Hg repo was found so test that the URL there matches // the repo passed in here. c := exec.Command("hg", "paths") c.Dir = local c.Env = envForDir(c.Dir) out, err := c.CombinedOutput() if err != nil { return nil, NewLocalError("Unable to retrieve local repo information", err, string(out)) } m := hgDetectURL.FindStringSubmatch(string(out)) if m[1] != "" && m[1] != remote { return nil, ErrWrongRemote } // If no remote was passed in but one is configured for the locally // checked out Hg repo use that one. if remote == "" && m[1] != "" { r.setRemote(m[1]) } } return r, nil } // HgRepo implements the Repo interface for the Mercurial source control. type HgRepo struct { base } // Vcs retrieves the underlying VCS being implemented. func (s HgRepo) Vcs() Type { return Hg } // Get is used to perform an initial clone of a repository. func (s *HgRepo) Get() error { out, err := s.run("hg", "clone", s.Remote(), s.LocalPath()) if err != nil { return NewRemoteError("Unable to get repository", err, string(out)) } return nil } // Init will initialize a mercurial repository at local location. func (s *HgRepo) Init() error { out, err := s.run("hg", "init", s.LocalPath()) if err != nil { return NewLocalError("Unable to initialize repository", err, string(out)) } return nil } // Update performs a Mercurial pull to an existing checkout. func (s *HgRepo) Update() error { return s.UpdateVersion(``) } // UpdateVersion sets the version of a package currently checked out via Hg. func (s *HgRepo) UpdateVersion(version string) error { out, err := s.RunFromDir("hg", "pull") if err != nil { return NewLocalError("Unable to update checked out version", err, string(out)) } if len(strings.TrimSpace(version)) > 0 { out, err = s.RunFromDir("hg", "update", version) } else { out, err = s.RunFromDir("hg", "update") } if err != nil { return NewLocalError("Unable to update checked out version", err, string(out)) } return nil } // Version retrieves the current version. func (s *HgRepo) Version() (string, error) { out, err := s.RunFromDir("hg", "--debug", "identify") if err != nil { return "", NewLocalError("Unable to retrieve checked out version", err, string(out)) } parts := strings.SplitN(string(out), " ", 2) sha := parts[0] return strings.TrimSpace(sha), nil } // Current returns the current version-ish. This means: // * Branch name if on the tip of the branch // * Tag if on a tag // * Otherwise a revision id func (s *HgRepo) Current() (string, error) { out, err := s.RunFromDir("hg", "branch") if err != nil { return "", err } branch := strings.TrimSpace(string(out)) tip, err := s.CommitInfo("max(branch(" + branch + "))") if err != nil { return "", err } curr, err := s.Version() if err != nil { return "", err } if tip.Commit == curr { return branch, nil } ts, err := s.TagsFromCommit(curr) if err != nil { return "", err } if len(ts) > 0 { return ts[0], nil } return curr, nil } // Date retrieves the date on the latest commit. func (s *HgRepo) Date() (time.Time, error) { version, err := s.Version() if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, "") } out, err := s.RunFromDir("hg", "log", "-r", version, "--template", "{date|isodatesec}") if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, string(out)) } t, err := time.Parse(longForm, string(out)) if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, string(out)) } return t, nil } // CheckLocal verifies the local location is a Git repo. func (s *HgRepo) CheckLocal() bool { if _, err := os.Stat(s.LocalPath() + "/.hg"); err == nil { return true } return false } // Branches returns a list of available branches func (s *HgRepo) Branches() ([]string, error) { out, err := s.RunFromDir("hg", "branches") if err != nil { return []string{}, NewLocalError("Unable to retrieve branches", err, string(out)) } branches := s.referenceList(string(out), `(?m-s)^(\S+)`) return branches, nil } // Tags returns a list of available tags func (s *HgRepo) Tags() ([]string, error) { out, err := s.RunFromDir("hg", "tags") if err != nil { return []string{}, NewLocalError("Unable to retrieve tags", err, string(out)) } tags := s.referenceList(string(out), `(?m-s)^(\S+)`) return tags, nil } // IsReference returns if a string is a reference. A reference can be a // commit id, branch, or tag. func (s *HgRepo) IsReference(r string) bool { _, err := s.RunFromDir("hg", "log", "-r", r) return err == nil } // IsDirty returns if the checkout has been modified from the checked // out reference. func (s *HgRepo) IsDirty() bool { out, err := s.RunFromDir("hg", "diff") return err != nil || len(out) != 0 } // CommitInfo retrieves metadata about a commit. func (s *HgRepo) CommitInfo(id string) (*CommitInfo, error) { out, err := s.RunFromDir("hg", "log", "-r", id, "--style=xml") if err != nil { return nil, ErrRevisionUnavailable } type Author struct { Name string `xml:",chardata"` Email string `xml:"email,attr"` } type Logentry struct { Node string `xml:"node,attr"` Author Author `xml:"author"` Date string `xml:"date"` Msg string `xml:"msg"` } type Log struct { XMLName xml.Name `xml:"log"` Logs []Logentry `xml:"logentry"` } logs := &Log{} err = xml.Unmarshal(out, &logs) if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } if len(logs.Logs) == 0 { return nil, ErrRevisionUnavailable } ci := &CommitInfo{ Commit: logs.Logs[0].Node, Author: logs.Logs[0].Author.Name + " <" + logs.Logs[0].Author.Email + ">", Message: logs.Logs[0].Msg, } if logs.Logs[0].Date != "" { ci.Date, err = time.Parse(time.RFC3339, logs.Logs[0].Date) if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } } return ci, nil } // TagsFromCommit retrieves tags from a commit id. func (s *HgRepo) TagsFromCommit(id string) ([]string, error) { // Hg has a single tag per commit. If a second tag is added to a commit a // new commit is created and the tag is attached to that new commit. out, err := s.RunFromDir("hg", "log", "-r", id, "--style=xml") if err != nil { return []string{}, NewLocalError("Unable to retrieve tags", err, string(out)) } type Logentry struct { Node string `xml:"node,attr"` Tag string `xml:"tag"` } type Log struct { XMLName xml.Name `xml:"log"` Logs []Logentry `xml:"logentry"` } logs := &Log{} err = xml.Unmarshal(out, &logs) if err != nil { return []string{}, NewLocalError("Unable to retrieve tags", err, string(out)) } if len(logs.Logs) == 0 { return []string{}, NewLocalError("Unable to retrieve tags", err, string(out)) } t := strings.TrimSpace(logs.Logs[0].Tag) if t != "" { return []string{t}, nil } return []string{}, nil } // Ping returns if remote location is accessible. func (s *HgRepo) Ping() bool { _, err := s.run("hg", "identify", s.Remote()) return err == nil } // ExportDir exports the current revision to the passed in directory. func (s *HgRepo) ExportDir(dir string) error { out, err := s.RunFromDir("hg", "archive", dir) s.log(out) if err != nil { return NewLocalError("Unable to export source", err, string(out)) } return nil } dep-0.3.2/vendor/github.com/Masterminds/vcs/hg_test.go000066400000000000000000000167231317166637100227110ustar00rootroot00000000000000package vcs import ( "io/ioutil" "path/filepath" "strings" "time" //"log" "os" "testing" ) // Canary test to ensure HgRepo implements the Repo interface. var _ Repo = &HgRepo{} // To verify hg is working we perform integration testing // with a known hg service. func TestHg(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-hg-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewHgRepo("https://bitbucket.org/mattfarina/testhgrepo", tempDir+"/testhgrepo") if err != nil { t.Error(err) } if repo.Vcs() != Hg { t.Error("Hg is detecting the wrong type") } // Check the basic getters. if repo.Remote() != "https://bitbucket.org/mattfarina/testhgrepo" { t.Error("Remote not set properly") } if repo.LocalPath() != tempDir+"/testhgrepo" { t.Error("Local disk location not set properly") } //Logger = log.New(os.Stdout, "", log.LstdFlags) // Do an initial clone. err = repo.Get() if err != nil { t.Errorf("Unable to clone Hg repo. Err was %s", err) } // Verify Hg repo is a Hg repo if !repo.CheckLocal() { t.Error("Problem checking out repo or Hg CheckLocal is not working") } // Test internal lookup mechanism used outside of Hg specific functionality. ltype, err := DetectVcsFromFS(tempDir + "/testhgrepo") if err != nil { t.Error("detectVcsFromFS unable to Hg repo") } if ltype != Hg { t.Errorf("detectVcsFromFS detected %s instead of Hg type", ltype) } // Test NewRepo on existing checkout. This should simply provide a working // instance without error based on looking at the local directory. nrepo, nrerr := NewRepo("https://bitbucket.org/mattfarina/testhgrepo", tempDir+"/testhgrepo") if nrerr != nil { t.Error(nrerr) } // Verify the right oject is returned. It will check the local repo type. if !nrepo.CheckLocal() { t.Error("Wrong version returned from NewRepo") } v, err := repo.Current() if err != nil { t.Errorf("Error trying Hg Current: %s", err) } if v != "default" { t.Errorf("Current failed to detect Hg on tip of default. Got version: %s", v) } // Set the version using the short hash. err = repo.UpdateVersion("a5494ba2177f") if err != nil { t.Errorf("Unable to update Hg repo version. Err was %s", err) } // Use Version to verify we are on the right version. v, err = repo.Version() if v != "a5494ba2177ff9ef26feb3c155dfecc350b1a8ef" { t.Errorf("Error checking checked out Hg version: %s", v) } if err != nil { t.Error(err) } v, err = repo.Current() if err != nil { t.Errorf("Error trying Hg Current for ref: %s", err) } if v != "a5494ba2177ff9ef26feb3c155dfecc350b1a8ef" { t.Errorf("Current failed to detect Hg on ref of branch. Got version: %s", v) } // Use Date to verify we are on the right commit. d, err := repo.Date() if err != nil { t.Error(err) } if d.Format(longForm) != "2015-07-30 16:14:08 -0400" { t.Error("Error checking checked out Hg commit date. Got wrong date:", d) } // Perform an update. err = repo.Update() if err != nil { t.Error(err) } v, err = repo.Version() if v != "9c6ccbca73e8a1351c834f33f57f1f7a0329ad35" { t.Errorf("Error checking checked out Hg version: %s", v) } if err != nil { t.Error(err) } tags, err := repo.Tags() if err != nil { t.Error(err) } if tags[1] != "1.0.0" { t.Error("Hg tags is not reporting the correct version") } tags, err = repo.TagsFromCommit("a5494ba2177f") if err != nil { t.Error(err) } if len(tags) != 0 { t.Error("Hg is incorrectly returning tags for a commit") } tags, err = repo.TagsFromCommit("d680e82228d2") if err != nil { t.Error(err) } if len(tags) != 1 || tags[0] != "1.0.0" { t.Error("Hg is incorrectly returning tags for a commit") } branches, err := repo.Branches() if err != nil { t.Error(err) } // The branches should be HEAD, master, and test. if branches[0] != "test" { t.Error("Hg is incorrectly returning branches") } if !repo.IsReference("1.0.0") { t.Error("Hg is reporting a reference is not one") } if !repo.IsReference("test") { t.Error("Hg is reporting a reference is not one") } if repo.IsReference("foo") { t.Error("Hg is reporting a non-existent reference is one") } if repo.IsDirty() { t.Error("Hg incorrectly reporting dirty") } ci, err := repo.CommitInfo("a5494ba2177f") if err != nil { t.Error(err) } if ci.Commit != "a5494ba2177ff9ef26feb3c155dfecc350b1a8ef" { t.Error("Hg.CommitInfo wrong commit id") } if ci.Author != "Matt Farina " { t.Error("Hg.CommitInfo wrong author") } if ci.Message != "A commit" { t.Error("Hg.CommitInfo wrong message") } ti := time.Unix(1438287248, 0) if !ti.Equal(ci.Date) { t.Error("Hg.CommitInfo wrong date") } _, err = repo.CommitInfo("asdfasdfasdf") if err != ErrRevisionUnavailable { t.Error("Hg didn't return expected ErrRevisionUnavailable") } tempDir2, err := ioutil.TempDir("", "go-vcs-hg-tests-export") if err != nil { t.Fatalf("Error creating temp directory: %s", err) } defer func() { err = os.RemoveAll(tempDir2) if err != nil { t.Error(err) } }() exportDir := filepath.Join(tempDir2, "src") err = repo.ExportDir(exportDir) if err != nil { t.Errorf("Unable to export Hg repo. Err was %s", err) } _, err = os.Stat(filepath.Join(exportDir, "Readme.md")) if err != nil { t.Errorf("Error checking exported file in Hg: %s", err) } _, err = os.Stat(filepath.Join(exportDir, string(repo.Vcs()))) if err != nil { if found := os.IsNotExist(err); !found { t.Errorf("Error checking exported metadata in Hg: %s", err) } } else { t.Error("Error checking Hg metadata. It exists.") } } func TestHgCheckLocal(t *testing.T) { // Verify repo.CheckLocal fails for non-Hg directories. // TestHg is already checking on a valid repo tempDir, err := ioutil.TempDir("", "go-vcs-hg-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, _ := NewHgRepo("", tempDir) if repo.CheckLocal() { t.Error("Hg CheckLocal does not identify non-Hg location") } // Test NewRepo when there's no local. This should simply provide a working // instance without error based on looking at the remote localtion. _, nrerr := NewRepo("https://bitbucket.org/mattfarina/testhgrepo", tempDir+"/testhgrepo") if nrerr != nil { t.Error(nrerr) } } func TestHgPing(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-hg-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewHgRepo("https://bitbucket.org/mattfarina/testhgrepo", tempDir) if err != nil { t.Error(err) } ping := repo.Ping() if !ping { t.Error("Hg unable to ping working repo") } repo, err = NewHgRepo("https://bitbucket.org/mattfarina/ihopethisneverexistsbecauseitshouldnt", tempDir) if err != nil { t.Error(err) } ping = repo.Ping() if ping { t.Error("Hg got a ping response from when it should not have") } } func TestHgInit(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-hg-tests") repoDir := tempDir + "/repo" if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewHgRepo(repoDir, repoDir) if err != nil { t.Error(err) } err = repo.Init() if err != nil { t.Error(err) } v, err := repo.Version() if err != nil { t.Error(err) } if !strings.HasPrefix(v, "000000") { t.Errorf("Hg Init reporting wrong initial version: %s", v) } } dep-0.3.2/vendor/github.com/Masterminds/vcs/repo.go000066400000000000000000000167101317166637100222150ustar00rootroot00000000000000// Package vcs provides the ability to work with varying version control systems // (VCS), also known as source control systems (SCM) though the same interface. // // This package includes a function that attempts to detect the repo type from // the remote URL and return the proper type. For example, // // remote := "https://github.com/Masterminds/vcs" // local, _ := ioutil.TempDir("", "go-vcs") // repo, err := NewRepo(remote, local) // // In this case repo will be a GitRepo instance. NewRepo can detect the VCS for // numerous popular VCS and from the URL. For example, a URL ending in .git // that's not from one of the popular VCS will be detected as a Git repo and // the correct type will be returned. // // If you know the repository type and would like to create an instance of a // specific type you can use one of constructors for a type. They are NewGitRepo, // NewSvnRepo, NewBzrRepo, and NewHgRepo. The definition and usage is the same // as NewRepo. // // Once you have an object implementing the Repo interface the operations are // the same no matter which VCS you're using. There are some caveats. For // example, each VCS has its own version formats that need to be respected and // checkout out branches, if a branch is being worked with, is different in // each VCS. package vcs import ( "fmt" "io/ioutil" "log" "os" "os/exec" "regexp" "strings" "time" ) // Logger is where you can provide a logger, implementing the log.Logger interface, // where verbose output from each VCS will be written. The default logger does // not log data. To log data supply your own logger or change the output location // of the provided logger. var Logger *log.Logger func init() { // Initialize the logger to one that does not actually log anywhere. This is // to be overridden by the package user by setting vcs.Logger to a different // logger. Logger = log.New(ioutil.Discard, "go-vcs", log.LstdFlags) } const longForm = "2006-01-02 15:04:05 -0700" // Type describes the type of VCS type Type string // VCS types const ( NoVCS Type = "" Git Type = "git" Svn Type = "svn" Bzr Type = "bzr" Hg Type = "hg" ) // Repo provides an interface to work with repositories using different source // control systems such as Git, Bzr, Mercurial, and SVN. For implementations // of this interface see BzrRepo, GitRepo, HgRepo, and SvnRepo. type Repo interface { // Vcs retrieves the underlying VCS being implemented. Vcs() Type // Remote retrieves the remote location for a repo. Remote() string // LocalPath retrieves the local file system location for a repo. LocalPath() string // Get is used to perform an initial clone/checkout of a repository. Get() error // Initializes a new repository locally. Init() error // Update performs an update to an existing checkout of a repository. Update() error // UpdateVersion sets the version of a package of a repository. UpdateVersion(string) error // Version retrieves the current version. Version() (string, error) // Current retrieves the current version-ish. This is different from the // Version method. The output could be a branch name if on the tip of a // branch (git), a tag if on a tag, a revision if on a specific revision // that's not the tip of the branch. The values here vary based on the VCS. Current() (string, error) // Date retrieves the date on the latest commit. Date() (time.Time, error) // CheckLocal verifies the local location is of the correct VCS type CheckLocal() bool // Branches returns a list of available branches on the repository. Branches() ([]string, error) // Tags returns a list of available tags on the repository. Tags() ([]string, error) // IsReference returns if a string is a reference. A reference can be a // commit id, branch, or tag. IsReference(string) bool // IsDirty returns if the checkout has been modified from the checked // out reference. IsDirty() bool // CommitInfo retrieves metadata about a commit. CommitInfo(string) (*CommitInfo, error) // TagsFromCommit retrieves tags from a commit id. TagsFromCommit(string) ([]string, error) // Ping returns if remote location is accessible. Ping() bool // RunFromDir executes a command from repo's directory. RunFromDir(cmd string, args ...string) ([]byte, error) // CmdFromDir creates a new command that will be executed from repo's // directory. CmdFromDir(cmd string, args ...string) *exec.Cmd // ExportDir exports the current revision to the passed in directory. ExportDir(string) error } // NewRepo returns a Repo based on trying to detect the source control from the // remote and local locations. The appropriate implementation will be returned // or an ErrCannotDetectVCS if the VCS type cannot be detected. // Note, this function may make calls to the Internet to determind help determine // the VCS. func NewRepo(remote, local string) (Repo, error) { vtype, remote, err := detectVcsFromRemote(remote) // From the remote URL the VCS could not be detected. See if the local // repo contains enough information to figure out the VCS. The reason the // local repo is not checked first is because of the potential for VCS type // switches which will be detected in each of the type builders. if err == ErrCannotDetectVCS { vtype, err = DetectVcsFromFS(local) } if err != nil { return nil, err } switch vtype { case Git: return NewGitRepo(remote, local) case Svn: return NewSvnRepo(remote, local) case Hg: return NewHgRepo(remote, local) case Bzr: return NewBzrRepo(remote, local) } // Should never fall through to here but just in case. return nil, ErrCannotDetectVCS } // CommitInfo contains metadata about a commit. type CommitInfo struct { // The commit id Commit string // Who authored the commit Author string // Date of the commit Date time.Time // Commit message Message string } type base struct { remote, local string Logger *log.Logger } func (b *base) log(v interface{}) { b.Logger.Printf("%s", v) } // Remote retrieves the remote location for a repo. func (b *base) Remote() string { return b.remote } // LocalPath retrieves the local file system location for a repo. func (b *base) LocalPath() string { return b.local } func (b *base) setRemote(remote string) { b.remote = remote } func (b *base) setLocalPath(local string) { b.local = local } func (b base) run(cmd string, args ...string) ([]byte, error) { out, err := exec.Command(cmd, args...).CombinedOutput() b.log(out) if err != nil { err = fmt.Errorf("%s: %s", out, err) } return out, err } func (b *base) CmdFromDir(cmd string, args ...string) *exec.Cmd { c := exec.Command(cmd, args...) c.Dir = b.local c.Env = envForDir(c.Dir) return c } func (b *base) RunFromDir(cmd string, args ...string) ([]byte, error) { c := b.CmdFromDir(cmd, args...) out, err := c.CombinedOutput() return out, err } func (b *base) referenceList(c, r string) []string { var out []string re := regexp.MustCompile(r) for _, m := range re.FindAllStringSubmatch(c, -1) { out = append(out, m[1]) } return out } func envForDir(dir string) []string { env := os.Environ() return mergeEnvLists([]string{"PWD=" + dir}, env) } func mergeEnvLists(in, out []string) []string { NextVar: for _, inkv := range in { k := strings.SplitAfterN(inkv, "=", 2)[0] for i, outkv := range out { if strings.HasPrefix(outkv, k) { out[i] = inkv continue NextVar } } out = append(out, inkv) } return out } func depInstalled(name string) bool { if _, err := exec.LookPath(name); err != nil { return false } return true } dep-0.3.2/vendor/github.com/Masterminds/vcs/repo_test.go000066400000000000000000000032351317166637100232520ustar00rootroot00000000000000package vcs import ( "fmt" "io/ioutil" "os" "testing" ) func ExampleNewRepo() { remote := "https://github.com/Masterminds/vcs" local, _ := ioutil.TempDir("", "go-vcs") repo, _ := NewRepo(remote, local) // Returns: instance of GitRepo repo.Vcs() // Returns Git as this is a Git repo err := repo.Get() // Pulls down a repo, or a checkout in the case of SVN, and returns an // error if that didn't happen successfully. if err != nil { fmt.Println(err) } err = repo.UpdateVersion("master") // Checkouts out a specific version. In most cases this can be a commit id, // branch, or tag. if err != nil { fmt.Println(err) } } func TestTypeSwitch(t *testing.T) { // To test repo type switching we checkout as SVN and then try to get it as // a git repo afterwards. tempDir, err := ioutil.TempDir("", "go-vcs-svn-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewSvnRepo("https://github.com/Masterminds/VCSTestRepo/trunk", tempDir+string(os.PathSeparator)+"VCSTestRepo") if err != nil { t.Error(err) } err = repo.Get() if err != nil { t.Errorf("Unable to checkout SVN repo for repo switching tests. Err was %s", err) } _, err = NewRepo("https://github.com/Masterminds/VCSTestRepo", tempDir+string(os.PathSeparator)+"VCSTestRepo") if err != ErrWrongVCS { t.Errorf("Not detecting repo switch from SVN to Git") } } func TestDepInstalled(t *testing.T) { i := depInstalled("git") if !i { t.Error("depInstalled not finding installed dep.") } i = depInstalled("thisreallyisntinstalled") if i { t.Error("depInstalled finding not installed dep.") } } dep-0.3.2/vendor/github.com/Masterminds/vcs/svn.go000066400000000000000000000257511317166637100220630ustar00rootroot00000000000000package vcs import ( "encoding/xml" "fmt" "os" "os/exec" "path/filepath" "runtime" "strings" "time" ) // NewSvnRepo creates a new instance of SvnRepo. The remote and local directories // need to be passed in. The remote location should include the branch for SVN. // For example, if the package is https://github.com/Masterminds/cookoo/ the remote // should be https://github.com/Masterminds/cookoo/trunk for the trunk branch. func NewSvnRepo(remote, local string) (*SvnRepo, error) { ins := depInstalled("svn") if !ins { return nil, NewLocalError("svn is not installed", nil, "") } ltype, err := DetectVcsFromFS(local) // Found a VCS other than Svn. Need to report an error. if err == nil && ltype != Svn { return nil, ErrWrongVCS } r := &SvnRepo{} r.setRemote(remote) r.setLocalPath(local) r.Logger = Logger // Make sure the local SVN repo is configured the same as the remote when // A remote value was passed in. if err == nil && r.CheckLocal() { // An SVN repo was found so test that the URL there matches // the repo passed in here. out, err := exec.Command("svn", "info", local).CombinedOutput() if err != nil { return nil, NewLocalError("Unable to retrieve local repo information", err, string(out)) } detectedRemote, err := detectRemoteFromInfoCommand(string(out)) if err != nil { return nil, NewLocalError("Unable to retrieve local repo information", err, string(out)) } if detectedRemote != "" && remote != "" && detectedRemote != remote { return nil, ErrWrongRemote } // If no remote was passed in but one is configured for the locally // checked out Svn repo use that one. if remote == "" && detectedRemote != "" { r.setRemote(detectedRemote) } } return r, nil } // SvnRepo implements the Repo interface for the Svn source control. type SvnRepo struct { base } // Vcs retrieves the underlying VCS being implemented. func (s SvnRepo) Vcs() Type { return Svn } // Get is used to perform an initial checkout of a repository. // Note, because SVN isn't distributed this is a checkout without // a clone. func (s *SvnRepo) Get() error { remote := s.Remote() if strings.HasPrefix(remote, "/") { remote = "file://" + remote } else if runtime.GOOS == "windows" && filepath.VolumeName(remote) != "" { remote = "file:///" + remote } out, err := s.run("svn", "checkout", remote, s.LocalPath()) if err != nil { return NewRemoteError("Unable to get repository", err, string(out)) } return nil } // Init will create a svn repository at remote location. func (s *SvnRepo) Init() error { out, err := s.run("svnadmin", "create", s.Remote()) if err != nil && s.isUnableToCreateDir(err) { basePath := filepath.Dir(filepath.FromSlash(s.Remote())) if _, err := os.Stat(basePath); os.IsNotExist(err) { err = os.MkdirAll(basePath, 0755) if err != nil { return NewLocalError("Unable to initialize repository", err, "") } out, err = s.run("svnadmin", "create", s.Remote()) if err != nil { return NewLocalError("Unable to initialize repository", err, string(out)) } return nil } } else if err != nil { return NewLocalError("Unable to initialize repository", err, string(out)) } return nil } // Update performs an SVN update to an existing checkout. func (s *SvnRepo) Update() error { out, err := s.RunFromDir("svn", "update") if err != nil { return NewRemoteError("Unable to update repository", err, string(out)) } return err } // UpdateVersion sets the version of a package currently checked out via SVN. func (s *SvnRepo) UpdateVersion(version string) error { out, err := s.RunFromDir("svn", "update", "-r", version) if err != nil { return NewRemoteError("Unable to update checked out version", err, string(out)) } return nil } // Version retrieves the current version. func (s *SvnRepo) Version() (string, error) { type Commit struct { Revision string `xml:"revision,attr"` } type Info struct { Commit Commit `xml:"entry>commit"` } out, err := s.RunFromDir("svn", "info", "--xml") if err != nil { return "", NewLocalError("Unable to retrieve checked out version", err, string(out)) } s.log(out) infos := &Info{} err = xml.Unmarshal(out, &infos) if err != nil { return "", NewLocalError("Unable to retrieve checked out version", err, string(out)) } return infos.Commit.Revision, nil } // Current returns the current version-ish. This means: // * HEAD if on the tip. // * Otherwise a revision id func (s *SvnRepo) Current() (string, error) { tip, err := s.CommitInfo("HEAD") if err != nil { return "", err } curr, err := s.Version() if err != nil { return "", err } if tip.Commit == curr { return "HEAD", nil } return curr, nil } // Date retrieves the date on the latest commit. func (s *SvnRepo) Date() (time.Time, error) { version, err := s.Version() if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, "") } out, err := s.RunFromDir("svn", "pget", "svn:date", "--revprop", "-r", version) if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, string(out)) } const longForm = "2006-01-02T15:04:05.000000Z" t, err := time.Parse(longForm, strings.TrimSpace(string(out))) if err != nil { return time.Time{}, NewLocalError("Unable to retrieve revision date", err, string(out)) } return t, nil } // CheckLocal verifies the local location is an SVN repo. func (s *SvnRepo) CheckLocal() bool { pth, err := filepath.Abs(s.LocalPath()) if err != nil { s.log(err.Error()) return false } if _, err := os.Stat(filepath.Join(pth, ".svn")); err == nil { return true } oldpth := pth for oldpth != pth { pth = filepath.Dir(pth) if _, err := os.Stat(filepath.Join(pth, ".svn")); err == nil { return true } } return false } // Tags returns []string{} as there are no formal tags in SVN. Tags are a // convention in SVN. They are typically implemented as a copy of the trunk and // placed in the /tags/[tag name] directory. Since this is a convention the // expectation is to checkout a tag the correct subdirectory will be used // as the path. For more information see: // http://svnbook.red-bean.com/en/1.7/svn.branchmerge.tags.html func (s *SvnRepo) Tags() ([]string, error) { return []string{}, nil } // Branches returns []string{} as there are no formal branches in SVN. Branches // are a convention. They are typically implemented as a copy of the trunk and // placed in the /branches/[tag name] directory. Since this is a convention the // expectation is to checkout a branch the correct subdirectory will be used // as the path. For more information see: // http://svnbook.red-bean.com/en/1.7/svn.branchmerge.using.html func (s *SvnRepo) Branches() ([]string, error) { return []string{}, nil } // IsReference returns if a string is a reference. A reference is a commit id. // Branches and tags are part of the path. func (s *SvnRepo) IsReference(r string) bool { out, err := s.RunFromDir("svn", "log", "-r", r) // This is a complete hack. There must be a better way to do this. Pull // requests welcome. When the reference isn't real you get a line of // repeated - followed by an empty line. If the reference is real there // is commit information in addition to those. So, we look for responses // over 2 lines long. lines := strings.Split(string(out), "\n") if err == nil && len(lines) > 2 { return true } return false } // IsDirty returns if the checkout has been modified from the checked // out reference. func (s *SvnRepo) IsDirty() bool { out, err := s.RunFromDir("svn", "diff") return err != nil || len(out) != 0 } // CommitInfo retrieves metadata about a commit. func (s *SvnRepo) CommitInfo(id string) (*CommitInfo, error) { // There are cases where Svn log doesn't return anything for HEAD or BASE. // svn info does provide details for these but does not have elements like // the commit message. if id == "HEAD" || id == "BASE" { type Commit struct { Revision string `xml:"revision,attr"` } type Info struct { Commit Commit `xml:"entry>commit"` } out, err := s.RunFromDir("svn", "info", "-r", id, "--xml") if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } infos := &Info{} err = xml.Unmarshal(out, &infos) if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } id = infos.Commit.Revision if id == "" { return nil, ErrRevisionUnavailable } } out, err := s.RunFromDir("svn", "log", "-r", id, "--xml") if err != nil { return nil, NewRemoteError("Unable to retrieve commit information", err, string(out)) } type Logentry struct { Author string `xml:"author"` Date string `xml:"date"` Msg string `xml:"msg"` } type Log struct { XMLName xml.Name `xml:"log"` Logs []Logentry `xml:"logentry"` } logs := &Log{} err = xml.Unmarshal(out, &logs) if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } if len(logs.Logs) == 0 { return nil, ErrRevisionUnavailable } ci := &CommitInfo{ Commit: id, Author: logs.Logs[0].Author, Message: logs.Logs[0].Msg, } if len(logs.Logs[0].Date) > 0 { ci.Date, err = time.Parse(time.RFC3339Nano, logs.Logs[0].Date) if err != nil { return nil, NewLocalError("Unable to retrieve commit information", err, string(out)) } } return ci, nil } // TagsFromCommit retrieves tags from a commit id. func (s *SvnRepo) TagsFromCommit(id string) ([]string, error) { // Svn tags are a convention implemented as paths. See the details on the // Tag() method for more information. return []string{}, nil } // Ping returns if remote location is accessible. func (s *SvnRepo) Ping() bool { _, err := s.run("svn", "--non-interactive", "info", s.Remote()) return err == nil } // ExportDir exports the current revision to the passed in directory. func (s *SvnRepo) ExportDir(dir string) error { out, err := s.RunFromDir("svn", "export", ".", dir) s.log(out) if err != nil { return NewLocalError("Unable to export source", err, string(out)) } return nil } // isUnableToCreateDir checks for an error in Init() to see if an error // where the parent directory of the VCS local path doesn't exist. func (s *SvnRepo) isUnableToCreateDir(err error) bool { msg := err.Error() return strings.HasPrefix(msg, "E000002") } // detectRemoteFromInfoCommand finds the remote url from the `svn info` // command's output without using a regex. We avoid regex because URLs // are notoriously complex to accurately match with a regex and // splitting strings is less complex and often faster func detectRemoteFromInfoCommand(infoOut string) (string, error) { sBytes := []byte(infoOut) urlIndex := strings.Index(infoOut, "URL: ") if urlIndex == -1 { return "", fmt.Errorf("Remote not specified in svn info") } urlEndIndex := strings.Index(string(sBytes[urlIndex:]), "\n") if urlEndIndex == -1 { urlEndIndex = strings.Index(string(sBytes[urlIndex:]), "\r") if urlEndIndex == -1 { return "", fmt.Errorf("Unable to parse remote URL for svn info") } } return string(sBytes[(urlIndex + 5):(urlIndex + urlEndIndex)]), nil } dep-0.3.2/vendor/github.com/Masterminds/vcs/svn_test.go000066400000000000000000000175131317166637100231170ustar00rootroot00000000000000package vcs import ( "io/ioutil" "path/filepath" "time" //"log" "os" "testing" ) // To verify svn is working we perform integration testing // with a known svn service. // Canary test to ensure SvnRepo implements the Repo interface. var _ Repo = &SvnRepo{} func TestSvn(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-svn-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewSvnRepo("https://github.com/Masterminds/VCSTestRepo/trunk", tempDir+string(os.PathSeparator)+"VCSTestRepo") if err != nil { t.Error(err) } if repo.Vcs() != Svn { t.Error("Svn is detecting the wrong type") } // Check the basic getters. if repo.Remote() != "https://github.com/Masterminds/VCSTestRepo/trunk" { t.Error("Remote not set properly") } if repo.LocalPath() != tempDir+string(os.PathSeparator)+"VCSTestRepo" { t.Error("Local disk location not set properly") } //Logger = log.New(os.Stdout, "", log.LstdFlags) // Do an initial checkout. err = repo.Get() if err != nil { t.Errorf("Unable to checkout SVN repo. Err was %s", err) } // Verify SVN repo is a SVN repo if !repo.CheckLocal() { t.Error("Problem checking out repo or SVN CheckLocal is not working") } // Verify an incorrect remote is caught when NewSvnRepo is used on an existing location _, nrerr := NewSvnRepo("https://github.com/Masterminds/VCSTestRepo/unknownbranch", tempDir+"/VCSTestRepo") if nrerr != ErrWrongRemote { t.Error("ErrWrongRemote was not triggered for SVN") } // Test internal lookup mechanism used outside of Hg specific functionality. ltype, err := DetectVcsFromFS(tempDir + "/VCSTestRepo") if err != nil { t.Error("detectVcsFromFS unable to Svn repo") } if ltype != Svn { t.Errorf("detectVcsFromFS detected %s instead of Svn type", ltype) } // Commenting out auto-detection tests for SVN. NewRepo automatically detects // GitHub to be a Git repo and that's an issue for this test. Need an // SVN host that can autodetect from before using this test again. // // Test NewRepo on existing checkout. This should simply provide a working // instance without error based on looking at the local directory. // nrepo, nrerr := NewRepo("https://github.com/Masterminds/VCSTestRepo/trunk", tempDir+"/VCSTestRepo") // if nrerr != nil { // t.Error(nrerr) // } // // Verify the right oject is returned. It will check the local repo type. // if nrepo.CheckLocal() == false { // t.Error("Wrong version returned from NewRepo") // } v, err := repo.Current() if err != nil { t.Errorf("Error trying Svn Current: %s", err) } if v != "HEAD" { t.Errorf("Current failed to detect Svn on HEAD. Got version: %s", v) } // Update the version to a previous version. err = repo.UpdateVersion("r2") if err != nil { t.Errorf("Unable to update SVN repo version. Err was %s", err) } // Use Version to verify we are on the right version. v, err = repo.Version() if v != "2" { t.Error("Error checking checked SVN out version") } if err != nil { t.Error(err) } v, err = repo.Current() if err != nil { t.Errorf("Error trying Svn Current for ref: %s", err) } if v != "2" { t.Errorf("Current failed to detect Svn on HEAD. Got version: %s", v) } // Perform an update which should take up back to the latest version. err = repo.Update() if err != nil { t.Error(err) } // Make sure we are on a newer version because of the update. v, err = repo.Version() if v == "2" { t.Error("Error with version. Still on old version. Update failed") } if err != nil { t.Error(err) } // Use Date to verify we are on the right commit. d, err := repo.Date() if d.Format(longForm) != "2015-07-29 13:47:03 +0000" { t.Error("Error checking checked out Svn commit date") } if err != nil { t.Error(err) } tags, err := repo.Tags() if err != nil { t.Error(err) } if len(tags) != 0 { t.Error("Svn is incorrectly returning tags") } tags, err = repo.TagsFromCommit("2") if err != nil { t.Error(err) } if len(tags) != 0 { t.Error("Svn is incorrectly returning tags for a commit") } branches, err := repo.Branches() if err != nil { t.Error(err) } if len(branches) != 0 { t.Error("Svn is incorrectly returning branches") } if !repo.IsReference("r4") { t.Error("Svn is reporting a reference is not one") } if repo.IsReference("55") { t.Error("Svn is reporting a non-existent reference is one") } if repo.IsDirty() { t.Error("Svn incorrectly reporting dirty") } ci, err := repo.CommitInfo("2") if err != nil { t.Error(err) } if ci.Commit != "2" { t.Error("Svn.CommitInfo wrong commit id") } if ci.Author != "matt.farina" { t.Error("Svn.CommitInfo wrong author") } if ci.Message != "Update README.md" { t.Error("Svn.CommitInfo wrong message") } ti, err := time.Parse(time.RFC3339Nano, "2015-07-29T13:46:20.000000Z") if err != nil { t.Error(err) } if !ti.Equal(ci.Date) { t.Error("Svn.CommitInfo wrong date") } _, err = repo.CommitInfo("555555555") if err != ErrRevisionUnavailable { t.Error("Svn didn't return expected ErrRevisionUnavailable") } tempDir2, err := ioutil.TempDir("", "go-vcs-svn-tests-export") if err != nil { t.Fatalf("Error creating temp directory: %s", err) } defer func() { err = os.RemoveAll(tempDir2) if err != nil { t.Error(err) } }() exportDir := filepath.Join(tempDir2, "src") err = repo.ExportDir(exportDir) if err != nil { t.Errorf("Unable to export Svn repo. Err was %s", err) } _, err = os.Stat(filepath.Join(exportDir, "README.md")) if err != nil { t.Errorf("Error checking exported file in Svn: %s", err) } _, err = os.Stat(filepath.Join(exportDir, string(repo.Vcs()))) if err != nil { if found := os.IsNotExist(err); !found { t.Errorf("Error checking exported metadata in Svn: %s", err) } } else { t.Error("Error checking Svn metadata. It exists.") } } func TestSvnCheckLocal(t *testing.T) { // Verify repo.CheckLocal fails for non-SVN directories. // TestSvn is already checking on a valid repo tempDir, err := ioutil.TempDir("", "go-vcs-svn-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, _ := NewSvnRepo("", tempDir) if repo.CheckLocal() { t.Error("SVN CheckLocal does not identify non-SVN location") } // Test NewRepo when there's no local. This should simply provide a working // instance without error based on looking at the remote localtion. _, nrerr := NewRepo("https://github.com/Masterminds/VCSTestRepo/trunk", tempDir+"/VCSTestRepo") if nrerr != nil { t.Error(nrerr) } } func TestSvnPing(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-svn-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewSvnRepo("https://github.com/Masterminds/VCSTestRepo/trunk", tempDir) if err != nil { t.Error(err) } ping := repo.Ping() if !ping { t.Error("Svn unable to ping working repo") } repo, err = NewSvnRepo("https://github.com/Masterminds/ihopethisneverexistsbecauseitshouldnt", tempDir) if err != nil { t.Error(err) } ping = repo.Ping() if ping { t.Error("Svn got a ping response from when it should not have") } } func TestSvnInit(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-svn-tests") remoteDir := tempDir + string(os.PathSeparator) + "remoteDir" localDir := tempDir + string(os.PathSeparator) + "localDir" if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() repo, err := NewSvnRepo(remoteDir, localDir) if err != nil { t.Error(err) } err = repo.Init() if err != nil { t.Error(err) } err = repo.Get() if err != nil { t.Error(err) } v, err := repo.Version() if err != nil { t.Error(err) } if v != "0" { t.Errorf("Svn Init returns wrong version: %s", v) } } dep-0.3.2/vendor/github.com/Masterminds/vcs/vcs_local_lookup.go000066400000000000000000000024131317166637100246010ustar00rootroot00000000000000package vcs import ( "os" "runtime" "strings" ) // DetectVcsFromFS detects the type from the local path. // Is there a better way to do this? func DetectVcsFromFS(vcsPath string) (Type, error) { // There are cases under windows that a path could start with a / and it needs // to be stripped. For example, a path such as /C:\foio\bar. if runtime.GOOS == "windows" && strings.HasPrefix(vcsPath, "/") { vcsPath = strings.TrimPrefix(vcsPath, "/") } // When the local directory to the package doesn't exist // it's not yet downloaded so we can't detect the type // locally. if _, err := os.Stat(vcsPath); os.IsNotExist(err) { return "", ErrCannotDetectVCS } separator := string(os.PathSeparator) // Walk through each of the different VCS types to see if // one can be detected. Do this is order of guessed popularity. if _, err := os.Stat(vcsPath + separator + ".git"); err == nil { return Git, nil } if _, err := os.Stat(vcsPath + separator + ".svn"); err == nil { return Svn, nil } if _, err := os.Stat(vcsPath + separator + ".hg"); err == nil { return Hg, nil } if _, err := os.Stat(vcsPath + separator + ".bzr"); err == nil { return Bzr, nil } // If one was not already detected than we default to not finding it. return "", ErrCannotDetectVCS } dep-0.3.2/vendor/github.com/Masterminds/vcs/vcs_remote_lookup.go000066400000000000000000000221611317166637100250040ustar00rootroot00000000000000package vcs import ( "encoding/json" "encoding/xml" "fmt" "io" "io/ioutil" "net/http" "net/url" "regexp" "strings" ) type vcsInfo struct { host string pattern string vcs Type addCheck func(m map[string]string, u *url.URL) (Type, error) regex *regexp.Regexp } // scpSyntaxRe matches the SCP-like addresses used by Git to access // repositories by SSH. var scpSyntaxRe = regexp.MustCompile(`^([a-zA-Z0-9_]+)@([a-zA-Z0-9._-]+):(.*)$`) var vcsList = []*vcsInfo{ { host: "github.com", vcs: Git, pattern: `^(github\.com[/|:][A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(/[A-Za-z0-9_.\-]+)*$`, }, { host: "bitbucket.org", pattern: `^(bitbucket\.org/(?P[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`, addCheck: checkBitbucket, }, { host: "launchpad.net", pattern: `^(launchpad\.net/(([A-Za-z0-9_.\-]+)(/[A-Za-z0-9_.\-]+)?|~[A-Za-z0-9_.\-]+/(\+junk|[A-Za-z0-9_.\-]+)/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`, vcs: Bzr, }, { host: "git.launchpad.net", vcs: Git, pattern: `^(git\.launchpad\.net/(([A-Za-z0-9_.\-]+)|~[A-Za-z0-9_.\-]+/(\+git|[A-Za-z0-9_.\-]+)/[A-Za-z0-9_.\-]+))$`, }, { host: "hub.jazz.net", vcs: Git, pattern: `^(hub\.jazz\.net/git/[a-z0-9]+/[A-Za-z0-9_.\-]+)(/[A-Za-z0-9_.\-]+)*$`, }, { host: "go.googlesource.com", vcs: Git, pattern: `^(go\.googlesource\.com/[A-Za-z0-9_.\-]+/?)$`, }, { host: "git.openstack.org", vcs: Git, pattern: `^(git\.openstack\.org/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)$`, }, // If none of the previous detect the type they will fall to this looking for the type in a generic sense // by the extension to the path. { addCheck: checkURL, pattern: `\.(?Pgit|hg|svn|bzr)$`, }, } func init() { // Precompile the regular expressions used to check VCS locations. for _, v := range vcsList { v.regex = regexp.MustCompile(v.pattern) } } // This function is really a hack around Go redirects rather than around // something VCS related. Should this be moved to the glide project or a // helper function? func detectVcsFromRemote(vcsURL string) (Type, string, error) { t, e := detectVcsFromURL(vcsURL) if e == nil { return t, vcsURL, nil } else if e != ErrCannotDetectVCS { return NoVCS, "", e } // Pages like https://golang.org/x/net provide an html document with // meta tags containing a location to work with. The go tool uses // a meta tag with the name go-import which is what we use here. // godoc.org also has one call go-source that we do not need to use. // The value of go-import is in the form "prefix vcs repo". The prefix // should match the vcsURL and the repo is a location that can be // checked out. Note, to get the html document you you need to add // ?go-get=1 to the url. u, err := url.Parse(vcsURL) if err != nil { return NoVCS, "", err } if u.RawQuery == "" { u.RawQuery = "go-get=1" } else { u.RawQuery = u.RawQuery + "+go-get=1" } checkURL := u.String() resp, err := http.Get(checkURL) if err != nil { return NoVCS, "", ErrCannotDetectVCS } defer resp.Body.Close() if resp.StatusCode < 200 || resp.StatusCode >= 300 { if resp.StatusCode == 404 { return NoVCS, "", NewRemoteError(fmt.Sprintf("%s Not Found", vcsURL), nil, "") } else if resp.StatusCode == 401 || resp.StatusCode == 403 { return NoVCS, "", NewRemoteError(fmt.Sprintf("%s Access Denied", vcsURL), nil, "") } return NoVCS, "", ErrCannotDetectVCS } t, nu, err := parseImportFromBody(u, resp.Body) if err != nil { // TODO(mattfarina): Log the parsing error return NoVCS, "", ErrCannotDetectVCS } else if t == "" || nu == "" { return NoVCS, "", ErrCannotDetectVCS } return t, nu, nil } // From a remote vcs url attempt to detect the VCS. func detectVcsFromURL(vcsURL string) (Type, error) { var u *url.URL var err error if m := scpSyntaxRe.FindStringSubmatch(vcsURL); m != nil { // Match SCP-like syntax and convert it to a URL. // Eg, "git@github.com:user/repo" becomes // "ssh://git@github.com/user/repo". u = &url.URL{ Scheme: "ssh", User: url.User(m[1]), Host: m[2], Path: "/" + m[3], } } else { u, err = url.Parse(vcsURL) if err != nil { return "", err } } // Detect file schemes if u.Scheme == "file" { return DetectVcsFromFS(u.Path) } if u.Host == "" { return "", ErrCannotDetectVCS } // Try to detect from the scheme switch u.Scheme { case "git+ssh": return Git, nil case "git": return Git, nil case "bzr+ssh": return Bzr, nil case "svn+ssh": return Svn, nil } // Try to detect from known hosts, such as Github for _, v := range vcsList { if v.host != "" && v.host != u.Host { continue } // Make sure the pattern matches for an actual repo location. For example, // we should fail if the VCS listed is github.com/masterminds as that's // not actually a repo. uCheck := u.Host + u.Path m := v.regex.FindStringSubmatch(uCheck) if m == nil { if v.host != "" { return "", ErrCannotDetectVCS } continue } // If we are here the host matches. If the host has a singular // VCS type, such as Github, we can return the type right away. if v.vcs != "" { return v.vcs, nil } // Run additional checks to determine try and determine the repo // for the matched service. info := make(map[string]string) for i, name := range v.regex.SubexpNames() { if name != "" { info[name] = m[i] } } t, err := v.addCheck(info, u) if err != nil { switch err.(type) { case *RemoteError: return "", err } return "", ErrCannotDetectVCS } return t, nil } // Attempt to ascertain from the username passed in. if u.User != nil { un := u.User.Username() if un == "git" { return Git, nil } else if un == "hg" { return Hg, nil } } // Unable to determine the vcs from the url. return "", ErrCannotDetectVCS } // Figure out the type for Bitbucket by the passed in information // or via the public API. func checkBitbucket(i map[string]string, ul *url.URL) (Type, error) { // Fast path for ssh urls where we may not even be able to // anonymously get details from the API. if ul.User != nil { un := ul.User.Username() if un == "git" { return Git, nil } else if un == "hg" { return Hg, nil } } // The part of the response we care about. var response struct { SCM Type `json:"scm"` } u := expand(i, "https://api.bitbucket.org/1.0/repositories/{name}") data, err := get(u) if err != nil { return "", err } if err := json.Unmarshal(data, &response); err != nil { return "", fmt.Errorf("Decoding error %s: %v", u, err) } return response.SCM, nil } // Expect a type key on i with the exact type detected from the regex. func checkURL(i map[string]string, u *url.URL) (Type, error) { return Type(i["type"]), nil } func get(url string) ([]byte, error) { resp, err := http.Get(url) if err != nil { return nil, err } defer resp.Body.Close() if resp.StatusCode != 200 { if resp.StatusCode == 404 { return nil, NewRemoteError("Not Found", err, resp.Status) } else if resp.StatusCode == 401 || resp.StatusCode == 403 { return nil, NewRemoteError("Access Denied", err, resp.Status) } return nil, fmt.Errorf("%s: %s", url, resp.Status) } b, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("%s: %v", url, err) } return b, nil } func expand(match map[string]string, s string) string { for k, v := range match { s = strings.Replace(s, "{"+k+"}", v, -1) } return s } func parseImportFromBody(ur *url.URL, r io.ReadCloser) (tp Type, u string, err error) { d := xml.NewDecoder(r) d.CharsetReader = charsetReader d.Strict = false var t xml.Token for { t, err = d.Token() if err != nil { if err == io.EOF { // When the end is reached it could not detect a VCS if it // got here. err = ErrCannotDetectVCS } return } if e, ok := t.(xml.StartElement); ok && strings.EqualFold(e.Name.Local, "body") { return } if e, ok := t.(xml.EndElement); ok && strings.EqualFold(e.Name.Local, "head") { return } e, ok := t.(xml.StartElement) if !ok || !strings.EqualFold(e.Name.Local, "meta") { continue } if attrValue(e.Attr, "name") != "go-import" { continue } if f := strings.Fields(attrValue(e.Attr, "content")); len(f) == 3 { // If the prefix supplied by the remote system isn't a prefix to the // url we're fetching continue to look for other imports. // This will work for exact matches and prefixes. For example, // golang.org/x/net as a prefix will match for golang.org/x/net and // golang.org/x/net/context. vcsURL := ur.Host + ur.Path if !strings.HasPrefix(vcsURL, f[0]) { continue } else { switch Type(f[1]) { case Git: tp = Git case Svn: tp = Svn case Bzr: tp = Bzr case Hg: tp = Hg } u = f[2] return } } } } func charsetReader(charset string, input io.Reader) (io.Reader, error) { switch strings.ToLower(charset) { case "ascii": return input, nil default: return nil, fmt.Errorf("can't decode XML document using charset %q", charset) } } func attrValue(attrs []xml.Attr, name string) string { for _, a := range attrs { if strings.EqualFold(a.Name.Local, name) { return a.Value } } return "" } dep-0.3.2/vendor/github.com/Masterminds/vcs/vcs_remote_lookup_test.go000066400000000000000000000123461317166637100260470ustar00rootroot00000000000000package vcs import ( "io/ioutil" "os" "os/exec" "runtime" "strings" "testing" ) func TestVCSLookup(t *testing.T) { // TODO: Expand to make sure it detected the right vcs. urlList := map[string]struct { work bool t Type }{ "https://github.com/masterminds": {work: false, t: Git}, "https://github.com/Masterminds/VCSTestRepo": {work: true, t: Git}, "https://bitbucket.org/mattfarina/testhgrepo": {work: true, t: Hg}, "https://bitbucket.org/mattfarina/repo-does-not-exist": {work: false, t: Hg}, "https://bitbucket.org/mattfarina/private-repo-for-vcs-testing": {work: false, t: Hg}, "https://launchpad.net/govcstestbzrrepo/trunk": {work: true, t: Bzr}, "https://launchpad.net/~mattfarina/+junk/mygovcstestbzrrepo": {work: true, t: Bzr}, "https://launchpad.net/~mattfarina/+junk/mygovcstestbzrrepo/trunk": {work: true, t: Bzr}, "https://git.launchpad.net/govcstestgitrepo": {work: true, t: Git}, "https://git.launchpad.net/~mattfarina/+git/mygovcstestgitrepo": {work: true, t: Git}, "https://hub.jazz.net/git/user1/pkgname": {work: true, t: Git}, "https://hub.jazz.net/git/user1/pkgname/subpkg/subpkg/subpkg": {work: true, t: Git}, "https://hubs.jazz.net/git/user1/pkgname": {work: false, t: Git}, "https://example.com/foo/bar.git": {work: true, t: Git}, "https://example.com/foo/bar.svn": {work: true, t: Svn}, "https://example.com/foo/bar/baz.bzr": {work: true, t: Bzr}, "https://example.com/foo/bar/baz.hg": {work: true, t: Hg}, "https://gopkg.in/tomb.v1": {work: true, t: Git}, "https://golang.org/x/net": {work: true, t: Git}, "https://speter.net/go/exp/math/dec/inf": {work: true, t: Git}, "https://git.openstack.org/foo/bar": {work: true, t: Git}, "git@github.com:Masterminds/vcs.git": {work: true, t: Git}, "git@example.com:foo.git": {work: true, t: Git}, "ssh://hg@bitbucket.org/mattfarina/testhgrepo": {work: true, t: Hg}, "git@bitbucket.org:mattfarina/glide-bitbucket-example.git": {work: true, t: Git}, "git+ssh://example.com/foo/bar": {work: true, t: Git}, "git://example.com/foo/bar": {work: true, t: Git}, "bzr+ssh://example.com/foo/bar": {work: true, t: Bzr}, "svn+ssh://example.com/foo/bar": {work: true, t: Svn}, "git@example.com:foo/bar": {work: true, t: Git}, "hg@example.com:foo/bar": {work: true, t: Hg}, } for u, c := range urlList { ty, _, err := detectVcsFromRemote(u) if err == nil && !c.work { t.Errorf("Error detecting VCS from URL(%s)", u) } if err == ErrCannotDetectVCS && c.work { t.Errorf("Error detecting VCS from URL(%s)", u) } if err != nil && c.work { t.Errorf("Error detecting VCS from URL(%s): %s", u, err) } if err != nil && err != ErrCannotDetectVCS && !strings.HasSuffix(err.Error(), "Not Found") && !strings.HasSuffix(err.Error(), "Access Denied") && !c.work { t.Errorf("Unexpected error returned (%s): %s", u, err) } if c.work && ty != c.t { t.Errorf("Incorrect VCS type returned(%s)", u) } } } func TestVCSFileLookup(t *testing.T) { tempDir, err := ioutil.TempDir("", "go-vcs-file-lookup-tests") if err != nil { t.Error(err) } defer func() { err = os.RemoveAll(tempDir) if err != nil { t.Error(err) } }() _, err = exec.Command("git", "init", tempDir).CombinedOutput() if err != nil { t.Error(err) } // On Windows it should be file:// followed by /C:\for\bar. That / before // the drive needs to be included in testing. var pth string if runtime.GOOS == "windows" { pth = "file:///" + tempDir } else { pth = "file://" + tempDir } ty, _, err := detectVcsFromRemote(pth) if err != nil { t.Errorf("Unable to detect file:// path: %s", err) } if ty != Git { t.Errorf("Detected wrong type from file:// path. Found type %v", ty) } } func TestNotFound(t *testing.T) { _, _, err := detectVcsFromRemote("https://mattfarina.com/notfound") if err == nil || !strings.HasSuffix(err.Error(), " Not Found") { t.Errorf("Failed to find not found repo") } _, err = NewRepo("https://mattfarina.com/notfound", "") if err == nil || !strings.HasSuffix(err.Error(), " Not Found") { t.Errorf("Failed to find not found repo") } } func TestAccessDenied(t *testing.T) { _, _, err := detectVcsFromRemote("https://bitbucket.org/mattfarina/private-repo-for-vcs-testing") if err == nil || err.Error() != "Access Denied" { t.Errorf("Failed to detect access denied") } _, err = NewRepo("https://bitbucket.org/mattfarina/private-repo-for-vcs-testing", "") if err == nil || err.Error() != "Access Denied" { t.Errorf("Failed to detect access denied") } } dep-0.3.2/vendor/github.com/armon/000077500000000000000000000000001317166637100167475ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/armon/go-radix/000077500000000000000000000000001317166637100204615ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/armon/go-radix/.gitignore000066400000000000000000000003741317166637100224550ustar00rootroot00000000000000# 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 dep-0.3.2/vendor/github.com/armon/go-radix/.travis.yml000066400000000000000000000000311317166637100225640ustar00rootroot00000000000000language: go go: - tip dep-0.3.2/vendor/github.com/armon/go-radix/LICENSE000066400000000000000000000020671317166637100214730ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2014 Armon Dadgar 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. dep-0.3.2/vendor/github.com/armon/go-radix/README.md000066400000000000000000000020621317166637100217400ustar00rootroot00000000000000go-radix [![Build Status](https://travis-ci.org/armon/go-radix.png)](https://travis-ci.org/armon/go-radix) ========= Provides the `radix` package that implements a [radix tree](http://en.wikipedia.org/wiki/Radix_tree). The package only provides a single `Tree` implementation, optimized for sparse nodes. As a radix tree, it provides the following: * O(k) operations. In many cases, this can be faster than a hash table since the hash function is an O(k) operation, and hash tables have very poor cache locality. * Minimum / Maximum value lookups * Ordered iteration For an immutable variant, see [go-immutable-radix](https://github.com/hashicorp/go-immutable-radix). Documentation ============= The full documentation is available on [Godoc](http://godoc.org/github.com/armon/go-radix). Example ======= Below is a simple example of usage ```go // Create a tree r := radix.New() r.Insert("foo", 1) r.Insert("bar", 2) r.Insert("foobar", 2) // Find the longest prefix match m, _, _ := r.LongestPrefix("foozip") if m != "foo" { panic("should be foo") } ``` dep-0.3.2/vendor/github.com/armon/go-radix/radix.go000066400000000000000000000223161317166637100221230ustar00rootroot00000000000000package radix import ( "sort" "strings" ) // WalkFn is used when walking the tree. Takes a // key and value, returning if iteration should // be terminated. type WalkFn func(s string, v interface{}) bool // leafNode is used to represent a value type leafNode struct { key string val interface{} } // edge is used to represent an edge node type edge struct { label byte node *node } type node struct { // leaf is used to store possible leaf leaf *leafNode // prefix is the common prefix we ignore prefix string // Edges should be stored in-order for iteration. // We avoid a fully materialized slice to save memory, // since in most cases we expect to be sparse edges edges } func (n *node) isLeaf() bool { return n.leaf != nil } func (n *node) addEdge(e edge) { n.edges = append(n.edges, e) n.edges.Sort() } func (n *node) replaceEdge(e edge) { num := len(n.edges) idx := sort.Search(num, func(i int) bool { return n.edges[i].label >= e.label }) if idx < num && n.edges[idx].label == e.label { n.edges[idx].node = e.node return } panic("replacing missing edge") } func (n *node) getEdge(label byte) *node { num := len(n.edges) idx := sort.Search(num, func(i int) bool { return n.edges[i].label >= label }) if idx < num && n.edges[idx].label == label { return n.edges[idx].node } return nil } func (n *node) delEdge(label byte) { num := len(n.edges) idx := sort.Search(num, func(i int) bool { return n.edges[i].label >= label }) if idx < num && n.edges[idx].label == label { copy(n.edges[idx:], n.edges[idx+1:]) n.edges[len(n.edges)-1] = edge{} n.edges = n.edges[:len(n.edges)-1] } } type edges []edge func (e edges) Len() int { return len(e) } func (e edges) Less(i, j int) bool { return e[i].label < e[j].label } func (e edges) Swap(i, j int) { e[i], e[j] = e[j], e[i] } func (e edges) Sort() { sort.Sort(e) } // Tree implements a radix tree. This can be treated as a // Dictionary abstract data type. The main advantage over // a standard hash map is prefix-based lookups and // ordered iteration, type Tree struct { root *node size int } // New returns an empty Tree func New() *Tree { return NewFromMap(nil) } // NewFromMap returns a new tree containing the keys // from an existing map func NewFromMap(m map[string]interface{}) *Tree { t := &Tree{root: &node{}} for k, v := range m { t.Insert(k, v) } return t } // Len is used to return the number of elements in the tree func (t *Tree) Len() int { return t.size } // longestPrefix finds the length of the shared prefix // of two strings func longestPrefix(k1, k2 string) int { max := len(k1) if l := len(k2); l < max { max = l } var i int for i = 0; i < max; i++ { if k1[i] != k2[i] { break } } return i } // Insert is used to add a newentry or update // an existing entry. Returns if updated. func (t *Tree) Insert(s string, v interface{}) (interface{}, bool) { var parent *node n := t.root search := s for { // Handle key exhaution if len(search) == 0 { if n.isLeaf() { old := n.leaf.val n.leaf.val = v return old, true } n.leaf = &leafNode{ key: s, val: v, } t.size++ return nil, false } // Look for the edge parent = n n = n.getEdge(search[0]) // No edge, create one if n == nil { e := edge{ label: search[0], node: &node{ leaf: &leafNode{ key: s, val: v, }, prefix: search, }, } parent.addEdge(e) t.size++ return nil, false } // Determine longest prefix of the search key on match commonPrefix := longestPrefix(search, n.prefix) if commonPrefix == len(n.prefix) { search = search[commonPrefix:] continue } // Split the node t.size++ child := &node{ prefix: search[:commonPrefix], } parent.replaceEdge(edge{ label: search[0], node: child, }) // Restore the existing node child.addEdge(edge{ label: n.prefix[commonPrefix], node: n, }) n.prefix = n.prefix[commonPrefix:] // Create a new leaf node leaf := &leafNode{ key: s, val: v, } // If the new key is a subset, add to to this node search = search[commonPrefix:] if len(search) == 0 { child.leaf = leaf return nil, false } // Create a new edge for the node child.addEdge(edge{ label: search[0], node: &node{ leaf: leaf, prefix: search, }, }) return nil, false } } // Delete is used to delete a key, returning the previous // value and if it was deleted func (t *Tree) Delete(s string) (interface{}, bool) { var parent *node var label byte n := t.root search := s for { // Check for key exhaution if len(search) == 0 { if !n.isLeaf() { break } goto DELETE } // Look for an edge parent = n label = search[0] n = n.getEdge(label) if n == nil { break } // Consume the search prefix if strings.HasPrefix(search, n.prefix) { search = search[len(n.prefix):] } else { break } } return nil, false DELETE: // Delete the leaf leaf := n.leaf n.leaf = nil t.size-- // Check if we should delete this node from the parent if parent != nil && len(n.edges) == 0 { parent.delEdge(label) } // Check if we should merge this node if n != t.root && len(n.edges) == 1 { n.mergeChild() } // Check if we should merge the parent's other child if parent != nil && parent != t.root && len(parent.edges) == 1 && !parent.isLeaf() { parent.mergeChild() } return leaf.val, true } func (n *node) mergeChild() { e := n.edges[0] child := e.node n.prefix = n.prefix + child.prefix n.leaf = child.leaf n.edges = child.edges } // Get is used to lookup a specific key, returning // the value and if it was found func (t *Tree) Get(s string) (interface{}, bool) { n := t.root search := s for { // Check for key exhaution if len(search) == 0 { if n.isLeaf() { return n.leaf.val, true } break } // Look for an edge n = n.getEdge(search[0]) if n == nil { break } // Consume the search prefix if strings.HasPrefix(search, n.prefix) { search = search[len(n.prefix):] } else { break } } return nil, false } // LongestPrefix is like Get, but instead of an // exact match, it will return the longest prefix match. func (t *Tree) LongestPrefix(s string) (string, interface{}, bool) { var last *leafNode n := t.root search := s for { // Look for a leaf node if n.isLeaf() { last = n.leaf } // Check for key exhaution if len(search) == 0 { break } // Look for an edge n = n.getEdge(search[0]) if n == nil { break } // Consume the search prefix if strings.HasPrefix(search, n.prefix) { search = search[len(n.prefix):] } else { break } } if last != nil { return last.key, last.val, true } return "", nil, false } // Minimum is used to return the minimum value in the tree func (t *Tree) Minimum() (string, interface{}, bool) { n := t.root for { if n.isLeaf() { return n.leaf.key, n.leaf.val, true } if len(n.edges) > 0 { n = n.edges[0].node } else { break } } return "", nil, false } // Maximum is used to return the maximum value in the tree func (t *Tree) Maximum() (string, interface{}, bool) { n := t.root for { if num := len(n.edges); num > 0 { n = n.edges[num-1].node continue } if n.isLeaf() { return n.leaf.key, n.leaf.val, true } break } return "", nil, false } // Walk is used to walk the tree func (t *Tree) Walk(fn WalkFn) { recursiveWalk(t.root, fn) } // WalkPrefix is used to walk the tree under a prefix func (t *Tree) WalkPrefix(prefix string, fn WalkFn) { n := t.root search := prefix for { // Check for key exhaution if len(search) == 0 { recursiveWalk(n, fn) return } // Look for an edge n = n.getEdge(search[0]) if n == nil { break } // Consume the search prefix if strings.HasPrefix(search, n.prefix) { search = search[len(n.prefix):] } else if strings.HasPrefix(n.prefix, search) { // Child may be under our search prefix recursiveWalk(n, fn) return } else { break } } } // WalkPath is used to walk the tree, but only visiting nodes // from the root down to a given leaf. Where WalkPrefix walks // all the entries *under* the given prefix, this walks the // entries *above* the given prefix. func (t *Tree) WalkPath(path string, fn WalkFn) { n := t.root search := path for { // Visit the leaf values if any if n.leaf != nil && fn(n.leaf.key, n.leaf.val) { return } // Check for key exhaution if len(search) == 0 { return } // Look for an edge n = n.getEdge(search[0]) if n == nil { return } // Consume the search prefix if strings.HasPrefix(search, n.prefix) { search = search[len(n.prefix):] } else { break } } } // recursiveWalk is used to do a pre-order walk of a node // recursively. Returns true if the walk should be aborted func recursiveWalk(n *node, fn WalkFn) bool { // Visit the leaf values if any if n.leaf != nil && fn(n.leaf.key, n.leaf.val) { return true } // Recurse on the children for _, e := range n.edges { if recursiveWalk(e.node, fn) { return true } } return false } // ToMap is used to walk the tree and convert it into a map func (t *Tree) ToMap() map[string]interface{} { out := make(map[string]interface{}, t.size) t.Walk(func(k string, v interface{}) bool { out[k] = v return false }) return out } dep-0.3.2/vendor/github.com/armon/go-radix/radix_test.go000066400000000000000000000120211317166637100231520ustar00rootroot00000000000000package radix import ( crand "crypto/rand" "fmt" "reflect" "sort" "testing" ) func TestRadix(t *testing.T) { var min, max string inp := make(map[string]interface{}) for i := 0; i < 1000; i++ { gen := generateUUID() inp[gen] = i if gen < min || i == 0 { min = gen } if gen > max || i == 0 { max = gen } } r := NewFromMap(inp) if r.Len() != len(inp) { t.Fatalf("bad length: %v %v", r.Len(), len(inp)) } r.Walk(func(k string, v interface{}) bool { println(k) return false }) for k, v := range inp { out, ok := r.Get(k) if !ok { t.Fatalf("missing key: %v", k) } if out != v { t.Fatalf("value mis-match: %v %v", out, v) } } // Check min and max outMin, _, _ := r.Minimum() if outMin != min { t.Fatalf("bad minimum: %v %v", outMin, min) } outMax, _, _ := r.Maximum() if outMax != max { t.Fatalf("bad maximum: %v %v", outMax, max) } for k, v := range inp { out, ok := r.Delete(k) if !ok { t.Fatalf("missing key: %v", k) } if out != v { t.Fatalf("value mis-match: %v %v", out, v) } } if r.Len() != 0 { t.Fatalf("bad length: %v", r.Len()) } } func TestRoot(t *testing.T) { r := New() _, ok := r.Delete("") if ok { t.Fatalf("bad") } _, ok = r.Insert("", true) if ok { t.Fatalf("bad") } val, ok := r.Get("") if !ok || val != true { t.Fatalf("bad: %v", val) } val, ok = r.Delete("") if !ok || val != true { t.Fatalf("bad: %v", val) } } func TestDelete(t *testing.T) { r := New() s := []string{"", "A", "AB"} for _, ss := range s { r.Insert(ss, true) } for _, ss := range s { _, ok := r.Delete(ss) if !ok { t.Fatalf("bad %q", ss) } } } func TestLongestPrefix(t *testing.T) { r := New() keys := []string{ "", "foo", "foobar", "foobarbaz", "foobarbazzip", "foozip", } for _, k := range keys { r.Insert(k, nil) } if r.Len() != len(keys) { t.Fatalf("bad len: %v %v", r.Len(), len(keys)) } type exp struct { inp string out string } cases := []exp{ {"a", ""}, {"abc", ""}, {"fo", ""}, {"foo", "foo"}, {"foob", "foo"}, {"foobar", "foobar"}, {"foobarba", "foobar"}, {"foobarbaz", "foobarbaz"}, {"foobarbazzi", "foobarbaz"}, {"foobarbazzip", "foobarbazzip"}, {"foozi", "foo"}, {"foozip", "foozip"}, {"foozipzap", "foozip"}, } for _, test := range cases { m, _, ok := r.LongestPrefix(test.inp) if !ok { t.Fatalf("no match: %v", test) } if m != test.out { t.Fatalf("mis-match: %v %v", m, test) } } } func TestWalkPrefix(t *testing.T) { r := New() keys := []string{ "foobar", "foo/bar/baz", "foo/baz/bar", "foo/zip/zap", "zipzap", } for _, k := range keys { r.Insert(k, nil) } if r.Len() != len(keys) { t.Fatalf("bad len: %v %v", r.Len(), len(keys)) } type exp struct { inp string out []string } cases := []exp{ { "f", []string{"foobar", "foo/bar/baz", "foo/baz/bar", "foo/zip/zap"}, }, { "foo", []string{"foobar", "foo/bar/baz", "foo/baz/bar", "foo/zip/zap"}, }, { "foob", []string{"foobar"}, }, { "foo/", []string{"foo/bar/baz", "foo/baz/bar", "foo/zip/zap"}, }, { "foo/b", []string{"foo/bar/baz", "foo/baz/bar"}, }, { "foo/ba", []string{"foo/bar/baz", "foo/baz/bar"}, }, { "foo/bar", []string{"foo/bar/baz"}, }, { "foo/bar/baz", []string{"foo/bar/baz"}, }, { "foo/bar/bazoo", []string{}, }, { "z", []string{"zipzap"}, }, } for _, test := range cases { out := []string{} fn := func(s string, v interface{}) bool { out = append(out, s) return false } r.WalkPrefix(test.inp, fn) sort.Strings(out) sort.Strings(test.out) if !reflect.DeepEqual(out, test.out) { t.Fatalf("mis-match: %v %v", out, test.out) } } } func TestWalkPath(t *testing.T) { r := New() keys := []string{ "foo", "foo/bar", "foo/bar/baz", "foo/baz/bar", "foo/zip/zap", "zipzap", } for _, k := range keys { r.Insert(k, nil) } if r.Len() != len(keys) { t.Fatalf("bad len: %v %v", r.Len(), len(keys)) } type exp struct { inp string out []string } cases := []exp{ { "f", []string{}, }, { "foo", []string{"foo"}, }, { "foo/", []string{"foo"}, }, { "foo/ba", []string{"foo"}, }, { "foo/bar", []string{"foo", "foo/bar"}, }, { "foo/bar/baz", []string{"foo", "foo/bar", "foo/bar/baz"}, }, { "foo/bar/bazoo", []string{"foo", "foo/bar", "foo/bar/baz"}, }, { "z", []string{}, }, } for _, test := range cases { out := []string{} fn := func(s string, v interface{}) bool { out = append(out, s) return false } r.WalkPath(test.inp, fn) sort.Strings(out) sort.Strings(test.out) if !reflect.DeepEqual(out, test.out) { t.Fatalf("mis-match: %v %v", out, test.out) } } } // generateUUID is used to generate a random UUID func generateUUID() string { buf := make([]byte, 16) if _, err := crand.Read(buf); err != nil { panic(fmt.Errorf("failed to read random bytes: %v", err)) } return fmt.Sprintf("%08x-%04x-%04x-%04x-%12x", buf[0:4], buf[4:6], buf[6:8], buf[8:10], buf[10:16]) } dep-0.3.2/vendor/github.com/boltdb/000077500000000000000000000000001317166637100171015ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/boltdb/bolt/000077500000000000000000000000001317166637100200415ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/boltdb/bolt/.gitignore000066400000000000000000000000321317166637100220240ustar00rootroot00000000000000*.prof *.test *.swp /bin/ dep-0.3.2/vendor/github.com/boltdb/bolt/LICENSE000066400000000000000000000020661317166637100210520ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2013 Ben Johnson 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. dep-0.3.2/vendor/github.com/boltdb/bolt/Makefile000066400000000000000000000006321317166637100215020ustar00rootroot00000000000000BRANCH=`git rev-parse --abbrev-ref HEAD` COMMIT=`git rev-parse --short HEAD` GOLDFLAGS="-X main.branch $(BRANCH) -X main.commit $(COMMIT)" default: build race: @go test -v -race -test.run="TestSimulate_(100op|1000op)" # go get github.com/kisielk/errcheck errcheck: @errcheck -ignorepkg=bytes -ignore=os:Remove github.com/boltdb/bolt test: @go test -v -cover . @go test -v ./cmd/bolt .PHONY: fmt test dep-0.3.2/vendor/github.com/boltdb/bolt/README.md000066400000000000000000001053441317166637100213270ustar00rootroot00000000000000Bolt [![Coverage Status](https://coveralls.io/repos/boltdb/bolt/badge.svg?branch=master)](https://coveralls.io/r/boltdb/bolt?branch=master) [![GoDoc](https://godoc.org/github.com/boltdb/bolt?status.svg)](https://godoc.org/github.com/boltdb/bolt) ![Version](https://img.shields.io/badge/version-1.2.1-green.svg) ==== Bolt is a pure Go key/value store inspired by [Howard Chu's][hyc_symas] [LMDB project][lmdb]. The goal of the project is to provide a simple, fast, and reliable database for projects that don't require a full database server such as Postgres or MySQL. Since Bolt is meant to be used as such a low-level piece of functionality, simplicity is key. The API will be small and only focus on getting values and setting values. That's it. [hyc_symas]: https://twitter.com/hyc_symas [lmdb]: http://symas.com/mdb/ ## Project Status Bolt is stable, the API is fixed, and the file format is fixed. Full unit test coverage and randomized black box testing are used to ensure database consistency and thread safety. Bolt is currently used in high-load production environments serving databases as large as 1TB. Many companies such as Shopify and Heroku use Bolt-backed services every day. ## Table of Contents - [Getting Started](#getting-started) - [Installing](#installing) - [Opening a database](#opening-a-database) - [Transactions](#transactions) - [Read-write transactions](#read-write-transactions) - [Read-only transactions](#read-only-transactions) - [Batch read-write transactions](#batch-read-write-transactions) - [Managing transactions manually](#managing-transactions-manually) - [Using buckets](#using-buckets) - [Using key/value pairs](#using-keyvalue-pairs) - [Autoincrementing integer for the bucket](#autoincrementing-integer-for-the-bucket) - [Iterating over keys](#iterating-over-keys) - [Prefix scans](#prefix-scans) - [Range scans](#range-scans) - [ForEach()](#foreach) - [Nested buckets](#nested-buckets) - [Database backups](#database-backups) - [Statistics](#statistics) - [Read-Only Mode](#read-only-mode) - [Mobile Use (iOS/Android)](#mobile-use-iosandroid) - [Resources](#resources) - [Comparison with other databases](#comparison-with-other-databases) - [Postgres, MySQL, & other relational databases](#postgres-mysql--other-relational-databases) - [LevelDB, RocksDB](#leveldb-rocksdb) - [LMDB](#lmdb) - [Caveats & Limitations](#caveats--limitations) - [Reading the Source](#reading-the-source) - [Other Projects Using Bolt](#other-projects-using-bolt) ## Getting Started ### Installing To start using Bolt, install Go and run `go get`: ```sh $ go get github.com/boltdb/bolt/... ``` This will retrieve the library and install the `bolt` command line utility into your `$GOBIN` path. ### Opening a database The top-level object in Bolt is a `DB`. It is represented as a single file on your disk and represents a consistent snapshot of your data. To open your database, simply use the `bolt.Open()` function: ```go package main import ( "log" "github.com/boltdb/bolt" ) func main() { // Open the my.db data file in your current directory. // It will be created if it doesn't exist. db, err := bolt.Open("my.db", 0600, nil) if err != nil { log.Fatal(err) } defer db.Close() ... } ``` Please note that Bolt obtains a file lock on the data file so multiple processes cannot open the same database at the same time. Opening an already open Bolt database will cause it to hang until the other process closes it. To prevent an indefinite wait you can pass a timeout option to the `Open()` function: ```go db, err := bolt.Open("my.db", 0600, &bolt.Options{Timeout: 1 * time.Second}) ``` ### Transactions Bolt allows only one read-write transaction at a time but allows as many read-only transactions as you want at a time. Each transaction has a consistent view of the data as it existed when the transaction started. Individual transactions and all objects created from them (e.g. buckets, keys) are not thread safe. To work with data in multiple goroutines you must start a transaction for each one or use locking to ensure only one goroutine accesses a transaction at a time. Creating transaction from the `DB` is thread safe. Read-only transactions and read-write transactions should not depend on one another and generally shouldn't be opened simultaneously in the same goroutine. This can cause a deadlock as the read-write transaction needs to periodically re-map the data file but it cannot do so while a read-only transaction is open. #### Read-write transactions To start a read-write transaction, you can use the `DB.Update()` function: ```go err := db.Update(func(tx *bolt.Tx) error { ... return nil }) ``` Inside the closure, you have a consistent view of the database. You commit the transaction by returning `nil` at the end. You can also rollback the transaction at any point by returning an error. All database operations are allowed inside a read-write transaction. Always check the return error as it will report any disk failures that can cause your transaction to not complete. If you return an error within your closure it will be passed through. #### Read-only transactions To start a read-only transaction, you can use the `DB.View()` function: ```go err := db.View(func(tx *bolt.Tx) error { ... return nil }) ``` You also get a consistent view of the database within this closure, however, no mutating operations are allowed within a read-only transaction. You can only retrieve buckets, retrieve values, and copy the database within a read-only transaction. #### Batch read-write transactions Each `DB.Update()` waits for disk to commit the writes. This overhead can be minimized by combining multiple updates with the `DB.Batch()` function: ```go err := db.Batch(func(tx *bolt.Tx) error { ... return nil }) ``` Concurrent Batch calls are opportunistically combined into larger transactions. Batch is only useful when there are multiple goroutines calling it. The trade-off is that `Batch` can call the given function multiple times, if parts of the transaction fail. The function must be idempotent and side effects must take effect only after a successful return from `DB.Batch()`. For example: don't display messages from inside the function, instead set variables in the enclosing scope: ```go var id uint64 err := db.Batch(func(tx *bolt.Tx) error { // Find last key in bucket, decode as bigendian uint64, increment // by one, encode back to []byte, and add new key. ... id = newValue return nil }) if err != nil { return ... } fmt.Println("Allocated ID %d", id) ``` #### Managing transactions manually The `DB.View()` and `DB.Update()` functions are wrappers around the `DB.Begin()` function. These helper functions will start the transaction, execute a function, and then safely close your transaction if an error is returned. This is the recommended way to use Bolt transactions. However, sometimes you may want to manually start and end your transactions. You can use the `DB.Begin()` function directly but **please** be sure to close the transaction. ```go // Start a writable transaction. tx, err := db.Begin(true) if err != nil { return err } defer tx.Rollback() // Use the transaction... _, err := tx.CreateBucket([]byte("MyBucket")) if err != nil { return err } // Commit the transaction and check for error. if err := tx.Commit(); err != nil { return err } ``` The first argument to `DB.Begin()` is a boolean stating if the transaction should be writable. ### Using buckets Buckets are collections of key/value pairs within the database. All keys in a bucket must be unique. You can create a bucket using the `DB.CreateBucket()` function: ```go db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("MyBucket")) if err != nil { return fmt.Errorf("create bucket: %s", err) } return nil }) ``` You can also create a bucket only if it doesn't exist by using the `Tx.CreateBucketIfNotExists()` function. It's a common pattern to call this function for all your top-level buckets after you open your database so you can guarantee that they exist for future transactions. To delete a bucket, simply call the `Tx.DeleteBucket()` function. ### Using key/value pairs To save a key/value pair to a bucket, use the `Bucket.Put()` function: ```go db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("MyBucket")) err := b.Put([]byte("answer"), []byte("42")) return err }) ``` This will set the value of the `"answer"` key to `"42"` in the `MyBucket` bucket. To retrieve this value, we can use the `Bucket.Get()` function: ```go db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("MyBucket")) v := b.Get([]byte("answer")) fmt.Printf("The answer is: %s\n", v) return nil }) ``` The `Get()` function does not return an error because its operation is guaranteed to work (unless there is some kind of system failure). If the key exists then it will return its byte slice value. If it doesn't exist then it will return `nil`. It's important to note that you can have a zero-length value set to a key which is different than the key not existing. Use the `Bucket.Delete()` function to delete a key from the bucket. Please note that values returned from `Get()` are only valid while the transaction is open. If you need to use a value outside of the transaction then you must use `copy()` to copy it to another byte slice. ### Autoincrementing integer for the bucket By using the `NextSequence()` function, you can let Bolt determine a sequence which can be used as the unique identifier for your key/value pairs. See the example below. ```go // CreateUser saves u to the store. The new user ID is set on u once the data is persisted. func (s *Store) CreateUser(u *User) error { return s.db.Update(func(tx *bolt.Tx) error { // Retrieve the users bucket. // This should be created when the DB is first opened. b := tx.Bucket([]byte("users")) // Generate ID for the user. // This returns an error only if the Tx is closed or not writeable. // That can't happen in an Update() call so I ignore the error check. id, _ := b.NextSequence() u.ID = int(id) // Marshal user data into bytes. buf, err := json.Marshal(u) if err != nil { return err } // Persist bytes to users bucket. return b.Put(itob(u.ID), buf) }) } // itob returns an 8-byte big endian representation of v. func itob(v int) []byte { b := make([]byte, 8) binary.BigEndian.PutUint64(b, uint64(v)) return b } type User struct { ID int ... } ``` ### Iterating over keys Bolt stores its keys in byte-sorted order within a bucket. This makes sequential iteration over these keys extremely fast. To iterate over keys we'll use a `Cursor`: ```go db.View(func(tx *bolt.Tx) error { // Assume bucket exists and has keys b := tx.Bucket([]byte("MyBucket")) c := b.Cursor() for k, v := c.First(); k != nil; k, v = c.Next() { fmt.Printf("key=%s, value=%s\n", k, v) } return nil }) ``` The cursor allows you to move to a specific point in the list of keys and move forward or backward through the keys one at a time. The following functions are available on the cursor: ``` First() Move to the first key. Last() Move to the last key. Seek() Move to a specific key. Next() Move to the next key. Prev() Move to the previous key. ``` Each of those functions has a return signature of `(key []byte, value []byte)`. When you have iterated to the end of the cursor then `Next()` will return a `nil` key. You must seek to a position using `First()`, `Last()`, or `Seek()` before calling `Next()` or `Prev()`. If you do not seek to a position then these functions will return a `nil` key. During iteration, if the key is non-`nil` but the value is `nil`, that means the key refers to a bucket rather than a value. Use `Bucket.Bucket()` to access the sub-bucket. #### Prefix scans To iterate over a key prefix, you can combine `Seek()` and `bytes.HasPrefix()`: ```go db.View(func(tx *bolt.Tx) error { // Assume bucket exists and has keys c := tx.Bucket([]byte("MyBucket")).Cursor() prefix := []byte("1234") for k, v := c.Seek(prefix); k != nil && bytes.HasPrefix(k, prefix); k, v = c.Next() { fmt.Printf("key=%s, value=%s\n", k, v) } return nil }) ``` #### Range scans Another common use case is scanning over a range such as a time range. If you use a sortable time encoding such as RFC3339 then you can query a specific date range like this: ```go db.View(func(tx *bolt.Tx) error { // Assume our events bucket exists and has RFC3339 encoded time keys. c := tx.Bucket([]byte("Events")).Cursor() // Our time range spans the 90's decade. min := []byte("1990-01-01T00:00:00Z") max := []byte("2000-01-01T00:00:00Z") // Iterate over the 90's. for k, v := c.Seek(min); k != nil && bytes.Compare(k, max) <= 0; k, v = c.Next() { fmt.Printf("%s: %s\n", k, v) } return nil }) ``` Note that, while RFC3339 is sortable, the Golang implementation of RFC3339Nano does not use a fixed number of digits after the decimal point and is therefore not sortable. #### ForEach() You can also use the function `ForEach()` if you know you'll be iterating over all the keys in a bucket: ```go db.View(func(tx *bolt.Tx) error { // Assume bucket exists and has keys b := tx.Bucket([]byte("MyBucket")) b.ForEach(func(k, v []byte) error { fmt.Printf("key=%s, value=%s\n", k, v) return nil }) return nil }) ``` Please note that keys and values in `ForEach()` are only valid while the transaction is open. If you need to use a key or value outside of the transaction, you must use `copy()` to copy it to another byte slice. ### Nested buckets You can also store a bucket in a key to create nested buckets. The API is the same as the bucket management API on the `DB` object: ```go func (*Bucket) CreateBucket(key []byte) (*Bucket, error) func (*Bucket) CreateBucketIfNotExists(key []byte) (*Bucket, error) func (*Bucket) DeleteBucket(key []byte) error ``` Say you had a multi-tenant application where the root level bucket was the account bucket. Inside of this bucket was a sequence of accounts which themselves are buckets. And inside the sequence bucket you could have many buckets pertaining to the Account itself (Users, Notes, etc) isolating the information into logical groupings. ```go // createUser creates a new user in the given account. func createUser(accountID int, u *User) error { // Start the transaction. tx, err := db.Begin(true) if err != nil { return err } defer tx.Rollback() // Retrieve the root bucket for the account. // Assume this has already been created when the account was set up. root := tx.Bucket([]byte(strconv.FormatUint(accountID, 10))) // Setup the users bucket. bkt, err := root.CreateBucketIfNotExists([]byte("USERS")) if err != nil { return err } // Generate an ID for the new user. userID, err := bkt.NextSequence() if err != nil { return err } u.ID = userID // Marshal and save the encoded user. if buf, err := json.Marshal(u); err != nil { return err } else if err := bkt.Put([]byte(strconv.FormatUint(u.ID, 10)), buf); err != nil { return err } // Commit the transaction. if err := tx.Commit(); err != nil { return err } return nil } ``` ### Database backups Bolt is a single file so it's easy to backup. You can use the `Tx.WriteTo()` function to write a consistent view of the database to a writer. If you call this from a read-only transaction, it will perform a hot backup and not block your other database reads and writes. By default, it will use a regular file handle which will utilize the operating system's page cache. See the [`Tx`](https://godoc.org/github.com/boltdb/bolt#Tx) documentation for information about optimizing for larger-than-RAM datasets. One common use case is to backup over HTTP so you can use tools like `cURL` to do database backups: ```go func BackupHandleFunc(w http.ResponseWriter, req *http.Request) { err := db.View(func(tx *bolt.Tx) error { w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", `attachment; filename="my.db"`) w.Header().Set("Content-Length", strconv.Itoa(int(tx.Size()))) _, err := tx.WriteTo(w) return err }) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } ``` Then you can backup using this command: ```sh $ curl http://localhost/backup > my.db ``` Or you can open your browser to `http://localhost/backup` and it will download automatically. If you want to backup to another file you can use the `Tx.CopyFile()` helper function. ### Statistics The database keeps a running count of many of the internal operations it performs so you can better understand what's going on. By grabbing a snapshot of these stats at two points in time we can see what operations were performed in that time range. For example, we could start a goroutine to log stats every 10 seconds: ```go go func() { // Grab the initial stats. prev := db.Stats() for { // Wait for 10s. time.Sleep(10 * time.Second) // Grab the current stats and diff them. stats := db.Stats() diff := stats.Sub(&prev) // Encode stats to JSON and print to STDERR. json.NewEncoder(os.Stderr).Encode(diff) // Save stats for the next loop. prev = stats } }() ``` It's also useful to pipe these stats to a service such as statsd for monitoring or to provide an HTTP endpoint that will perform a fixed-length sample. ### Read-Only Mode Sometimes it is useful to create a shared, read-only Bolt database. To this, set the `Options.ReadOnly` flag when opening your database. Read-only mode uses a shared lock to allow multiple processes to read from the database but it will block any processes from opening the database in read-write mode. ```go db, err := bolt.Open("my.db", 0666, &bolt.Options{ReadOnly: true}) if err != nil { log.Fatal(err) } ``` ### Mobile Use (iOS/Android) Bolt is able to run on mobile devices by leveraging the binding feature of the [gomobile](https://github.com/golang/mobile) tool. Create a struct that will contain your database logic and a reference to a `*bolt.DB` with a initializing constructor that takes in a filepath where the database file will be stored. Neither Android nor iOS require extra permissions or cleanup from using this method. ```go func NewBoltDB(filepath string) *BoltDB { db, err := bolt.Open(filepath+"/demo.db", 0600, nil) if err != nil { log.Fatal(err) } return &BoltDB{db} } type BoltDB struct { db *bolt.DB ... } func (b *BoltDB) Path() string { return b.db.Path() } func (b *BoltDB) Close() { b.db.Close() } ``` Database logic should be defined as methods on this wrapper struct. To initialize this struct from the native language (both platforms now sync their local storage to the cloud. These snippets disable that functionality for the database file): #### Android ```java String path; if (android.os.Build.VERSION.SDK_INT >=android.os.Build.VERSION_CODES.LOLLIPOP){ path = getNoBackupFilesDir().getAbsolutePath(); } else{ path = getFilesDir().getAbsolutePath(); } Boltmobiledemo.BoltDB boltDB = Boltmobiledemo.NewBoltDB(path) ``` #### iOS ```objc - (void)demo { NSString* path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; GoBoltmobiledemoBoltDB * demo = GoBoltmobiledemoNewBoltDB(path); [self addSkipBackupAttributeToItemAtPath:demo.path]; //Some DB Logic would go here [demo close]; } - (BOOL)addSkipBackupAttributeToItemAtPath:(NSString *) filePathString { NSURL* URL= [NSURL fileURLWithPath: filePathString]; assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); NSError *error = nil; BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error]; if(!success){ NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); } return success; } ``` ## Resources For more information on getting started with Bolt, check out the following articles: * [Intro to BoltDB: Painless Performant Persistence](http://npf.io/2014/07/intro-to-boltdb-painless-performant-persistence/) by [Nate Finch](https://github.com/natefinch). * [Bolt -- an embedded key/value database for Go](https://www.progville.com/go/bolt-embedded-db-golang/) by Progville ## Comparison with other databases ### Postgres, MySQL, & other relational databases Relational databases structure data into rows and are only accessible through the use of SQL. This approach provides flexibility in how you store and query your data but also incurs overhead in parsing and planning SQL statements. Bolt accesses all data by a byte slice key. This makes Bolt fast to read and write data by key but provides no built-in support for joining values together. Most relational databases (with the exception of SQLite) are standalone servers that run separately from your application. This gives your systems flexibility to connect multiple application servers to a single database server but also adds overhead in serializing and transporting data over the network. Bolt runs as a library included in your application so all data access has to go through your application's process. This brings data closer to your application but limits multi-process access to the data. ### LevelDB, RocksDB LevelDB and its derivatives (RocksDB, HyperLevelDB) are similar to Bolt in that they are libraries bundled into the application, however, their underlying structure is a log-structured merge-tree (LSM tree). An LSM tree optimizes random writes by using a write ahead log and multi-tiered, sorted files called SSTables. Bolt uses a B+tree internally and only a single file. Both approaches have trade-offs. If you require a high random write throughput (>10,000 w/sec) or you need to use spinning disks then LevelDB could be a good choice. If your application is read-heavy or does a lot of range scans then Bolt could be a good choice. One other important consideration is that LevelDB does not have transactions. It supports batch writing of key/values pairs and it supports read snapshots but it will not give you the ability to do a compare-and-swap operation safely. Bolt supports fully serializable ACID transactions. ### LMDB Bolt was originally a port of LMDB so it is architecturally similar. Both use a B+tree, have ACID semantics with fully serializable transactions, and support lock-free MVCC using a single writer and multiple readers. The two projects have somewhat diverged. LMDB heavily focuses on raw performance while Bolt has focused on simplicity and ease of use. For example, LMDB allows several unsafe actions such as direct writes for the sake of performance. Bolt opts to disallow actions which can leave the database in a corrupted state. The only exception to this in Bolt is `DB.NoSync`. There are also a few differences in API. LMDB requires a maximum mmap size when opening an `mdb_env` whereas Bolt will handle incremental mmap resizing automatically. LMDB overloads the getter and setter functions with multiple flags whereas Bolt splits these specialized cases into their own functions. ## Caveats & Limitations It's important to pick the right tool for the job and Bolt is no exception. Here are a few things to note when evaluating and using Bolt: * Bolt is good for read intensive workloads. Sequential write performance is also fast but random writes can be slow. You can use `DB.Batch()` or add a write-ahead log to help mitigate this issue. * Bolt uses a B+tree internally so there can be a lot of random page access. SSDs provide a significant performance boost over spinning disks. * Try to avoid long running read transactions. Bolt uses copy-on-write so old pages cannot be reclaimed while an old transaction is using them. * Byte slices returned from Bolt are only valid during a transaction. Once the transaction has been committed or rolled back then the memory they point to can be reused by a new page or can be unmapped from virtual memory and you'll see an `unexpected fault address` panic when accessing it. * Bolt uses an exclusive write lock on the database file so it cannot be shared by multiple processes. * Be careful when using `Bucket.FillPercent`. Setting a high fill percent for buckets that have random inserts will cause your database to have very poor page utilization. * Use larger buckets in general. Smaller buckets causes poor page utilization once they become larger than the page size (typically 4KB). * Bulk loading a lot of random writes into a new bucket can be slow as the page will not split until the transaction is committed. Randomly inserting more than 100,000 key/value pairs into a single new bucket in a single transaction is not advised. * Bolt uses a memory-mapped file so the underlying operating system handles the caching of the data. Typically, the OS will cache as much of the file as it can in memory and will release memory as needed to other processes. This means that Bolt can show very high memory usage when working with large databases. However, this is expected and the OS will release memory as needed. Bolt can handle databases much larger than the available physical RAM, provided its memory-map fits in the process virtual address space. It may be problematic on 32-bits systems. * The data structures in the Bolt database are memory mapped so the data file will be endian specific. This means that you cannot copy a Bolt file from a little endian machine to a big endian machine and have it work. For most users this is not a concern since most modern CPUs are little endian. * Because of the way pages are laid out on disk, Bolt cannot truncate data files and return free pages back to the disk. Instead, Bolt maintains a free list of unused pages within its data file. These free pages can be reused by later transactions. This works well for many use cases as databases generally tend to grow. However, it's important to note that deleting large chunks of data will not allow you to reclaim that space on disk. For more information on page allocation, [see this comment][page-allocation]. [page-allocation]: https://github.com/boltdb/bolt/issues/308#issuecomment-74811638 ## Reading the Source Bolt is a relatively small code base (<3KLOC) for an embedded, serializable, transactional key/value database so it can be a good starting point for people interested in how databases work. The best places to start are the main entry points into Bolt: - `Open()` - Initializes the reference to the database. It's responsible for creating the database if it doesn't exist, obtaining an exclusive lock on the file, reading the meta pages, & memory-mapping the file. - `DB.Begin()` - Starts a read-only or read-write transaction depending on the value of the `writable` argument. This requires briefly obtaining the "meta" lock to keep track of open transactions. Only one read-write transaction can exist at a time so the "rwlock" is acquired during the life of a read-write transaction. - `Bucket.Put()` - Writes a key/value pair into a bucket. After validating the arguments, a cursor is used to traverse the B+tree to the page and position where they key & value will be written. Once the position is found, the bucket materializes the underlying page and the page's parent pages into memory as "nodes". These nodes are where mutations occur during read-write transactions. These changes get flushed to disk during commit. - `Bucket.Get()` - Retrieves a key/value pair from a bucket. This uses a cursor to move to the page & position of a key/value pair. During a read-only transaction, the key and value data is returned as a direct reference to the underlying mmap file so there's no allocation overhead. For read-write transactions, this data may reference the mmap file or one of the in-memory node values. - `Cursor` - This object is simply for traversing the B+tree of on-disk pages or in-memory nodes. It can seek to a specific key, move to the first or last value, or it can move forward or backward. The cursor handles the movement up and down the B+tree transparently to the end user. - `Tx.Commit()` - Converts the in-memory dirty nodes and the list of free pages into pages to be written to disk. Writing to disk then occurs in two phases. First, the dirty pages are written to disk and an `fsync()` occurs. Second, a new meta page with an incremented transaction ID is written and another `fsync()` occurs. This two phase write ensures that partially written data pages are ignored in the event of a crash since the meta page pointing to them is never written. Partially written meta pages are invalidated because they are written with a checksum. If you have additional notes that could be helpful for others, please submit them via pull request. ## Other Projects Using Bolt Below is a list of public, open source projects that use Bolt: * [BoltDbWeb](https://github.com/evnix/boltdbweb) - A web based GUI for BoltDB files. * [Operation Go: A Routine Mission](http://gocode.io) - An online programming game for Golang using Bolt for user accounts and a leaderboard. * [Bazil](https://bazil.org/) - A file system that lets your data reside where it is most convenient for it to reside. * [DVID](https://github.com/janelia-flyem/dvid) - Added Bolt as optional storage engine and testing it against Basho-tuned leveldb. * [Skybox Analytics](https://github.com/skybox/skybox) - A standalone funnel analysis tool for web analytics. * [Scuttlebutt](https://github.com/benbjohnson/scuttlebutt) - Uses Bolt to store and process all Twitter mentions of GitHub projects. * [Wiki](https://github.com/peterhellberg/wiki) - A tiny wiki using Goji, BoltDB and Blackfriday. * [ChainStore](https://github.com/pressly/chainstore) - Simple key-value interface to a variety of storage engines organized as a chain of operations. * [MetricBase](https://github.com/msiebuhr/MetricBase) - Single-binary version of Graphite. * [Gitchain](https://github.com/gitchain/gitchain) - Decentralized, peer-to-peer Git repositories aka "Git meets Bitcoin". * [event-shuttle](https://github.com/sclasen/event-shuttle) - A Unix system service to collect and reliably deliver messages to Kafka. * [ipxed](https://github.com/kelseyhightower/ipxed) - Web interface and api for ipxed. * [BoltStore](https://github.com/yosssi/boltstore) - Session store using Bolt. * [photosite/session](https://godoc.org/bitbucket.org/kardianos/photosite/session) - Sessions for a photo viewing site. * [LedisDB](https://github.com/siddontang/ledisdb) - A high performance NoSQL, using Bolt as optional storage. * [ipLocator](https://github.com/AndreasBriese/ipLocator) - A fast ip-geo-location-server using bolt with bloom filters. * [cayley](https://github.com/google/cayley) - Cayley is an open-source graph database using Bolt as optional backend. * [bleve](http://www.blevesearch.com/) - A pure Go search engine similar to ElasticSearch that uses Bolt as the default storage backend. * [tentacool](https://github.com/optiflows/tentacool) - REST api server to manage system stuff (IP, DNS, Gateway...) on a linux server. * [Seaweed File System](https://github.com/chrislusf/seaweedfs) - Highly scalable distributed key~file system with O(1) disk read. * [InfluxDB](https://influxdata.com) - Scalable datastore for metrics, events, and real-time analytics. * [Freehold](http://tshannon.bitbucket.org/freehold/) - An open, secure, and lightweight platform for your files and data. * [Prometheus Annotation Server](https://github.com/oliver006/prom_annotation_server) - Annotation server for PromDash & Prometheus service monitoring system. * [Consul](https://github.com/hashicorp/consul) - Consul is service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. * [Kala](https://github.com/ajvb/kala) - Kala is a modern job scheduler optimized to run on a single node. It is persistent, JSON over HTTP API, ISO 8601 duration notation, and dependent jobs. * [drive](https://github.com/odeke-em/drive) - drive is an unofficial Google Drive command line client for \*NIX operating systems. * [stow](https://github.com/djherbis/stow) - a persistence manager for objects backed by boltdb. * [buckets](https://github.com/joyrexus/buckets) - a bolt wrapper streamlining simple tx and key scans. * [mbuckets](https://github.com/abhigupta912/mbuckets) - A Bolt wrapper that allows easy operations on multi level (nested) buckets. * [Request Baskets](https://github.com/darklynx/request-baskets) - A web service to collect arbitrary HTTP requests and inspect them via REST API or simple web UI, similar to [RequestBin](http://requestb.in/) service * [Go Report Card](https://goreportcard.com/) - Go code quality report cards as a (free and open source) service. * [Boltdb Boilerplate](https://github.com/bobintornado/boltdb-boilerplate) - Boilerplate wrapper around bolt aiming to make simple calls one-liners. * [lru](https://github.com/crowdriff/lru) - Easy to use Bolt-backed Least-Recently-Used (LRU) read-through cache with chainable remote stores. * [Storm](https://github.com/asdine/storm) - Simple and powerful ORM for BoltDB. * [GoWebApp](https://github.com/josephspurrier/gowebapp) - A basic MVC web application in Go using BoltDB. * [SimpleBolt](https://github.com/xyproto/simplebolt) - A simple way to use BoltDB. Deals mainly with strings. * [Algernon](https://github.com/xyproto/algernon) - A HTTP/2 web server with built-in support for Lua. Uses BoltDB as the default database backend. * [MuLiFS](https://github.com/dankomiocevic/mulifs) - Music Library Filesystem creates a filesystem to organise your music files. * [GoShort](https://github.com/pankajkhairnar/goShort) - GoShort is a URL shortener written in Golang and BoltDB for persistent key/value storage and for routing it's using high performent HTTPRouter. * [torrent](https://github.com/anacrolix/torrent) - Full-featured BitTorrent client package and utilities in Go. BoltDB is a storage backend in development. * [gopherpit](https://github.com/gopherpit/gopherpit) - A web service to manage Go remote import paths with custom domains * [bolter](https://github.com/hasit/bolter) - Command-line app for viewing BoltDB file in your terminal. * [btcwallet](https://github.com/btcsuite/btcwallet) - A bitcoin wallet. * [dcrwallet](https://github.com/decred/dcrwallet) - A wallet for the Decred cryptocurrency. * [Ironsmith](https://github.com/timshannon/ironsmith) - A simple, script-driven continuous integration (build - > test -> release) tool, with no external dependencies * [BoltHold](https://github.com/timshannon/bolthold) - An embeddable NoSQL store for Go types built on BoltDB * [Ponzu CMS](https://ponzu-cms.org) - Headless CMS + automatic JSON API with auto-HTTPS, HTTP/2 Server Push, and flexible server framework. If you are using Bolt in a project please send a pull request to add it to the list. dep-0.3.2/vendor/github.com/boltdb/bolt/appveyor.yml000066400000000000000000000004061317166637100224310ustar00rootroot00000000000000version: "{build}" os: Windows Server 2012 R2 clone_folder: c:\gopath\src\github.com\boltdb\bolt environment: GOPATH: c:\gopath install: - echo %PATH% - echo %GOPATH% - go version - go env - go get -v -t ./... build_script: - go test -v ./... dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_386.go000066400000000000000000000004431317166637100217310ustar00rootroot00000000000000package bolt // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0x7FFFFFFF // 2GB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0xFFFFFFF // Are unaligned load/stores broken on this arch? var brokenUnaligned = false dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_amd64.go000066400000000000000000000004521317166637100223240ustar00rootroot00000000000000package bolt // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF // Are unaligned load/stores broken on this arch? var brokenUnaligned = false dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_arm.go000066400000000000000000000014771317166637100222000ustar00rootroot00000000000000package bolt import "unsafe" // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0x7FFFFFFF // 2GB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0xFFFFFFF // Are unaligned load/stores broken on this arch? var brokenUnaligned bool func init() { // Simple check to see whether this arch handles unaligned load/stores // correctly. // ARM9 and older devices require load/stores to be from/to aligned // addresses. If not, the lower 2 bits are cleared and that address is // read in a jumbled up order. // See http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka15414.html raw := [6]byte{0xfe, 0xef, 0x11, 0x22, 0x22, 0x11} val := *(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&raw)) + 2)) brokenUnaligned = val != 0x11222211 } dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_arm64.go000066400000000000000000000004731317166637100223450ustar00rootroot00000000000000// +build arm64 package bolt // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF // Are unaligned load/stores broken on this arch? var brokenUnaligned = false dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_linux.go000066400000000000000000000002531317166637100225470ustar00rootroot00000000000000package bolt import ( "syscall" ) // fdatasync flushes written data to a file descriptor. func fdatasync(db *DB) error { return syscall.Fdatasync(int(db.file.Fd())) } dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_openbsd.go000066400000000000000000000010061317166637100230370ustar00rootroot00000000000000package bolt import ( "syscall" "unsafe" ) const ( msAsync = 1 << iota // perform asynchronous writes msSync // perform synchronous writes msInvalidate // invalidate cached data ) func msync(db *DB) error { _, _, errno := syscall.Syscall(syscall.SYS_MSYNC, uintptr(unsafe.Pointer(db.data)), uintptr(db.datasz), msInvalidate) if errno != 0 { return errno } return nil } func fdatasync(db *DB) error { if db.data != nil { return msync(db) } return db.file.Sync() } dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_ppc.go000066400000000000000000000003431317166637100221720ustar00rootroot00000000000000// +build ppc package bolt // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0x7FFFFFFF // 2GB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0xFFFFFFF dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_ppc64.go000066400000000000000000000004731317166637100223500ustar00rootroot00000000000000// +build ppc64 package bolt // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF // Are unaligned load/stores broken on this arch? var brokenUnaligned = false dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_ppc64le.go000066400000000000000000000004751317166637100226730ustar00rootroot00000000000000// +build ppc64le package bolt // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF // Are unaligned load/stores broken on this arch? var brokenUnaligned = false dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_s390x.go000066400000000000000000000004731317166637100223020ustar00rootroot00000000000000// +build s390x package bolt // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF // Are unaligned load/stores broken on this arch? var brokenUnaligned = false dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_unix.go000066400000000000000000000041701317166637100223750ustar00rootroot00000000000000// +build !windows,!plan9,!solaris package bolt import ( "fmt" "os" "syscall" "time" "unsafe" ) // flock acquires an advisory lock on a file descriptor. func flock(db *DB, mode os.FileMode, exclusive bool, timeout time.Duration) error { var t time.Time for { // If we're beyond our timeout then return an error. // This can only occur after we've attempted a flock once. if t.IsZero() { t = time.Now() } else if timeout > 0 && time.Since(t) > timeout { return ErrTimeout } flag := syscall.LOCK_SH if exclusive { flag = syscall.LOCK_EX } // Otherwise attempt to obtain an exclusive lock. err := syscall.Flock(int(db.file.Fd()), flag|syscall.LOCK_NB) if err == nil { return nil } else if err != syscall.EWOULDBLOCK { return err } // Wait for a bit and try again. time.Sleep(50 * time.Millisecond) } } // funlock releases an advisory lock on a file descriptor. func funlock(db *DB) error { return syscall.Flock(int(db.file.Fd()), syscall.LOCK_UN) } // mmap memory maps a DB's data file. func mmap(db *DB, sz int) error { // Map the data file to memory. b, err := syscall.Mmap(int(db.file.Fd()), 0, sz, syscall.PROT_READ, syscall.MAP_SHARED|db.MmapFlags) if err != nil { return err } // Advise the kernel that the mmap is accessed randomly. if err := madvise(b, syscall.MADV_RANDOM); err != nil { return fmt.Errorf("madvise: %s", err) } // Save the original byte slice and convert to a byte array pointer. db.dataref = b db.data = (*[maxMapSize]byte)(unsafe.Pointer(&b[0])) db.datasz = sz return nil } // munmap unmaps a DB's data file from memory. func munmap(db *DB) error { // Ignore the unmap if we have no mapped data. if db.dataref == nil { return nil } // Unmap using the original byte slice. err := syscall.Munmap(db.dataref) db.dataref = nil db.data = nil db.datasz = 0 return err } // NOTE: This function is copied from stdlib because it is not available on darwin. func madvise(b []byte, advice int) (err error) { _, _, e1 := syscall.Syscall(syscall.SYS_MADVISE, uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), uintptr(advice)) if e1 != 0 { err = e1 } return } dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_unix_solaris.go000066400000000000000000000040131317166637100241250ustar00rootroot00000000000000package bolt import ( "fmt" "os" "syscall" "time" "unsafe" "golang.org/x/sys/unix" ) // flock acquires an advisory lock on a file descriptor. func flock(db *DB, mode os.FileMode, exclusive bool, timeout time.Duration) error { var t time.Time for { // If we're beyond our timeout then return an error. // This can only occur after we've attempted a flock once. if t.IsZero() { t = time.Now() } else if timeout > 0 && time.Since(t) > timeout { return ErrTimeout } var lock syscall.Flock_t lock.Start = 0 lock.Len = 0 lock.Pid = 0 lock.Whence = 0 lock.Pid = 0 if exclusive { lock.Type = syscall.F_WRLCK } else { lock.Type = syscall.F_RDLCK } err := syscall.FcntlFlock(db.file.Fd(), syscall.F_SETLK, &lock) if err == nil { return nil } else if err != syscall.EAGAIN { return err } // Wait for a bit and try again. time.Sleep(50 * time.Millisecond) } } // funlock releases an advisory lock on a file descriptor. func funlock(db *DB) error { var lock syscall.Flock_t lock.Start = 0 lock.Len = 0 lock.Type = syscall.F_UNLCK lock.Whence = 0 return syscall.FcntlFlock(uintptr(db.file.Fd()), syscall.F_SETLK, &lock) } // mmap memory maps a DB's data file. func mmap(db *DB, sz int) error { // Map the data file to memory. b, err := unix.Mmap(int(db.file.Fd()), 0, sz, syscall.PROT_READ, syscall.MAP_SHARED|db.MmapFlags) if err != nil { return err } // Advise the kernel that the mmap is accessed randomly. if err := unix.Madvise(b, syscall.MADV_RANDOM); err != nil { return fmt.Errorf("madvise: %s", err) } // Save the original byte slice and convert to a byte array pointer. db.dataref = b db.data = (*[maxMapSize]byte)(unsafe.Pointer(&b[0])) db.datasz = sz return nil } // munmap unmaps a DB's data file from memory. func munmap(db *DB) error { // Ignore the unmap if we have no mapped data. if db.dataref == nil { return nil } // Unmap using the original byte slice. err := unix.Munmap(db.dataref) db.dataref = nil db.data = nil db.datasz = 0 return err } dep-0.3.2/vendor/github.com/boltdb/bolt/bolt_windows.go000066400000000000000000000075321317166637100231110ustar00rootroot00000000000000package bolt import ( "fmt" "os" "syscall" "time" "unsafe" ) // LockFileEx code derived from golang build filemutex_windows.go @ v1.5.1 var ( modkernel32 = syscall.NewLazyDLL("kernel32.dll") procLockFileEx = modkernel32.NewProc("LockFileEx") procUnlockFileEx = modkernel32.NewProc("UnlockFileEx") ) const ( lockExt = ".lock" // see https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203(v=vs.85).aspx flagLockExclusive = 2 flagLockFailImmediately = 1 // see https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx errLockViolation syscall.Errno = 0x21 ) func lockFileEx(h syscall.Handle, flags, reserved, locklow, lockhigh uint32, ol *syscall.Overlapped) (err error) { r, _, err := procLockFileEx.Call(uintptr(h), uintptr(flags), uintptr(reserved), uintptr(locklow), uintptr(lockhigh), uintptr(unsafe.Pointer(ol))) if r == 0 { return err } return nil } func unlockFileEx(h syscall.Handle, reserved, locklow, lockhigh uint32, ol *syscall.Overlapped) (err error) { r, _, err := procUnlockFileEx.Call(uintptr(h), uintptr(reserved), uintptr(locklow), uintptr(lockhigh), uintptr(unsafe.Pointer(ol)), 0) if r == 0 { return err } return nil } // fdatasync flushes written data to a file descriptor. func fdatasync(db *DB) error { return db.file.Sync() } // flock acquires an advisory lock on a file descriptor. func flock(db *DB, mode os.FileMode, exclusive bool, timeout time.Duration) error { // Create a separate lock file on windows because a process // cannot share an exclusive lock on the same file. This is // needed during Tx.WriteTo(). f, err := os.OpenFile(db.path+lockExt, os.O_CREATE, mode) if err != nil { return err } db.lockfile = f var t time.Time for { // If we're beyond our timeout then return an error. // This can only occur after we've attempted a flock once. if t.IsZero() { t = time.Now() } else if timeout > 0 && time.Since(t) > timeout { return ErrTimeout } var flag uint32 = flagLockFailImmediately if exclusive { flag |= flagLockExclusive } err := lockFileEx(syscall.Handle(db.lockfile.Fd()), flag, 0, 1, 0, &syscall.Overlapped{}) if err == nil { return nil } else if err != errLockViolation { return err } // Wait for a bit and try again. time.Sleep(50 * time.Millisecond) } } // funlock releases an advisory lock on a file descriptor. func funlock(db *DB) error { err := unlockFileEx(syscall.Handle(db.lockfile.Fd()), 0, 1, 0, &syscall.Overlapped{}) db.lockfile.Close() os.Remove(db.path + lockExt) return err } // mmap memory maps a DB's data file. // Based on: https://github.com/edsrzf/mmap-go func mmap(db *DB, sz int) error { if !db.readOnly { // Truncate the database to the size of the mmap. if err := db.file.Truncate(int64(sz)); err != nil { return fmt.Errorf("truncate: %s", err) } } // Open a file mapping handle. sizelo := uint32(sz >> 32) sizehi := uint32(sz) & 0xffffffff h, errno := syscall.CreateFileMapping(syscall.Handle(db.file.Fd()), nil, syscall.PAGE_READONLY, sizelo, sizehi, nil) if h == 0 { return os.NewSyscallError("CreateFileMapping", errno) } // Create the memory map. addr, errno := syscall.MapViewOfFile(h, syscall.FILE_MAP_READ, 0, 0, uintptr(sz)) if addr == 0 { return os.NewSyscallError("MapViewOfFile", errno) } // Close mapping handle. if err := syscall.CloseHandle(syscall.Handle(h)); err != nil { return os.NewSyscallError("CloseHandle", err) } // Convert to a byte array. db.data = ((*[maxMapSize]byte)(unsafe.Pointer(addr))) db.datasz = sz return nil } // munmap unmaps a pointer from a file. // Based on: https://github.com/edsrzf/mmap-go func munmap(db *DB) error { if db.data == nil { return nil } addr := (uintptr)(unsafe.Pointer(&db.data[0])) if err := syscall.UnmapViewOfFile(addr); err != nil { return os.NewSyscallError("UnmapViewOfFile", err) } return nil } dep-0.3.2/vendor/github.com/boltdb/bolt/boltsync_unix.go000066400000000000000000000002511317166637100232660ustar00rootroot00000000000000// +build !windows,!plan9,!linux,!openbsd package bolt // fdatasync flushes written data to a file descriptor. func fdatasync(db *DB) error { return db.file.Sync() } dep-0.3.2/vendor/github.com/boltdb/bolt/bucket.go000066400000000000000000000515261317166637100216560ustar00rootroot00000000000000package bolt import ( "bytes" "fmt" "unsafe" ) const ( // MaxKeySize is the maximum length of a key, in bytes. MaxKeySize = 32768 // MaxValueSize is the maximum length of a value, in bytes. MaxValueSize = (1 << 31) - 2 ) const ( maxUint = ^uint(0) minUint = 0 maxInt = int(^uint(0) >> 1) minInt = -maxInt - 1 ) const bucketHeaderSize = int(unsafe.Sizeof(bucket{})) const ( minFillPercent = 0.1 maxFillPercent = 1.0 ) // DefaultFillPercent is the percentage that split pages are filled. // This value can be changed by setting Bucket.FillPercent. const DefaultFillPercent = 0.5 // Bucket represents a collection of key/value pairs inside the database. type Bucket struct { *bucket tx *Tx // the associated transaction buckets map[string]*Bucket // subbucket cache page *page // inline page reference rootNode *node // materialized node for the root page. nodes map[pgid]*node // node cache // Sets the threshold for filling nodes when they split. By default, // the bucket will fill to 50% but it can be useful to increase this // amount if you know that your write workloads are mostly append-only. // // This is non-persisted across transactions so it must be set in every Tx. FillPercent float64 } // bucket represents the on-file representation of a bucket. // This is stored as the "value" of a bucket key. If the bucket is small enough, // then its root page can be stored inline in the "value", after the bucket // header. In the case of inline buckets, the "root" will be 0. type bucket struct { root pgid // page id of the bucket's root-level page sequence uint64 // monotonically incrementing, used by NextSequence() } // newBucket returns a new bucket associated with a transaction. func newBucket(tx *Tx) Bucket { var b = Bucket{tx: tx, FillPercent: DefaultFillPercent} if tx.writable { b.buckets = make(map[string]*Bucket) b.nodes = make(map[pgid]*node) } return b } // Tx returns the tx of the bucket. func (b *Bucket) Tx() *Tx { return b.tx } // Root returns the root of the bucket. func (b *Bucket) Root() pgid { return b.root } // Writable returns whether the bucket is writable. func (b *Bucket) Writable() bool { return b.tx.writable } // Cursor creates a cursor associated with the bucket. // The cursor is only valid as long as the transaction is open. // Do not use a cursor after the transaction is closed. func (b *Bucket) Cursor() *Cursor { // Update transaction statistics. b.tx.stats.CursorCount++ // Allocate and return a cursor. return &Cursor{ bucket: b, stack: make([]elemRef, 0), } } // Bucket retrieves a nested bucket by name. // Returns nil if the bucket does not exist. // The bucket instance is only valid for the lifetime of the transaction. func (b *Bucket) Bucket(name []byte) *Bucket { if b.buckets != nil { if child := b.buckets[string(name)]; child != nil { return child } } // Move cursor to key. c := b.Cursor() k, v, flags := c.seek(name) // Return nil if the key doesn't exist or it is not a bucket. if !bytes.Equal(name, k) || (flags&bucketLeafFlag) == 0 { return nil } // Otherwise create a bucket and cache it. var child = b.openBucket(v) if b.buckets != nil { b.buckets[string(name)] = child } return child } // Helper method that re-interprets a sub-bucket value // from a parent into a Bucket func (b *Bucket) openBucket(value []byte) *Bucket { var child = newBucket(b.tx) // If unaligned load/stores are broken on this arch and value is // unaligned simply clone to an aligned byte array. unaligned := brokenUnaligned && uintptr(unsafe.Pointer(&value[0]))&3 != 0 if unaligned { value = cloneBytes(value) } // If this is a writable transaction then we need to copy the bucket entry. // Read-only transactions can point directly at the mmap entry. if b.tx.writable && !unaligned { child.bucket = &bucket{} *child.bucket = *(*bucket)(unsafe.Pointer(&value[0])) } else { child.bucket = (*bucket)(unsafe.Pointer(&value[0])) } // Save a reference to the inline page if the bucket is inline. if child.root == 0 { child.page = (*page)(unsafe.Pointer(&value[bucketHeaderSize])) } return &child } // CreateBucket creates a new bucket at the given key and returns the new bucket. // Returns an error if the key already exists, if the bucket name is blank, or if the bucket name is too long. // The bucket instance is only valid for the lifetime of the transaction. func (b *Bucket) CreateBucket(key []byte) (*Bucket, error) { if b.tx.db == nil { return nil, ErrTxClosed } else if !b.tx.writable { return nil, ErrTxNotWritable } else if len(key) == 0 { return nil, ErrBucketNameRequired } // Move cursor to correct position. c := b.Cursor() k, _, flags := c.seek(key) // Return an error if there is an existing key. if bytes.Equal(key, k) { if (flags & bucketLeafFlag) != 0 { return nil, ErrBucketExists } return nil, ErrIncompatibleValue } // Create empty, inline bucket. var bucket = Bucket{ bucket: &bucket{}, rootNode: &node{isLeaf: true}, FillPercent: DefaultFillPercent, } var value = bucket.write() // Insert into node. key = cloneBytes(key) c.node().put(key, key, value, 0, bucketLeafFlag) // Since subbuckets are not allowed on inline buckets, we need to // dereference the inline page, if it exists. This will cause the bucket // to be treated as a regular, non-inline bucket for the rest of the tx. b.page = nil return b.Bucket(key), nil } // CreateBucketIfNotExists creates a new bucket if it doesn't already exist and returns a reference to it. // Returns an error if the bucket name is blank, or if the bucket name is too long. // The bucket instance is only valid for the lifetime of the transaction. func (b *Bucket) CreateBucketIfNotExists(key []byte) (*Bucket, error) { child, err := b.CreateBucket(key) if err == ErrBucketExists { return b.Bucket(key), nil } else if err != nil { return nil, err } return child, nil } // DeleteBucket deletes a bucket at the given key. // Returns an error if the bucket does not exists, or if the key represents a non-bucket value. func (b *Bucket) DeleteBucket(key []byte) error { if b.tx.db == nil { return ErrTxClosed } else if !b.Writable() { return ErrTxNotWritable } // Move cursor to correct position. c := b.Cursor() k, _, flags := c.seek(key) // Return an error if bucket doesn't exist or is not a bucket. if !bytes.Equal(key, k) { return ErrBucketNotFound } else if (flags & bucketLeafFlag) == 0 { return ErrIncompatibleValue } // Recursively delete all child buckets. child := b.Bucket(key) err := child.ForEach(func(k, v []byte) error { if v == nil { if err := child.DeleteBucket(k); err != nil { return fmt.Errorf("delete bucket: %s", err) } } return nil }) if err != nil { return err } // Remove cached copy. delete(b.buckets, string(key)) // Release all bucket pages to freelist. child.nodes = nil child.rootNode = nil child.free() // Delete the node if we have a matching key. c.node().del(key) return nil } // Get retrieves the value for a key in the bucket. // Returns a nil value if the key does not exist or if the key is a nested bucket. // The returned value is only valid for the life of the transaction. func (b *Bucket) Get(key []byte) []byte { k, v, flags := b.Cursor().seek(key) // Return nil if this is a bucket. if (flags & bucketLeafFlag) != 0 { return nil } // If our target node isn't the same key as what's passed in then return nil. if !bytes.Equal(key, k) { return nil } return v } // Put sets the value for a key in the bucket. // If the key exist then its previous value will be overwritten. // Supplied value must remain valid for the life of the transaction. // Returns an error if the bucket was created from a read-only transaction, if the key is blank, if the key is too large, or if the value is too large. func (b *Bucket) Put(key []byte, value []byte) error { if b.tx.db == nil { return ErrTxClosed } else if !b.Writable() { return ErrTxNotWritable } else if len(key) == 0 { return ErrKeyRequired } else if len(key) > MaxKeySize { return ErrKeyTooLarge } else if int64(len(value)) > MaxValueSize { return ErrValueTooLarge } // Move cursor to correct position. c := b.Cursor() k, _, flags := c.seek(key) // Return an error if there is an existing key with a bucket value. if bytes.Equal(key, k) && (flags&bucketLeafFlag) != 0 { return ErrIncompatibleValue } // Insert into node. key = cloneBytes(key) c.node().put(key, key, value, 0, 0) return nil } // Delete removes a key from the bucket. // If the key does not exist then nothing is done and a nil error is returned. // Returns an error if the bucket was created from a read-only transaction. func (b *Bucket) Delete(key []byte) error { if b.tx.db == nil { return ErrTxClosed } else if !b.Writable() { return ErrTxNotWritable } // Move cursor to correct position. c := b.Cursor() _, _, flags := c.seek(key) // Return an error if there is already existing bucket value. if (flags & bucketLeafFlag) != 0 { return ErrIncompatibleValue } // Delete the node if we have a matching key. c.node().del(key) return nil } // Sequence returns the current integer for the bucket without incrementing it. func (b *Bucket) Sequence() uint64 { return b.bucket.sequence } // SetSequence updates the sequence number for the bucket. func (b *Bucket) SetSequence(v uint64) error { if b.tx.db == nil { return ErrTxClosed } else if !b.Writable() { return ErrTxNotWritable } // Materialize the root node if it hasn't been already so that the // bucket will be saved during commit. if b.rootNode == nil { _ = b.node(b.root, nil) } // Increment and return the sequence. b.bucket.sequence = v return nil } // NextSequence returns an autoincrementing integer for the bucket. func (b *Bucket) NextSequence() (uint64, error) { if b.tx.db == nil { return 0, ErrTxClosed } else if !b.Writable() { return 0, ErrTxNotWritable } // Materialize the root node if it hasn't been already so that the // bucket will be saved during commit. if b.rootNode == nil { _ = b.node(b.root, nil) } // Increment and return the sequence. b.bucket.sequence++ return b.bucket.sequence, nil } // ForEach executes a function for each key/value pair in a bucket. // If the provided function returns an error then the iteration is stopped and // the error is returned to the caller. The provided function must not modify // the bucket; this will result in undefined behavior. func (b *Bucket) ForEach(fn func(k, v []byte) error) error { if b.tx.db == nil { return ErrTxClosed } c := b.Cursor() for k, v := c.First(); k != nil; k, v = c.Next() { if err := fn(k, v); err != nil { return err } } return nil } // Stat returns stats on a bucket. func (b *Bucket) Stats() BucketStats { var s, subStats BucketStats pageSize := b.tx.db.pageSize s.BucketN += 1 if b.root == 0 { s.InlineBucketN += 1 } b.forEachPage(func(p *page, depth int) { if (p.flags & leafPageFlag) != 0 { s.KeyN += int(p.count) // used totals the used bytes for the page used := pageHeaderSize if p.count != 0 { // If page has any elements, add all element headers. used += leafPageElementSize * int(p.count-1) // Add all element key, value sizes. // The computation takes advantage of the fact that the position // of the last element's key/value equals to the total of the sizes // of all previous elements' keys and values. // It also includes the last element's header. lastElement := p.leafPageElement(p.count - 1) used += int(lastElement.pos + lastElement.ksize + lastElement.vsize) } if b.root == 0 { // For inlined bucket just update the inline stats s.InlineBucketInuse += used } else { // For non-inlined bucket update all the leaf stats s.LeafPageN++ s.LeafInuse += used s.LeafOverflowN += int(p.overflow) // Collect stats from sub-buckets. // Do that by iterating over all element headers // looking for the ones with the bucketLeafFlag. for i := uint16(0); i < p.count; i++ { e := p.leafPageElement(i) if (e.flags & bucketLeafFlag) != 0 { // For any bucket element, open the element value // and recursively call Stats on the contained bucket. subStats.Add(b.openBucket(e.value()).Stats()) } } } } else if (p.flags & branchPageFlag) != 0 { s.BranchPageN++ lastElement := p.branchPageElement(p.count - 1) // used totals the used bytes for the page // Add header and all element headers. used := pageHeaderSize + (branchPageElementSize * int(p.count-1)) // Add size of all keys and values. // Again, use the fact that last element's position equals to // the total of key, value sizes of all previous elements. used += int(lastElement.pos + lastElement.ksize) s.BranchInuse += used s.BranchOverflowN += int(p.overflow) } // Keep track of maximum page depth. if depth+1 > s.Depth { s.Depth = (depth + 1) } }) // Alloc stats can be computed from page counts and pageSize. s.BranchAlloc = (s.BranchPageN + s.BranchOverflowN) * pageSize s.LeafAlloc = (s.LeafPageN + s.LeafOverflowN) * pageSize // Add the max depth of sub-buckets to get total nested depth. s.Depth += subStats.Depth // Add the stats for all sub-buckets s.Add(subStats) return s } // forEachPage iterates over every page in a bucket, including inline pages. func (b *Bucket) forEachPage(fn func(*page, int)) { // If we have an inline page then just use that. if b.page != nil { fn(b.page, 0) return } // Otherwise traverse the page hierarchy. b.tx.forEachPage(b.root, 0, fn) } // forEachPageNode iterates over every page (or node) in a bucket. // This also includes inline pages. func (b *Bucket) forEachPageNode(fn func(*page, *node, int)) { // If we have an inline page or root node then just use that. if b.page != nil { fn(b.page, nil, 0) return } b._forEachPageNode(b.root, 0, fn) } func (b *Bucket) _forEachPageNode(pgid pgid, depth int, fn func(*page, *node, int)) { var p, n = b.pageNode(pgid) // Execute function. fn(p, n, depth) // Recursively loop over children. if p != nil { if (p.flags & branchPageFlag) != 0 { for i := 0; i < int(p.count); i++ { elem := p.branchPageElement(uint16(i)) b._forEachPageNode(elem.pgid, depth+1, fn) } } } else { if !n.isLeaf { for _, inode := range n.inodes { b._forEachPageNode(inode.pgid, depth+1, fn) } } } } // spill writes all the nodes for this bucket to dirty pages. func (b *Bucket) spill() error { // Spill all child buckets first. for name, child := range b.buckets { // If the child bucket is small enough and it has no child buckets then // write it inline into the parent bucket's page. Otherwise spill it // like a normal bucket and make the parent value a pointer to the page. var value []byte if child.inlineable() { child.free() value = child.write() } else { if err := child.spill(); err != nil { return err } // Update the child bucket header in this bucket. value = make([]byte, unsafe.Sizeof(bucket{})) var bucket = (*bucket)(unsafe.Pointer(&value[0])) *bucket = *child.bucket } // Skip writing the bucket if there are no materialized nodes. if child.rootNode == nil { continue } // Update parent node. var c = b.Cursor() k, _, flags := c.seek([]byte(name)) if !bytes.Equal([]byte(name), k) { panic(fmt.Sprintf("misplaced bucket header: %x -> %x", []byte(name), k)) } if flags&bucketLeafFlag == 0 { panic(fmt.Sprintf("unexpected bucket header flag: %x", flags)) } c.node().put([]byte(name), []byte(name), value, 0, bucketLeafFlag) } // Ignore if there's not a materialized root node. if b.rootNode == nil { return nil } // Spill nodes. if err := b.rootNode.spill(); err != nil { return err } b.rootNode = b.rootNode.root() // Update the root node for this bucket. if b.rootNode.pgid >= b.tx.meta.pgid { panic(fmt.Sprintf("pgid (%d) above high water mark (%d)", b.rootNode.pgid, b.tx.meta.pgid)) } b.root = b.rootNode.pgid return nil } // inlineable returns true if a bucket is small enough to be written inline // and if it contains no subbuckets. Otherwise returns false. func (b *Bucket) inlineable() bool { var n = b.rootNode // Bucket must only contain a single leaf node. if n == nil || !n.isLeaf { return false } // Bucket is not inlineable if it contains subbuckets or if it goes beyond // our threshold for inline bucket size. var size = pageHeaderSize for _, inode := range n.inodes { size += leafPageElementSize + len(inode.key) + len(inode.value) if inode.flags&bucketLeafFlag != 0 { return false } else if size > b.maxInlineBucketSize() { return false } } return true } // Returns the maximum total size of a bucket to make it a candidate for inlining. func (b *Bucket) maxInlineBucketSize() int { return b.tx.db.pageSize / 4 } // write allocates and writes a bucket to a byte slice. func (b *Bucket) write() []byte { // Allocate the appropriate size. var n = b.rootNode var value = make([]byte, bucketHeaderSize+n.size()) // Write a bucket header. var bucket = (*bucket)(unsafe.Pointer(&value[0])) *bucket = *b.bucket // Convert byte slice to a fake page and write the root node. var p = (*page)(unsafe.Pointer(&value[bucketHeaderSize])) n.write(p) return value } // rebalance attempts to balance all nodes. func (b *Bucket) rebalance() { for _, n := range b.nodes { n.rebalance() } for _, child := range b.buckets { child.rebalance() } } // node creates a node from a page and associates it with a given parent. func (b *Bucket) node(pgid pgid, parent *node) *node { _assert(b.nodes != nil, "nodes map expected") // Retrieve node if it's already been created. if n := b.nodes[pgid]; n != nil { return n } // Otherwise create a node and cache it. n := &node{bucket: b, parent: parent} if parent == nil { b.rootNode = n } else { parent.children = append(parent.children, n) } // Use the inline page if this is an inline bucket. var p = b.page if p == nil { p = b.tx.page(pgid) } // Read the page into the node and cache it. n.read(p) b.nodes[pgid] = n // Update statistics. b.tx.stats.NodeCount++ return n } // free recursively frees all pages in the bucket. func (b *Bucket) free() { if b.root == 0 { return } var tx = b.tx b.forEachPageNode(func(p *page, n *node, _ int) { if p != nil { tx.db.freelist.free(tx.meta.txid, p) } else { n.free() } }) b.root = 0 } // dereference removes all references to the old mmap. func (b *Bucket) dereference() { if b.rootNode != nil { b.rootNode.root().dereference() } for _, child := range b.buckets { child.dereference() } } // pageNode returns the in-memory node, if it exists. // Otherwise returns the underlying page. func (b *Bucket) pageNode(id pgid) (*page, *node) { // Inline buckets have a fake page embedded in their value so treat them // differently. We'll return the rootNode (if available) or the fake page. if b.root == 0 { if id != 0 { panic(fmt.Sprintf("inline bucket non-zero page access(2): %d != 0", id)) } if b.rootNode != nil { return nil, b.rootNode } return b.page, nil } // Check the node cache for non-inline buckets. if b.nodes != nil { if n := b.nodes[id]; n != nil { return nil, n } } // Finally lookup the page from the transaction if no node is materialized. return b.tx.page(id), nil } // BucketStats records statistics about resources used by a bucket. type BucketStats struct { // Page count statistics. BranchPageN int // number of logical branch pages BranchOverflowN int // number of physical branch overflow pages LeafPageN int // number of logical leaf pages LeafOverflowN int // number of physical leaf overflow pages // Tree statistics. KeyN int // number of keys/value pairs Depth int // number of levels in B+tree // Page size utilization. BranchAlloc int // bytes allocated for physical branch pages BranchInuse int // bytes actually used for branch data LeafAlloc int // bytes allocated for physical leaf pages LeafInuse int // bytes actually used for leaf data // Bucket statistics BucketN int // total number of buckets including the top bucket InlineBucketN int // total number on inlined buckets InlineBucketInuse int // bytes used for inlined buckets (also accounted for in LeafInuse) } func (s *BucketStats) Add(other BucketStats) { s.BranchPageN += other.BranchPageN s.BranchOverflowN += other.BranchOverflowN s.LeafPageN += other.LeafPageN s.LeafOverflowN += other.LeafOverflowN s.KeyN += other.KeyN if s.Depth < other.Depth { s.Depth = other.Depth } s.BranchAlloc += other.BranchAlloc s.BranchInuse += other.BranchInuse s.LeafAlloc += other.LeafAlloc s.LeafInuse += other.LeafInuse s.BucketN += other.BucketN s.InlineBucketN += other.InlineBucketN s.InlineBucketInuse += other.InlineBucketInuse } // cloneBytes returns a copy of a given slice. func cloneBytes(v []byte) []byte { var clone = make([]byte, len(v)) copy(clone, v) return clone } dep-0.3.2/vendor/github.com/boltdb/bolt/bucket_test.go000066400000000000000000001336241317166637100227150ustar00rootroot00000000000000package bolt_test import ( "bytes" "encoding/binary" "errors" "fmt" "log" "math/rand" "os" "strconv" "strings" "testing" "testing/quick" "github.com/boltdb/bolt" ) // Ensure that a bucket that gets a non-existent key returns nil. func TestBucket_Get_NonExistent(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if v := b.Get([]byte("foo")); v != nil { t.Fatal("expected nil value") } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can read a value that is not flushed yet. func TestBucket_Get_FromNode(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if v := b.Get([]byte("foo")); !bytes.Equal(v, []byte("bar")) { t.Fatalf("unexpected value: %v", v) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket retrieved via Get() returns a nil. func TestBucket_Get_IncompatibleValue(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if _, err := tx.Bucket([]byte("widgets")).CreateBucket([]byte("foo")); err != nil { t.Fatal(err) } if tx.Bucket([]byte("widgets")).Get([]byte("foo")) != nil { t.Fatal("expected nil value") } return nil }); err != nil { t.Fatal(err) } } // Ensure that a slice returned from a bucket has a capacity equal to its length. // This also allows slices to be appended to since it will require a realloc by Go. // // https://github.com/boltdb/bolt/issues/544 func TestBucket_Get_Capacity(t *testing.T) { db := MustOpenDB() defer db.MustClose() // Write key to a bucket. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("bucket")) if err != nil { return err } return b.Put([]byte("key"), []byte("val")) }); err != nil { t.Fatal(err) } // Retrieve value and attempt to append to it. if err := db.Update(func(tx *bolt.Tx) error { k, v := tx.Bucket([]byte("bucket")).Cursor().First() // Verify capacity. if len(k) != cap(k) { t.Fatalf("unexpected key slice capacity: %d", cap(k)) } else if len(v) != cap(v) { t.Fatalf("unexpected value slice capacity: %d", cap(v)) } // Ensure slice can be appended to without a segfault. k = append(k, []byte("123")...) v = append(v, []byte("123")...) return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can write a key/value. func TestBucket_Put(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } v := tx.Bucket([]byte("widgets")).Get([]byte("foo")) if !bytes.Equal([]byte("bar"), v) { t.Fatalf("unexpected value: %v", v) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can rewrite a key in the same transaction. func TestBucket_Put_Repeat(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("baz")); err != nil { t.Fatal(err) } value := tx.Bucket([]byte("widgets")).Get([]byte("foo")) if !bytes.Equal([]byte("baz"), value) { t.Fatalf("unexpected value: %v", value) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can write a bunch of large values. func TestBucket_Put_Large(t *testing.T) { db := MustOpenDB() defer db.MustClose() count, factor := 100, 200 if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } for i := 1; i < count; i++ { if err := b.Put([]byte(strings.Repeat("0", i*factor)), []byte(strings.Repeat("X", (count-i)*factor))); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for i := 1; i < count; i++ { value := b.Get([]byte(strings.Repeat("0", i*factor))) if !bytes.Equal(value, []byte(strings.Repeat("X", (count-i)*factor))) { t.Fatalf("unexpected value: %v", value) } } return nil }); err != nil { t.Fatal(err) } } // Ensure that a database can perform multiple large appends safely. func TestDB_Put_VeryLarge(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } n, batchN := 400000, 200000 ksize, vsize := 8, 500 db := MustOpenDB() defer db.MustClose() for i := 0; i < n; i += batchN { if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists([]byte("widgets")) if err != nil { t.Fatal(err) } for j := 0; j < batchN; j++ { k, v := make([]byte, ksize), make([]byte, vsize) binary.BigEndian.PutUint32(k, uint32(i+j)) if err := b.Put(k, v); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } } } // Ensure that a setting a value on a key with a bucket value returns an error. func TestBucket_Put_IncompatibleValue(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b0, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if _, err := tx.Bucket([]byte("widgets")).CreateBucket([]byte("foo")); err != nil { t.Fatal(err) } if err := b0.Put([]byte("foo"), []byte("bar")); err != bolt.ErrIncompatibleValue { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a setting a value while the transaction is closed returns an error. func TestBucket_Put_Closed(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := tx.Rollback(); err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != bolt.ErrTxClosed { t.Fatalf("unexpected error: %s", err) } } // Ensure that setting a value on a read-only bucket returns an error. func TestBucket_Put_ReadOnly(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) if err := b.Put([]byte("foo"), []byte("bar")); err != bolt.ErrTxNotWritable { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can delete an existing key. func TestBucket_Delete(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if err := b.Delete([]byte("foo")); err != nil { t.Fatal(err) } if v := b.Get([]byte("foo")); v != nil { t.Fatalf("unexpected value: %v", v) } return nil }); err != nil { t.Fatal(err) } } // Ensure that deleting a large set of keys will work correctly. func TestBucket_Delete_Large(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } for i := 0; i < 100; i++ { if err := b.Put([]byte(strconv.Itoa(i)), []byte(strings.Repeat("*", 1024))); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for i := 0; i < 100; i++ { if err := b.Delete([]byte(strconv.Itoa(i))); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for i := 0; i < 100; i++ { if v := b.Get([]byte(strconv.Itoa(i))); v != nil { t.Fatalf("unexpected value: %v, i=%d", v, i) } } return nil }); err != nil { t.Fatal(err) } } // Deleting a very large list of keys will cause the freelist to use overflow. func TestBucket_Delete_FreelistOverflow(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } db := MustOpenDB() defer db.MustClose() k := make([]byte, 16) for i := uint64(0); i < 10000; i++ { if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists([]byte("0")) if err != nil { t.Fatalf("bucket error: %s", err) } for j := uint64(0); j < 1000; j++ { binary.BigEndian.PutUint64(k[:8], i) binary.BigEndian.PutUint64(k[8:], j) if err := b.Put(k, nil); err != nil { t.Fatalf("put error: %s", err) } } return nil }); err != nil { t.Fatal(err) } } // Delete all of them in one large transaction if err := db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("0")) c := b.Cursor() for k, _ := c.First(); k != nil; k, _ = c.Next() { if err := c.Delete(); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } } // Ensure that accessing and updating nested buckets is ok across transactions. func TestBucket_Nested(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { // Create a widgets bucket. b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } // Create a widgets/foo bucket. _, err = b.CreateBucket([]byte("foo")) if err != nil { t.Fatal(err) } // Create a widgets/bar key. if err := b.Put([]byte("bar"), []byte("0000")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } db.MustCheck() // Update widgets/bar. if err := db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) if err := b.Put([]byte("bar"), []byte("xxxx")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } db.MustCheck() // Cause a split. if err := db.Update(func(tx *bolt.Tx) error { var b = tx.Bucket([]byte("widgets")) for i := 0; i < 10000; i++ { if err := b.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } db.MustCheck() // Insert into widgets/foo/baz. if err := db.Update(func(tx *bolt.Tx) error { var b = tx.Bucket([]byte("widgets")) if err := b.Bucket([]byte("foo")).Put([]byte("baz"), []byte("yyyy")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } db.MustCheck() // Verify. if err := db.View(func(tx *bolt.Tx) error { var b = tx.Bucket([]byte("widgets")) if v := b.Bucket([]byte("foo")).Get([]byte("baz")); !bytes.Equal(v, []byte("yyyy")) { t.Fatalf("unexpected value: %v", v) } if v := b.Get([]byte("bar")); !bytes.Equal(v, []byte("xxxx")) { t.Fatalf("unexpected value: %v", v) } for i := 0; i < 10000; i++ { if v := b.Get([]byte(strconv.Itoa(i))); !bytes.Equal(v, []byte(strconv.Itoa(i))) { t.Fatalf("unexpected value: %v", v) } } return nil }); err != nil { t.Fatal(err) } } // Ensure that deleting a bucket using Delete() returns an error. func TestBucket_Delete_Bucket(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if _, err := b.CreateBucket([]byte("foo")); err != nil { t.Fatal(err) } if err := b.Delete([]byte("foo")); err != bolt.ErrIncompatibleValue { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that deleting a key on a read-only bucket returns an error. func TestBucket_Delete_ReadOnly(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { if err := tx.Bucket([]byte("widgets")).Delete([]byte("foo")); err != bolt.ErrTxNotWritable { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a deleting value while the transaction is closed returns an error. func TestBucket_Delete_Closed(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := tx.Rollback(); err != nil { t.Fatal(err) } if err := b.Delete([]byte("foo")); err != bolt.ErrTxClosed { t.Fatalf("unexpected error: %s", err) } } // Ensure that deleting a bucket causes nested buckets to be deleted. func TestBucket_DeleteBucket_Nested(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { widgets, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } foo, err := widgets.CreateBucket([]byte("foo")) if err != nil { t.Fatal(err) } bar, err := foo.CreateBucket([]byte("bar")) if err != nil { t.Fatal(err) } if err := bar.Put([]byte("baz"), []byte("bat")); err != nil { t.Fatal(err) } if err := tx.Bucket([]byte("widgets")).DeleteBucket([]byte("foo")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that deleting a bucket causes nested buckets to be deleted after they have been committed. func TestBucket_DeleteBucket_Nested2(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { widgets, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } foo, err := widgets.CreateBucket([]byte("foo")) if err != nil { t.Fatal(err) } bar, err := foo.CreateBucket([]byte("bar")) if err != nil { t.Fatal(err) } if err := bar.Put([]byte("baz"), []byte("bat")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { widgets := tx.Bucket([]byte("widgets")) if widgets == nil { t.Fatal("expected widgets bucket") } foo := widgets.Bucket([]byte("foo")) if foo == nil { t.Fatal("expected foo bucket") } bar := foo.Bucket([]byte("bar")) if bar == nil { t.Fatal("expected bar bucket") } if v := bar.Get([]byte("baz")); !bytes.Equal(v, []byte("bat")) { t.Fatalf("unexpected value: %v", v) } if err := tx.DeleteBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { if tx.Bucket([]byte("widgets")) != nil { t.Fatal("expected bucket to be deleted") } return nil }); err != nil { t.Fatal(err) } } // Ensure that deleting a child bucket with multiple pages causes all pages to get collected. // NOTE: Consistency check in bolt_test.DB.Close() will panic if pages not freed properly. func TestBucket_DeleteBucket_Large(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { widgets, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } foo, err := widgets.CreateBucket([]byte("foo")) if err != nil { t.Fatal(err) } for i := 0; i < 1000; i++ { if err := foo.Put([]byte(fmt.Sprintf("%d", i)), []byte(fmt.Sprintf("%0100d", i))); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { if err := tx.DeleteBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a simple value retrieved via Bucket() returns a nil. func TestBucket_Bucket_IncompatibleValue(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { widgets, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := widgets.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if b := tx.Bucket([]byte("widgets")).Bucket([]byte("foo")); b != nil { t.Fatal("expected nil bucket") } return nil }); err != nil { t.Fatal(err) } } // Ensure that creating a bucket on an existing non-bucket key returns an error. func TestBucket_CreateBucket_IncompatibleValue(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { widgets, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := widgets.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if _, err := widgets.CreateBucket([]byte("foo")); err != bolt.ErrIncompatibleValue { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that deleting a bucket on an existing non-bucket key returns an error. func TestBucket_DeleteBucket_IncompatibleValue(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { widgets, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := widgets.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if err := tx.Bucket([]byte("widgets")).DeleteBucket([]byte("foo")); err != bolt.ErrIncompatibleValue { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure bucket can set and update its sequence number. func TestBucket_Sequence(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { bkt, err := tx.CreateBucket([]byte("0")) if err != nil { t.Fatal(err) } // Retrieve sequence. if v := bkt.Sequence(); v != 0 { t.Fatalf("unexpected sequence: %d", v) } // Update sequence. if err := bkt.SetSequence(1000); err != nil { t.Fatal(err) } // Read sequence again. if v := bkt.Sequence(); v != 1000 { t.Fatalf("unexpected sequence: %d", v) } return nil }); err != nil { t.Fatal(err) } // Verify sequence in separate transaction. if err := db.View(func(tx *bolt.Tx) error { if v := tx.Bucket([]byte("0")).Sequence(); v != 1000 { t.Fatalf("unexpected sequence: %d", v) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can return an autoincrementing sequence. func TestBucket_NextSequence(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { widgets, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } woojits, err := tx.CreateBucket([]byte("woojits")) if err != nil { t.Fatal(err) } // Make sure sequence increments. if seq, err := widgets.NextSequence(); err != nil { t.Fatal(err) } else if seq != 1 { t.Fatalf("unexpecte sequence: %d", seq) } if seq, err := widgets.NextSequence(); err != nil { t.Fatal(err) } else if seq != 2 { t.Fatalf("unexpected sequence: %d", seq) } // Buckets should be separate. if seq, err := woojits.NextSequence(); err != nil { t.Fatal(err) } else if seq != 1 { t.Fatalf("unexpected sequence: %d", 1) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket will persist an autoincrementing sequence even if its // the only thing updated on the bucket. // https://github.com/boltdb/bolt/issues/296 func TestBucket_NextSequence_Persist(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.Bucket([]byte("widgets")).NextSequence(); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { seq, err := tx.Bucket([]byte("widgets")).NextSequence() if err != nil { t.Fatalf("unexpected error: %s", err) } else if seq != 2 { t.Fatalf("unexpected sequence: %d", seq) } return nil }); err != nil { t.Fatal(err) } } // Ensure that retrieving the next sequence on a read-only bucket returns an error. func TestBucket_NextSequence_ReadOnly(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { _, err := tx.Bucket([]byte("widgets")).NextSequence() if err != bolt.ErrTxNotWritable { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that retrieving the next sequence for a bucket on a closed database return an error. func TestBucket_NextSequence_Closed(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := tx.Rollback(); err != nil { t.Fatal(err) } if _, err := b.NextSequence(); err != bolt.ErrTxClosed { t.Fatal(err) } } // Ensure a user can loop over all key/value pairs in a bucket. func TestBucket_ForEach(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("0000")); err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte("0001")); err != nil { t.Fatal(err) } if err := b.Put([]byte("bar"), []byte("0002")); err != nil { t.Fatal(err) } var index int if err := b.ForEach(func(k, v []byte) error { switch index { case 0: if !bytes.Equal(k, []byte("bar")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte("0002")) { t.Fatalf("unexpected value: %v", v) } case 1: if !bytes.Equal(k, []byte("baz")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte("0001")) { t.Fatalf("unexpected value: %v", v) } case 2: if !bytes.Equal(k, []byte("foo")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte("0000")) { t.Fatalf("unexpected value: %v", v) } } index++ return nil }); err != nil { t.Fatal(err) } if index != 3 { t.Fatalf("unexpected index: %d", index) } return nil }); err != nil { t.Fatal(err) } } // Ensure a database can stop iteration early. func TestBucket_ForEach_ShortCircuit(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("bar"), []byte("0000")); err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte("0000")); err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("0000")); err != nil { t.Fatal(err) } var index int if err := tx.Bucket([]byte("widgets")).ForEach(func(k, v []byte) error { index++ if bytes.Equal(k, []byte("baz")) { return errors.New("marker") } return nil }); err == nil || err.Error() != "marker" { t.Fatalf("unexpected error: %s", err) } if index != 2 { t.Fatalf("unexpected index: %d", index) } return nil }); err != nil { t.Fatal(err) } } // Ensure that looping over a bucket on a closed database returns an error. func TestBucket_ForEach_Closed(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := tx.Rollback(); err != nil { t.Fatal(err) } if err := b.ForEach(func(k, v []byte) error { return nil }); err != bolt.ErrTxClosed { t.Fatalf("unexpected error: %s", err) } } // Ensure that an error is returned when inserting with an empty key. func TestBucket_Put_EmptyKey(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte(""), []byte("bar")); err != bolt.ErrKeyRequired { t.Fatalf("unexpected error: %s", err) } if err := b.Put(nil, []byte("bar")); err != bolt.ErrKeyRequired { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that an error is returned when inserting with a key that's too large. func TestBucket_Put_KeyTooLarge(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put(make([]byte, 32769), []byte("bar")); err != bolt.ErrKeyTooLarge { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that an error is returned when inserting a value that's too large. func TestBucket_Put_ValueTooLarge(t *testing.T) { // Skip this test on DroneCI because the machine is resource constrained. if os.Getenv("DRONE") == "true" { t.Skip("not enough RAM for test") } db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), make([]byte, bolt.MaxValueSize+1)); err != bolt.ErrValueTooLarge { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure a bucket can calculate stats. func TestBucket_Stats(t *testing.T) { db := MustOpenDB() defer db.MustClose() // Add bucket with fewer keys but one big value. bigKey := []byte("really-big-value") for i := 0; i < 500; i++ { if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists([]byte("woojits")) if err != nil { t.Fatal(err) } if err := b.Put([]byte(fmt.Sprintf("%03d", i)), []byte(strconv.Itoa(i))); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } } if err := db.Update(func(tx *bolt.Tx) error { if err := tx.Bucket([]byte("woojits")).Put(bigKey, []byte(strings.Repeat("*", 10000))); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } db.MustCheck() if err := db.View(func(tx *bolt.Tx) error { stats := tx.Bucket([]byte("woojits")).Stats() if stats.BranchPageN != 1 { t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN) } else if stats.BranchOverflowN != 0 { t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN) } else if stats.LeafPageN != 7 { t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN) } else if stats.LeafOverflowN != 2 { t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN) } else if stats.KeyN != 501 { t.Fatalf("unexpected KeyN: %d", stats.KeyN) } else if stats.Depth != 2 { t.Fatalf("unexpected Depth: %d", stats.Depth) } branchInuse := 16 // branch page header branchInuse += 7 * 16 // branch elements branchInuse += 7 * 3 // branch keys (6 3-byte keys) if stats.BranchInuse != branchInuse { t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse) } leafInuse := 7 * 16 // leaf page header leafInuse += 501 * 16 // leaf elements leafInuse += 500*3 + len(bigKey) // leaf keys leafInuse += 1*10 + 2*90 + 3*400 + 10000 // leaf values if stats.LeafInuse != leafInuse { t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse) } // Only check allocations for 4KB pages. if os.Getpagesize() == 4096 { if stats.BranchAlloc != 4096 { t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc) } else if stats.LeafAlloc != 36864 { t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc) } } if stats.BucketN != 1 { t.Fatalf("unexpected BucketN: %d", stats.BucketN) } else if stats.InlineBucketN != 0 { t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN) } else if stats.InlineBucketInuse != 0 { t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse) } return nil }); err != nil { t.Fatal(err) } } // Ensure a bucket with random insertion utilizes fill percentage correctly. func TestBucket_Stats_RandomFill(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } else if os.Getpagesize() != 4096 { t.Skip("invalid page size for test") } db := MustOpenDB() defer db.MustClose() // Add a set of values in random order. It will be the same random // order so we can maintain consistency between test runs. var count int rand := rand.New(rand.NewSource(42)) for _, i := range rand.Perm(1000) { if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists([]byte("woojits")) if err != nil { t.Fatal(err) } b.FillPercent = 0.9 for _, j := range rand.Perm(100) { index := (j * 10000) + i if err := b.Put([]byte(fmt.Sprintf("%d000000000000000", index)), []byte("0000000000")); err != nil { t.Fatal(err) } count++ } return nil }); err != nil { t.Fatal(err) } } db.MustCheck() if err := db.View(func(tx *bolt.Tx) error { stats := tx.Bucket([]byte("woojits")).Stats() if stats.KeyN != 100000 { t.Fatalf("unexpected KeyN: %d", stats.KeyN) } if stats.BranchPageN != 98 { t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN) } else if stats.BranchOverflowN != 0 { t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN) } else if stats.BranchInuse != 130984 { t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse) } else if stats.BranchAlloc != 401408 { t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc) } if stats.LeafPageN != 3412 { t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN) } else if stats.LeafOverflowN != 0 { t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN) } else if stats.LeafInuse != 4742482 { t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse) } else if stats.LeafAlloc != 13975552 { t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc) } return nil }); err != nil { t.Fatal(err) } } // Ensure a bucket can calculate stats. func TestBucket_Stats_Small(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { // Add a bucket that fits on a single root leaf. b, err := tx.CreateBucket([]byte("whozawhats")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } db.MustCheck() if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("whozawhats")) stats := b.Stats() if stats.BranchPageN != 0 { t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN) } else if stats.BranchOverflowN != 0 { t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN) } else if stats.LeafPageN != 0 { t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN) } else if stats.LeafOverflowN != 0 { t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN) } else if stats.KeyN != 1 { t.Fatalf("unexpected KeyN: %d", stats.KeyN) } else if stats.Depth != 1 { t.Fatalf("unexpected Depth: %d", stats.Depth) } else if stats.BranchInuse != 0 { t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse) } else if stats.LeafInuse != 0 { t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse) } if os.Getpagesize() == 4096 { if stats.BranchAlloc != 0 { t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc) } else if stats.LeafAlloc != 0 { t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc) } } if stats.BucketN != 1 { t.Fatalf("unexpected BucketN: %d", stats.BucketN) } else if stats.InlineBucketN != 1 { t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN) } else if stats.InlineBucketInuse != 16+16+6 { t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse) } return nil }); err != nil { t.Fatal(err) } } func TestBucket_Stats_EmptyBucket(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { // Add a bucket that fits on a single root leaf. if _, err := tx.CreateBucket([]byte("whozawhats")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } db.MustCheck() if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("whozawhats")) stats := b.Stats() if stats.BranchPageN != 0 { t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN) } else if stats.BranchOverflowN != 0 { t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN) } else if stats.LeafPageN != 0 { t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN) } else if stats.LeafOverflowN != 0 { t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN) } else if stats.KeyN != 0 { t.Fatalf("unexpected KeyN: %d", stats.KeyN) } else if stats.Depth != 1 { t.Fatalf("unexpected Depth: %d", stats.Depth) } else if stats.BranchInuse != 0 { t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse) } else if stats.LeafInuse != 0 { t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse) } if os.Getpagesize() == 4096 { if stats.BranchAlloc != 0 { t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc) } else if stats.LeafAlloc != 0 { t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc) } } if stats.BucketN != 1 { t.Fatalf("unexpected BucketN: %d", stats.BucketN) } else if stats.InlineBucketN != 1 { t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN) } else if stats.InlineBucketInuse != 16 { t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse) } return nil }); err != nil { t.Fatal(err) } } // Ensure a bucket can calculate stats. func TestBucket_Stats_Nested(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("foo")) if err != nil { t.Fatal(err) } for i := 0; i < 100; i++ { if err := b.Put([]byte(fmt.Sprintf("%02d", i)), []byte(fmt.Sprintf("%02d", i))); err != nil { t.Fatal(err) } } bar, err := b.CreateBucket([]byte("bar")) if err != nil { t.Fatal(err) } for i := 0; i < 10; i++ { if err := bar.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil { t.Fatal(err) } } baz, err := bar.CreateBucket([]byte("baz")) if err != nil { t.Fatal(err) } for i := 0; i < 10; i++ { if err := baz.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } db.MustCheck() if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("foo")) stats := b.Stats() if stats.BranchPageN != 0 { t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN) } else if stats.BranchOverflowN != 0 { t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN) } else if stats.LeafPageN != 2 { t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN) } else if stats.LeafOverflowN != 0 { t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN) } else if stats.KeyN != 122 { t.Fatalf("unexpected KeyN: %d", stats.KeyN) } else if stats.Depth != 3 { t.Fatalf("unexpected Depth: %d", stats.Depth) } else if stats.BranchInuse != 0 { t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse) } foo := 16 // foo (pghdr) foo += 101 * 16 // foo leaf elements foo += 100*2 + 100*2 // foo leaf key/values foo += 3 + 16 // foo -> bar key/value bar := 16 // bar (pghdr) bar += 11 * 16 // bar leaf elements bar += 10 + 10 // bar leaf key/values bar += 3 + 16 // bar -> baz key/value baz := 16 // baz (inline) (pghdr) baz += 10 * 16 // baz leaf elements baz += 10 + 10 // baz leaf key/values if stats.LeafInuse != foo+bar+baz { t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse) } if os.Getpagesize() == 4096 { if stats.BranchAlloc != 0 { t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc) } else if stats.LeafAlloc != 8192 { t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc) } } if stats.BucketN != 3 { t.Fatalf("unexpected BucketN: %d", stats.BucketN) } else if stats.InlineBucketN != 1 { t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN) } else if stats.InlineBucketInuse != baz { t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse) } return nil }); err != nil { t.Fatal(err) } } // Ensure a large bucket can calculate stats. func TestBucket_Stats_Large(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } db := MustOpenDB() defer db.MustClose() var index int for i := 0; i < 100; i++ { // Add bucket with lots of keys. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists([]byte("widgets")) if err != nil { t.Fatal(err) } for i := 0; i < 1000; i++ { if err := b.Put([]byte(strconv.Itoa(index)), []byte(strconv.Itoa(index))); err != nil { t.Fatal(err) } index++ } return nil }); err != nil { t.Fatal(err) } } db.MustCheck() if err := db.View(func(tx *bolt.Tx) error { stats := tx.Bucket([]byte("widgets")).Stats() if stats.BranchPageN != 13 { t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN) } else if stats.BranchOverflowN != 0 { t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN) } else if stats.LeafPageN != 1196 { t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN) } else if stats.LeafOverflowN != 0 { t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN) } else if stats.KeyN != 100000 { t.Fatalf("unexpected KeyN: %d", stats.KeyN) } else if stats.Depth != 3 { t.Fatalf("unexpected Depth: %d", stats.Depth) } else if stats.BranchInuse != 25257 { t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse) } else if stats.LeafInuse != 2596916 { t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse) } if os.Getpagesize() == 4096 { if stats.BranchAlloc != 53248 { t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc) } else if stats.LeafAlloc != 4898816 { t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc) } } if stats.BucketN != 1 { t.Fatalf("unexpected BucketN: %d", stats.BucketN) } else if stats.InlineBucketN != 0 { t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN) } else if stats.InlineBucketInuse != 0 { t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can write random keys and values across multiple transactions. func TestBucket_Put_Single(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } index := 0 if err := quick.Check(func(items testdata) bool { db := MustOpenDB() defer db.MustClose() m := make(map[string][]byte) if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } for _, item := range items { if err := db.Update(func(tx *bolt.Tx) error { if err := tx.Bucket([]byte("widgets")).Put(item.Key, item.Value); err != nil { panic("put error: " + err.Error()) } m[string(item.Key)] = item.Value return nil }); err != nil { t.Fatal(err) } // Verify all key/values so far. if err := db.View(func(tx *bolt.Tx) error { i := 0 for k, v := range m { value := tx.Bucket([]byte("widgets")).Get([]byte(k)) if !bytes.Equal(value, v) { t.Logf("value mismatch [run %d] (%d of %d):\nkey: %x\ngot: %x\nexp: %x", index, i, len(m), []byte(k), value, v) db.CopyTempFile() t.FailNow() } i++ } return nil }); err != nil { t.Fatal(err) } } index++ return true }, nil); err != nil { t.Error(err) } } // Ensure that a transaction can insert multiple key/value pairs at once. func TestBucket_Put_Multiple(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } if err := quick.Check(func(items testdata) bool { db := MustOpenDB() defer db.MustClose() // Bulk insert all values. if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for _, item := range items { if err := b.Put(item.Key, item.Value); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } // Verify all items exist. if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for _, item := range items { value := b.Get(item.Key) if !bytes.Equal(item.Value, value) { db.CopyTempFile() t.Fatalf("exp=%x; got=%x", item.Value, value) } } return nil }); err != nil { t.Fatal(err) } return true }, qconfig()); err != nil { t.Error(err) } } // Ensure that a transaction can delete all key/value pairs and return to a single leaf page. func TestBucket_Delete_Quick(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } if err := quick.Check(func(items testdata) bool { db := MustOpenDB() defer db.MustClose() // Bulk insert all values. if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for _, item := range items { if err := b.Put(item.Key, item.Value); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } // Remove items one at a time and check consistency. for _, item := range items { if err := db.Update(func(tx *bolt.Tx) error { return tx.Bucket([]byte("widgets")).Delete(item.Key) }); err != nil { t.Fatal(err) } } // Anything before our deletion index should be nil. if err := db.View(func(tx *bolt.Tx) error { if err := tx.Bucket([]byte("widgets")).ForEach(func(k, v []byte) error { t.Fatalf("bucket should be empty; found: %06x", trunc(k, 3)) return nil }); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } return true }, qconfig()); err != nil { t.Error(err) } } func ExampleBucket_Put() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Start a write transaction. if err := db.Update(func(tx *bolt.Tx) error { // Create a bucket. b, err := tx.CreateBucket([]byte("widgets")) if err != nil { return err } // Set the value "bar" for the key "foo". if err := b.Put([]byte("foo"), []byte("bar")); err != nil { return err } return nil }); err != nil { log.Fatal(err) } // Read value back in a different read-only transaction. if err := db.View(func(tx *bolt.Tx) error { value := tx.Bucket([]byte("widgets")).Get([]byte("foo")) fmt.Printf("The value of 'foo' is: %s\n", value) return nil }); err != nil { log.Fatal(err) } // Close database to release file lock. if err := db.Close(); err != nil { log.Fatal(err) } // Output: // The value of 'foo' is: bar } func ExampleBucket_Delete() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Start a write transaction. if err := db.Update(func(tx *bolt.Tx) error { // Create a bucket. b, err := tx.CreateBucket([]byte("widgets")) if err != nil { return err } // Set the value "bar" for the key "foo". if err := b.Put([]byte("foo"), []byte("bar")); err != nil { return err } // Retrieve the key back from the database and verify it. value := b.Get([]byte("foo")) fmt.Printf("The value of 'foo' was: %s\n", value) return nil }); err != nil { log.Fatal(err) } // Delete the key in a different write transaction. if err := db.Update(func(tx *bolt.Tx) error { return tx.Bucket([]byte("widgets")).Delete([]byte("foo")) }); err != nil { log.Fatal(err) } // Retrieve the key again. if err := db.View(func(tx *bolt.Tx) error { value := tx.Bucket([]byte("widgets")).Get([]byte("foo")) if value == nil { fmt.Printf("The value of 'foo' is now: nil\n") } return nil }); err != nil { log.Fatal(err) } // Close database to release file lock. if err := db.Close(); err != nil { log.Fatal(err) } // Output: // The value of 'foo' was: bar // The value of 'foo' is now: nil } func ExampleBucket_ForEach() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Insert data into a bucket. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("animals")) if err != nil { return err } if err := b.Put([]byte("dog"), []byte("fun")); err != nil { return err } if err := b.Put([]byte("cat"), []byte("lame")); err != nil { return err } if err := b.Put([]byte("liger"), []byte("awesome")); err != nil { return err } // Iterate over items in sorted key order. if err := b.ForEach(func(k, v []byte) error { fmt.Printf("A %s is %s.\n", k, v) return nil }); err != nil { return err } return nil }); err != nil { log.Fatal(err) } // Close database to release file lock. if err := db.Close(); err != nil { log.Fatal(err) } // Output: // A cat is lame. // A dog is fun. // A liger is awesome. } dep-0.3.2/vendor/github.com/boltdb/bolt/cursor.go000066400000000000000000000261371317166637100217160ustar00rootroot00000000000000package bolt import ( "bytes" "fmt" "sort" ) // Cursor represents an iterator that can traverse over all key/value pairs in a bucket in sorted order. // Cursors see nested buckets with value == nil. // Cursors can be obtained from a transaction and are valid as long as the transaction is open. // // Keys and values returned from the cursor are only valid for the life of the transaction. // // Changing data while traversing with a cursor may cause it to be invalidated // and return unexpected keys and/or values. You must reposition your cursor // after mutating data. type Cursor struct { bucket *Bucket stack []elemRef } // Bucket returns the bucket that this cursor was created from. func (c *Cursor) Bucket() *Bucket { return c.bucket } // First moves the cursor to the first item in the bucket and returns its key and value. // If the bucket is empty then a nil key and value are returned. // The returned key and value are only valid for the life of the transaction. func (c *Cursor) First() (key []byte, value []byte) { _assert(c.bucket.tx.db != nil, "tx closed") c.stack = c.stack[:0] p, n := c.bucket.pageNode(c.bucket.root) c.stack = append(c.stack, elemRef{page: p, node: n, index: 0}) c.first() // If we land on an empty page then move to the next value. // https://github.com/boltdb/bolt/issues/450 if c.stack[len(c.stack)-1].count() == 0 { c.next() } k, v, flags := c.keyValue() if (flags & uint32(bucketLeafFlag)) != 0 { return k, nil } return k, v } // Last moves the cursor to the last item in the bucket and returns its key and value. // If the bucket is empty then a nil key and value are returned. // The returned key and value are only valid for the life of the transaction. func (c *Cursor) Last() (key []byte, value []byte) { _assert(c.bucket.tx.db != nil, "tx closed") c.stack = c.stack[:0] p, n := c.bucket.pageNode(c.bucket.root) ref := elemRef{page: p, node: n} ref.index = ref.count() - 1 c.stack = append(c.stack, ref) c.last() k, v, flags := c.keyValue() if (flags & uint32(bucketLeafFlag)) != 0 { return k, nil } return k, v } // Next moves the cursor to the next item in the bucket and returns its key and value. // If the cursor is at the end of the bucket then a nil key and value are returned. // The returned key and value are only valid for the life of the transaction. func (c *Cursor) Next() (key []byte, value []byte) { _assert(c.bucket.tx.db != nil, "tx closed") k, v, flags := c.next() if (flags & uint32(bucketLeafFlag)) != 0 { return k, nil } return k, v } // Prev moves the cursor to the previous item in the bucket and returns its key and value. // If the cursor is at the beginning of the bucket then a nil key and value are returned. // The returned key and value are only valid for the life of the transaction. func (c *Cursor) Prev() (key []byte, value []byte) { _assert(c.bucket.tx.db != nil, "tx closed") // Attempt to move back one element until we're successful. // Move up the stack as we hit the beginning of each page in our stack. for i := len(c.stack) - 1; i >= 0; i-- { elem := &c.stack[i] if elem.index > 0 { elem.index-- break } c.stack = c.stack[:i] } // If we've hit the end then return nil. if len(c.stack) == 0 { return nil, nil } // Move down the stack to find the last element of the last leaf under this branch. c.last() k, v, flags := c.keyValue() if (flags & uint32(bucketLeafFlag)) != 0 { return k, nil } return k, v } // Seek moves the cursor to a given key and returns it. // If the key does not exist then the next key is used. If no keys // follow, a nil key is returned. // The returned key and value are only valid for the life of the transaction. func (c *Cursor) Seek(seek []byte) (key []byte, value []byte) { k, v, flags := c.seek(seek) // If we ended up after the last element of a page then move to the next one. if ref := &c.stack[len(c.stack)-1]; ref.index >= ref.count() { k, v, flags = c.next() } if k == nil { return nil, nil } else if (flags & uint32(bucketLeafFlag)) != 0 { return k, nil } return k, v } // Delete removes the current key/value under the cursor from the bucket. // Delete fails if current key/value is a bucket or if the transaction is not writable. func (c *Cursor) Delete() error { if c.bucket.tx.db == nil { return ErrTxClosed } else if !c.bucket.Writable() { return ErrTxNotWritable } key, _, flags := c.keyValue() // Return an error if current value is a bucket. if (flags & bucketLeafFlag) != 0 { return ErrIncompatibleValue } c.node().del(key) return nil } // seek moves the cursor to a given key and returns it. // If the key does not exist then the next key is used. func (c *Cursor) seek(seek []byte) (key []byte, value []byte, flags uint32) { _assert(c.bucket.tx.db != nil, "tx closed") // Start from root page/node and traverse to correct page. c.stack = c.stack[:0] c.search(seek, c.bucket.root) ref := &c.stack[len(c.stack)-1] // If the cursor is pointing to the end of page/node then return nil. if ref.index >= ref.count() { return nil, nil, 0 } // If this is a bucket then return a nil value. return c.keyValue() } // first moves the cursor to the first leaf element under the last page in the stack. func (c *Cursor) first() { for { // Exit when we hit a leaf page. var ref = &c.stack[len(c.stack)-1] if ref.isLeaf() { break } // Keep adding pages pointing to the first element to the stack. var pgid pgid if ref.node != nil { pgid = ref.node.inodes[ref.index].pgid } else { pgid = ref.page.branchPageElement(uint16(ref.index)).pgid } p, n := c.bucket.pageNode(pgid) c.stack = append(c.stack, elemRef{page: p, node: n, index: 0}) } } // last moves the cursor to the last leaf element under the last page in the stack. func (c *Cursor) last() { for { // Exit when we hit a leaf page. ref := &c.stack[len(c.stack)-1] if ref.isLeaf() { break } // Keep adding pages pointing to the last element in the stack. var pgid pgid if ref.node != nil { pgid = ref.node.inodes[ref.index].pgid } else { pgid = ref.page.branchPageElement(uint16(ref.index)).pgid } p, n := c.bucket.pageNode(pgid) var nextRef = elemRef{page: p, node: n} nextRef.index = nextRef.count() - 1 c.stack = append(c.stack, nextRef) } } // next moves to the next leaf element and returns the key and value. // If the cursor is at the last leaf element then it stays there and returns nil. func (c *Cursor) next() (key []byte, value []byte, flags uint32) { for { // Attempt to move over one element until we're successful. // Move up the stack as we hit the end of each page in our stack. var i int for i = len(c.stack) - 1; i >= 0; i-- { elem := &c.stack[i] if elem.index < elem.count()-1 { elem.index++ break } } // If we've hit the root page then stop and return. This will leave the // cursor on the last element of the last page. if i == -1 { return nil, nil, 0 } // Otherwise start from where we left off in the stack and find the // first element of the first leaf page. c.stack = c.stack[:i+1] c.first() // If this is an empty page then restart and move back up the stack. // https://github.com/boltdb/bolt/issues/450 if c.stack[len(c.stack)-1].count() == 0 { continue } return c.keyValue() } } // search recursively performs a binary search against a given page/node until it finds a given key. func (c *Cursor) search(key []byte, pgid pgid) { p, n := c.bucket.pageNode(pgid) if p != nil && (p.flags&(branchPageFlag|leafPageFlag)) == 0 { panic(fmt.Sprintf("invalid page type: %d: %x", p.id, p.flags)) } e := elemRef{page: p, node: n} c.stack = append(c.stack, e) // If we're on a leaf page/node then find the specific node. if e.isLeaf() { c.nsearch(key) return } if n != nil { c.searchNode(key, n) return } c.searchPage(key, p) } func (c *Cursor) searchNode(key []byte, n *node) { var exact bool index := sort.Search(len(n.inodes), func(i int) bool { // TODO(benbjohnson): Optimize this range search. It's a bit hacky right now. // sort.Search() finds the lowest index where f() != -1 but we need the highest index. ret := bytes.Compare(n.inodes[i].key, key) if ret == 0 { exact = true } return ret != -1 }) if !exact && index > 0 { index-- } c.stack[len(c.stack)-1].index = index // Recursively search to the next page. c.search(key, n.inodes[index].pgid) } func (c *Cursor) searchPage(key []byte, p *page) { // Binary search for the correct range. inodes := p.branchPageElements() var exact bool index := sort.Search(int(p.count), func(i int) bool { // TODO(benbjohnson): Optimize this range search. It's a bit hacky right now. // sort.Search() finds the lowest index where f() != -1 but we need the highest index. ret := bytes.Compare(inodes[i].key(), key) if ret == 0 { exact = true } return ret != -1 }) if !exact && index > 0 { index-- } c.stack[len(c.stack)-1].index = index // Recursively search to the next page. c.search(key, inodes[index].pgid) } // nsearch searches the leaf node on the top of the stack for a key. func (c *Cursor) nsearch(key []byte) { e := &c.stack[len(c.stack)-1] p, n := e.page, e.node // If we have a node then search its inodes. if n != nil { index := sort.Search(len(n.inodes), func(i int) bool { return bytes.Compare(n.inodes[i].key, key) != -1 }) e.index = index return } // If we have a page then search its leaf elements. inodes := p.leafPageElements() index := sort.Search(int(p.count), func(i int) bool { return bytes.Compare(inodes[i].key(), key) != -1 }) e.index = index } // keyValue returns the key and value of the current leaf element. func (c *Cursor) keyValue() ([]byte, []byte, uint32) { ref := &c.stack[len(c.stack)-1] if ref.count() == 0 || ref.index >= ref.count() { return nil, nil, 0 } // Retrieve value from node. if ref.node != nil { inode := &ref.node.inodes[ref.index] return inode.key, inode.value, inode.flags } // Or retrieve value from page. elem := ref.page.leafPageElement(uint16(ref.index)) return elem.key(), elem.value(), elem.flags } // node returns the node that the cursor is currently positioned on. func (c *Cursor) node() *node { _assert(len(c.stack) > 0, "accessing a node with a zero-length cursor stack") // If the top of the stack is a leaf node then just return it. if ref := &c.stack[len(c.stack)-1]; ref.node != nil && ref.isLeaf() { return ref.node } // Start from root and traverse down the hierarchy. var n = c.stack[0].node if n == nil { n = c.bucket.node(c.stack[0].page.id, nil) } for _, ref := range c.stack[:len(c.stack)-1] { _assert(!n.isLeaf, "expected branch node") n = n.childAt(int(ref.index)) } _assert(n.isLeaf, "expected leaf node") return n } // elemRef represents a reference to an element on a given page/node. type elemRef struct { page *page node *node index int } // isLeaf returns whether the ref is pointing at a leaf page/node. func (r *elemRef) isLeaf() bool { if r.node != nil { return r.node.isLeaf } return (r.page.flags & leafPageFlag) != 0 } // count returns the number of inodes or page elements. func (r *elemRef) count() int { if r.node != nil { return len(r.node.inodes) } return int(r.page.count) } dep-0.3.2/vendor/github.com/boltdb/bolt/cursor_test.go000066400000000000000000000446311317166637100227540ustar00rootroot00000000000000package bolt_test import ( "bytes" "encoding/binary" "fmt" "log" "os" "reflect" "sort" "testing" "testing/quick" "github.com/boltdb/bolt" ) // Ensure that a cursor can return a reference to the bucket that created it. func TestCursor_Bucket(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if cb := b.Cursor().Bucket(); !reflect.DeepEqual(cb, b) { t.Fatal("cursor bucket mismatch") } return nil }); err != nil { t.Fatal(err) } } // Ensure that a Tx cursor can seek to the appropriate keys. func TestCursor_Seek(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("0001")); err != nil { t.Fatal(err) } if err := b.Put([]byte("bar"), []byte("0002")); err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte("0003")); err != nil { t.Fatal(err) } if _, err := b.CreateBucket([]byte("bkt")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { c := tx.Bucket([]byte("widgets")).Cursor() // Exact match should go to the key. if k, v := c.Seek([]byte("bar")); !bytes.Equal(k, []byte("bar")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte("0002")) { t.Fatalf("unexpected value: %v", v) } // Inexact match should go to the next key. if k, v := c.Seek([]byte("bas")); !bytes.Equal(k, []byte("baz")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte("0003")) { t.Fatalf("unexpected value: %v", v) } // Low key should go to the first key. if k, v := c.Seek([]byte("")); !bytes.Equal(k, []byte("bar")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte("0002")) { t.Fatalf("unexpected value: %v", v) } // High key should return no key. if k, v := c.Seek([]byte("zzz")); k != nil { t.Fatalf("expected nil key: %v", k) } else if v != nil { t.Fatalf("expected nil value: %v", v) } // Buckets should return their key but no value. if k, v := c.Seek([]byte("bkt")); !bytes.Equal(k, []byte("bkt")) { t.Fatalf("unexpected key: %v", k) } else if v != nil { t.Fatalf("expected nil value: %v", v) } return nil }); err != nil { t.Fatal(err) } } func TestCursor_Delete(t *testing.T) { db := MustOpenDB() defer db.MustClose() const count = 1000 // Insert every other key between 0 and $count. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } for i := 0; i < count; i += 1 { k := make([]byte, 8) binary.BigEndian.PutUint64(k, uint64(i)) if err := b.Put(k, make([]byte, 100)); err != nil { t.Fatal(err) } } if _, err := b.CreateBucket([]byte("sub")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { c := tx.Bucket([]byte("widgets")).Cursor() bound := make([]byte, 8) binary.BigEndian.PutUint64(bound, uint64(count/2)) for key, _ := c.First(); bytes.Compare(key, bound) < 0; key, _ = c.Next() { if err := c.Delete(); err != nil { t.Fatal(err) } } c.Seek([]byte("sub")) if err := c.Delete(); err != bolt.ErrIncompatibleValue { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { stats := tx.Bucket([]byte("widgets")).Stats() if stats.KeyN != count/2+1 { t.Fatalf("unexpected KeyN: %d", stats.KeyN) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a Tx cursor can seek to the appropriate keys when there are a // large number of keys. This test also checks that seek will always move // forward to the next key. // // Related: https://github.com/boltdb/bolt/pull/187 func TestCursor_Seek_Large(t *testing.T) { db := MustOpenDB() defer db.MustClose() var count = 10000 // Insert every other key between 0 and $count. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } for i := 0; i < count; i += 100 { for j := i; j < i+100; j += 2 { k := make([]byte, 8) binary.BigEndian.PutUint64(k, uint64(j)) if err := b.Put(k, make([]byte, 100)); err != nil { t.Fatal(err) } } } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { c := tx.Bucket([]byte("widgets")).Cursor() for i := 0; i < count; i++ { seek := make([]byte, 8) binary.BigEndian.PutUint64(seek, uint64(i)) k, _ := c.Seek(seek) // The last seek is beyond the end of the the range so // it should return nil. if i == count-1 { if k != nil { t.Fatal("expected nil key") } continue } // Otherwise we should seek to the exact key or the next key. num := binary.BigEndian.Uint64(k) if i%2 == 0 { if num != uint64(i) { t.Fatalf("unexpected num: %d", num) } } else { if num != uint64(i+1) { t.Fatalf("unexpected num: %d", num) } } } return nil }); err != nil { t.Fatal(err) } } // Ensure that a cursor can iterate over an empty bucket without error. func TestCursor_EmptyBucket(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) return err }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { c := tx.Bucket([]byte("widgets")).Cursor() k, v := c.First() if k != nil { t.Fatalf("unexpected key: %v", k) } else if v != nil { t.Fatalf("unexpected value: %v", v) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a Tx cursor can reverse iterate over an empty bucket without error. func TestCursor_EmptyBucketReverse(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) return err }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { c := tx.Bucket([]byte("widgets")).Cursor() k, v := c.Last() if k != nil { t.Fatalf("unexpected key: %v", k) } else if v != nil { t.Fatalf("unexpected value: %v", v) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a Tx cursor can iterate over a single root with a couple elements. func TestCursor_Iterate_Leaf(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte{}); err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte{0}); err != nil { t.Fatal(err) } if err := b.Put([]byte("bar"), []byte{1}); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } tx, err := db.Begin(false) if err != nil { t.Fatal(err) } defer func() { _ = tx.Rollback() }() c := tx.Bucket([]byte("widgets")).Cursor() k, v := c.First() if !bytes.Equal(k, []byte("bar")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte{1}) { t.Fatalf("unexpected value: %v", v) } k, v = c.Next() if !bytes.Equal(k, []byte("baz")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte{}) { t.Fatalf("unexpected value: %v", v) } k, v = c.Next() if !bytes.Equal(k, []byte("foo")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte{0}) { t.Fatalf("unexpected value: %v", v) } k, v = c.Next() if k != nil { t.Fatalf("expected nil key: %v", k) } else if v != nil { t.Fatalf("expected nil value: %v", v) } k, v = c.Next() if k != nil { t.Fatalf("expected nil key: %v", k) } else if v != nil { t.Fatalf("expected nil value: %v", v) } if err := tx.Rollback(); err != nil { t.Fatal(err) } } // Ensure that a Tx cursor can iterate in reverse over a single root with a couple elements. func TestCursor_LeafRootReverse(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte{}); err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte{0}); err != nil { t.Fatal(err) } if err := b.Put([]byte("bar"), []byte{1}); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } tx, err := db.Begin(false) if err != nil { t.Fatal(err) } c := tx.Bucket([]byte("widgets")).Cursor() if k, v := c.Last(); !bytes.Equal(k, []byte("foo")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte{0}) { t.Fatalf("unexpected value: %v", v) } if k, v := c.Prev(); !bytes.Equal(k, []byte("baz")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte{}) { t.Fatalf("unexpected value: %v", v) } if k, v := c.Prev(); !bytes.Equal(k, []byte("bar")) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, []byte{1}) { t.Fatalf("unexpected value: %v", v) } if k, v := c.Prev(); k != nil { t.Fatalf("expected nil key: %v", k) } else if v != nil { t.Fatalf("expected nil value: %v", v) } if k, v := c.Prev(); k != nil { t.Fatalf("expected nil key: %v", k) } else if v != nil { t.Fatalf("expected nil value: %v", v) } if err := tx.Rollback(); err != nil { t.Fatal(err) } } // Ensure that a Tx cursor can restart from the beginning. func TestCursor_Restart(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("bar"), []byte{}); err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte{}); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } tx, err := db.Begin(false) if err != nil { t.Fatal(err) } c := tx.Bucket([]byte("widgets")).Cursor() if k, _ := c.First(); !bytes.Equal(k, []byte("bar")) { t.Fatalf("unexpected key: %v", k) } if k, _ := c.Next(); !bytes.Equal(k, []byte("foo")) { t.Fatalf("unexpected key: %v", k) } if k, _ := c.First(); !bytes.Equal(k, []byte("bar")) { t.Fatalf("unexpected key: %v", k) } if k, _ := c.Next(); !bytes.Equal(k, []byte("foo")) { t.Fatalf("unexpected key: %v", k) } if err := tx.Rollback(); err != nil { t.Fatal(err) } } // Ensure that a cursor can skip over empty pages that have been deleted. func TestCursor_First_EmptyPages(t *testing.T) { db := MustOpenDB() defer db.MustClose() // Create 1000 keys in the "widgets" bucket. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } for i := 0; i < 1000; i++ { if err := b.Put(u64tob(uint64(i)), []byte{}); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } // Delete half the keys and then try to iterate. if err := db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for i := 0; i < 600; i++ { if err := b.Delete(u64tob(uint64(i))); err != nil { t.Fatal(err) } } c := b.Cursor() var n int for k, _ := c.First(); k != nil; k, _ = c.Next() { n++ } if n != 400 { t.Fatalf("unexpected key count: %d", n) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a Tx can iterate over all elements in a bucket. func TestCursor_QuickCheck(t *testing.T) { f := func(items testdata) bool { db := MustOpenDB() defer db.MustClose() // Bulk insert all values. tx, err := db.Begin(true) if err != nil { t.Fatal(err) } b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } for _, item := range items { if err := b.Put(item.Key, item.Value); err != nil { t.Fatal(err) } } if err := tx.Commit(); err != nil { t.Fatal(err) } // Sort test data. sort.Sort(items) // Iterate over all items and check consistency. var index = 0 tx, err = db.Begin(false) if err != nil { t.Fatal(err) } c := tx.Bucket([]byte("widgets")).Cursor() for k, v := c.First(); k != nil && index < len(items); k, v = c.Next() { if !bytes.Equal(k, items[index].Key) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, items[index].Value) { t.Fatalf("unexpected value: %v", v) } index++ } if len(items) != index { t.Fatalf("unexpected item count: %v, expected %v", len(items), index) } if err := tx.Rollback(); err != nil { t.Fatal(err) } return true } if err := quick.Check(f, qconfig()); err != nil { t.Error(err) } } // Ensure that a transaction can iterate over all elements in a bucket in reverse. func TestCursor_QuickCheck_Reverse(t *testing.T) { f := func(items testdata) bool { db := MustOpenDB() defer db.MustClose() // Bulk insert all values. tx, err := db.Begin(true) if err != nil { t.Fatal(err) } b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } for _, item := range items { if err := b.Put(item.Key, item.Value); err != nil { t.Fatal(err) } } if err := tx.Commit(); err != nil { t.Fatal(err) } // Sort test data. sort.Sort(revtestdata(items)) // Iterate over all items and check consistency. var index = 0 tx, err = db.Begin(false) if err != nil { t.Fatal(err) } c := tx.Bucket([]byte("widgets")).Cursor() for k, v := c.Last(); k != nil && index < len(items); k, v = c.Prev() { if !bytes.Equal(k, items[index].Key) { t.Fatalf("unexpected key: %v", k) } else if !bytes.Equal(v, items[index].Value) { t.Fatalf("unexpected value: %v", v) } index++ } if len(items) != index { t.Fatalf("unexpected item count: %v, expected %v", len(items), index) } if err := tx.Rollback(); err != nil { t.Fatal(err) } return true } if err := quick.Check(f, qconfig()); err != nil { t.Error(err) } } // Ensure that a Tx cursor can iterate over subbuckets. func TestCursor_QuickCheck_BucketsOnly(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if _, err := b.CreateBucket([]byte("foo")); err != nil { t.Fatal(err) } if _, err := b.CreateBucket([]byte("bar")); err != nil { t.Fatal(err) } if _, err := b.CreateBucket([]byte("baz")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { var names []string c := tx.Bucket([]byte("widgets")).Cursor() for k, v := c.First(); k != nil; k, v = c.Next() { names = append(names, string(k)) if v != nil { t.Fatalf("unexpected value: %v", v) } } if !reflect.DeepEqual(names, []string{"bar", "baz", "foo"}) { t.Fatalf("unexpected names: %+v", names) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a Tx cursor can reverse iterate over subbuckets. func TestCursor_QuickCheck_BucketsOnly_Reverse(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if _, err := b.CreateBucket([]byte("foo")); err != nil { t.Fatal(err) } if _, err := b.CreateBucket([]byte("bar")); err != nil { t.Fatal(err) } if _, err := b.CreateBucket([]byte("baz")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { var names []string c := tx.Bucket([]byte("widgets")).Cursor() for k, v := c.Last(); k != nil; k, v = c.Prev() { names = append(names, string(k)) if v != nil { t.Fatalf("unexpected value: %v", v) } } if !reflect.DeepEqual(names, []string{"foo", "baz", "bar"}) { t.Fatalf("unexpected names: %+v", names) } return nil }); err != nil { t.Fatal(err) } } func ExampleCursor() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Start a read-write transaction. if err := db.Update(func(tx *bolt.Tx) error { // Create a new bucket. b, err := tx.CreateBucket([]byte("animals")) if err != nil { return err } // Insert data into a bucket. if err := b.Put([]byte("dog"), []byte("fun")); err != nil { log.Fatal(err) } if err := b.Put([]byte("cat"), []byte("lame")); err != nil { log.Fatal(err) } if err := b.Put([]byte("liger"), []byte("awesome")); err != nil { log.Fatal(err) } // Create a cursor for iteration. c := b.Cursor() // Iterate over items in sorted key order. This starts from the // first key/value pair and updates the k/v variables to the // next key/value on each iteration. // // The loop finishes at the end of the cursor when a nil key is returned. for k, v := c.First(); k != nil; k, v = c.Next() { fmt.Printf("A %s is %s.\n", k, v) } return nil }); err != nil { log.Fatal(err) } if err := db.Close(); err != nil { log.Fatal(err) } // Output: // A cat is lame. // A dog is fun. // A liger is awesome. } func ExampleCursor_reverse() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Start a read-write transaction. if err := db.Update(func(tx *bolt.Tx) error { // Create a new bucket. b, err := tx.CreateBucket([]byte("animals")) if err != nil { return err } // Insert data into a bucket. if err := b.Put([]byte("dog"), []byte("fun")); err != nil { log.Fatal(err) } if err := b.Put([]byte("cat"), []byte("lame")); err != nil { log.Fatal(err) } if err := b.Put([]byte("liger"), []byte("awesome")); err != nil { log.Fatal(err) } // Create a cursor for iteration. c := b.Cursor() // Iterate over items in reverse sorted key order. This starts // from the last key/value pair and updates the k/v variables to // the previous key/value on each iteration. // // The loop finishes at the beginning of the cursor when a nil key // is returned. for k, v := c.Last(); k != nil; k, v = c.Prev() { fmt.Printf("A %s is %s.\n", k, v) } return nil }); err != nil { log.Fatal(err) } // Close the database to release the file lock. if err := db.Close(); err != nil { log.Fatal(err) } // Output: // A liger is awesome. // A dog is fun. // A cat is lame. } dep-0.3.2/vendor/github.com/boltdb/bolt/db.go000066400000000000000000000671571317166637100207750ustar00rootroot00000000000000package bolt import ( "errors" "fmt" "hash/fnv" "log" "os" "runtime" "runtime/debug" "strings" "sync" "time" "unsafe" ) // The largest step that can be taken when remapping the mmap. const maxMmapStep = 1 << 30 // 1GB // The data file format version. const version = 2 // Represents a marker value to indicate that a file is a Bolt DB. const magic uint32 = 0xED0CDAED // IgnoreNoSync specifies whether the NoSync field of a DB is ignored when // syncing changes to a file. This is required as some operating systems, // such as OpenBSD, do not have a unified buffer cache (UBC) and writes // must be synchronized using the msync(2) syscall. const IgnoreNoSync = runtime.GOOS == "openbsd" // Default values if not set in a DB instance. const ( DefaultMaxBatchSize int = 1000 DefaultMaxBatchDelay = 10 * time.Millisecond DefaultAllocSize = 16 * 1024 * 1024 ) // default page size for db is set to the OS page size. var defaultPageSize = os.Getpagesize() // DB represents a collection of buckets persisted to a file on disk. // All data access is performed through transactions which can be obtained through the DB. // All the functions on DB will return a ErrDatabaseNotOpen if accessed before Open() is called. type DB struct { // When enabled, the database will perform a Check() after every commit. // A panic is issued if the database is in an inconsistent state. This // flag has a large performance impact so it should only be used for // debugging purposes. StrictMode bool // Setting the NoSync flag will cause the database to skip fsync() // calls after each commit. This can be useful when bulk loading data // into a database and you can restart the bulk load in the event of // a system failure or database corruption. Do not set this flag for // normal use. // // If the package global IgnoreNoSync constant is true, this value is // ignored. See the comment on that constant for more details. // // THIS IS UNSAFE. PLEASE USE WITH CAUTION. NoSync bool // When true, skips the truncate call when growing the database. // Setting this to true is only safe on non-ext3/ext4 systems. // Skipping truncation avoids preallocation of hard drive space and // bypasses a truncate() and fsync() syscall on remapping. // // https://github.com/boltdb/bolt/issues/284 NoGrowSync bool // If you want to read the entire database fast, you can set MmapFlag to // syscall.MAP_POPULATE on Linux 2.6.23+ for sequential read-ahead. MmapFlags int // MaxBatchSize is the maximum size of a batch. Default value is // copied from DefaultMaxBatchSize in Open. // // If <=0, disables batching. // // Do not change concurrently with calls to Batch. MaxBatchSize int // MaxBatchDelay is the maximum delay before a batch starts. // Default value is copied from DefaultMaxBatchDelay in Open. // // If <=0, effectively disables batching. // // Do not change concurrently with calls to Batch. MaxBatchDelay time.Duration // AllocSize is the amount of space allocated when the database // needs to create new pages. This is done to amortize the cost // of truncate() and fsync() when growing the data file. AllocSize int path string file *os.File lockfile *os.File // windows only dataref []byte // mmap'ed readonly, write throws SEGV data *[maxMapSize]byte datasz int filesz int // current on disk file size meta0 *meta meta1 *meta pageSize int opened bool rwtx *Tx txs []*Tx freelist *freelist stats Stats pagePool sync.Pool batchMu sync.Mutex batch *batch rwlock sync.Mutex // Allows only one writer at a time. metalock sync.Mutex // Protects meta page access. mmaplock sync.RWMutex // Protects mmap access during remapping. statlock sync.RWMutex // Protects stats access. ops struct { writeAt func(b []byte, off int64) (n int, err error) } // Read only mode. // When true, Update() and Begin(true) return ErrDatabaseReadOnly immediately. readOnly bool } // Path returns the path to currently open database file. func (db *DB) Path() string { return db.path } // GoString returns the Go string representation of the database. func (db *DB) GoString() string { return fmt.Sprintf("bolt.DB{path:%q}", db.path) } // String returns the string representation of the database. func (db *DB) String() string { return fmt.Sprintf("DB<%q>", db.path) } // Open creates and opens a database at the given path. // If the file does not exist then it will be created automatically. // Passing in nil options will cause Bolt to open the database with the default options. func Open(path string, mode os.FileMode, options *Options) (*DB, error) { var db = &DB{opened: true} // Set default options if no options are provided. if options == nil { options = DefaultOptions } db.NoGrowSync = options.NoGrowSync db.MmapFlags = options.MmapFlags // Set default values for later DB operations. db.MaxBatchSize = DefaultMaxBatchSize db.MaxBatchDelay = DefaultMaxBatchDelay db.AllocSize = DefaultAllocSize flag := os.O_RDWR if options.ReadOnly { flag = os.O_RDONLY db.readOnly = true } // Open data file and separate sync handler for metadata writes. db.path = path var err error if db.file, err = os.OpenFile(db.path, flag|os.O_CREATE, mode); err != nil { _ = db.close() return nil, err } // Lock file so that other processes using Bolt in read-write mode cannot // use the database at the same time. This would cause corruption since // the two processes would write meta pages and free pages separately. // The database file is locked exclusively (only one process can grab the lock) // if !options.ReadOnly. // The database file is locked using the shared lock (more than one process may // hold a lock at the same time) otherwise (options.ReadOnly is set). if err := flock(db, mode, !db.readOnly, options.Timeout); err != nil { _ = db.close() return nil, err } // Default values for test hooks db.ops.writeAt = db.file.WriteAt // Initialize the database if it doesn't exist. if info, err := db.file.Stat(); err != nil { return nil, err } else if info.Size() == 0 { // Initialize new files with meta pages. if err := db.init(); err != nil { return nil, err } } else { // Read the first meta page to determine the page size. var buf [0x1000]byte if _, err := db.file.ReadAt(buf[:], 0); err == nil { m := db.pageInBuffer(buf[:], 0).meta() if err := m.validate(); err != nil { // If we can't read the page size, we can assume it's the same // as the OS -- since that's how the page size was chosen in the // first place. // // If the first page is invalid and this OS uses a different // page size than what the database was created with then we // are out of luck and cannot access the database. db.pageSize = os.Getpagesize() } else { db.pageSize = int(m.pageSize) } } } // Initialize page pool. db.pagePool = sync.Pool{ New: func() interface{} { return make([]byte, db.pageSize) }, } // Memory map the data file. if err := db.mmap(options.InitialMmapSize); err != nil { _ = db.close() return nil, err } // Read in the freelist. db.freelist = newFreelist() db.freelist.read(db.page(db.meta().freelist)) // Mark the database as opened and return. return db, nil } // mmap opens the underlying memory-mapped file and initializes the meta references. // minsz is the minimum size that the new mmap can be. func (db *DB) mmap(minsz int) error { db.mmaplock.Lock() defer db.mmaplock.Unlock() info, err := db.file.Stat() if err != nil { return fmt.Errorf("mmap stat error: %s", err) } else if int(info.Size()) < db.pageSize*2 { return fmt.Errorf("file size too small") } // Ensure the size is at least the minimum size. var size = int(info.Size()) if size < minsz { size = minsz } size, err = db.mmapSize(size) if err != nil { return err } // Dereference all mmap references before unmapping. if db.rwtx != nil { db.rwtx.root.dereference() } // Unmap existing data before continuing. if err := db.munmap(); err != nil { return err } // Memory-map the data file as a byte slice. if err := mmap(db, size); err != nil { return err } // Save references to the meta pages. db.meta0 = db.page(0).meta() db.meta1 = db.page(1).meta() // Validate the meta pages. We only return an error if both meta pages fail // validation, since meta0 failing validation means that it wasn't saved // properly -- but we can recover using meta1. And vice-versa. err0 := db.meta0.validate() err1 := db.meta1.validate() if err0 != nil && err1 != nil { return err0 } return nil } // munmap unmaps the data file from memory. func (db *DB) munmap() error { if err := munmap(db); err != nil { return fmt.Errorf("unmap error: " + err.Error()) } return nil } // mmapSize determines the appropriate size for the mmap given the current size // of the database. The minimum size is 32KB and doubles until it reaches 1GB. // Returns an error if the new mmap size is greater than the max allowed. func (db *DB) mmapSize(size int) (int, error) { // Double the size from 32KB until 1GB. for i := uint(15); i <= 30; i++ { if size <= 1< maxMapSize { return 0, fmt.Errorf("mmap too large") } // If larger than 1GB then grow by 1GB at a time. sz := int64(size) if remainder := sz % int64(maxMmapStep); remainder > 0 { sz += int64(maxMmapStep) - remainder } // Ensure that the mmap size is a multiple of the page size. // This should always be true since we're incrementing in MBs. pageSize := int64(db.pageSize) if (sz % pageSize) != 0 { sz = ((sz / pageSize) + 1) * pageSize } // If we've exceeded the max size then only grow up to the max size. if sz > maxMapSize { sz = maxMapSize } return int(sz), nil } // init creates a new database file and initializes its meta pages. func (db *DB) init() error { // Set the page size to the OS page size. db.pageSize = os.Getpagesize() // Create two meta pages on a buffer. buf := make([]byte, db.pageSize*4) for i := 0; i < 2; i++ { p := db.pageInBuffer(buf[:], pgid(i)) p.id = pgid(i) p.flags = metaPageFlag // Initialize the meta page. m := p.meta() m.magic = magic m.version = version m.pageSize = uint32(db.pageSize) m.freelist = 2 m.root = bucket{root: 3} m.pgid = 4 m.txid = txid(i) m.checksum = m.sum64() } // Write an empty freelist at page 3. p := db.pageInBuffer(buf[:], pgid(2)) p.id = pgid(2) p.flags = freelistPageFlag p.count = 0 // Write an empty leaf page at page 4. p = db.pageInBuffer(buf[:], pgid(3)) p.id = pgid(3) p.flags = leafPageFlag p.count = 0 // Write the buffer to our data file. if _, err := db.ops.writeAt(buf, 0); err != nil { return err } if err := fdatasync(db); err != nil { return err } return nil } // Close releases all database resources. // All transactions must be closed before closing the database. func (db *DB) Close() error { db.rwlock.Lock() defer db.rwlock.Unlock() db.metalock.Lock() defer db.metalock.Unlock() db.mmaplock.RLock() defer db.mmaplock.RUnlock() return db.close() } func (db *DB) close() error { if !db.opened { return nil } db.opened = false db.freelist = nil // Clear ops. db.ops.writeAt = nil // Close the mmap. if err := db.munmap(); err != nil { return err } // Close file handles. if db.file != nil { // No need to unlock read-only file. if !db.readOnly { // Unlock the file. if err := funlock(db); err != nil { log.Printf("bolt.Close(): funlock error: %s", err) } } // Close the file descriptor. if err := db.file.Close(); err != nil { return fmt.Errorf("db file close: %s", err) } db.file = nil } db.path = "" return nil } // Begin starts a new transaction. // Multiple read-only transactions can be used concurrently but only one // write transaction can be used at a time. Starting multiple write transactions // will cause the calls to block and be serialized until the current write // transaction finishes. // // Transactions should not be dependent on one another. Opening a read // transaction and a write transaction in the same goroutine can cause the // writer to deadlock because the database periodically needs to re-mmap itself // as it grows and it cannot do that while a read transaction is open. // // If a long running read transaction (for example, a snapshot transaction) is // needed, you might want to set DB.InitialMmapSize to a large enough value // to avoid potential blocking of write transaction. // // IMPORTANT: You must close read-only transactions after you are finished or // else the database will not reclaim old pages. func (db *DB) Begin(writable bool) (*Tx, error) { if writable { return db.beginRWTx() } return db.beginTx() } func (db *DB) beginTx() (*Tx, error) { // Lock the meta pages while we initialize the transaction. We obtain // the meta lock before the mmap lock because that's the order that the // write transaction will obtain them. db.metalock.Lock() // Obtain a read-only lock on the mmap. When the mmap is remapped it will // obtain a write lock so all transactions must finish before it can be // remapped. db.mmaplock.RLock() // Exit if the database is not open yet. if !db.opened { db.mmaplock.RUnlock() db.metalock.Unlock() return nil, ErrDatabaseNotOpen } // Create a transaction associated with the database. t := &Tx{} t.init(db) // Keep track of transaction until it closes. db.txs = append(db.txs, t) n := len(db.txs) // Unlock the meta pages. db.metalock.Unlock() // Update the transaction stats. db.statlock.Lock() db.stats.TxN++ db.stats.OpenTxN = n db.statlock.Unlock() return t, nil } func (db *DB) beginRWTx() (*Tx, error) { // If the database was opened with Options.ReadOnly, return an error. if db.readOnly { return nil, ErrDatabaseReadOnly } // Obtain writer lock. This is released by the transaction when it closes. // This enforces only one writer transaction at a time. db.rwlock.Lock() // Once we have the writer lock then we can lock the meta pages so that // we can set up the transaction. db.metalock.Lock() defer db.metalock.Unlock() // Exit if the database is not open yet. if !db.opened { db.rwlock.Unlock() return nil, ErrDatabaseNotOpen } // Create a transaction associated with the database. t := &Tx{writable: true} t.init(db) db.rwtx = t // Free any pages associated with closed read-only transactions. var minid txid = 0xFFFFFFFFFFFFFFFF for _, t := range db.txs { if t.meta.txid < minid { minid = t.meta.txid } } if minid > 0 { db.freelist.release(minid - 1) } return t, nil } // removeTx removes a transaction from the database. func (db *DB) removeTx(tx *Tx) { // Release the read lock on the mmap. db.mmaplock.RUnlock() // Use the meta lock to restrict access to the DB object. db.metalock.Lock() // Remove the transaction. for i, t := range db.txs { if t == tx { last := len(db.txs) - 1 db.txs[i] = db.txs[last] db.txs[last] = nil db.txs = db.txs[:last] break } } n := len(db.txs) // Unlock the meta pages. db.metalock.Unlock() // Merge statistics. db.statlock.Lock() db.stats.OpenTxN = n db.stats.TxStats.add(&tx.stats) db.statlock.Unlock() } // Update executes a function within the context of a read-write managed transaction. // If no error is returned from the function then the transaction is committed. // If an error is returned then the entire transaction is rolled back. // Any error that is returned from the function or returned from the commit is // returned from the Update() method. // // Attempting to manually commit or rollback within the function will cause a panic. func (db *DB) Update(fn func(*Tx) error) error { t, err := db.Begin(true) if err != nil { return err } // Make sure the transaction rolls back in the event of a panic. defer func() { if t.db != nil { t.rollback() } }() // Mark as a managed tx so that the inner function cannot manually commit. t.managed = true // If an error is returned from the function then rollback and return error. err = fn(t) t.managed = false if err != nil { _ = t.Rollback() return err } return t.Commit() } // View executes a function within the context of a managed read-only transaction. // Any error that is returned from the function is returned from the View() method. // // Attempting to manually rollback within the function will cause a panic. func (db *DB) View(fn func(*Tx) error) error { t, err := db.Begin(false) if err != nil { return err } // Make sure the transaction rolls back in the event of a panic. defer func() { if t.db != nil { t.rollback() } }() // Mark as a managed tx so that the inner function cannot manually rollback. t.managed = true // If an error is returned from the function then pass it through. err = fn(t) t.managed = false if err != nil { _ = t.Rollback() return err } if err := t.Rollback(); err != nil { return err } return nil } // Batch calls fn as part of a batch. It behaves similar to Update, // except: // // 1. concurrent Batch calls can be combined into a single Bolt // transaction. // // 2. the function passed to Batch may be called multiple times, // regardless of whether it returns error or not. // // This means that Batch function side effects must be idempotent and // take permanent effect only after a successful return is seen in // caller. // // The maximum batch size and delay can be adjusted with DB.MaxBatchSize // and DB.MaxBatchDelay, respectively. // // Batch is only useful when there are multiple goroutines calling it. func (db *DB) Batch(fn func(*Tx) error) error { errCh := make(chan error, 1) db.batchMu.Lock() if (db.batch == nil) || (db.batch != nil && len(db.batch.calls) >= db.MaxBatchSize) { // There is no existing batch, or the existing batch is full; start a new one. db.batch = &batch{ db: db, } db.batch.timer = time.AfterFunc(db.MaxBatchDelay, db.batch.trigger) } db.batch.calls = append(db.batch.calls, call{fn: fn, err: errCh}) if len(db.batch.calls) >= db.MaxBatchSize { // wake up batch, it's ready to run go db.batch.trigger() } db.batchMu.Unlock() err := <-errCh if err == trySolo { err = db.Update(fn) } return err } type call struct { fn func(*Tx) error err chan<- error } type batch struct { db *DB timer *time.Timer start sync.Once calls []call } // trigger runs the batch if it hasn't already been run. func (b *batch) trigger() { b.start.Do(b.run) } // run performs the transactions in the batch and communicates results // back to DB.Batch. func (b *batch) run() { b.db.batchMu.Lock() b.timer.Stop() // Make sure no new work is added to this batch, but don't break // other batches. if b.db.batch == b { b.db.batch = nil } b.db.batchMu.Unlock() retry: for len(b.calls) > 0 { var failIdx = -1 err := b.db.Update(func(tx *Tx) error { for i, c := range b.calls { if err := safelyCall(c.fn, tx); err != nil { failIdx = i return err } } return nil }) if failIdx >= 0 { // take the failing transaction out of the batch. it's // safe to shorten b.calls here because db.batch no longer // points to us, and we hold the mutex anyway. c := b.calls[failIdx] b.calls[failIdx], b.calls = b.calls[len(b.calls)-1], b.calls[:len(b.calls)-1] // tell the submitter re-run it solo, continue with the rest of the batch c.err <- trySolo continue retry } // pass success, or bolt internal errors, to all callers for _, c := range b.calls { if c.err != nil { c.err <- err } } break retry } } // trySolo is a special sentinel error value used for signaling that a // transaction function should be re-run. It should never be seen by // callers. var trySolo = errors.New("batch function returned an error and should be re-run solo") type panicked struct { reason interface{} } func (p panicked) Error() string { if err, ok := p.reason.(error); ok { return err.Error() } return fmt.Sprintf("panic: %v", p.reason) } func safelyCall(fn func(*Tx) error, tx *Tx) (err error) { defer func() { if p := recover(); p != nil { err = panicked{p} } }() return fn(tx) } // Sync executes fdatasync() against the database file handle. // // This is not necessary under normal operation, however, if you use NoSync // then it allows you to force the database file to sync against the disk. func (db *DB) Sync() error { return fdatasync(db) } // Stats retrieves ongoing performance stats for the database. // This is only updated when a transaction closes. func (db *DB) Stats() Stats { db.statlock.RLock() defer db.statlock.RUnlock() return db.stats } // This is for internal access to the raw data bytes from the C cursor, use // carefully, or not at all. func (db *DB) Info() *Info { return &Info{uintptr(unsafe.Pointer(&db.data[0])), db.pageSize} } // page retrieves a page reference from the mmap based on the current page size. func (db *DB) page(id pgid) *page { pos := id * pgid(db.pageSize) return (*page)(unsafe.Pointer(&db.data[pos])) } // pageInBuffer retrieves a page reference from a given byte array based on the current page size. func (db *DB) pageInBuffer(b []byte, id pgid) *page { return (*page)(unsafe.Pointer(&b[id*pgid(db.pageSize)])) } // meta retrieves the current meta page reference. func (db *DB) meta() *meta { // We have to return the meta with the highest txid which doesn't fail // validation. Otherwise, we can cause errors when in fact the database is // in a consistent state. metaA is the one with the higher txid. metaA := db.meta0 metaB := db.meta1 if db.meta1.txid > db.meta0.txid { metaA = db.meta1 metaB = db.meta0 } // Use higher meta page if valid. Otherwise fallback to previous, if valid. if err := metaA.validate(); err == nil { return metaA } else if err := metaB.validate(); err == nil { return metaB } // This should never be reached, because both meta1 and meta0 were validated // on mmap() and we do fsync() on every write. panic("bolt.DB.meta(): invalid meta pages") } // allocate returns a contiguous block of memory starting at a given page. func (db *DB) allocate(count int) (*page, error) { // Allocate a temporary buffer for the page. var buf []byte if count == 1 { buf = db.pagePool.Get().([]byte) } else { buf = make([]byte, count*db.pageSize) } p := (*page)(unsafe.Pointer(&buf[0])) p.overflow = uint32(count - 1) // Use pages from the freelist if they are available. if p.id = db.freelist.allocate(count); p.id != 0 { return p, nil } // Resize mmap() if we're at the end. p.id = db.rwtx.meta.pgid var minsz = int((p.id+pgid(count))+1) * db.pageSize if minsz >= db.datasz { if err := db.mmap(minsz); err != nil { return nil, fmt.Errorf("mmap allocate error: %s", err) } } // Move the page id high water mark. db.rwtx.meta.pgid += pgid(count) return p, nil } // grow grows the size of the database to the given sz. func (db *DB) grow(sz int) error { // Ignore if the new size is less than available file size. if sz <= db.filesz { return nil } // If the data is smaller than the alloc size then only allocate what's needed. // Once it goes over the allocation size then allocate in chunks. if db.datasz < db.AllocSize { sz = db.datasz } else { sz += db.AllocSize } // Truncate and fsync to ensure file size metadata is flushed. // https://github.com/boltdb/bolt/issues/284 if !db.NoGrowSync && !db.readOnly { if runtime.GOOS != "windows" { if err := db.file.Truncate(int64(sz)); err != nil { return fmt.Errorf("file resize error: %s", err) } } if err := db.file.Sync(); err != nil { return fmt.Errorf("file sync error: %s", err) } } db.filesz = sz return nil } func (db *DB) IsReadOnly() bool { return db.readOnly } // Options represents the options that can be set when opening a database. type Options struct { // Timeout is the amount of time to wait to obtain a file lock. // When set to zero it will wait indefinitely. This option is only // available on Darwin and Linux. Timeout time.Duration // Sets the DB.NoGrowSync flag before memory mapping the file. NoGrowSync bool // Open database in read-only mode. Uses flock(..., LOCK_SH |LOCK_NB) to // grab a shared lock (UNIX). ReadOnly bool // Sets the DB.MmapFlags flag before memory mapping the file. MmapFlags int // InitialMmapSize is the initial mmap size of the database // in bytes. Read transactions won't block write transaction // if the InitialMmapSize is large enough to hold database mmap // size. (See DB.Begin for more information) // // If <=0, the initial map size is 0. // If initialMmapSize is smaller than the previous database size, // it takes no effect. InitialMmapSize int } // DefaultOptions represent the options used if nil options are passed into Open(). // No timeout is used which will cause Bolt to wait indefinitely for a lock. var DefaultOptions = &Options{ Timeout: 0, NoGrowSync: false, } // Stats represents statistics about the database. type Stats struct { // Freelist stats FreePageN int // total number of free pages on the freelist PendingPageN int // total number of pending pages on the freelist FreeAlloc int // total bytes allocated in free pages FreelistInuse int // total bytes used by the freelist // Transaction stats TxN int // total number of started read transactions OpenTxN int // number of currently open read transactions TxStats TxStats // global, ongoing stats. } // Sub calculates and returns the difference between two sets of database stats. // This is useful when obtaining stats at two different points and time and // you need the performance counters that occurred within that time span. func (s *Stats) Sub(other *Stats) Stats { if other == nil { return *s } var diff Stats diff.FreePageN = s.FreePageN diff.PendingPageN = s.PendingPageN diff.FreeAlloc = s.FreeAlloc diff.FreelistInuse = s.FreelistInuse diff.TxN = s.TxN - other.TxN diff.TxStats = s.TxStats.Sub(&other.TxStats) return diff } func (s *Stats) add(other *Stats) { s.TxStats.add(&other.TxStats) } type Info struct { Data uintptr PageSize int } type meta struct { magic uint32 version uint32 pageSize uint32 flags uint32 root bucket freelist pgid pgid pgid txid txid checksum uint64 } // validate checks the marker bytes and version of the meta page to ensure it matches this binary. func (m *meta) validate() error { if m.magic != magic { return ErrInvalid } else if m.version != version { return ErrVersionMismatch } else if m.checksum != 0 && m.checksum != m.sum64() { return ErrChecksum } return nil } // copy copies one meta object to another. func (m *meta) copy(dest *meta) { *dest = *m } // write writes the meta onto a page. func (m *meta) write(p *page) { if m.root.root >= m.pgid { panic(fmt.Sprintf("root bucket pgid (%d) above high water mark (%d)", m.root.root, m.pgid)) } else if m.freelist >= m.pgid { panic(fmt.Sprintf("freelist pgid (%d) above high water mark (%d)", m.freelist, m.pgid)) } // Page id is either going to be 0 or 1 which we can determine by the transaction ID. p.id = pgid(m.txid % 2) p.flags |= metaPageFlag // Calculate the checksum. m.checksum = m.sum64() m.copy(p.meta()) } // generates the checksum for the meta. func (m *meta) sum64() uint64 { var h = fnv.New64a() _, _ = h.Write((*[unsafe.Offsetof(meta{}.checksum)]byte)(unsafe.Pointer(m))[:]) return h.Sum64() } // _assert will panic with a given formatted message if the given condition is false. func _assert(condition bool, msg string, v ...interface{}) { if !condition { panic(fmt.Sprintf("assertion failed: "+msg, v...)) } } func warn(v ...interface{}) { fmt.Fprintln(os.Stderr, v...) } func warnf(msg string, v ...interface{}) { fmt.Fprintf(os.Stderr, msg+"\n", v...) } func printstack() { stack := strings.Join(strings.Split(string(debug.Stack()), "\n")[2:], "\n") fmt.Fprintln(os.Stderr, stack) } dep-0.3.2/vendor/github.com/boltdb/bolt/db_test.go000066400000000000000000001032771317166637100220260ustar00rootroot00000000000000package bolt_test import ( "bytes" "encoding/binary" "errors" "flag" "fmt" "hash/fnv" "io/ioutil" "log" "os" "path/filepath" "regexp" "sort" "strings" "sync" "testing" "time" "unsafe" "github.com/boltdb/bolt" ) var statsFlag = flag.Bool("stats", false, "show performance stats") // version is the data file format version. const version = 2 // magic is the marker value to indicate that a file is a Bolt DB. const magic uint32 = 0xED0CDAED // pageSize is the size of one page in the data file. const pageSize = 4096 // pageHeaderSize is the size of a page header. const pageHeaderSize = 16 // meta represents a simplified version of a database meta page for testing. type meta struct { magic uint32 version uint32 _ uint32 _ uint32 _ [16]byte _ uint64 pgid uint64 _ uint64 checksum uint64 } // Ensure that a database can be opened without error. func TestOpen(t *testing.T) { path := tempfile() db, err := bolt.Open(path, 0666, nil) if err != nil { t.Fatal(err) } else if db == nil { t.Fatal("expected db") } if s := db.Path(); s != path { t.Fatalf("unexpected path: %s", s) } if err := db.Close(); err != nil { t.Fatal(err) } } // Ensure that opening a database with a blank path returns an error. func TestOpen_ErrPathRequired(t *testing.T) { _, err := bolt.Open("", 0666, nil) if err == nil { t.Fatalf("expected error") } } // Ensure that opening a database with a bad path returns an error. func TestOpen_ErrNotExists(t *testing.T) { _, err := bolt.Open(filepath.Join(tempfile(), "bad-path"), 0666, nil) if err == nil { t.Fatal("expected error") } } // Ensure that opening a file that is not a Bolt database returns ErrInvalid. func TestOpen_ErrInvalid(t *testing.T) { path := tempfile() f, err := os.Create(path) if err != nil { t.Fatal(err) } if _, err := fmt.Fprintln(f, "this is not a bolt database"); err != nil { t.Fatal(err) } if err := f.Close(); err != nil { t.Fatal(err) } defer os.Remove(path) if _, err := bolt.Open(path, 0666, nil); err != bolt.ErrInvalid { t.Fatalf("unexpected error: %s", err) } } // Ensure that opening a file with two invalid versions returns ErrVersionMismatch. func TestOpen_ErrVersionMismatch(t *testing.T) { if pageSize != os.Getpagesize() { t.Skip("page size mismatch") } // Create empty database. db := MustOpenDB() path := db.Path() defer db.MustClose() // Close database. if err := db.DB.Close(); err != nil { t.Fatal(err) } // Read data file. buf, err := ioutil.ReadFile(path) if err != nil { t.Fatal(err) } // Rewrite meta pages. meta0 := (*meta)(unsafe.Pointer(&buf[pageHeaderSize])) meta0.version++ meta1 := (*meta)(unsafe.Pointer(&buf[pageSize+pageHeaderSize])) meta1.version++ if err := ioutil.WriteFile(path, buf, 0666); err != nil { t.Fatal(err) } // Reopen data file. if _, err := bolt.Open(path, 0666, nil); err != bolt.ErrVersionMismatch { t.Fatalf("unexpected error: %s", err) } } // Ensure that opening a file with two invalid checksums returns ErrChecksum. func TestOpen_ErrChecksum(t *testing.T) { if pageSize != os.Getpagesize() { t.Skip("page size mismatch") } // Create empty database. db := MustOpenDB() path := db.Path() defer db.MustClose() // Close database. if err := db.DB.Close(); err != nil { t.Fatal(err) } // Read data file. buf, err := ioutil.ReadFile(path) if err != nil { t.Fatal(err) } // Rewrite meta pages. meta0 := (*meta)(unsafe.Pointer(&buf[pageHeaderSize])) meta0.pgid++ meta1 := (*meta)(unsafe.Pointer(&buf[pageSize+pageHeaderSize])) meta1.pgid++ if err := ioutil.WriteFile(path, buf, 0666); err != nil { t.Fatal(err) } // Reopen data file. if _, err := bolt.Open(path, 0666, nil); err != bolt.ErrChecksum { t.Fatalf("unexpected error: %s", err) } } // Ensure that opening a database does not increase its size. // https://github.com/boltdb/bolt/issues/291 func TestOpen_Size(t *testing.T) { // Open a data file. db := MustOpenDB() path := db.Path() defer db.MustClose() pagesize := db.Info().PageSize // Insert until we get above the minimum 4MB size. if err := db.Update(func(tx *bolt.Tx) error { b, _ := tx.CreateBucketIfNotExists([]byte("data")) for i := 0; i < 10000; i++ { if err := b.Put([]byte(fmt.Sprintf("%04d", i)), make([]byte, 1000)); err != nil { t.Fatal(err) } } return nil }); err != nil { t.Fatal(err) } // Close database and grab the size. if err := db.DB.Close(); err != nil { t.Fatal(err) } sz := fileSize(path) if sz == 0 { t.Fatalf("unexpected new file size: %d", sz) } // Reopen database, update, and check size again. db0, err := bolt.Open(path, 0666, nil) if err != nil { t.Fatal(err) } if err := db0.Update(func(tx *bolt.Tx) error { if err := tx.Bucket([]byte("data")).Put([]byte{0}, []byte{0}); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db0.Close(); err != nil { t.Fatal(err) } newSz := fileSize(path) if newSz == 0 { t.Fatalf("unexpected new file size: %d", newSz) } // Compare the original size with the new size. // db size might increase by a few page sizes due to the new small update. if sz < newSz-5*int64(pagesize) { t.Fatalf("unexpected file growth: %d => %d", sz, newSz) } } // Ensure that opening a database beyond the max step size does not increase its size. // https://github.com/boltdb/bolt/issues/303 func TestOpen_Size_Large(t *testing.T) { if testing.Short() { t.Skip("short mode") } // Open a data file. db := MustOpenDB() path := db.Path() defer db.MustClose() pagesize := db.Info().PageSize // Insert until we get above the minimum 4MB size. var index uint64 for i := 0; i < 10000; i++ { if err := db.Update(func(tx *bolt.Tx) error { b, _ := tx.CreateBucketIfNotExists([]byte("data")) for j := 0; j < 1000; j++ { if err := b.Put(u64tob(index), make([]byte, 50)); err != nil { t.Fatal(err) } index++ } return nil }); err != nil { t.Fatal(err) } } // Close database and grab the size. if err := db.DB.Close(); err != nil { t.Fatal(err) } sz := fileSize(path) if sz == 0 { t.Fatalf("unexpected new file size: %d", sz) } else if sz < (1 << 30) { t.Fatalf("expected larger initial size: %d", sz) } // Reopen database, update, and check size again. db0, err := bolt.Open(path, 0666, nil) if err != nil { t.Fatal(err) } if err := db0.Update(func(tx *bolt.Tx) error { return tx.Bucket([]byte("data")).Put([]byte{0}, []byte{0}) }); err != nil { t.Fatal(err) } if err := db0.Close(); err != nil { t.Fatal(err) } newSz := fileSize(path) if newSz == 0 { t.Fatalf("unexpected new file size: %d", newSz) } // Compare the original size with the new size. // db size might increase by a few page sizes due to the new small update. if sz < newSz-5*int64(pagesize) { t.Fatalf("unexpected file growth: %d => %d", sz, newSz) } } // Ensure that a re-opened database is consistent. func TestOpen_Check(t *testing.T) { path := tempfile() db, err := bolt.Open(path, 0666, nil) if err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { return <-tx.Check() }); err != nil { t.Fatal(err) } if err := db.Close(); err != nil { t.Fatal(err) } db, err = bolt.Open(path, 0666, nil) if err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { return <-tx.Check() }); err != nil { t.Fatal(err) } if err := db.Close(); err != nil { t.Fatal(err) } } // Ensure that write errors to the meta file handler during initialization are returned. func TestOpen_MetaInitWriteError(t *testing.T) { t.Skip("pending") } // Ensure that a database that is too small returns an error. func TestOpen_FileTooSmall(t *testing.T) { path := tempfile() db, err := bolt.Open(path, 0666, nil) if err != nil { t.Fatal(err) } if err := db.Close(); err != nil { t.Fatal(err) } // corrupt the database if err := os.Truncate(path, int64(os.Getpagesize())); err != nil { t.Fatal(err) } db, err = bolt.Open(path, 0666, nil) if err == nil || err.Error() != "file size too small" { t.Fatalf("unexpected error: %s", err) } } // TestDB_Open_InitialMmapSize tests if having InitialMmapSize large enough // to hold data from concurrent write transaction resolves the issue that // read transaction blocks the write transaction and causes deadlock. // This is a very hacky test since the mmap size is not exposed. func TestDB_Open_InitialMmapSize(t *testing.T) { path := tempfile() defer os.Remove(path) initMmapSize := 1 << 31 // 2GB testWriteSize := 1 << 27 // 134MB db, err := bolt.Open(path, 0666, &bolt.Options{InitialMmapSize: initMmapSize}) if err != nil { t.Fatal(err) } // create a long-running read transaction // that never gets closed while writing rtx, err := db.Begin(false) if err != nil { t.Fatal(err) } // create a write transaction wtx, err := db.Begin(true) if err != nil { t.Fatal(err) } b, err := wtx.CreateBucket([]byte("test")) if err != nil { t.Fatal(err) } // and commit a large write err = b.Put([]byte("foo"), make([]byte, testWriteSize)) if err != nil { t.Fatal(err) } done := make(chan struct{}) go func() { if err := wtx.Commit(); err != nil { t.Fatal(err) } done <- struct{}{} }() select { case <-time.After(5 * time.Second): t.Errorf("unexpected that the reader blocks writer") case <-done: } if err := rtx.Rollback(); err != nil { t.Fatal(err) } } // Ensure that a database cannot open a transaction when it's not open. func TestDB_Begin_ErrDatabaseNotOpen(t *testing.T) { var db bolt.DB if _, err := db.Begin(false); err != bolt.ErrDatabaseNotOpen { t.Fatalf("unexpected error: %s", err) } } // Ensure that a read-write transaction can be retrieved. func TestDB_BeginRW(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } else if tx == nil { t.Fatal("expected tx") } if tx.DB() != db.DB { t.Fatal("unexpected tx database") } else if !tx.Writable() { t.Fatal("expected writable tx") } if err := tx.Commit(); err != nil { t.Fatal(err) } } // Ensure that opening a transaction while the DB is closed returns an error. func TestDB_BeginRW_Closed(t *testing.T) { var db bolt.DB if _, err := db.Begin(true); err != bolt.ErrDatabaseNotOpen { t.Fatalf("unexpected error: %s", err) } } func TestDB_Close_PendingTx_RW(t *testing.T) { testDB_Close_PendingTx(t, true) } func TestDB_Close_PendingTx_RO(t *testing.T) { testDB_Close_PendingTx(t, false) } // Ensure that a database cannot close while transactions are open. func testDB_Close_PendingTx(t *testing.T, writable bool) { db := MustOpenDB() defer db.MustClose() // Start transaction. tx, err := db.Begin(true) if err != nil { t.Fatal(err) } // Open update in separate goroutine. done := make(chan struct{}) go func() { if err := db.Close(); err != nil { t.Fatal(err) } close(done) }() // Ensure database hasn't closed. time.Sleep(100 * time.Millisecond) select { case <-done: t.Fatal("database closed too early") default: } // Commit transaction. if err := tx.Commit(); err != nil { t.Fatal(err) } // Ensure database closed now. time.Sleep(100 * time.Millisecond) select { case <-done: default: t.Fatal("database did not close") } } // Ensure a database can provide a transactional block. func TestDB_Update(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte("bat")); err != nil { t.Fatal(err) } if err := b.Delete([]byte("foo")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) if v := b.Get([]byte("foo")); v != nil { t.Fatalf("expected nil value, got: %v", v) } if v := b.Get([]byte("baz")); !bytes.Equal(v, []byte("bat")) { t.Fatalf("unexpected value: %v", v) } return nil }); err != nil { t.Fatal(err) } } // Ensure a closed database returns an error while running a transaction block func TestDB_Update_Closed(t *testing.T) { var db bolt.DB if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != bolt.ErrDatabaseNotOpen { t.Fatalf("unexpected error: %s", err) } } // Ensure a panic occurs while trying to commit a managed transaction. func TestDB_Update_ManualCommit(t *testing.T) { db := MustOpenDB() defer db.MustClose() var panicked bool if err := db.Update(func(tx *bolt.Tx) error { func() { defer func() { if r := recover(); r != nil { panicked = true } }() if err := tx.Commit(); err != nil { t.Fatal(err) } }() return nil }); err != nil { t.Fatal(err) } else if !panicked { t.Fatal("expected panic") } } // Ensure a panic occurs while trying to rollback a managed transaction. func TestDB_Update_ManualRollback(t *testing.T) { db := MustOpenDB() defer db.MustClose() var panicked bool if err := db.Update(func(tx *bolt.Tx) error { func() { defer func() { if r := recover(); r != nil { panicked = true } }() if err := tx.Rollback(); err != nil { t.Fatal(err) } }() return nil }); err != nil { t.Fatal(err) } else if !panicked { t.Fatal("expected panic") } } // Ensure a panic occurs while trying to commit a managed transaction. func TestDB_View_ManualCommit(t *testing.T) { db := MustOpenDB() defer db.MustClose() var panicked bool if err := db.View(func(tx *bolt.Tx) error { func() { defer func() { if r := recover(); r != nil { panicked = true } }() if err := tx.Commit(); err != nil { t.Fatal(err) } }() return nil }); err != nil { t.Fatal(err) } else if !panicked { t.Fatal("expected panic") } } // Ensure a panic occurs while trying to rollback a managed transaction. func TestDB_View_ManualRollback(t *testing.T) { db := MustOpenDB() defer db.MustClose() var panicked bool if err := db.View(func(tx *bolt.Tx) error { func() { defer func() { if r := recover(); r != nil { panicked = true } }() if err := tx.Rollback(); err != nil { t.Fatal(err) } }() return nil }); err != nil { t.Fatal(err) } else if !panicked { t.Fatal("expected panic") } } // Ensure a write transaction that panics does not hold open locks. func TestDB_Update_Panic(t *testing.T) { db := MustOpenDB() defer db.MustClose() // Panic during update but recover. func() { defer func() { if r := recover(); r != nil { t.Log("recover: update", r) } }() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } panic("omg") }); err != nil { t.Fatal(err) } }() // Verify we can update again. if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } // Verify that our change persisted. if err := db.Update(func(tx *bolt.Tx) error { if tx.Bucket([]byte("widgets")) == nil { t.Fatal("expected bucket") } return nil }); err != nil { t.Fatal(err) } } // Ensure a database can return an error through a read-only transactional block. func TestDB_View_Error(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.View(func(tx *bolt.Tx) error { return errors.New("xxx") }); err == nil || err.Error() != "xxx" { t.Fatalf("unexpected error: %s", err) } } // Ensure a read transaction that panics does not hold open locks. func TestDB_View_Panic(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } // Panic during view transaction but recover. func() { defer func() { if r := recover(); r != nil { t.Log("recover: view", r) } }() if err := db.View(func(tx *bolt.Tx) error { if tx.Bucket([]byte("widgets")) == nil { t.Fatal("expected bucket") } panic("omg") }); err != nil { t.Fatal(err) } }() // Verify that we can still use read transactions. if err := db.View(func(tx *bolt.Tx) error { if tx.Bucket([]byte("widgets")) == nil { t.Fatal("expected bucket") } return nil }); err != nil { t.Fatal(err) } } // Ensure that DB stats can be returned. func TestDB_Stats(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) return err }); err != nil { t.Fatal(err) } stats := db.Stats() if stats.TxStats.PageCount != 2 { t.Fatalf("unexpected TxStats.PageCount: %d", stats.TxStats.PageCount) } else if stats.FreePageN != 0 { t.Fatalf("unexpected FreePageN != 0: %d", stats.FreePageN) } else if stats.PendingPageN != 2 { t.Fatalf("unexpected PendingPageN != 2: %d", stats.PendingPageN) } } // Ensure that database pages are in expected order and type. func TestDB_Consistency(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) return err }); err != nil { t.Fatal(err) } for i := 0; i < 10; i++ { if err := db.Update(func(tx *bolt.Tx) error { if err := tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } } if err := db.Update(func(tx *bolt.Tx) error { if p, _ := tx.Page(0); p == nil { t.Fatal("expected page") } else if p.Type != "meta" { t.Fatalf("unexpected page type: %s", p.Type) } if p, _ := tx.Page(1); p == nil { t.Fatal("expected page") } else if p.Type != "meta" { t.Fatalf("unexpected page type: %s", p.Type) } if p, _ := tx.Page(2); p == nil { t.Fatal("expected page") } else if p.Type != "free" { t.Fatalf("unexpected page type: %s", p.Type) } if p, _ := tx.Page(3); p == nil { t.Fatal("expected page") } else if p.Type != "free" { t.Fatalf("unexpected page type: %s", p.Type) } if p, _ := tx.Page(4); p == nil { t.Fatal("expected page") } else if p.Type != "leaf" { t.Fatalf("unexpected page type: %s", p.Type) } if p, _ := tx.Page(5); p == nil { t.Fatal("expected page") } else if p.Type != "freelist" { t.Fatalf("unexpected page type: %s", p.Type) } if p, _ := tx.Page(6); p != nil { t.Fatal("unexpected page") } return nil }); err != nil { t.Fatal(err) } } // Ensure that DB stats can be subtracted from one another. func TestDBStats_Sub(t *testing.T) { var a, b bolt.Stats a.TxStats.PageCount = 3 a.FreePageN = 4 b.TxStats.PageCount = 10 b.FreePageN = 14 diff := b.Sub(&a) if diff.TxStats.PageCount != 7 { t.Fatalf("unexpected TxStats.PageCount: %d", diff.TxStats.PageCount) } // free page stats are copied from the receiver and not subtracted if diff.FreePageN != 14 { t.Fatalf("unexpected FreePageN: %d", diff.FreePageN) } } // Ensure two functions can perform updates in a single batch. func TestDB_Batch(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } // Iterate over multiple updates in separate goroutines. n := 2 ch := make(chan error) for i := 0; i < n; i++ { go func(i int) { ch <- db.Batch(func(tx *bolt.Tx) error { return tx.Bucket([]byte("widgets")).Put(u64tob(uint64(i)), []byte{}) }) }(i) } // Check all responses to make sure there's no error. for i := 0; i < n; i++ { if err := <-ch; err != nil { t.Fatal(err) } } // Ensure data is correct. if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for i := 0; i < n; i++ { if v := b.Get(u64tob(uint64(i))); v == nil { t.Errorf("key not found: %d", i) } } return nil }); err != nil { t.Fatal(err) } } func TestDB_Batch_Panic(t *testing.T) { db := MustOpenDB() defer db.MustClose() var sentinel int var bork = &sentinel var problem interface{} var err error // Execute a function inside a batch that panics. func() { defer func() { if p := recover(); p != nil { problem = p } }() err = db.Batch(func(tx *bolt.Tx) error { panic(bork) }) }() // Verify there is no error. if g, e := err, error(nil); g != e { t.Fatalf("wrong error: %v != %v", g, e) } // Verify the panic was captured. if g, e := problem, bork; g != e { t.Fatalf("wrong error: %v != %v", g, e) } } func TestDB_BatchFull(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) return err }); err != nil { t.Fatal(err) } const size = 3 // buffered so we never leak goroutines ch := make(chan error, size) put := func(i int) { ch <- db.Batch(func(tx *bolt.Tx) error { return tx.Bucket([]byte("widgets")).Put(u64tob(uint64(i)), []byte{}) }) } db.MaxBatchSize = size // high enough to never trigger here db.MaxBatchDelay = 1 * time.Hour go put(1) go put(2) // Give the batch a chance to exhibit bugs. time.Sleep(10 * time.Millisecond) // not triggered yet select { case <-ch: t.Fatalf("batch triggered too early") default: } go put(3) // Check all responses to make sure there's no error. for i := 0; i < size; i++ { if err := <-ch; err != nil { t.Fatal(err) } } // Ensure data is correct. if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for i := 1; i <= size; i++ { if v := b.Get(u64tob(uint64(i))); v == nil { t.Errorf("key not found: %d", i) } } return nil }); err != nil { t.Fatal(err) } } func TestDB_BatchTime(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) return err }); err != nil { t.Fatal(err) } const size = 1 // buffered so we never leak goroutines ch := make(chan error, size) put := func(i int) { ch <- db.Batch(func(tx *bolt.Tx) error { return tx.Bucket([]byte("widgets")).Put(u64tob(uint64(i)), []byte{}) }) } db.MaxBatchSize = 1000 db.MaxBatchDelay = 0 go put(1) // Batch must trigger by time alone. // Check all responses to make sure there's no error. for i := 0; i < size; i++ { if err := <-ch; err != nil { t.Fatal(err) } } // Ensure data is correct. if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("widgets")) for i := 1; i <= size; i++ { if v := b.Get(u64tob(uint64(i))); v == nil { t.Errorf("key not found: %d", i) } } return nil }); err != nil { t.Fatal(err) } } func ExampleDB_Update() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Execute several commands within a read-write transaction. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { return err } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { return err } return nil }); err != nil { log.Fatal(err) } // Read the value back from a separate read-only transaction. if err := db.View(func(tx *bolt.Tx) error { value := tx.Bucket([]byte("widgets")).Get([]byte("foo")) fmt.Printf("The value of 'foo' is: %s\n", value) return nil }); err != nil { log.Fatal(err) } // Close database to release the file lock. if err := db.Close(); err != nil { log.Fatal(err) } // Output: // The value of 'foo' is: bar } func ExampleDB_View() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Insert data into a bucket. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("people")) if err != nil { return err } if err := b.Put([]byte("john"), []byte("doe")); err != nil { return err } if err := b.Put([]byte("susy"), []byte("que")); err != nil { return err } return nil }); err != nil { log.Fatal(err) } // Access data from within a read-only transactional block. if err := db.View(func(tx *bolt.Tx) error { v := tx.Bucket([]byte("people")).Get([]byte("john")) fmt.Printf("John's last name is %s.\n", v) return nil }); err != nil { log.Fatal(err) } // Close database to release the file lock. if err := db.Close(); err != nil { log.Fatal(err) } // Output: // John's last name is doe. } func ExampleDB_Begin_ReadOnly() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Create a bucket using a read-write transaction. if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) return err }); err != nil { log.Fatal(err) } // Create several keys in a transaction. tx, err := db.Begin(true) if err != nil { log.Fatal(err) } b := tx.Bucket([]byte("widgets")) if err := b.Put([]byte("john"), []byte("blue")); err != nil { log.Fatal(err) } if err := b.Put([]byte("abby"), []byte("red")); err != nil { log.Fatal(err) } if err := b.Put([]byte("zephyr"), []byte("purple")); err != nil { log.Fatal(err) } if err := tx.Commit(); err != nil { log.Fatal(err) } // Iterate over the values in sorted key order. tx, err = db.Begin(false) if err != nil { log.Fatal(err) } c := tx.Bucket([]byte("widgets")).Cursor() for k, v := c.First(); k != nil; k, v = c.Next() { fmt.Printf("%s likes %s\n", k, v) } if err := tx.Rollback(); err != nil { log.Fatal(err) } if err := db.Close(); err != nil { log.Fatal(err) } // Output: // abby likes red // john likes blue // zephyr likes purple } func BenchmarkDBBatchAutomatic(b *testing.B) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("bench")) return err }); err != nil { b.Fatal(err) } b.ResetTimer() for i := 0; i < b.N; i++ { start := make(chan struct{}) var wg sync.WaitGroup for round := 0; round < 1000; round++ { wg.Add(1) go func(id uint32) { defer wg.Done() <-start h := fnv.New32a() buf := make([]byte, 4) binary.LittleEndian.PutUint32(buf, id) _, _ = h.Write(buf[:]) k := h.Sum(nil) insert := func(tx *bolt.Tx) error { b := tx.Bucket([]byte("bench")) return b.Put(k, []byte("filler")) } if err := db.Batch(insert); err != nil { b.Error(err) return } }(uint32(round)) } close(start) wg.Wait() } b.StopTimer() validateBatchBench(b, db) } func BenchmarkDBBatchSingle(b *testing.B) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("bench")) return err }); err != nil { b.Fatal(err) } b.ResetTimer() for i := 0; i < b.N; i++ { start := make(chan struct{}) var wg sync.WaitGroup for round := 0; round < 1000; round++ { wg.Add(1) go func(id uint32) { defer wg.Done() <-start h := fnv.New32a() buf := make([]byte, 4) binary.LittleEndian.PutUint32(buf, id) _, _ = h.Write(buf[:]) k := h.Sum(nil) insert := func(tx *bolt.Tx) error { b := tx.Bucket([]byte("bench")) return b.Put(k, []byte("filler")) } if err := db.Update(insert); err != nil { b.Error(err) return } }(uint32(round)) } close(start) wg.Wait() } b.StopTimer() validateBatchBench(b, db) } func BenchmarkDBBatchManual10x100(b *testing.B) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("bench")) return err }); err != nil { b.Fatal(err) } b.ResetTimer() for i := 0; i < b.N; i++ { start := make(chan struct{}) var wg sync.WaitGroup for major := 0; major < 10; major++ { wg.Add(1) go func(id uint32) { defer wg.Done() <-start insert100 := func(tx *bolt.Tx) error { h := fnv.New32a() buf := make([]byte, 4) for minor := uint32(0); minor < 100; minor++ { binary.LittleEndian.PutUint32(buf, uint32(id*100+minor)) h.Reset() _, _ = h.Write(buf[:]) k := h.Sum(nil) b := tx.Bucket([]byte("bench")) if err := b.Put(k, []byte("filler")); err != nil { return err } } return nil } if err := db.Update(insert100); err != nil { b.Fatal(err) } }(uint32(major)) } close(start) wg.Wait() } b.StopTimer() validateBatchBench(b, db) } func validateBatchBench(b *testing.B, db *DB) { var rollback = errors.New("sentinel error to cause rollback") validate := func(tx *bolt.Tx) error { bucket := tx.Bucket([]byte("bench")) h := fnv.New32a() buf := make([]byte, 4) for id := uint32(0); id < 1000; id++ { binary.LittleEndian.PutUint32(buf, id) h.Reset() _, _ = h.Write(buf[:]) k := h.Sum(nil) v := bucket.Get(k) if v == nil { b.Errorf("not found id=%d key=%x", id, k) continue } if g, e := v, []byte("filler"); !bytes.Equal(g, e) { b.Errorf("bad value for id=%d key=%x: %s != %q", id, k, g, e) } if err := bucket.Delete(k); err != nil { return err } } // should be empty now c := bucket.Cursor() for k, v := c.First(); k != nil; k, v = c.Next() { b.Errorf("unexpected key: %x = %q", k, v) } return rollback } if err := db.Update(validate); err != nil && err != rollback { b.Error(err) } } // DB is a test wrapper for bolt.DB. type DB struct { *bolt.DB } // MustOpenDB returns a new, open DB at a temporary location. func MustOpenDB() *DB { db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { panic(err) } return &DB{db} } // Close closes the database and deletes the underlying file. func (db *DB) Close() error { // Log statistics. if *statsFlag { db.PrintStats() } // Check database consistency after every test. db.MustCheck() // Close database and remove file. defer os.Remove(db.Path()) return db.DB.Close() } // MustClose closes the database and deletes the underlying file. Panic on error. func (db *DB) MustClose() { if err := db.Close(); err != nil { panic(err) } } // PrintStats prints the database stats func (db *DB) PrintStats() { var stats = db.Stats() fmt.Printf("[db] %-20s %-20s %-20s\n", fmt.Sprintf("pg(%d/%d)", stats.TxStats.PageCount, stats.TxStats.PageAlloc), fmt.Sprintf("cur(%d)", stats.TxStats.CursorCount), fmt.Sprintf("node(%d/%d)", stats.TxStats.NodeCount, stats.TxStats.NodeDeref), ) fmt.Printf(" %-20s %-20s %-20s\n", fmt.Sprintf("rebal(%d/%v)", stats.TxStats.Rebalance, truncDuration(stats.TxStats.RebalanceTime)), fmt.Sprintf("spill(%d/%v)", stats.TxStats.Spill, truncDuration(stats.TxStats.SpillTime)), fmt.Sprintf("w(%d/%v)", stats.TxStats.Write, truncDuration(stats.TxStats.WriteTime)), ) } // MustCheck runs a consistency check on the database and panics if any errors are found. func (db *DB) MustCheck() { if err := db.Update(func(tx *bolt.Tx) error { // Collect all the errors. var errors []error for err := range tx.Check() { errors = append(errors, err) if len(errors) > 10 { break } } // If errors occurred, copy the DB and print the errors. if len(errors) > 0 { var path = tempfile() if err := tx.CopyFile(path, 0600); err != nil { panic(err) } // Print errors. fmt.Print("\n\n") fmt.Printf("consistency check failed (%d errors)\n", len(errors)) for _, err := range errors { fmt.Println(err) } fmt.Println("") fmt.Println("db saved to:") fmt.Println(path) fmt.Print("\n\n") os.Exit(-1) } return nil }); err != nil && err != bolt.ErrDatabaseNotOpen { panic(err) } } // CopyTempFile copies a database to a temporary file. func (db *DB) CopyTempFile() { path := tempfile() if err := db.View(func(tx *bolt.Tx) error { return tx.CopyFile(path, 0600) }); err != nil { panic(err) } fmt.Println("db copied to: ", path) } // tempfile returns a temporary file path. func tempfile() string { f, err := ioutil.TempFile("", "bolt-") if err != nil { panic(err) } if err := f.Close(); err != nil { panic(err) } if err := os.Remove(f.Name()); err != nil { panic(err) } return f.Name() } // mustContainKeys checks that a bucket contains a given set of keys. func mustContainKeys(b *bolt.Bucket, m map[string]string) { found := make(map[string]string) if err := b.ForEach(func(k, _ []byte) error { found[string(k)] = "" return nil }); err != nil { panic(err) } // Check for keys found in bucket that shouldn't be there. var keys []string for k, _ := range found { if _, ok := m[string(k)]; !ok { keys = append(keys, k) } } if len(keys) > 0 { sort.Strings(keys) panic(fmt.Sprintf("keys found(%d): %s", len(keys), strings.Join(keys, ","))) } // Check for keys not found in bucket that should be there. for k, _ := range m { if _, ok := found[string(k)]; !ok { keys = append(keys, k) } } if len(keys) > 0 { sort.Strings(keys) panic(fmt.Sprintf("keys not found(%d): %s", len(keys), strings.Join(keys, ","))) } } func trunc(b []byte, length int) []byte { if length < len(b) { return b[:length] } return b } func truncDuration(d time.Duration) string { return regexp.MustCompile(`^(\d+)(\.\d+)`).ReplaceAllString(d.String(), "$1") } func fileSize(path string) int64 { fi, err := os.Stat(path) if err != nil { return 0 } return fi.Size() } func warn(v ...interface{}) { fmt.Fprintln(os.Stderr, v...) } func warnf(msg string, v ...interface{}) { fmt.Fprintf(os.Stderr, msg+"\n", v...) } // u64tob converts a uint64 into an 8-byte slice. func u64tob(v uint64) []byte { b := make([]byte, 8) binary.BigEndian.PutUint64(b, v) return b } // btou64 converts an 8-byte slice into an uint64. func btou64(b []byte) uint64 { return binary.BigEndian.Uint64(b) } dep-0.3.2/vendor/github.com/boltdb/bolt/doc.go000066400000000000000000000033651317166637100211440ustar00rootroot00000000000000/* Package bolt implements a low-level key/value store in pure Go. It supports fully serializable transactions, ACID semantics, and lock-free MVCC with multiple readers and a single writer. Bolt can be used for projects that want a simple data store without the need to add large dependencies such as Postgres or MySQL. Bolt is a single-level, zero-copy, B+tree data store. This means that Bolt is optimized for fast read access and does not require recovery in the event of a system crash. Transactions which have not finished committing will simply be rolled back in the event of a crash. The design of Bolt is based on Howard Chu's LMDB database project. Bolt currently works on Windows, Mac OS X, and Linux. Basics There are only a few types in Bolt: DB, Bucket, Tx, and Cursor. The DB is a collection of buckets and is represented by a single file on disk. A bucket is a collection of unique keys that are associated with values. Transactions provide either read-only or read-write access to the database. Read-only transactions can retrieve key/value pairs and can use Cursors to iterate over the dataset sequentially. Read-write transactions can create and delete buckets and can insert and remove keys. Only one read-write transaction is allowed at a time. Caveats The database uses a read-only, memory-mapped data file to ensure that applications cannot corrupt the database, however, this means that keys and values returned from Bolt cannot be changed. Writing to a read-only byte slice will cause Go to panic. Keys and values retrieved from the database are only valid for the life of the transaction. When used outside the transaction, these byte slices can point to different data or can point to invalid memory which will cause a panic. */ package bolt dep-0.3.2/vendor/github.com/boltdb/bolt/errors.go000066400000000000000000000052671317166637100217160ustar00rootroot00000000000000package bolt import "errors" // These errors can be returned when opening or calling methods on a DB. var ( // ErrDatabaseNotOpen is returned when a DB instance is accessed before it // is opened or after it is closed. ErrDatabaseNotOpen = errors.New("database not open") // ErrDatabaseOpen is returned when opening a database that is // already open. ErrDatabaseOpen = errors.New("database already open") // ErrInvalid is returned when both meta pages on a database are invalid. // This typically occurs when a file is not a bolt database. ErrInvalid = errors.New("invalid database") // ErrVersionMismatch is returned when the data file was created with a // different version of Bolt. ErrVersionMismatch = errors.New("version mismatch") // ErrChecksum is returned when either meta page checksum does not match. ErrChecksum = errors.New("checksum error") // ErrTimeout is returned when a database cannot obtain an exclusive lock // on the data file after the timeout passed to Open(). ErrTimeout = errors.New("timeout") ) // These errors can occur when beginning or committing a Tx. var ( // ErrTxNotWritable is returned when performing a write operation on a // read-only transaction. ErrTxNotWritable = errors.New("tx not writable") // ErrTxClosed is returned when committing or rolling back a transaction // that has already been committed or rolled back. ErrTxClosed = errors.New("tx closed") // ErrDatabaseReadOnly is returned when a mutating transaction is started on a // read-only database. ErrDatabaseReadOnly = errors.New("database is in read-only mode") ) // These errors can occur when putting or deleting a value or a bucket. var ( // ErrBucketNotFound is returned when trying to access a bucket that has // not been created yet. ErrBucketNotFound = errors.New("bucket not found") // ErrBucketExists is returned when creating a bucket that already exists. ErrBucketExists = errors.New("bucket already exists") // ErrBucketNameRequired is returned when creating a bucket with a blank name. ErrBucketNameRequired = errors.New("bucket name required") // ErrKeyRequired is returned when inserting a zero-length key. ErrKeyRequired = errors.New("key required") // ErrKeyTooLarge is returned when inserting a key that is larger than MaxKeySize. ErrKeyTooLarge = errors.New("key too large") // ErrValueTooLarge is returned when inserting a value that is larger than MaxValueSize. ErrValueTooLarge = errors.New("value too large") // ErrIncompatibleValue is returned when trying create or delete a bucket // on an existing non-bucket key or when trying to create or delete a // non-bucket key on an existing bucket key. ErrIncompatibleValue = errors.New("incompatible value") ) dep-0.3.2/vendor/github.com/boltdb/bolt/freelist.go000066400000000000000000000150461317166637100222130ustar00rootroot00000000000000package bolt import ( "fmt" "sort" "unsafe" ) // freelist represents a list of all pages that are available for allocation. // It also tracks pages that have been freed but are still in use by open transactions. type freelist struct { ids []pgid // all free and available free page ids. pending map[txid][]pgid // mapping of soon-to-be free page ids by tx. cache map[pgid]bool // fast lookup of all free and pending page ids. } // newFreelist returns an empty, initialized freelist. func newFreelist() *freelist { return &freelist{ pending: make(map[txid][]pgid), cache: make(map[pgid]bool), } } // size returns the size of the page after serialization. func (f *freelist) size() int { n := f.count() if n >= 0xFFFF { // The first element will be used to store the count. See freelist.write. n++ } return pageHeaderSize + (int(unsafe.Sizeof(pgid(0))) * n) } // count returns count of pages on the freelist func (f *freelist) count() int { return f.free_count() + f.pending_count() } // free_count returns count of free pages func (f *freelist) free_count() int { return len(f.ids) } // pending_count returns count of pending pages func (f *freelist) pending_count() int { var count int for _, list := range f.pending { count += len(list) } return count } // copyall copies into dst a list of all free ids and all pending ids in one sorted list. // f.count returns the minimum length required for dst. func (f *freelist) copyall(dst []pgid) { m := make(pgids, 0, f.pending_count()) for _, list := range f.pending { m = append(m, list...) } sort.Sort(m) mergepgids(dst, f.ids, m) } // allocate returns the starting page id of a contiguous list of pages of a given size. // If a contiguous block cannot be found then 0 is returned. func (f *freelist) allocate(n int) pgid { if len(f.ids) == 0 { return 0 } var initial, previd pgid for i, id := range f.ids { if id <= 1 { panic(fmt.Sprintf("invalid page allocation: %d", id)) } // Reset initial page if this is not contiguous. if previd == 0 || id-previd != 1 { initial = id } // If we found a contiguous block then remove it and return it. if (id-initial)+1 == pgid(n) { // If we're allocating off the beginning then take the fast path // and just adjust the existing slice. This will use extra memory // temporarily but the append() in free() will realloc the slice // as is necessary. if (i + 1) == n { f.ids = f.ids[i+1:] } else { copy(f.ids[i-n+1:], f.ids[i+1:]) f.ids = f.ids[:len(f.ids)-n] } // Remove from the free cache. for i := pgid(0); i < pgid(n); i++ { delete(f.cache, initial+i) } return initial } previd = id } return 0 } // free releases a page and its overflow for a given transaction id. // If the page is already free then a panic will occur. func (f *freelist) free(txid txid, p *page) { if p.id <= 1 { panic(fmt.Sprintf("cannot free page 0 or 1: %d", p.id)) } // Free page and all its overflow pages. var ids = f.pending[txid] for id := p.id; id <= p.id+pgid(p.overflow); id++ { // Verify that page is not already free. if f.cache[id] { panic(fmt.Sprintf("page %d already freed", id)) } // Add to the freelist and cache. ids = append(ids, id) f.cache[id] = true } f.pending[txid] = ids } // release moves all page ids for a transaction id (or older) to the freelist. func (f *freelist) release(txid txid) { m := make(pgids, 0) for tid, ids := range f.pending { if tid <= txid { // Move transaction's pending pages to the available freelist. // Don't remove from the cache since the page is still free. m = append(m, ids...) delete(f.pending, tid) } } sort.Sort(m) f.ids = pgids(f.ids).merge(m) } // rollback removes the pages from a given pending tx. func (f *freelist) rollback(txid txid) { // Remove page ids from cache. for _, id := range f.pending[txid] { delete(f.cache, id) } // Remove pages from pending list. delete(f.pending, txid) } // freed returns whether a given page is in the free list. func (f *freelist) freed(pgid pgid) bool { return f.cache[pgid] } // read initializes the freelist from a freelist page. func (f *freelist) read(p *page) { // If the page.count is at the max uint16 value (64k) then it's considered // an overflow and the size of the freelist is stored as the first element. idx, count := 0, int(p.count) if count == 0xFFFF { idx = 1 count = int(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[0]) } // Copy the list of page ids from the freelist. if count == 0 { f.ids = nil } else { ids := ((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[idx:count] f.ids = make([]pgid, len(ids)) copy(f.ids, ids) // Make sure they're sorted. sort.Sort(pgids(f.ids)) } // Rebuild the page cache. f.reindex() } // write writes the page ids onto a freelist page. All free and pending ids are // saved to disk since in the event of a program crash, all pending ids will // become free. func (f *freelist) write(p *page) error { // Combine the old free pgids and pgids waiting on an open transaction. // Update the header flag. p.flags |= freelistPageFlag // The page.count can only hold up to 64k elements so if we overflow that // number then we handle it by putting the size in the first element. lenids := f.count() if lenids == 0 { p.count = uint16(lenids) } else if lenids < 0xFFFF { p.count = uint16(lenids) f.copyall(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[:]) } else { p.count = 0xFFFF ((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[0] = pgid(lenids) f.copyall(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[1:]) } return nil } // reload reads the freelist from a page and filters out pending items. func (f *freelist) reload(p *page) { f.read(p) // Build a cache of only pending pages. pcache := make(map[pgid]bool) for _, pendingIDs := range f.pending { for _, pendingID := range pendingIDs { pcache[pendingID] = true } } // Check each page in the freelist and build a new available freelist // with any pages not in the pending lists. var a []pgid for _, id := range f.ids { if !pcache[id] { a = append(a, id) } } f.ids = a // Once the available list is rebuilt then rebuild the free cache so that // it includes the available and pending free pages. f.reindex() } // reindex rebuilds the free cache based on available and pending free lists. func (f *freelist) reindex() { f.cache = make(map[pgid]bool, len(f.ids)) for _, id := range f.ids { f.cache[id] = true } for _, pendingIDs := range f.pending { for _, pendingID := range pendingIDs { f.cache[pendingID] = true } } } dep-0.3.2/vendor/github.com/boltdb/bolt/freelist_test.go000066400000000000000000000103071317166637100232450ustar00rootroot00000000000000package bolt import ( "math/rand" "reflect" "sort" "testing" "unsafe" ) // Ensure that a page is added to a transaction's freelist. func TestFreelist_free(t *testing.T) { f := newFreelist() f.free(100, &page{id: 12}) if !reflect.DeepEqual([]pgid{12}, f.pending[100]) { t.Fatalf("exp=%v; got=%v", []pgid{12}, f.pending[100]) } } // Ensure that a page and its overflow is added to a transaction's freelist. func TestFreelist_free_overflow(t *testing.T) { f := newFreelist() f.free(100, &page{id: 12, overflow: 3}) if exp := []pgid{12, 13, 14, 15}; !reflect.DeepEqual(exp, f.pending[100]) { t.Fatalf("exp=%v; got=%v", exp, f.pending[100]) } } // Ensure that a transaction's free pages can be released. func TestFreelist_release(t *testing.T) { f := newFreelist() f.free(100, &page{id: 12, overflow: 1}) f.free(100, &page{id: 9}) f.free(102, &page{id: 39}) f.release(100) f.release(101) if exp := []pgid{9, 12, 13}; !reflect.DeepEqual(exp, f.ids) { t.Fatalf("exp=%v; got=%v", exp, f.ids) } f.release(102) if exp := []pgid{9, 12, 13, 39}; !reflect.DeepEqual(exp, f.ids) { t.Fatalf("exp=%v; got=%v", exp, f.ids) } } // Ensure that a freelist can find contiguous blocks of pages. func TestFreelist_allocate(t *testing.T) { f := &freelist{ids: []pgid{3, 4, 5, 6, 7, 9, 12, 13, 18}} if id := int(f.allocate(3)); id != 3 { t.Fatalf("exp=3; got=%v", id) } if id := int(f.allocate(1)); id != 6 { t.Fatalf("exp=6; got=%v", id) } if id := int(f.allocate(3)); id != 0 { t.Fatalf("exp=0; got=%v", id) } if id := int(f.allocate(2)); id != 12 { t.Fatalf("exp=12; got=%v", id) } if id := int(f.allocate(1)); id != 7 { t.Fatalf("exp=7; got=%v", id) } if id := int(f.allocate(0)); id != 0 { t.Fatalf("exp=0; got=%v", id) } if id := int(f.allocate(0)); id != 0 { t.Fatalf("exp=0; got=%v", id) } if exp := []pgid{9, 18}; !reflect.DeepEqual(exp, f.ids) { t.Fatalf("exp=%v; got=%v", exp, f.ids) } if id := int(f.allocate(1)); id != 9 { t.Fatalf("exp=9; got=%v", id) } if id := int(f.allocate(1)); id != 18 { t.Fatalf("exp=18; got=%v", id) } if id := int(f.allocate(1)); id != 0 { t.Fatalf("exp=0; got=%v", id) } if exp := []pgid{}; !reflect.DeepEqual(exp, f.ids) { t.Fatalf("exp=%v; got=%v", exp, f.ids) } } // Ensure that a freelist can deserialize from a freelist page. func TestFreelist_read(t *testing.T) { // Create a page. var buf [4096]byte page := (*page)(unsafe.Pointer(&buf[0])) page.flags = freelistPageFlag page.count = 2 // Insert 2 page ids. ids := (*[3]pgid)(unsafe.Pointer(&page.ptr)) ids[0] = 23 ids[1] = 50 // Deserialize page into a freelist. f := newFreelist() f.read(page) // Ensure that there are two page ids in the freelist. if exp := []pgid{23, 50}; !reflect.DeepEqual(exp, f.ids) { t.Fatalf("exp=%v; got=%v", exp, f.ids) } } // Ensure that a freelist can serialize into a freelist page. func TestFreelist_write(t *testing.T) { // Create a freelist and write it to a page. var buf [4096]byte f := &freelist{ids: []pgid{12, 39}, pending: make(map[txid][]pgid)} f.pending[100] = []pgid{28, 11} f.pending[101] = []pgid{3} p := (*page)(unsafe.Pointer(&buf[0])) if err := f.write(p); err != nil { t.Fatal(err) } // Read the page back out. f2 := newFreelist() f2.read(p) // Ensure that the freelist is correct. // All pages should be present and in reverse order. if exp := []pgid{3, 11, 12, 28, 39}; !reflect.DeepEqual(exp, f2.ids) { t.Fatalf("exp=%v; got=%v", exp, f2.ids) } } func Benchmark_FreelistRelease10K(b *testing.B) { benchmark_FreelistRelease(b, 10000) } func Benchmark_FreelistRelease100K(b *testing.B) { benchmark_FreelistRelease(b, 100000) } func Benchmark_FreelistRelease1000K(b *testing.B) { benchmark_FreelistRelease(b, 1000000) } func Benchmark_FreelistRelease10000K(b *testing.B) { benchmark_FreelistRelease(b, 10000000) } func benchmark_FreelistRelease(b *testing.B, size int) { ids := randomPgids(size) pending := randomPgids(len(ids) / 400) b.ResetTimer() for i := 0; i < b.N; i++ { f := &freelist{ids: ids, pending: map[txid][]pgid{1: pending}} f.release(1) } } func randomPgids(n int) []pgid { rand.Seed(42) pgids := make(pgids, n) for i := range pgids { pgids[i] = pgid(rand.Int63()) } sort.Sort(pgids) return pgids } dep-0.3.2/vendor/github.com/boltdb/bolt/node.go000066400000000000000000000374351317166637100213310ustar00rootroot00000000000000package bolt import ( "bytes" "fmt" "sort" "unsafe" ) // node represents an in-memory, deserialized page. type node struct { bucket *Bucket isLeaf bool unbalanced bool spilled bool key []byte pgid pgid parent *node children nodes inodes inodes } // root returns the top-level node this node is attached to. func (n *node) root() *node { if n.parent == nil { return n } return n.parent.root() } // minKeys returns the minimum number of inodes this node should have. func (n *node) minKeys() int { if n.isLeaf { return 1 } return 2 } // size returns the size of the node after serialization. func (n *node) size() int { sz, elsz := pageHeaderSize, n.pageElementSize() for i := 0; i < len(n.inodes); i++ { item := &n.inodes[i] sz += elsz + len(item.key) + len(item.value) } return sz } // sizeLessThan returns true if the node is less than a given size. // This is an optimization to avoid calculating a large node when we only need // to know if it fits inside a certain page size. func (n *node) sizeLessThan(v int) bool { sz, elsz := pageHeaderSize, n.pageElementSize() for i := 0; i < len(n.inodes); i++ { item := &n.inodes[i] sz += elsz + len(item.key) + len(item.value) if sz >= v { return false } } return true } // pageElementSize returns the size of each page element based on the type of node. func (n *node) pageElementSize() int { if n.isLeaf { return leafPageElementSize } return branchPageElementSize } // childAt returns the child node at a given index. func (n *node) childAt(index int) *node { if n.isLeaf { panic(fmt.Sprintf("invalid childAt(%d) on a leaf node", index)) } return n.bucket.node(n.inodes[index].pgid, n) } // childIndex returns the index of a given child node. func (n *node) childIndex(child *node) int { index := sort.Search(len(n.inodes), func(i int) bool { return bytes.Compare(n.inodes[i].key, child.key) != -1 }) return index } // numChildren returns the number of children. func (n *node) numChildren() int { return len(n.inodes) } // nextSibling returns the next node with the same parent. func (n *node) nextSibling() *node { if n.parent == nil { return nil } index := n.parent.childIndex(n) if index >= n.parent.numChildren()-1 { return nil } return n.parent.childAt(index + 1) } // prevSibling returns the previous node with the same parent. func (n *node) prevSibling() *node { if n.parent == nil { return nil } index := n.parent.childIndex(n) if index == 0 { return nil } return n.parent.childAt(index - 1) } // put inserts a key/value. func (n *node) put(oldKey, newKey, value []byte, pgid pgid, flags uint32) { if pgid >= n.bucket.tx.meta.pgid { panic(fmt.Sprintf("pgid (%d) above high water mark (%d)", pgid, n.bucket.tx.meta.pgid)) } else if len(oldKey) <= 0 { panic("put: zero-length old key") } else if len(newKey) <= 0 { panic("put: zero-length new key") } // Find insertion index. index := sort.Search(len(n.inodes), func(i int) bool { return bytes.Compare(n.inodes[i].key, oldKey) != -1 }) // Add capacity and shift nodes if we don't have an exact match and need to insert. exact := (len(n.inodes) > 0 && index < len(n.inodes) && bytes.Equal(n.inodes[index].key, oldKey)) if !exact { n.inodes = append(n.inodes, inode{}) copy(n.inodes[index+1:], n.inodes[index:]) } inode := &n.inodes[index] inode.flags = flags inode.key = newKey inode.value = value inode.pgid = pgid _assert(len(inode.key) > 0, "put: zero-length inode key") } // del removes a key from the node. func (n *node) del(key []byte) { // Find index of key. index := sort.Search(len(n.inodes), func(i int) bool { return bytes.Compare(n.inodes[i].key, key) != -1 }) // Exit if the key isn't found. if index >= len(n.inodes) || !bytes.Equal(n.inodes[index].key, key) { return } // Delete inode from the node. n.inodes = append(n.inodes[:index], n.inodes[index+1:]...) // Mark the node as needing rebalancing. n.unbalanced = true } // read initializes the node from a page. func (n *node) read(p *page) { n.pgid = p.id n.isLeaf = ((p.flags & leafPageFlag) != 0) n.inodes = make(inodes, int(p.count)) for i := 0; i < int(p.count); i++ { inode := &n.inodes[i] if n.isLeaf { elem := p.leafPageElement(uint16(i)) inode.flags = elem.flags inode.key = elem.key() inode.value = elem.value() } else { elem := p.branchPageElement(uint16(i)) inode.pgid = elem.pgid inode.key = elem.key() } _assert(len(inode.key) > 0, "read: zero-length inode key") } // Save first key so we can find the node in the parent when we spill. if len(n.inodes) > 0 { n.key = n.inodes[0].key _assert(len(n.key) > 0, "read: zero-length node key") } else { n.key = nil } } // write writes the items onto one or more pages. func (n *node) write(p *page) { // Initialize page. if n.isLeaf { p.flags |= leafPageFlag } else { p.flags |= branchPageFlag } if len(n.inodes) >= 0xFFFF { panic(fmt.Sprintf("inode overflow: %d (pgid=%d)", len(n.inodes), p.id)) } p.count = uint16(len(n.inodes)) // Stop here if there are no items to write. if p.count == 0 { return } // Loop over each item and write it to the page. b := (*[maxAllocSize]byte)(unsafe.Pointer(&p.ptr))[n.pageElementSize()*len(n.inodes):] for i, item := range n.inodes { _assert(len(item.key) > 0, "write: zero-length inode key") // Write the page element. if n.isLeaf { elem := p.leafPageElement(uint16(i)) elem.pos = uint32(uintptr(unsafe.Pointer(&b[0])) - uintptr(unsafe.Pointer(elem))) elem.flags = item.flags elem.ksize = uint32(len(item.key)) elem.vsize = uint32(len(item.value)) } else { elem := p.branchPageElement(uint16(i)) elem.pos = uint32(uintptr(unsafe.Pointer(&b[0])) - uintptr(unsafe.Pointer(elem))) elem.ksize = uint32(len(item.key)) elem.pgid = item.pgid _assert(elem.pgid != p.id, "write: circular dependency occurred") } // If the length of key+value is larger than the max allocation size // then we need to reallocate the byte array pointer. // // See: https://github.com/boltdb/bolt/pull/335 klen, vlen := len(item.key), len(item.value) if len(b) < klen+vlen { b = (*[maxAllocSize]byte)(unsafe.Pointer(&b[0]))[:] } // Write data for the element to the end of the page. copy(b[0:], item.key) b = b[klen:] copy(b[0:], item.value) b = b[vlen:] } // DEBUG ONLY: n.dump() } // split breaks up a node into multiple smaller nodes, if appropriate. // This should only be called from the spill() function. func (n *node) split(pageSize int) []*node { var nodes []*node node := n for { // Split node into two. a, b := node.splitTwo(pageSize) nodes = append(nodes, a) // If we can't split then exit the loop. if b == nil { break } // Set node to b so it gets split on the next iteration. node = b } return nodes } // splitTwo breaks up a node into two smaller nodes, if appropriate. // This should only be called from the split() function. func (n *node) splitTwo(pageSize int) (*node, *node) { // Ignore the split if the page doesn't have at least enough nodes for // two pages or if the nodes can fit in a single page. if len(n.inodes) <= (minKeysPerPage*2) || n.sizeLessThan(pageSize) { return n, nil } // Determine the threshold before starting a new node. var fillPercent = n.bucket.FillPercent if fillPercent < minFillPercent { fillPercent = minFillPercent } else if fillPercent > maxFillPercent { fillPercent = maxFillPercent } threshold := int(float64(pageSize) * fillPercent) // Determine split position and sizes of the two pages. splitIndex, _ := n.splitIndex(threshold) // Split node into two separate nodes. // If there's no parent then we'll need to create one. if n.parent == nil { n.parent = &node{bucket: n.bucket, children: []*node{n}} } // Create a new node and add it to the parent. next := &node{bucket: n.bucket, isLeaf: n.isLeaf, parent: n.parent} n.parent.children = append(n.parent.children, next) // Split inodes across two nodes. next.inodes = n.inodes[splitIndex:] n.inodes = n.inodes[:splitIndex] // Update the statistics. n.bucket.tx.stats.Split++ return n, next } // splitIndex finds the position where a page will fill a given threshold. // It returns the index as well as the size of the first page. // This is only be called from split(). func (n *node) splitIndex(threshold int) (index, sz int) { sz = pageHeaderSize // Loop until we only have the minimum number of keys required for the second page. for i := 0; i < len(n.inodes)-minKeysPerPage; i++ { index = i inode := n.inodes[i] elsize := n.pageElementSize() + len(inode.key) + len(inode.value) // If we have at least the minimum number of keys and adding another // node would put us over the threshold then exit and return. if i >= minKeysPerPage && sz+elsize > threshold { break } // Add the element size to the total size. sz += elsize } return } // spill writes the nodes to dirty pages and splits nodes as it goes. // Returns an error if dirty pages cannot be allocated. func (n *node) spill() error { var tx = n.bucket.tx if n.spilled { return nil } // Spill child nodes first. Child nodes can materialize sibling nodes in // the case of split-merge so we cannot use a range loop. We have to check // the children size on every loop iteration. sort.Sort(n.children) for i := 0; i < len(n.children); i++ { if err := n.children[i].spill(); err != nil { return err } } // We no longer need the child list because it's only used for spill tracking. n.children = nil // Split nodes into appropriate sizes. The first node will always be n. var nodes = n.split(tx.db.pageSize) for _, node := range nodes { // Add node's page to the freelist if it's not new. if node.pgid > 0 { tx.db.freelist.free(tx.meta.txid, tx.page(node.pgid)) node.pgid = 0 } // Allocate contiguous space for the node. p, err := tx.allocate((node.size() / tx.db.pageSize) + 1) if err != nil { return err } // Write the node. if p.id >= tx.meta.pgid { panic(fmt.Sprintf("pgid (%d) above high water mark (%d)", p.id, tx.meta.pgid)) } node.pgid = p.id node.write(p) node.spilled = true // Insert into parent inodes. if node.parent != nil { var key = node.key if key == nil { key = node.inodes[0].key } node.parent.put(key, node.inodes[0].key, nil, node.pgid, 0) node.key = node.inodes[0].key _assert(len(node.key) > 0, "spill: zero-length node key") } // Update the statistics. tx.stats.Spill++ } // If the root node split and created a new root then we need to spill that // as well. We'll clear out the children to make sure it doesn't try to respill. if n.parent != nil && n.parent.pgid == 0 { n.children = nil return n.parent.spill() } return nil } // rebalance attempts to combine the node with sibling nodes if the node fill // size is below a threshold or if there are not enough keys. func (n *node) rebalance() { if !n.unbalanced { return } n.unbalanced = false // Update statistics. n.bucket.tx.stats.Rebalance++ // Ignore if node is above threshold (25%) and has enough keys. var threshold = n.bucket.tx.db.pageSize / 4 if n.size() > threshold && len(n.inodes) > n.minKeys() { return } // Root node has special handling. if n.parent == nil { // If root node is a branch and only has one node then collapse it. if !n.isLeaf && len(n.inodes) == 1 { // Move root's child up. child := n.bucket.node(n.inodes[0].pgid, n) n.isLeaf = child.isLeaf n.inodes = child.inodes[:] n.children = child.children // Reparent all child nodes being moved. for _, inode := range n.inodes { if child, ok := n.bucket.nodes[inode.pgid]; ok { child.parent = n } } // Remove old child. child.parent = nil delete(n.bucket.nodes, child.pgid) child.free() } return } // If node has no keys then just remove it. if n.numChildren() == 0 { n.parent.del(n.key) n.parent.removeChild(n) delete(n.bucket.nodes, n.pgid) n.free() n.parent.rebalance() return } _assert(n.parent.numChildren() > 1, "parent must have at least 2 children") // Destination node is right sibling if idx == 0, otherwise left sibling. var target *node var useNextSibling = (n.parent.childIndex(n) == 0) if useNextSibling { target = n.nextSibling() } else { target = n.prevSibling() } // If both this node and the target node are too small then merge them. if useNextSibling { // Reparent all child nodes being moved. for _, inode := range target.inodes { if child, ok := n.bucket.nodes[inode.pgid]; ok { child.parent.removeChild(child) child.parent = n child.parent.children = append(child.parent.children, child) } } // Copy over inodes from target and remove target. n.inodes = append(n.inodes, target.inodes...) n.parent.del(target.key) n.parent.removeChild(target) delete(n.bucket.nodes, target.pgid) target.free() } else { // Reparent all child nodes being moved. for _, inode := range n.inodes { if child, ok := n.bucket.nodes[inode.pgid]; ok { child.parent.removeChild(child) child.parent = target child.parent.children = append(child.parent.children, child) } } // Copy over inodes to target and remove node. target.inodes = append(target.inodes, n.inodes...) n.parent.del(n.key) n.parent.removeChild(n) delete(n.bucket.nodes, n.pgid) n.free() } // Either this node or the target node was deleted from the parent so rebalance it. n.parent.rebalance() } // removes a node from the list of in-memory children. // This does not affect the inodes. func (n *node) removeChild(target *node) { for i, child := range n.children { if child == target { n.children = append(n.children[:i], n.children[i+1:]...) return } } } // dereference causes the node to copy all its inode key/value references to heap memory. // This is required when the mmap is reallocated so inodes are not pointing to stale data. func (n *node) dereference() { if n.key != nil { key := make([]byte, len(n.key)) copy(key, n.key) n.key = key _assert(n.pgid == 0 || len(n.key) > 0, "dereference: zero-length node key on existing node") } for i := range n.inodes { inode := &n.inodes[i] key := make([]byte, len(inode.key)) copy(key, inode.key) inode.key = key _assert(len(inode.key) > 0, "dereference: zero-length inode key") value := make([]byte, len(inode.value)) copy(value, inode.value) inode.value = value } // Recursively dereference children. for _, child := range n.children { child.dereference() } // Update statistics. n.bucket.tx.stats.NodeDeref++ } // free adds the node's underlying page to the freelist. func (n *node) free() { if n.pgid != 0 { n.bucket.tx.db.freelist.free(n.bucket.tx.meta.txid, n.bucket.tx.page(n.pgid)) n.pgid = 0 } } // dump writes the contents of the node to STDERR for debugging purposes. /* func (n *node) dump() { // Write node header. var typ = "branch" if n.isLeaf { typ = "leaf" } warnf("[NODE %d {type=%s count=%d}]", n.pgid, typ, len(n.inodes)) // Write out abbreviated version of each item. for _, item := range n.inodes { if n.isLeaf { if item.flags&bucketLeafFlag != 0 { bucket := (*bucket)(unsafe.Pointer(&item.value[0])) warnf("+L %08x -> (bucket root=%d)", trunc(item.key, 4), bucket.root) } else { warnf("+L %08x -> %08x", trunc(item.key, 4), trunc(item.value, 4)) } } else { warnf("+B %08x -> pgid=%d", trunc(item.key, 4), item.pgid) } } warn("") } */ type nodes []*node func (s nodes) Len() int { return len(s) } func (s nodes) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s nodes) Less(i, j int) bool { return bytes.Compare(s[i].inodes[0].key, s[j].inodes[0].key) == -1 } // inode represents an internal node inside of a node. // It can be used to point to elements in a page or point // to an element which hasn't been added to a page yet. type inode struct { flags uint32 pgid pgid key []byte value []byte } type inodes []inode dep-0.3.2/vendor/github.com/boltdb/bolt/node_test.go000066400000000000000000000130141317166637100223530ustar00rootroot00000000000000package bolt import ( "testing" "unsafe" ) // Ensure that a node can insert a key/value. func TestNode_put(t *testing.T) { n := &node{inodes: make(inodes, 0), bucket: &Bucket{tx: &Tx{meta: &meta{pgid: 1}}}} n.put([]byte("baz"), []byte("baz"), []byte("2"), 0, 0) n.put([]byte("foo"), []byte("foo"), []byte("0"), 0, 0) n.put([]byte("bar"), []byte("bar"), []byte("1"), 0, 0) n.put([]byte("foo"), []byte("foo"), []byte("3"), 0, leafPageFlag) if len(n.inodes) != 3 { t.Fatalf("exp=3; got=%d", len(n.inodes)) } if k, v := n.inodes[0].key, n.inodes[0].value; string(k) != "bar" || string(v) != "1" { t.Fatalf("exp=; got=<%s,%s>", k, v) } if k, v := n.inodes[1].key, n.inodes[1].value; string(k) != "baz" || string(v) != "2" { t.Fatalf("exp=; got=<%s,%s>", k, v) } if k, v := n.inodes[2].key, n.inodes[2].value; string(k) != "foo" || string(v) != "3" { t.Fatalf("exp=; got=<%s,%s>", k, v) } if n.inodes[2].flags != uint32(leafPageFlag) { t.Fatalf("not a leaf: %d", n.inodes[2].flags) } } // Ensure that a node can deserialize from a leaf page. func TestNode_read_LeafPage(t *testing.T) { // Create a page. var buf [4096]byte page := (*page)(unsafe.Pointer(&buf[0])) page.flags = leafPageFlag page.count = 2 // Insert 2 elements at the beginning. sizeof(leafPageElement) == 16 nodes := (*[3]leafPageElement)(unsafe.Pointer(&page.ptr)) nodes[0] = leafPageElement{flags: 0, pos: 32, ksize: 3, vsize: 4} // pos = sizeof(leafPageElement) * 2 nodes[1] = leafPageElement{flags: 0, pos: 23, ksize: 10, vsize: 3} // pos = sizeof(leafPageElement) + 3 + 4 // Write data for the nodes at the end. data := (*[4096]byte)(unsafe.Pointer(&nodes[2])) copy(data[:], []byte("barfooz")) copy(data[7:], []byte("helloworldbye")) // Deserialize page into a leaf. n := &node{} n.read(page) // Check that there are two inodes with correct data. if !n.isLeaf { t.Fatal("expected leaf") } if len(n.inodes) != 2 { t.Fatalf("exp=2; got=%d", len(n.inodes)) } if k, v := n.inodes[0].key, n.inodes[0].value; string(k) != "bar" || string(v) != "fooz" { t.Fatalf("exp=; got=<%s,%s>", k, v) } if k, v := n.inodes[1].key, n.inodes[1].value; string(k) != "helloworld" || string(v) != "bye" { t.Fatalf("exp=; got=<%s,%s>", k, v) } } // Ensure that a node can serialize into a leaf page. func TestNode_write_LeafPage(t *testing.T) { // Create a node. n := &node{isLeaf: true, inodes: make(inodes, 0), bucket: &Bucket{tx: &Tx{db: &DB{}, meta: &meta{pgid: 1}}}} n.put([]byte("susy"), []byte("susy"), []byte("que"), 0, 0) n.put([]byte("ricki"), []byte("ricki"), []byte("lake"), 0, 0) n.put([]byte("john"), []byte("john"), []byte("johnson"), 0, 0) // Write it to a page. var buf [4096]byte p := (*page)(unsafe.Pointer(&buf[0])) n.write(p) // Read the page back in. n2 := &node{} n2.read(p) // Check that the two pages are the same. if len(n2.inodes) != 3 { t.Fatalf("exp=3; got=%d", len(n2.inodes)) } if k, v := n2.inodes[0].key, n2.inodes[0].value; string(k) != "john" || string(v) != "johnson" { t.Fatalf("exp=; got=<%s,%s>", k, v) } if k, v := n2.inodes[1].key, n2.inodes[1].value; string(k) != "ricki" || string(v) != "lake" { t.Fatalf("exp=; got=<%s,%s>", k, v) } if k, v := n2.inodes[2].key, n2.inodes[2].value; string(k) != "susy" || string(v) != "que" { t.Fatalf("exp=; got=<%s,%s>", k, v) } } // Ensure that a node can split into appropriate subgroups. func TestNode_split(t *testing.T) { // Create a node. n := &node{inodes: make(inodes, 0), bucket: &Bucket{tx: &Tx{db: &DB{}, meta: &meta{pgid: 1}}}} n.put([]byte("00000001"), []byte("00000001"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000002"), []byte("00000002"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000003"), []byte("00000003"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000004"), []byte("00000004"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000005"), []byte("00000005"), []byte("0123456701234567"), 0, 0) // Split between 2 & 3. n.split(100) var parent = n.parent if len(parent.children) != 2 { t.Fatalf("exp=2; got=%d", len(parent.children)) } if len(parent.children[0].inodes) != 2 { t.Fatalf("exp=2; got=%d", len(parent.children[0].inodes)) } if len(parent.children[1].inodes) != 3 { t.Fatalf("exp=3; got=%d", len(parent.children[1].inodes)) } } // Ensure that a page with the minimum number of inodes just returns a single node. func TestNode_split_MinKeys(t *testing.T) { // Create a node. n := &node{inodes: make(inodes, 0), bucket: &Bucket{tx: &Tx{db: &DB{}, meta: &meta{pgid: 1}}}} n.put([]byte("00000001"), []byte("00000001"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000002"), []byte("00000002"), []byte("0123456701234567"), 0, 0) // Split. n.split(20) if n.parent != nil { t.Fatalf("expected nil parent") } } // Ensure that a node that has keys that all fit on a page just returns one leaf. func TestNode_split_SinglePage(t *testing.T) { // Create a node. n := &node{inodes: make(inodes, 0), bucket: &Bucket{tx: &Tx{db: &DB{}, meta: &meta{pgid: 1}}}} n.put([]byte("00000001"), []byte("00000001"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000002"), []byte("00000002"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000003"), []byte("00000003"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000004"), []byte("00000004"), []byte("0123456701234567"), 0, 0) n.put([]byte("00000005"), []byte("00000005"), []byte("0123456701234567"), 0, 0) // Split. n.split(4096) if n.parent != nil { t.Fatalf("expected nil parent") } } dep-0.3.2/vendor/github.com/boltdb/bolt/page.go000066400000000000000000000114311317166637100213040ustar00rootroot00000000000000package bolt import ( "fmt" "os" "sort" "unsafe" ) const pageHeaderSize = int(unsafe.Offsetof(((*page)(nil)).ptr)) const minKeysPerPage = 2 const branchPageElementSize = int(unsafe.Sizeof(branchPageElement{})) const leafPageElementSize = int(unsafe.Sizeof(leafPageElement{})) const ( branchPageFlag = 0x01 leafPageFlag = 0x02 metaPageFlag = 0x04 freelistPageFlag = 0x10 ) const ( bucketLeafFlag = 0x01 ) type pgid uint64 type page struct { id pgid flags uint16 count uint16 overflow uint32 ptr uintptr } // typ returns a human readable page type string used for debugging. func (p *page) typ() string { if (p.flags & branchPageFlag) != 0 { return "branch" } else if (p.flags & leafPageFlag) != 0 { return "leaf" } else if (p.flags & metaPageFlag) != 0 { return "meta" } else if (p.flags & freelistPageFlag) != 0 { return "freelist" } return fmt.Sprintf("unknown<%02x>", p.flags) } // meta returns a pointer to the metadata section of the page. func (p *page) meta() *meta { return (*meta)(unsafe.Pointer(&p.ptr)) } // leafPageElement retrieves the leaf node by index func (p *page) leafPageElement(index uint16) *leafPageElement { n := &((*[0x7FFFFFF]leafPageElement)(unsafe.Pointer(&p.ptr)))[index] return n } // leafPageElements retrieves a list of leaf nodes. func (p *page) leafPageElements() []leafPageElement { if p.count == 0 { return nil } return ((*[0x7FFFFFF]leafPageElement)(unsafe.Pointer(&p.ptr)))[:] } // branchPageElement retrieves the branch node by index func (p *page) branchPageElement(index uint16) *branchPageElement { return &((*[0x7FFFFFF]branchPageElement)(unsafe.Pointer(&p.ptr)))[index] } // branchPageElements retrieves a list of branch nodes. func (p *page) branchPageElements() []branchPageElement { if p.count == 0 { return nil } return ((*[0x7FFFFFF]branchPageElement)(unsafe.Pointer(&p.ptr)))[:] } // dump writes n bytes of the page to STDERR as hex output. func (p *page) hexdump(n int) { buf := (*[maxAllocSize]byte)(unsafe.Pointer(p))[:n] fmt.Fprintf(os.Stderr, "%x\n", buf) } type pages []*page func (s pages) Len() int { return len(s) } func (s pages) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s pages) Less(i, j int) bool { return s[i].id < s[j].id } // branchPageElement represents a node on a branch page. type branchPageElement struct { pos uint32 ksize uint32 pgid pgid } // key returns a byte slice of the node key. func (n *branchPageElement) key() []byte { buf := (*[maxAllocSize]byte)(unsafe.Pointer(n)) return (*[maxAllocSize]byte)(unsafe.Pointer(&buf[n.pos]))[:n.ksize] } // leafPageElement represents a node on a leaf page. type leafPageElement struct { flags uint32 pos uint32 ksize uint32 vsize uint32 } // key returns a byte slice of the node key. func (n *leafPageElement) key() []byte { buf := (*[maxAllocSize]byte)(unsafe.Pointer(n)) return (*[maxAllocSize]byte)(unsafe.Pointer(&buf[n.pos]))[:n.ksize:n.ksize] } // value returns a byte slice of the node value. func (n *leafPageElement) value() []byte { buf := (*[maxAllocSize]byte)(unsafe.Pointer(n)) return (*[maxAllocSize]byte)(unsafe.Pointer(&buf[n.pos+n.ksize]))[:n.vsize:n.vsize] } // PageInfo represents human readable information about a page. type PageInfo struct { ID int Type string Count int OverflowCount int } type pgids []pgid func (s pgids) Len() int { return len(s) } func (s pgids) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s pgids) Less(i, j int) bool { return s[i] < s[j] } // merge returns the sorted union of a and b. func (a pgids) merge(b pgids) pgids { // Return the opposite slice if one is nil. if len(a) == 0 { return b } if len(b) == 0 { return a } merged := make(pgids, len(a)+len(b)) mergepgids(merged, a, b) return merged } // mergepgids copies the sorted union of a and b into dst. // If dst is too small, it panics. func mergepgids(dst, a, b pgids) { if len(dst) < len(a)+len(b) { panic(fmt.Errorf("mergepgids bad len %d < %d + %d", len(dst), len(a), len(b))) } // Copy in the opposite slice if one is nil. if len(a) == 0 { copy(dst, b) return } if len(b) == 0 { copy(dst, a) return } // Merged will hold all elements from both lists. merged := dst[:0] // Assign lead to the slice with a lower starting value, follow to the higher value. lead, follow := a, b if b[0] < a[0] { lead, follow = b, a } // Continue while there are elements in the lead. for len(lead) > 0 { // Merge largest prefix of lead that is ahead of follow[0]. n := sort.Search(len(lead), func(i int) bool { return lead[i] > follow[0] }) merged = append(merged, lead[:n]...) if n >= len(lead) { break } // Swap lead and follow. lead, follow = follow, lead[n:] } // Append what's left in follow. _ = append(merged, follow...) } dep-0.3.2/vendor/github.com/boltdb/bolt/page_test.go000066400000000000000000000033661317166637100223530ustar00rootroot00000000000000package bolt import ( "reflect" "sort" "testing" "testing/quick" ) // Ensure that the page type can be returned in human readable format. func TestPage_typ(t *testing.T) { if typ := (&page{flags: branchPageFlag}).typ(); typ != "branch" { t.Fatalf("exp=branch; got=%v", typ) } if typ := (&page{flags: leafPageFlag}).typ(); typ != "leaf" { t.Fatalf("exp=leaf; got=%v", typ) } if typ := (&page{flags: metaPageFlag}).typ(); typ != "meta" { t.Fatalf("exp=meta; got=%v", typ) } if typ := (&page{flags: freelistPageFlag}).typ(); typ != "freelist" { t.Fatalf("exp=freelist; got=%v", typ) } if typ := (&page{flags: 20000}).typ(); typ != "unknown<4e20>" { t.Fatalf("exp=unknown<4e20>; got=%v", typ) } } // Ensure that the hexdump debugging function doesn't blow up. func TestPage_dump(t *testing.T) { (&page{id: 256}).hexdump(16) } func TestPgids_merge(t *testing.T) { a := pgids{4, 5, 6, 10, 11, 12, 13, 27} b := pgids{1, 3, 8, 9, 25, 30} c := a.merge(b) if !reflect.DeepEqual(c, pgids{1, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 25, 27, 30}) { t.Errorf("mismatch: %v", c) } a = pgids{4, 5, 6, 10, 11, 12, 13, 27, 35, 36} b = pgids{8, 9, 25, 30} c = a.merge(b) if !reflect.DeepEqual(c, pgids{4, 5, 6, 8, 9, 10, 11, 12, 13, 25, 27, 30, 35, 36}) { t.Errorf("mismatch: %v", c) } } func TestPgids_merge_quick(t *testing.T) { if err := quick.Check(func(a, b pgids) bool { // Sort incoming lists. sort.Sort(a) sort.Sort(b) // Merge the two lists together. got := a.merge(b) // The expected value should be the two lists combined and sorted. exp := append(a, b...) sort.Sort(exp) if !reflect.DeepEqual(exp, got) { t.Errorf("\nexp=%+v\ngot=%+v\n", exp, got) return false } return true }, nil); err != nil { t.Fatal(err) } } dep-0.3.2/vendor/github.com/boltdb/bolt/quick_test.go000066400000000000000000000046431317166637100225520ustar00rootroot00000000000000package bolt_test import ( "bytes" "flag" "fmt" "math/rand" "os" "reflect" "testing/quick" "time" ) // testing/quick defaults to 5 iterations and a random seed. // You can override these settings from the command line: // // -quick.count The number of iterations to perform. // -quick.seed The seed to use for randomizing. // -quick.maxitems The maximum number of items to insert into a DB. // -quick.maxksize The maximum size of a key. // -quick.maxvsize The maximum size of a value. // var qcount, qseed, qmaxitems, qmaxksize, qmaxvsize int func init() { flag.IntVar(&qcount, "quick.count", 5, "") flag.IntVar(&qseed, "quick.seed", int(time.Now().UnixNano())%100000, "") flag.IntVar(&qmaxitems, "quick.maxitems", 1000, "") flag.IntVar(&qmaxksize, "quick.maxksize", 1024, "") flag.IntVar(&qmaxvsize, "quick.maxvsize", 1024, "") flag.Parse() fmt.Fprintln(os.Stderr, "seed:", qseed) fmt.Fprintf(os.Stderr, "quick settings: count=%v, items=%v, ksize=%v, vsize=%v\n", qcount, qmaxitems, qmaxksize, qmaxvsize) } func qconfig() *quick.Config { return &quick.Config{ MaxCount: qcount, Rand: rand.New(rand.NewSource(int64(qseed))), } } type testdata []testdataitem func (t testdata) Len() int { return len(t) } func (t testdata) Swap(i, j int) { t[i], t[j] = t[j], t[i] } func (t testdata) Less(i, j int) bool { return bytes.Compare(t[i].Key, t[j].Key) == -1 } func (t testdata) Generate(rand *rand.Rand, size int) reflect.Value { n := rand.Intn(qmaxitems-1) + 1 items := make(testdata, n) used := make(map[string]bool) for i := 0; i < n; i++ { item := &items[i] // Ensure that keys are unique by looping until we find one that we have not already used. for { item.Key = randByteSlice(rand, 1, qmaxksize) if !used[string(item.Key)] { used[string(item.Key)] = true break } } item.Value = randByteSlice(rand, 0, qmaxvsize) } return reflect.ValueOf(items) } type revtestdata []testdataitem func (t revtestdata) Len() int { return len(t) } func (t revtestdata) Swap(i, j int) { t[i], t[j] = t[j], t[i] } func (t revtestdata) Less(i, j int) bool { return bytes.Compare(t[i].Key, t[j].Key) == 1 } type testdataitem struct { Key []byte Value []byte } func randByteSlice(rand *rand.Rand, minSize, maxSize int) []byte { n := rand.Intn(maxSize-minSize) + minSize b := make([]byte, n) for i := 0; i < n; i++ { b[i] = byte(rand.Intn(255)) } return b } dep-0.3.2/vendor/github.com/boltdb/bolt/simulation_test.go000066400000000000000000000170231317166637100236160ustar00rootroot00000000000000package bolt_test import ( "bytes" "fmt" "math/rand" "sync" "testing" "github.com/boltdb/bolt" ) func TestSimulate_1op_1p(t *testing.T) { testSimulate(t, 1, 1) } func TestSimulate_10op_1p(t *testing.T) { testSimulate(t, 10, 1) } func TestSimulate_100op_1p(t *testing.T) { testSimulate(t, 100, 1) } func TestSimulate_1000op_1p(t *testing.T) { testSimulate(t, 1000, 1) } func TestSimulate_10000op_1p(t *testing.T) { testSimulate(t, 10000, 1) } func TestSimulate_10op_10p(t *testing.T) { testSimulate(t, 10, 10) } func TestSimulate_100op_10p(t *testing.T) { testSimulate(t, 100, 10) } func TestSimulate_1000op_10p(t *testing.T) { testSimulate(t, 1000, 10) } func TestSimulate_10000op_10p(t *testing.T) { testSimulate(t, 10000, 10) } func TestSimulate_100op_100p(t *testing.T) { testSimulate(t, 100, 100) } func TestSimulate_1000op_100p(t *testing.T) { testSimulate(t, 1000, 100) } func TestSimulate_10000op_100p(t *testing.T) { testSimulate(t, 10000, 100) } func TestSimulate_10000op_1000p(t *testing.T) { testSimulate(t, 10000, 1000) } // Randomly generate operations on a given database with multiple clients to ensure consistency and thread safety. func testSimulate(t *testing.T, threadCount, parallelism int) { if testing.Short() { t.Skip("skipping test in short mode.") } rand.Seed(int64(qseed)) // A list of operations that readers and writers can perform. var readerHandlers = []simulateHandler{simulateGetHandler} var writerHandlers = []simulateHandler{simulateGetHandler, simulatePutHandler} var versions = make(map[int]*QuickDB) versions[1] = NewQuickDB() db := MustOpenDB() defer db.MustClose() var mutex sync.Mutex // Run n threads in parallel, each with their own operation. var wg sync.WaitGroup var threads = make(chan bool, parallelism) var i int for { threads <- true wg.Add(1) writable := ((rand.Int() % 100) < 20) // 20% writers // Choose an operation to execute. var handler simulateHandler if writable { handler = writerHandlers[rand.Intn(len(writerHandlers))] } else { handler = readerHandlers[rand.Intn(len(readerHandlers))] } // Execute a thread for the given operation. go func(writable bool, handler simulateHandler) { defer wg.Done() // Start transaction. tx, err := db.Begin(writable) if err != nil { t.Fatal("tx begin: ", err) } // Obtain current state of the dataset. mutex.Lock() var qdb = versions[tx.ID()] if writable { qdb = versions[tx.ID()-1].Copy() } mutex.Unlock() // Make sure we commit/rollback the tx at the end and update the state. if writable { defer func() { mutex.Lock() versions[tx.ID()] = qdb mutex.Unlock() if err := tx.Commit(); err != nil { t.Fatal(err) } }() } else { defer func() { _ = tx.Rollback() }() } // Ignore operation if we don't have data yet. if qdb == nil { return } // Execute handler. handler(tx, qdb) // Release a thread back to the scheduling loop. <-threads }(writable, handler) i++ if i > threadCount { break } } // Wait until all threads are done. wg.Wait() } type simulateHandler func(tx *bolt.Tx, qdb *QuickDB) // Retrieves a key from the database and verifies that it is what is expected. func simulateGetHandler(tx *bolt.Tx, qdb *QuickDB) { // Randomly retrieve an existing exist. keys := qdb.Rand() if len(keys) == 0 { return } // Retrieve root bucket. b := tx.Bucket(keys[0]) if b == nil { panic(fmt.Sprintf("bucket[0] expected: %08x\n", trunc(keys[0], 4))) } // Drill into nested buckets. for _, key := range keys[1 : len(keys)-1] { b = b.Bucket(key) if b == nil { panic(fmt.Sprintf("bucket[n] expected: %v -> %v\n", keys, key)) } } // Verify key/value on the final bucket. expected := qdb.Get(keys) actual := b.Get(keys[len(keys)-1]) if !bytes.Equal(actual, expected) { fmt.Println("=== EXPECTED ===") fmt.Println(expected) fmt.Println("=== ACTUAL ===") fmt.Println(actual) fmt.Println("=== END ===") panic("value mismatch") } } // Inserts a key into the database. func simulatePutHandler(tx *bolt.Tx, qdb *QuickDB) { var err error keys, value := randKeys(), randValue() // Retrieve root bucket. b := tx.Bucket(keys[0]) if b == nil { b, err = tx.CreateBucket(keys[0]) if err != nil { panic("create bucket: " + err.Error()) } } // Create nested buckets, if necessary. for _, key := range keys[1 : len(keys)-1] { child := b.Bucket(key) if child != nil { b = child } else { b, err = b.CreateBucket(key) if err != nil { panic("create bucket: " + err.Error()) } } } // Insert into database. if err := b.Put(keys[len(keys)-1], value); err != nil { panic("put: " + err.Error()) } // Insert into in-memory database. qdb.Put(keys, value) } // QuickDB is an in-memory database that replicates the functionality of the // Bolt DB type except that it is entirely in-memory. It is meant for testing // that the Bolt database is consistent. type QuickDB struct { sync.RWMutex m map[string]interface{} } // NewQuickDB returns an instance of QuickDB. func NewQuickDB() *QuickDB { return &QuickDB{m: make(map[string]interface{})} } // Get retrieves the value at a key path. func (db *QuickDB) Get(keys [][]byte) []byte { db.RLock() defer db.RUnlock() m := db.m for _, key := range keys[:len(keys)-1] { value := m[string(key)] if value == nil { return nil } switch value := value.(type) { case map[string]interface{}: m = value case []byte: return nil } } // Only return if it's a simple value. if value, ok := m[string(keys[len(keys)-1])].([]byte); ok { return value } return nil } // Put inserts a value into a key path. func (db *QuickDB) Put(keys [][]byte, value []byte) { db.Lock() defer db.Unlock() // Build buckets all the way down the key path. m := db.m for _, key := range keys[:len(keys)-1] { if _, ok := m[string(key)].([]byte); ok { return // Keypath intersects with a simple value. Do nothing. } if m[string(key)] == nil { m[string(key)] = make(map[string]interface{}) } m = m[string(key)].(map[string]interface{}) } // Insert value into the last key. m[string(keys[len(keys)-1])] = value } // Rand returns a random key path that points to a simple value. func (db *QuickDB) Rand() [][]byte { db.RLock() defer db.RUnlock() if len(db.m) == 0 { return nil } var keys [][]byte db.rand(db.m, &keys) return keys } func (db *QuickDB) rand(m map[string]interface{}, keys *[][]byte) { i, index := 0, rand.Intn(len(m)) for k, v := range m { if i == index { *keys = append(*keys, []byte(k)) if v, ok := v.(map[string]interface{}); ok { db.rand(v, keys) } return } i++ } panic("quickdb rand: out-of-range") } // Copy copies the entire database. func (db *QuickDB) Copy() *QuickDB { db.RLock() defer db.RUnlock() return &QuickDB{m: db.copy(db.m)} } func (db *QuickDB) copy(m map[string]interface{}) map[string]interface{} { clone := make(map[string]interface{}, len(m)) for k, v := range m { switch v := v.(type) { case map[string]interface{}: clone[k] = db.copy(v) default: clone[k] = v } } return clone } func randKey() []byte { var min, max = 1, 1024 n := rand.Intn(max-min) + min b := make([]byte, n) for i := 0; i < n; i++ { b[i] = byte(rand.Intn(255)) } return b } func randKeys() [][]byte { var keys [][]byte var count = rand.Intn(2) + 2 for i := 0; i < count; i++ { keys = append(keys, randKey()) } return keys } func randValue() []byte { n := rand.Intn(8192) b := make([]byte, n) for i := 0; i < n; i++ { b[i] = byte(rand.Intn(255)) } return b } dep-0.3.2/vendor/github.com/boltdb/bolt/tx.go000066400000000000000000000443511317166637100210320ustar00rootroot00000000000000package bolt import ( "fmt" "io" "os" "sort" "strings" "time" "unsafe" ) // txid represents the internal transaction identifier. type txid uint64 // Tx represents a read-only or read/write transaction on the database. // Read-only transactions can be used for retrieving values for keys and creating cursors. // Read/write transactions can create and remove buckets and create and remove keys. // // IMPORTANT: You must commit or rollback transactions when you are done with // them. Pages can not be reclaimed by the writer until no more transactions // are using them. A long running read transaction can cause the database to // quickly grow. type Tx struct { writable bool managed bool db *DB meta *meta root Bucket pages map[pgid]*page stats TxStats commitHandlers []func() // WriteFlag specifies the flag for write-related methods like WriteTo(). // Tx opens the database file with the specified flag to copy the data. // // By default, the flag is unset, which works well for mostly in-memory // workloads. For databases that are much larger than available RAM, // set the flag to syscall.O_DIRECT to avoid trashing the page cache. WriteFlag int } // init initializes the transaction. func (tx *Tx) init(db *DB) { tx.db = db tx.pages = nil // Copy the meta page since it can be changed by the writer. tx.meta = &meta{} db.meta().copy(tx.meta) // Copy over the root bucket. tx.root = newBucket(tx) tx.root.bucket = &bucket{} *tx.root.bucket = tx.meta.root // Increment the transaction id and add a page cache for writable transactions. if tx.writable { tx.pages = make(map[pgid]*page) tx.meta.txid += txid(1) } } // ID returns the transaction id. func (tx *Tx) ID() int { return int(tx.meta.txid) } // DB returns a reference to the database that created the transaction. func (tx *Tx) DB() *DB { return tx.db } // Size returns current database size in bytes as seen by this transaction. func (tx *Tx) Size() int64 { return int64(tx.meta.pgid) * int64(tx.db.pageSize) } // Writable returns whether the transaction can perform write operations. func (tx *Tx) Writable() bool { return tx.writable } // Cursor creates a cursor associated with the root bucket. // All items in the cursor will return a nil value because all root bucket keys point to buckets. // The cursor is only valid as long as the transaction is open. // Do not use a cursor after the transaction is closed. func (tx *Tx) Cursor() *Cursor { return tx.root.Cursor() } // Stats retrieves a copy of the current transaction statistics. func (tx *Tx) Stats() TxStats { return tx.stats } // Bucket retrieves a bucket by name. // Returns nil if the bucket does not exist. // The bucket instance is only valid for the lifetime of the transaction. func (tx *Tx) Bucket(name []byte) *Bucket { return tx.root.Bucket(name) } // CreateBucket creates a new bucket. // Returns an error if the bucket already exists, if the bucket name is blank, or if the bucket name is too long. // The bucket instance is only valid for the lifetime of the transaction. func (tx *Tx) CreateBucket(name []byte) (*Bucket, error) { return tx.root.CreateBucket(name) } // CreateBucketIfNotExists creates a new bucket if it doesn't already exist. // Returns an error if the bucket name is blank, or if the bucket name is too long. // The bucket instance is only valid for the lifetime of the transaction. func (tx *Tx) CreateBucketIfNotExists(name []byte) (*Bucket, error) { return tx.root.CreateBucketIfNotExists(name) } // DeleteBucket deletes a bucket. // Returns an error if the bucket cannot be found or if the key represents a non-bucket value. func (tx *Tx) DeleteBucket(name []byte) error { return tx.root.DeleteBucket(name) } // ForEach executes a function for each bucket in the root. // If the provided function returns an error then the iteration is stopped and // the error is returned to the caller. func (tx *Tx) ForEach(fn func(name []byte, b *Bucket) error) error { return tx.root.ForEach(func(k, v []byte) error { if err := fn(k, tx.root.Bucket(k)); err != nil { return err } return nil }) } // OnCommit adds a handler function to be executed after the transaction successfully commits. func (tx *Tx) OnCommit(fn func()) { tx.commitHandlers = append(tx.commitHandlers, fn) } // Commit writes all changes to disk and updates the meta page. // Returns an error if a disk write error occurs, or if Commit is // called on a read-only transaction. func (tx *Tx) Commit() error { _assert(!tx.managed, "managed tx commit not allowed") if tx.db == nil { return ErrTxClosed } else if !tx.writable { return ErrTxNotWritable } // TODO(benbjohnson): Use vectorized I/O to write out dirty pages. // Rebalance nodes which have had deletions. var startTime = time.Now() tx.root.rebalance() if tx.stats.Rebalance > 0 { tx.stats.RebalanceTime += time.Since(startTime) } // spill data onto dirty pages. startTime = time.Now() if err := tx.root.spill(); err != nil { tx.rollback() return err } tx.stats.SpillTime += time.Since(startTime) // Free the old root bucket. tx.meta.root.root = tx.root.root opgid := tx.meta.pgid // Free the freelist and allocate new pages for it. This will overestimate // the size of the freelist but not underestimate the size (which would be bad). tx.db.freelist.free(tx.meta.txid, tx.db.page(tx.meta.freelist)) p, err := tx.allocate((tx.db.freelist.size() / tx.db.pageSize) + 1) if err != nil { tx.rollback() return err } if err := tx.db.freelist.write(p); err != nil { tx.rollback() return err } tx.meta.freelist = p.id // If the high water mark has moved up then attempt to grow the database. if tx.meta.pgid > opgid { if err := tx.db.grow(int(tx.meta.pgid+1) * tx.db.pageSize); err != nil { tx.rollback() return err } } // Write dirty pages to disk. startTime = time.Now() if err := tx.write(); err != nil { tx.rollback() return err } // If strict mode is enabled then perform a consistency check. // Only the first consistency error is reported in the panic. if tx.db.StrictMode { ch := tx.Check() var errs []string for { err, ok := <-ch if !ok { break } errs = append(errs, err.Error()) } if len(errs) > 0 { panic("check fail: " + strings.Join(errs, "\n")) } } // Write meta to disk. if err := tx.writeMeta(); err != nil { tx.rollback() return err } tx.stats.WriteTime += time.Since(startTime) // Finalize the transaction. tx.close() // Execute commit handlers now that the locks have been removed. for _, fn := range tx.commitHandlers { fn() } return nil } // Rollback closes the transaction and ignores all previous updates. Read-only // transactions must be rolled back and not committed. func (tx *Tx) Rollback() error { _assert(!tx.managed, "managed tx rollback not allowed") if tx.db == nil { return ErrTxClosed } tx.rollback() return nil } func (tx *Tx) rollback() { if tx.db == nil { return } if tx.writable { tx.db.freelist.rollback(tx.meta.txid) tx.db.freelist.reload(tx.db.page(tx.db.meta().freelist)) } tx.close() } func (tx *Tx) close() { if tx.db == nil { return } if tx.writable { // Grab freelist stats. var freelistFreeN = tx.db.freelist.free_count() var freelistPendingN = tx.db.freelist.pending_count() var freelistAlloc = tx.db.freelist.size() // Remove transaction ref & writer lock. tx.db.rwtx = nil tx.db.rwlock.Unlock() // Merge statistics. tx.db.statlock.Lock() tx.db.stats.FreePageN = freelistFreeN tx.db.stats.PendingPageN = freelistPendingN tx.db.stats.FreeAlloc = (freelistFreeN + freelistPendingN) * tx.db.pageSize tx.db.stats.FreelistInuse = freelistAlloc tx.db.stats.TxStats.add(&tx.stats) tx.db.statlock.Unlock() } else { tx.db.removeTx(tx) } // Clear all references. tx.db = nil tx.meta = nil tx.root = Bucket{tx: tx} tx.pages = nil } // Copy writes the entire database to a writer. // This function exists for backwards compatibility. Use WriteTo() instead. func (tx *Tx) Copy(w io.Writer) error { _, err := tx.WriteTo(w) return err } // WriteTo writes the entire database to a writer. // If err == nil then exactly tx.Size() bytes will be written into the writer. func (tx *Tx) WriteTo(w io.Writer) (n int64, err error) { // Attempt to open reader with WriteFlag f, err := os.OpenFile(tx.db.path, os.O_RDONLY|tx.WriteFlag, 0) if err != nil { return 0, err } defer func() { _ = f.Close() }() // Generate a meta page. We use the same page data for both meta pages. buf := make([]byte, tx.db.pageSize) page := (*page)(unsafe.Pointer(&buf[0])) page.flags = metaPageFlag *page.meta() = *tx.meta // Write meta 0. page.id = 0 page.meta().checksum = page.meta().sum64() nn, err := w.Write(buf) n += int64(nn) if err != nil { return n, fmt.Errorf("meta 0 copy: %s", err) } // Write meta 1 with a lower transaction id. page.id = 1 page.meta().txid -= 1 page.meta().checksum = page.meta().sum64() nn, err = w.Write(buf) n += int64(nn) if err != nil { return n, fmt.Errorf("meta 1 copy: %s", err) } // Move past the meta pages in the file. if _, err := f.Seek(int64(tx.db.pageSize*2), os.SEEK_SET); err != nil { return n, fmt.Errorf("seek: %s", err) } // Copy data pages. wn, err := io.CopyN(w, f, tx.Size()-int64(tx.db.pageSize*2)) n += wn if err != nil { return n, err } return n, f.Close() } // CopyFile copies the entire database to file at the given path. // A reader transaction is maintained during the copy so it is safe to continue // using the database while a copy is in progress. func (tx *Tx) CopyFile(path string, mode os.FileMode) error { f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode) if err != nil { return err } err = tx.Copy(f) if err != nil { _ = f.Close() return err } return f.Close() } // Check performs several consistency checks on the database for this transaction. // An error is returned if any inconsistency is found. // // It can be safely run concurrently on a writable transaction. However, this // incurs a high cost for large databases and databases with a lot of subbuckets // because of caching. This overhead can be removed if running on a read-only // transaction, however, it is not safe to execute other writer transactions at // the same time. func (tx *Tx) Check() <-chan error { ch := make(chan error) go tx.check(ch) return ch } func (tx *Tx) check(ch chan error) { // Check if any pages are double freed. freed := make(map[pgid]bool) all := make([]pgid, tx.db.freelist.count()) tx.db.freelist.copyall(all) for _, id := range all { if freed[id] { ch <- fmt.Errorf("page %d: already freed", id) } freed[id] = true } // Track every reachable page. reachable := make(map[pgid]*page) reachable[0] = tx.page(0) // meta0 reachable[1] = tx.page(1) // meta1 for i := uint32(0); i <= tx.page(tx.meta.freelist).overflow; i++ { reachable[tx.meta.freelist+pgid(i)] = tx.page(tx.meta.freelist) } // Recursively check buckets. tx.checkBucket(&tx.root, reachable, freed, ch) // Ensure all pages below high water mark are either reachable or freed. for i := pgid(0); i < tx.meta.pgid; i++ { _, isReachable := reachable[i] if !isReachable && !freed[i] { ch <- fmt.Errorf("page %d: unreachable unfreed", int(i)) } } // Close the channel to signal completion. close(ch) } func (tx *Tx) checkBucket(b *Bucket, reachable map[pgid]*page, freed map[pgid]bool, ch chan error) { // Ignore inline buckets. if b.root == 0 { return } // Check every page used by this bucket. b.tx.forEachPage(b.root, 0, func(p *page, _ int) { if p.id > tx.meta.pgid { ch <- fmt.Errorf("page %d: out of bounds: %d", int(p.id), int(b.tx.meta.pgid)) } // Ensure each page is only referenced once. for i := pgid(0); i <= pgid(p.overflow); i++ { var id = p.id + i if _, ok := reachable[id]; ok { ch <- fmt.Errorf("page %d: multiple references", int(id)) } reachable[id] = p } // We should only encounter un-freed leaf and branch pages. if freed[p.id] { ch <- fmt.Errorf("page %d: reachable freed", int(p.id)) } else if (p.flags&branchPageFlag) == 0 && (p.flags&leafPageFlag) == 0 { ch <- fmt.Errorf("page %d: invalid type: %s", int(p.id), p.typ()) } }) // Check each bucket within this bucket. _ = b.ForEach(func(k, v []byte) error { if child := b.Bucket(k); child != nil { tx.checkBucket(child, reachable, freed, ch) } return nil }) } // allocate returns a contiguous block of memory starting at a given page. func (tx *Tx) allocate(count int) (*page, error) { p, err := tx.db.allocate(count) if err != nil { return nil, err } // Save to our page cache. tx.pages[p.id] = p // Update statistics. tx.stats.PageCount++ tx.stats.PageAlloc += count * tx.db.pageSize return p, nil } // write writes any dirty pages to disk. func (tx *Tx) write() error { // Sort pages by id. pages := make(pages, 0, len(tx.pages)) for _, p := range tx.pages { pages = append(pages, p) } // Clear out page cache early. tx.pages = make(map[pgid]*page) sort.Sort(pages) // Write pages to disk in order. for _, p := range pages { size := (int(p.overflow) + 1) * tx.db.pageSize offset := int64(p.id) * int64(tx.db.pageSize) // Write out page in "max allocation" sized chunks. ptr := (*[maxAllocSize]byte)(unsafe.Pointer(p)) for { // Limit our write to our max allocation size. sz := size if sz > maxAllocSize-1 { sz = maxAllocSize - 1 } // Write chunk to disk. buf := ptr[:sz] if _, err := tx.db.ops.writeAt(buf, offset); err != nil { return err } // Update statistics. tx.stats.Write++ // Exit inner for loop if we've written all the chunks. size -= sz if size == 0 { break } // Otherwise move offset forward and move pointer to next chunk. offset += int64(sz) ptr = (*[maxAllocSize]byte)(unsafe.Pointer(&ptr[sz])) } } // Ignore file sync if flag is set on DB. if !tx.db.NoSync || IgnoreNoSync { if err := fdatasync(tx.db); err != nil { return err } } // Put small pages back to page pool. for _, p := range pages { // Ignore page sizes over 1 page. // These are allocated using make() instead of the page pool. if int(p.overflow) != 0 { continue } buf := (*[maxAllocSize]byte)(unsafe.Pointer(p))[:tx.db.pageSize] // See https://go.googlesource.com/go/+/f03c9202c43e0abb130669852082117ca50aa9b1 for i := range buf { buf[i] = 0 } tx.db.pagePool.Put(buf) } return nil } // writeMeta writes the meta to the disk. func (tx *Tx) writeMeta() error { // Create a temporary buffer for the meta page. buf := make([]byte, tx.db.pageSize) p := tx.db.pageInBuffer(buf, 0) tx.meta.write(p) // Write the meta page to file. if _, err := tx.db.ops.writeAt(buf, int64(p.id)*int64(tx.db.pageSize)); err != nil { return err } if !tx.db.NoSync || IgnoreNoSync { if err := fdatasync(tx.db); err != nil { return err } } // Update statistics. tx.stats.Write++ return nil } // page returns a reference to the page with a given id. // If page has been written to then a temporary buffered page is returned. func (tx *Tx) page(id pgid) *page { // Check the dirty pages first. if tx.pages != nil { if p, ok := tx.pages[id]; ok { return p } } // Otherwise return directly from the mmap. return tx.db.page(id) } // forEachPage iterates over every page within a given page and executes a function. func (tx *Tx) forEachPage(pgid pgid, depth int, fn func(*page, int)) { p := tx.page(pgid) // Execute function. fn(p, depth) // Recursively loop over children. if (p.flags & branchPageFlag) != 0 { for i := 0; i < int(p.count); i++ { elem := p.branchPageElement(uint16(i)) tx.forEachPage(elem.pgid, depth+1, fn) } } } // Page returns page information for a given page number. // This is only safe for concurrent use when used by a writable transaction. func (tx *Tx) Page(id int) (*PageInfo, error) { if tx.db == nil { return nil, ErrTxClosed } else if pgid(id) >= tx.meta.pgid { return nil, nil } // Build the page info. p := tx.db.page(pgid(id)) info := &PageInfo{ ID: id, Count: int(p.count), OverflowCount: int(p.overflow), } // Determine the type (or if it's free). if tx.db.freelist.freed(pgid(id)) { info.Type = "free" } else { info.Type = p.typ() } return info, nil } // TxStats represents statistics about the actions performed by the transaction. type TxStats struct { // Page statistics. PageCount int // number of page allocations PageAlloc int // total bytes allocated // Cursor statistics. CursorCount int // number of cursors created // Node statistics NodeCount int // number of node allocations NodeDeref int // number of node dereferences // Rebalance statistics. Rebalance int // number of node rebalances RebalanceTime time.Duration // total time spent rebalancing // Split/Spill statistics. Split int // number of nodes split Spill int // number of nodes spilled SpillTime time.Duration // total time spent spilling // Write statistics. Write int // number of writes performed WriteTime time.Duration // total time spent writing to disk } func (s *TxStats) add(other *TxStats) { s.PageCount += other.PageCount s.PageAlloc += other.PageAlloc s.CursorCount += other.CursorCount s.NodeCount += other.NodeCount s.NodeDeref += other.NodeDeref s.Rebalance += other.Rebalance s.RebalanceTime += other.RebalanceTime s.Split += other.Split s.Spill += other.Spill s.SpillTime += other.SpillTime s.Write += other.Write s.WriteTime += other.WriteTime } // Sub calculates and returns the difference between two sets of transaction stats. // This is useful when obtaining stats at two different points and time and // you need the performance counters that occurred within that time span. func (s *TxStats) Sub(other *TxStats) TxStats { var diff TxStats diff.PageCount = s.PageCount - other.PageCount diff.PageAlloc = s.PageAlloc - other.PageAlloc diff.CursorCount = s.CursorCount - other.CursorCount diff.NodeCount = s.NodeCount - other.NodeCount diff.NodeDeref = s.NodeDeref - other.NodeDeref diff.Rebalance = s.Rebalance - other.Rebalance diff.RebalanceTime = s.RebalanceTime - other.RebalanceTime diff.Split = s.Split - other.Split diff.Spill = s.Spill - other.Spill diff.SpillTime = s.SpillTime - other.SpillTime diff.Write = s.Write - other.Write diff.WriteTime = s.WriteTime - other.WriteTime return diff } dep-0.3.2/vendor/github.com/boltdb/bolt/tx_test.go000066400000000000000000000404051317166637100220650ustar00rootroot00000000000000package bolt_test import ( "bytes" "errors" "fmt" "log" "os" "testing" "github.com/boltdb/bolt" ) // Ensure that committing a closed transaction returns an error. func TestTx_Commit_ErrTxClosed(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } if _, err := tx.CreateBucket([]byte("foo")); err != nil { t.Fatal(err) } if err := tx.Commit(); err != nil { t.Fatal(err) } if err := tx.Commit(); err != bolt.ErrTxClosed { t.Fatalf("unexpected error: %s", err) } } // Ensure that rolling back a closed transaction returns an error. func TestTx_Rollback_ErrTxClosed(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } if err := tx.Rollback(); err != nil { t.Fatal(err) } if err := tx.Rollback(); err != bolt.ErrTxClosed { t.Fatalf("unexpected error: %s", err) } } // Ensure that committing a read-only transaction returns an error. func TestTx_Commit_ErrTxNotWritable(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(false) if err != nil { t.Fatal(err) } if err := tx.Commit(); err != bolt.ErrTxNotWritable { t.Fatal(err) } } // Ensure that a transaction can retrieve a cursor on the root bucket. func TestTx_Cursor(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } if _, err := tx.CreateBucket([]byte("woojits")); err != nil { t.Fatal(err) } c := tx.Cursor() if k, v := c.First(); !bytes.Equal(k, []byte("widgets")) { t.Fatalf("unexpected key: %v", k) } else if v != nil { t.Fatalf("unexpected value: %v", v) } if k, v := c.Next(); !bytes.Equal(k, []byte("woojits")) { t.Fatalf("unexpected key: %v", k) } else if v != nil { t.Fatalf("unexpected value: %v", v) } if k, v := c.Next(); k != nil { t.Fatalf("unexpected key: %v", k) } else if v != nil { t.Fatalf("unexpected value: %v", k) } return nil }); err != nil { t.Fatal(err) } } // Ensure that creating a bucket with a read-only transaction returns an error. func TestTx_CreateBucket_ErrTxNotWritable(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.View(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("foo")) if err != bolt.ErrTxNotWritable { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that creating a bucket on a closed transaction returns an error. func TestTx_CreateBucket_ErrTxClosed(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } if err := tx.Commit(); err != nil { t.Fatal(err) } if _, err := tx.CreateBucket([]byte("foo")); err != bolt.ErrTxClosed { t.Fatalf("unexpected error: %s", err) } } // Ensure that a Tx can retrieve a bucket. func TestTx_Bucket(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } if tx.Bucket([]byte("widgets")) == nil { t.Fatal("expected bucket") } return nil }); err != nil { t.Fatal(err) } } // Ensure that a Tx retrieving a non-existent key returns nil. func TestTx_Get_NotFound(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if b.Get([]byte("no_such_key")) != nil { t.Fatal("expected nil value") } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can be created and retrieved. func TestTx_CreateBucket(t *testing.T) { db := MustOpenDB() defer db.MustClose() // Create a bucket. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } else if b == nil { t.Fatal("expected bucket") } return nil }); err != nil { t.Fatal(err) } // Read the bucket through a separate transaction. if err := db.View(func(tx *bolt.Tx) error { if tx.Bucket([]byte("widgets")) == nil { t.Fatal("expected bucket") } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can be created if it doesn't already exist. func TestTx_CreateBucketIfNotExists(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { // Create bucket. if b, err := tx.CreateBucketIfNotExists([]byte("widgets")); err != nil { t.Fatal(err) } else if b == nil { t.Fatal("expected bucket") } // Create bucket again. if b, err := tx.CreateBucketIfNotExists([]byte("widgets")); err != nil { t.Fatal(err) } else if b == nil { t.Fatal("expected bucket") } return nil }); err != nil { t.Fatal(err) } // Read the bucket through a separate transaction. if err := db.View(func(tx *bolt.Tx) error { if tx.Bucket([]byte("widgets")) == nil { t.Fatal("expected bucket") } return nil }); err != nil { t.Fatal(err) } } // Ensure transaction returns an error if creating an unnamed bucket. func TestTx_CreateBucketIfNotExists_ErrBucketNameRequired(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucketIfNotExists([]byte{}); err != bolt.ErrBucketNameRequired { t.Fatalf("unexpected error: %s", err) } if _, err := tx.CreateBucketIfNotExists(nil); err != bolt.ErrBucketNameRequired { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket cannot be created twice. func TestTx_CreateBucket_ErrBucketExists(t *testing.T) { db := MustOpenDB() defer db.MustClose() // Create a bucket. if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } // Create the same bucket again. if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket([]byte("widgets")); err != bolt.ErrBucketExists { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket is created with a non-blank name. func TestTx_CreateBucket_ErrBucketNameRequired(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if _, err := tx.CreateBucket(nil); err != bolt.ErrBucketNameRequired { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that a bucket can be deleted. func TestTx_DeleteBucket(t *testing.T) { db := MustOpenDB() defer db.MustClose() // Create a bucket and add a value. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } // Delete the bucket and make sure we can't get the value. if err := db.Update(func(tx *bolt.Tx) error { if err := tx.DeleteBucket([]byte("widgets")); err != nil { t.Fatal(err) } if tx.Bucket([]byte("widgets")) != nil { t.Fatal("unexpected bucket") } return nil }); err != nil { t.Fatal(err) } if err := db.Update(func(tx *bolt.Tx) error { // Create the bucket again and make sure there's not a phantom value. b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if v := b.Get([]byte("foo")); v != nil { t.Fatalf("unexpected phantom value: %v", v) } return nil }); err != nil { t.Fatal(err) } } // Ensure that deleting a bucket on a closed transaction returns an error. func TestTx_DeleteBucket_ErrTxClosed(t *testing.T) { db := MustOpenDB() defer db.MustClose() tx, err := db.Begin(true) if err != nil { t.Fatal(err) } if err := tx.Commit(); err != nil { t.Fatal(err) } if err := tx.DeleteBucket([]byte("foo")); err != bolt.ErrTxClosed { t.Fatalf("unexpected error: %s", err) } } // Ensure that deleting a bucket with a read-only transaction returns an error. func TestTx_DeleteBucket_ReadOnly(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.View(func(tx *bolt.Tx) error { if err := tx.DeleteBucket([]byte("foo")); err != bolt.ErrTxNotWritable { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that nothing happens when deleting a bucket that doesn't exist. func TestTx_DeleteBucket_NotFound(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { if err := tx.DeleteBucket([]byte("widgets")); err != bolt.ErrBucketNotFound { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that no error is returned when a tx.ForEach function does not return // an error. func TestTx_ForEach_NoError(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if err := tx.ForEach(func(name []byte, b *bolt.Bucket) error { return nil }); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that an error is returned when a tx.ForEach function returns an error. func TestTx_ForEach_WithError(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } marker := errors.New("marker") if err := tx.ForEach(func(name []byte, b *bolt.Bucket) error { return marker }); err != marker { t.Fatalf("unexpected error: %s", err) } return nil }); err != nil { t.Fatal(err) } } // Ensure that Tx commit handlers are called after a transaction successfully commits. func TestTx_OnCommit(t *testing.T) { db := MustOpenDB() defer db.MustClose() var x int if err := db.Update(func(tx *bolt.Tx) error { tx.OnCommit(func() { x += 1 }) tx.OnCommit(func() { x += 2 }) if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } else if x != 3 { t.Fatalf("unexpected x: %d", x) } } // Ensure that Tx commit handlers are NOT called after a transaction rolls back. func TestTx_OnCommit_Rollback(t *testing.T) { db := MustOpenDB() defer db.MustClose() var x int if err := db.Update(func(tx *bolt.Tx) error { tx.OnCommit(func() { x += 1 }) tx.OnCommit(func() { x += 2 }) if _, err := tx.CreateBucket([]byte("widgets")); err != nil { t.Fatal(err) } return errors.New("rollback this commit") }); err == nil || err.Error() != "rollback this commit" { t.Fatalf("unexpected error: %s", err) } else if x != 0 { t.Fatalf("unexpected x: %d", x) } } // Ensure that the database can be copied to a file path. func TestTx_CopyFile(t *testing.T) { db := MustOpenDB() defer db.MustClose() path := tempfile() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte("bat")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { return tx.CopyFile(path, 0600) }); err != nil { t.Fatal(err) } db2, err := bolt.Open(path, 0600, nil) if err != nil { t.Fatal(err) } if err := db2.View(func(tx *bolt.Tx) error { if v := tx.Bucket([]byte("widgets")).Get([]byte("foo")); !bytes.Equal(v, []byte("bar")) { t.Fatalf("unexpected value: %v", v) } if v := tx.Bucket([]byte("widgets")).Get([]byte("baz")); !bytes.Equal(v, []byte("bat")) { t.Fatalf("unexpected value: %v", v) } return nil }); err != nil { t.Fatal(err) } if err := db2.Close(); err != nil { t.Fatal(err) } } type failWriterError struct{} func (failWriterError) Error() string { return "error injected for tests" } type failWriter struct { // fail after this many bytes After int } func (f *failWriter) Write(p []byte) (n int, err error) { n = len(p) if n > f.After { n = f.After err = failWriterError{} } f.After -= n return n, err } // Ensure that Copy handles write errors right. func TestTx_CopyFile_Error_Meta(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte("bat")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { return tx.Copy(&failWriter{}) }); err == nil || err.Error() != "meta 0 copy: error injected for tests" { t.Fatalf("unexpected error: %v", err) } } // Ensure that Copy handles write errors right. func TestTx_CopyFile_Error_Normal(t *testing.T) { db := MustOpenDB() defer db.MustClose() if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { t.Fatal(err) } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { t.Fatal(err) } if err := b.Put([]byte("baz"), []byte("bat")); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { return tx.Copy(&failWriter{3 * db.Info().PageSize}) }); err == nil || err.Error() != "error injected for tests" { t.Fatalf("unexpected error: %v", err) } } func ExampleTx_Rollback() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Create a bucket. if err := db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte("widgets")) return err }); err != nil { log.Fatal(err) } // Set a value for a key. if err := db.Update(func(tx *bolt.Tx) error { return tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar")) }); err != nil { log.Fatal(err) } // Update the key but rollback the transaction so it never saves. tx, err := db.Begin(true) if err != nil { log.Fatal(err) } b := tx.Bucket([]byte("widgets")) if err := b.Put([]byte("foo"), []byte("baz")); err != nil { log.Fatal(err) } if err := tx.Rollback(); err != nil { log.Fatal(err) } // Ensure that our original value is still set. if err := db.View(func(tx *bolt.Tx) error { value := tx.Bucket([]byte("widgets")).Get([]byte("foo")) fmt.Printf("The value for 'foo' is still: %s\n", value) return nil }); err != nil { log.Fatal(err) } // Close database to release file lock. if err := db.Close(); err != nil { log.Fatal(err) } // Output: // The value for 'foo' is still: bar } func ExampleTx_CopyFile() { // Open the database. db, err := bolt.Open(tempfile(), 0666, nil) if err != nil { log.Fatal(err) } defer os.Remove(db.Path()) // Create a bucket and a key. if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte("widgets")) if err != nil { return err } if err := b.Put([]byte("foo"), []byte("bar")); err != nil { return err } return nil }); err != nil { log.Fatal(err) } // Copy the database to another file. toFile := tempfile() if err := db.View(func(tx *bolt.Tx) error { return tx.CopyFile(toFile, 0666) }); err != nil { log.Fatal(err) } defer os.Remove(toFile) // Open the cloned database. db2, err := bolt.Open(toFile, 0666, nil) if err != nil { log.Fatal(err) } // Ensure that the key exists in the copy. if err := db2.View(func(tx *bolt.Tx) error { value := tx.Bucket([]byte("widgets")).Get([]byte("foo")) fmt.Printf("The value for 'foo' in the clone is: %s\n", value) return nil }); err != nil { log.Fatal(err) } // Close database to release file lock. if err := db.Close(); err != nil { log.Fatal(err) } if err := db2.Close(); err != nil { log.Fatal(err) } // Output: // The value for 'foo' in the clone is: bar } dep-0.3.2/vendor/github.com/go-yaml/000077500000000000000000000000001317166637100172005ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/go-yaml/yaml/000077500000000000000000000000001317166637100201425ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/go-yaml/yaml/.travis.yml000066400000000000000000000001341317166637100222510ustar00rootroot00000000000000language: go go: - 1.4 - 1.5 - 1.6 - tip go_import_path: gopkg.in/yaml.v2 dep-0.3.2/vendor/github.com/go-yaml/yaml/LICENSE000066400000000000000000000010601317166637100211440ustar00rootroot00000000000000Copyright 2011-2016 Canonical Ltd. 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. dep-0.3.2/vendor/github.com/go-yaml/yaml/LICENSE.libyaml000066400000000000000000000024411317166637100226000ustar00rootroot00000000000000The 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. dep-0.3.2/vendor/github.com/go-yaml/yaml/README.md000066400000000000000000000050471317166637100214270ustar00rootroot00000000000000# 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 Apache License 2.0. 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 ``` dep-0.3.2/vendor/github.com/go-yaml/yaml/apic.go000066400000000000000000000513761317166637100214210ustar00rootroot00000000000000package 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 //} // // dep-0.3.2/vendor/github.com/go-yaml/yaml/decode.go000066400000000000000000000361301317166637100217170ustar00rootroot00000000000000package 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))) } } 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 == "" && n.implicit) { 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) } dep-0.3.2/vendor/github.com/go-yaml/yaml/decode_test.go000066400000000000000000000531731317166637100227640ustar00rootroot00000000000000package yaml_test import ( "errors" . "gopkg.in/check.v1" "gopkg.in/yaml.v2" "math" "net" "reflect" "strings" "time" ) var unmarshalIntTest = 123 var unmarshalTests = []struct { data string value interface{} }{ { "", &struct{}{}, }, { "{}", &struct{}{}, }, { "v: hi", map[string]string{"v": "hi"}, }, { "v: hi", map[string]interface{}{"v": "hi"}, }, { "v: true", map[string]string{"v": "true"}, }, { "v: true", map[string]interface{}{"v": true}, }, { "v: 10", map[string]interface{}{"v": 10}, }, { "v: 0b10", map[string]interface{}{"v": 2}, }, { "v: 0xA", map[string]interface{}{"v": 10}, }, { "v: 4294967296", map[string]int64{"v": 4294967296}, }, { "v: 0.1", map[string]interface{}{"v": 0.1}, }, { "v: .1", map[string]interface{}{"v": 0.1}, }, { "v: .Inf", map[string]interface{}{"v": math.Inf(+1)}, }, { "v: -.Inf", map[string]interface{}{"v": math.Inf(-1)}, }, { "v: -10", map[string]interface{}{"v": -10}, }, { "v: -.1", map[string]interface{}{"v": -0.1}, }, // Simple values. { "123", &unmarshalIntTest, }, // Floats from spec { "canonical: 6.8523e+5", map[string]interface{}{"canonical": 6.8523e+5}, }, { "expo: 685.230_15e+03", map[string]interface{}{"expo": 685.23015e+03}, }, { "fixed: 685_230.15", map[string]interface{}{"fixed": 685230.15}, }, { "neginf: -.inf", map[string]interface{}{"neginf": math.Inf(-1)}, }, { "fixed: 685_230.15", map[string]float64{"fixed": 685230.15}, }, //{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported //{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}}, // Equality of NaN fails. // Bools from spec { "canonical: y", map[string]interface{}{"canonical": true}, }, { "answer: NO", map[string]interface{}{"answer": false}, }, { "logical: True", map[string]interface{}{"logical": true}, }, { "option: on", map[string]interface{}{"option": true}, }, { "option: on", map[string]bool{"option": true}, }, // Ints from spec { "canonical: 685230", map[string]interface{}{"canonical": 685230}, }, { "decimal: +685_230", map[string]interface{}{"decimal": 685230}, }, { "octal: 02472256", map[string]interface{}{"octal": 685230}, }, { "hexa: 0x_0A_74_AE", map[string]interface{}{"hexa": 685230}, }, { "bin: 0b1010_0111_0100_1010_1110", map[string]interface{}{"bin": 685230}, }, { "bin: -0b101010", map[string]interface{}{"bin": -42}, }, { "decimal: +685_230", map[string]int{"decimal": 685230}, }, //{"sexa: 190:20:30", map[string]interface{}{"sexa": 0}}, // Unsupported // Nulls from spec { "empty:", map[string]interface{}{"empty": nil}, }, { "canonical: ~", map[string]interface{}{"canonical": nil}, }, { "english: null", map[string]interface{}{"english": nil}, }, { "~: null key", map[interface{}]string{nil: "null key"}, }, { "empty:", map[string]*bool{"empty": nil}, }, // Flow sequence { "seq: [A,B]", map[string]interface{}{"seq": []interface{}{"A", "B"}}, }, { "seq: [A,B,C,]", map[string][]string{"seq": []string{"A", "B", "C"}}, }, { "seq: [A,1,C]", map[string][]string{"seq": []string{"A", "1", "C"}}, }, { "seq: [A,1,C]", map[string][]int{"seq": []int{1}}, }, { "seq: [A,1,C]", map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, }, // Block sequence { "seq:\n - A\n - B", map[string]interface{}{"seq": []interface{}{"A", "B"}}, }, { "seq:\n - A\n - B\n - C", map[string][]string{"seq": []string{"A", "B", "C"}}, }, { "seq:\n - A\n - 1\n - C", map[string][]string{"seq": []string{"A", "1", "C"}}, }, { "seq:\n - A\n - 1\n - C", map[string][]int{"seq": []int{1}}, }, { "seq:\n - A\n - 1\n - C", map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, }, // Literal block scalar { "scalar: | # Comment\n\n literal\n\n \ttext\n\n", map[string]string{"scalar": "\nliteral\n\n\ttext\n"}, }, // Folded block scalar { "scalar: > # Comment\n\n folded\n line\n \n next\n line\n * one\n * two\n\n last\n line\n\n", map[string]string{"scalar": "\nfolded line\nnext line\n * one\n * two\n\nlast line\n"}, }, // Map inside interface with no type hints. { "a: {b: c}", map[interface{}]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, }, // Structs and type conversions. { "hello: world", &struct{ Hello string }{"world"}, }, { "a: {b: c}", &struct{ A struct{ B string } }{struct{ B string }{"c"}}, }, { "a: {b: c}", &struct{ A *struct{ B string } }{&struct{ B string }{"c"}}, }, { "a: {b: c}", &struct{ A map[string]string }{map[string]string{"b": "c"}}, }, { "a: {b: c}", &struct{ A *map[string]string }{&map[string]string{"b": "c"}}, }, { "a:", &struct{ A map[string]string }{}, }, { "a: 1", &struct{ A int }{1}, }, { "a: 1", &struct{ A float64 }{1}, }, { "a: 1.0", &struct{ A int }{1}, }, { "a: 1.0", &struct{ A uint }{1}, }, { "a: [1, 2]", &struct{ A []int }{[]int{1, 2}}, }, { "a: 1", &struct{ B int }{0}, }, { "a: 1", &struct { B int "a" }{1}, }, { "a: y", &struct{ A bool }{true}, }, // Some cross type conversions { "v: 42", map[string]uint{"v": 42}, }, { "v: -42", map[string]uint{}, }, { "v: 4294967296", map[string]uint64{"v": 4294967296}, }, { "v: -4294967296", map[string]uint64{}, }, // int { "int_max: 2147483647", map[string]int{"int_max": math.MaxInt32}, }, { "int_min: -2147483648", map[string]int{"int_min": math.MinInt32}, }, { "int_overflow: 9223372036854775808", // math.MaxInt64 + 1 map[string]int{}, }, // int64 { "int64_max: 9223372036854775807", map[string]int64{"int64_max": math.MaxInt64}, }, { "int64_max_base2: 0b111111111111111111111111111111111111111111111111111111111111111", map[string]int64{"int64_max_base2": math.MaxInt64}, }, { "int64_min: -9223372036854775808", map[string]int64{"int64_min": math.MinInt64}, }, { "int64_neg_base2: -0b111111111111111111111111111111111111111111111111111111111111111", map[string]int64{"int64_neg_base2": -math.MaxInt64}, }, { "int64_overflow: 9223372036854775808", // math.MaxInt64 + 1 map[string]int64{}, }, // uint { "uint_min: 0", map[string]uint{"uint_min": 0}, }, { "uint_max: 4294967295", map[string]uint{"uint_max": math.MaxUint32}, }, { "uint_underflow: -1", map[string]uint{}, }, // uint64 { "uint64_min: 0", map[string]uint{"uint64_min": 0}, }, { "uint64_max: 18446744073709551615", map[string]uint64{"uint64_max": math.MaxUint64}, }, { "uint64_max_base2: 0b1111111111111111111111111111111111111111111111111111111111111111", map[string]uint64{"uint64_max_base2": math.MaxUint64}, }, { "uint64_maxint64: 9223372036854775807", map[string]uint64{"uint64_maxint64": math.MaxInt64}, }, { "uint64_underflow: -1", map[string]uint64{}, }, // float32 { "float32_max: 3.40282346638528859811704183484516925440e+38", map[string]float32{"float32_max": math.MaxFloat32}, }, { "float32_nonzero: 1.401298464324817070923729583289916131280e-45", map[string]float32{"float32_nonzero": math.SmallestNonzeroFloat32}, }, { "float32_maxuint64: 18446744073709551615", map[string]float32{"float32_maxuint64": float32(math.MaxUint64)}, }, { "float32_maxuint64+1: 18446744073709551616", map[string]float32{"float32_maxuint64+1": float32(math.MaxUint64 + 1)}, }, // float64 { "float64_max: 1.797693134862315708145274237317043567981e+308", map[string]float64{"float64_max": math.MaxFloat64}, }, { "float64_nonzero: 4.940656458412465441765687928682213723651e-324", map[string]float64{"float64_nonzero": math.SmallestNonzeroFloat64}, }, { "float64_maxuint64: 18446744073709551615", map[string]float64{"float64_maxuint64": float64(math.MaxUint64)}, }, { "float64_maxuint64+1: 18446744073709551616", map[string]float64{"float64_maxuint64+1": float64(math.MaxUint64 + 1)}, }, // Overflow cases. { "v: 4294967297", map[string]int32{}, }, { "v: 128", map[string]int8{}, }, // Quoted values. { "'1': '\"2\"'", map[interface{}]interface{}{"1": "\"2\""}, }, { "v:\n- A\n- 'B\n\n C'\n", map[string][]string{"v": []string{"A", "B\nC"}}, }, // Explicit tags. { "v: !!float '1.1'", map[string]interface{}{"v": 1.1}, }, { "v: !!null ''", map[string]interface{}{"v": nil}, }, { "%TAG !y! tag:yaml.org,2002:\n---\nv: !y!int '1'", map[string]interface{}{"v": 1}, }, // Anchors and aliases. { "a: &x 1\nb: &y 2\nc: *x\nd: *y\n", &struct{ A, B, C, D int }{1, 2, 1, 2}, }, { "a: &a {c: 1}\nb: *a", &struct { A, B struct { C int } }{struct{ C int }{1}, struct{ C int }{1}}, }, { "a: &a [1, 2]\nb: *a", &struct{ B []int }{[]int{1, 2}}, }, { "b: *a\na: &a {c: 1}", &struct { A, B struct { C int } }{struct{ C int }{1}, struct{ C int }{1}}, }, // Bug #1133337 { "foo: ''", map[string]*string{"foo": new(string)}, }, { "foo: null", map[string]string{"foo": ""}, }, { "foo: null", map[string]interface{}{"foo": nil}, }, // Ignored field { "a: 1\nb: 2\n", &struct { A int B int "-" }{1, 0}, }, // Bug #1191981 { "" + "%YAML 1.1\n" + "--- !!str\n" + `"Generic line break (no glyph)\n\` + "\n" + ` Generic line break (glyphed)\n\` + "\n" + ` Line separator\u2028\` + "\n" + ` Paragraph separator\u2029"` + "\n", "" + "Generic line break (no glyph)\n" + "Generic line break (glyphed)\n" + "Line separator\u2028Paragraph separator\u2029", }, // Struct inlining { "a: 1\nb: 2\nc: 3\n", &struct { A int C inlineB `yaml:",inline"` }{1, inlineB{2, inlineC{3}}}, }, // Map inlining { "a: 1\nb: 2\nc: 3\n", &struct { A int C map[string]int `yaml:",inline"` }{1, map[string]int{"b": 2, "c": 3}}, }, // bug 1243827 { "a: -b_c", map[string]interface{}{"a": "-b_c"}, }, { "a: +b_c", map[string]interface{}{"a": "+b_c"}, }, { "a: 50cent_of_dollar", map[string]interface{}{"a": "50cent_of_dollar"}, }, // Duration { "a: 3s", map[string]time.Duration{"a": 3 * time.Second}, }, // Issue #24. { "a: ", map[string]string{"a": ""}, }, // Base 60 floats are obsolete and unsupported. { "a: 1:1\n", map[string]string{"a": "1:1"}, }, // Binary data. { "a: !!binary gIGC\n", map[string]string{"a": "\x80\x81\x82"}, }, { "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", map[string]string{"a": strings.Repeat("\x90", 54)}, }, { "a: !!binary |\n " + strings.Repeat("A", 70) + "\n ==\n", map[string]string{"a": strings.Repeat("\x00", 52)}, }, // Ordered maps. { "{b: 2, a: 1, d: 4, c: 3, sub: {e: 5}}", &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, }, // Issue #39. { "a:\n b:\n c: d\n", map[string]struct{ B interface{} }{"a": {map[interface{}]interface{}{"c": "d"}}}, }, // Custom map type. { "a: {b: c}", M{"a": M{"b": "c"}}, }, // Support encoding.TextUnmarshaler. { "a: 1.2.3.4\n", map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, }, { "a: 2015-02-24T18:19:39Z\n", map[string]time.Time{"a": time.Unix(1424801979, 0).In(time.UTC)}, }, // Encode empty lists as zero-length slices. { "a: []", &struct{ A []int }{[]int{}}, }, // UTF-16-LE { "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n\x00", M{"ñoño": "very yes"}, }, // UTF-16-LE with surrogate. { "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \x00=\xd8\xd4\xdf\n\x00", M{"ñoño": "very yes 🟔"}, }, // UTF-16-BE { "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n", M{"ñoño": "very yes"}, }, // UTF-16-BE with surrogate. { "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \xd8=\xdf\xd4\x00\n", M{"ñoño": "very yes 🟔"}, }, // YAML Float regex shouldn't match this { "a: 123456e1\n", M{"a": "123456e1"}, }, { "a: 123456E1\n", M{"a": "123456E1"}, }, } type M map[interface{}]interface{} type inlineB struct { B int inlineC `yaml:",inline"` } type inlineC struct { C int } func (s *S) TestUnmarshal(c *C) { for _, item := range unmarshalTests { t := reflect.ValueOf(item.value).Type() var value interface{} switch t.Kind() { case reflect.Map: value = reflect.MakeMap(t).Interface() case reflect.String: value = reflect.New(t).Interface() case reflect.Ptr: value = reflect.New(t.Elem()).Interface() default: c.Fatalf("missing case for %s", t) } err := yaml.Unmarshal([]byte(item.data), value) if _, ok := err.(*yaml.TypeError); !ok { c.Assert(err, IsNil) } if t.Kind() == reflect.String { c.Assert(*value.(*string), Equals, item.value) } else { c.Assert(value, DeepEquals, item.value) } } } func (s *S) TestUnmarshalNaN(c *C) { value := map[string]interface{}{} err := yaml.Unmarshal([]byte("notanum: .NaN"), &value) c.Assert(err, IsNil) c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true) } var unmarshalErrorTests = []struct { data, error string }{ {"v: !!float 'error'", "yaml: cannot decode !!str `error` as a !!float"}, {"v: [A,", "yaml: line 1: did not find expected node content"}, {"v:\n- [A,", "yaml: line 2: did not find expected node content"}, {"a: *b\n", "yaml: unknown anchor 'b' referenced"}, {"a: &a\n b: *a\n", "yaml: anchor 'a' value contains itself"}, {"value: -", "yaml: block sequence entries are not allowed in this context"}, {"a: !!binary ==", "yaml: !!binary value contains invalid base64 data"}, {"{[.]}", `yaml: invalid map key: \[\]interface \{\}\{"\."\}`}, {"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`}, } func (s *S) TestUnmarshalErrors(c *C) { for _, item := range unmarshalErrorTests { var value interface{} err := yaml.Unmarshal([]byte(item.data), &value) c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value)) } } var unmarshalerTests = []struct { data, tag string value interface{} }{ {"_: {hi: there}", "!!map", map[interface{}]interface{}{"hi": "there"}}, {"_: [1,A]", "!!seq", []interface{}{1, "A"}}, {"_: 10", "!!int", 10}, {"_: null", "!!null", nil}, {`_: BAR!`, "!!str", "BAR!"}, {`_: "BAR!"`, "!!str", "BAR!"}, {"_: !!foo 'BAR!'", "!!foo", "BAR!"}, {`_: ""`, "!!str", ""}, } var unmarshalerResult = map[int]error{} type unmarshalerType struct { value interface{} } func (o *unmarshalerType) UnmarshalYAML(unmarshal func(v interface{}) error) error { if err := unmarshal(&o.value); err != nil { return err } if i, ok := o.value.(int); ok { if result, ok := unmarshalerResult[i]; ok { return result } } return nil } type unmarshalerPointer struct { Field *unmarshalerType "_" } type unmarshalerValue struct { Field unmarshalerType "_" } func (s *S) TestUnmarshalerPointerField(c *C) { for _, item := range unmarshalerTests { obj := &unmarshalerPointer{} err := yaml.Unmarshal([]byte(item.data), obj) c.Assert(err, IsNil) if item.value == nil { c.Assert(obj.Field, IsNil) } else { c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) c.Assert(obj.Field.value, DeepEquals, item.value) } } } func (s *S) TestUnmarshalerValueField(c *C) { for _, item := range unmarshalerTests { obj := &unmarshalerValue{} err := yaml.Unmarshal([]byte(item.data), obj) c.Assert(err, IsNil) c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) c.Assert(obj.Field.value, DeepEquals, item.value) } } func (s *S) TestUnmarshalerWholeDocument(c *C) { obj := &unmarshalerType{} err := yaml.Unmarshal([]byte(unmarshalerTests[0].data), obj) c.Assert(err, IsNil) value, ok := obj.value.(map[interface{}]interface{}) c.Assert(ok, Equals, true, Commentf("value: %#v", obj.value)) c.Assert(value["_"], DeepEquals, unmarshalerTests[0].value) } func (s *S) TestUnmarshalerTypeError(c *C) { unmarshalerResult[2] = &yaml.TypeError{[]string{"foo"}} unmarshalerResult[4] = &yaml.TypeError{[]string{"bar"}} defer func() { delete(unmarshalerResult, 2) delete(unmarshalerResult, 4) }() type T struct { Before int After int M map[string]*unmarshalerType } var v T data := `{before: A, m: {abc: 1, def: 2, ghi: 3, jkl: 4}, after: B}` err := yaml.Unmarshal([]byte(data), &v) c.Assert(err, ErrorMatches, ""+ "yaml: unmarshal errors:\n"+ " line 1: cannot unmarshal !!str `A` into int\n"+ " foo\n"+ " bar\n"+ " line 1: cannot unmarshal !!str `B` into int") c.Assert(v.M["abc"], NotNil) c.Assert(v.M["def"], IsNil) c.Assert(v.M["ghi"], NotNil) c.Assert(v.M["jkl"], IsNil) c.Assert(v.M["abc"].value, Equals, 1) c.Assert(v.M["ghi"].value, Equals, 3) } type proxyTypeError struct{} func (v *proxyTypeError) UnmarshalYAML(unmarshal func(interface{}) error) error { var s string var a int32 var b int64 if err := unmarshal(&s); err != nil { panic(err) } if s == "a" { if err := unmarshal(&b); err == nil { panic("should have failed") } return unmarshal(&a) } if err := unmarshal(&a); err == nil { panic("should have failed") } return unmarshal(&b) } func (s *S) TestUnmarshalerTypeErrorProxying(c *C) { type T struct { Before int After int M map[string]*proxyTypeError } var v T data := `{before: A, m: {abc: a, def: b}, after: B}` err := yaml.Unmarshal([]byte(data), &v) c.Assert(err, ErrorMatches, ""+ "yaml: unmarshal errors:\n"+ " line 1: cannot unmarshal !!str `A` into int\n"+ " line 1: cannot unmarshal !!str `a` into int32\n"+ " line 1: cannot unmarshal !!str `b` into int64\n"+ " line 1: cannot unmarshal !!str `B` into int") } type failingUnmarshaler struct{} var failingErr = errors.New("failingErr") func (ft *failingUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { return failingErr } func (s *S) TestUnmarshalerError(c *C) { err := yaml.Unmarshal([]byte("a: b"), &failingUnmarshaler{}) c.Assert(err, Equals, failingErr) } type sliceUnmarshaler []int func (su *sliceUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { var slice []int err := unmarshal(&slice) if err == nil { *su = slice return nil } var intVal int err = unmarshal(&intVal) if err == nil { *su = []int{intVal} return nil } return err } func (s *S) TestUnmarshalerRetry(c *C) { var su sliceUnmarshaler err := yaml.Unmarshal([]byte("[1, 2, 3]"), &su) c.Assert(err, IsNil) c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1, 2, 3})) err = yaml.Unmarshal([]byte("1"), &su) c.Assert(err, IsNil) c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1})) } // From http://yaml.org/type/merge.html var mergeTests = ` anchors: list: - &CENTER { "x": 1, "y": 2 } - &LEFT { "x": 0, "y": 2 } - &BIG { "r": 10 } - &SMALL { "r": 1 } # All the following maps are equal: plain: # Explicit keys "x": 1 "y": 2 "r": 10 label: center/big mergeOne: # Merge one map << : *CENTER "r": 10 label: center/big mergeMultiple: # Merge multiple maps << : [ *CENTER, *BIG ] label: center/big override: # Override << : [ *BIG, *LEFT, *SMALL ] "x": 1 label: center/big shortTag: # Explicit short merge tag !!merge "<<" : [ *CENTER, *BIG ] label: center/big longTag: # Explicit merge long tag ! "<<" : [ *CENTER, *BIG ] label: center/big inlineMap: # Inlined map << : {"x": 1, "y": 2, "r": 10} label: center/big inlineSequenceMap: # Inlined map in sequence << : [ *CENTER, {"r": 10} ] label: center/big ` func (s *S) TestMerge(c *C) { var want = map[interface{}]interface{}{ "x": 1, "y": 2, "r": 10, "label": "center/big", } var m map[interface{}]interface{} err := yaml.Unmarshal([]byte(mergeTests), &m) c.Assert(err, IsNil) for name, test := range m { if name == "anchors" { continue } c.Assert(test, DeepEquals, want, Commentf("test %q failed", name)) } } func (s *S) TestMergeStruct(c *C) { type Data struct { X, Y, R int Label string } want := Data{1, 2, 10, "center/big"} var m map[string]Data err := yaml.Unmarshal([]byte(mergeTests), &m) c.Assert(err, IsNil) for name, test := range m { if name == "anchors" { continue } c.Assert(test, Equals, want, Commentf("test %q failed", name)) } } var unmarshalNullTests = []func() interface{}{ func() interface{} { var v interface{}; v = "v"; return &v }, func() interface{} { var s = "s"; return &s }, func() interface{} { var s = "s"; sptr := &s; return &sptr }, func() interface{} { var i = 1; return &i }, func() interface{} { var i = 1; iptr := &i; return &iptr }, func() interface{} { m := map[string]int{"s": 1}; return &m }, func() interface{} { m := map[string]int{"s": 1}; return m }, } func (s *S) TestUnmarshalNull(c *C) { for _, test := range unmarshalNullTests { item := test() zero := reflect.Zero(reflect.TypeOf(item).Elem()).Interface() err := yaml.Unmarshal([]byte("null"), item) c.Assert(err, IsNil) if reflect.TypeOf(item).Kind() == reflect.Map { c.Assert(reflect.ValueOf(item).Interface(), DeepEquals, reflect.MakeMap(reflect.TypeOf(item)).Interface()) } else { c.Assert(reflect.ValueOf(item).Elem().Interface(), DeepEquals, zero) } } } func (s *S) TestUnmarshalSliceOnPreset(c *C) { // Issue #48. v := struct{ A []int }{[]int{1}} yaml.Unmarshal([]byte("a: [2]"), &v) c.Assert(v.A, DeepEquals, []int{2}) } //var data []byte //func init() { // var err error // data, err = ioutil.ReadFile("/tmp/file.yaml") // if err != nil { // panic(err) // } //} // //func (s *S) BenchmarkUnmarshal(c *C) { // var err error // for i := 0; i < c.N; i++ { // var v map[string]interface{} // err = yaml.Unmarshal(data, &v) // } // if err != nil { // panic(err) // } //} // //func (s *S) BenchmarkMarshal(c *C) { // var v map[string]interface{} // yaml.Unmarshal(data, &v) // c.ResetTimer() // for i := 0; i < c.N; i++ { // yaml.Marshal(&v) // } //} dep-0.3.2/vendor/github.com/go-yaml/yaml/emitterc.go000066400000000000000000001303561317166637100223150ustar00rootroot00000000000000package 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") } } // 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 } dep-0.3.2/vendor/github.com/go-yaml/yaml/encode.go000066400000000000000000000164421317166637100217350ustar00rootroot00000000000000package 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() } dep-0.3.2/vendor/github.com/go-yaml/yaml/encode_test.go000066400000000000000000000216411317166637100227710ustar00rootroot00000000000000package yaml_test import ( "fmt" "math" "strconv" "strings" "time" . "gopkg.in/check.v1" "gopkg.in/yaml.v2" "net" "os" ) var marshalIntTest = 123 var marshalTests = []struct { value interface{} data string }{ { nil, "null\n", }, { &struct{}{}, "{}\n", }, { map[string]string{"v": "hi"}, "v: hi\n", }, { map[string]interface{}{"v": "hi"}, "v: hi\n", }, { map[string]string{"v": "true"}, "v: \"true\"\n", }, { map[string]string{"v": "false"}, "v: \"false\"\n", }, { map[string]interface{}{"v": true}, "v: true\n", }, { map[string]interface{}{"v": false}, "v: false\n", }, { map[string]interface{}{"v": 10}, "v: 10\n", }, { map[string]interface{}{"v": -10}, "v: -10\n", }, { map[string]uint{"v": 42}, "v: 42\n", }, { map[string]interface{}{"v": int64(4294967296)}, "v: 4294967296\n", }, { map[string]int64{"v": int64(4294967296)}, "v: 4294967296\n", }, { map[string]uint64{"v": 4294967296}, "v: 4294967296\n", }, { map[string]interface{}{"v": "10"}, "v: \"10\"\n", }, { map[string]interface{}{"v": 0.1}, "v: 0.1\n", }, { map[string]interface{}{"v": float64(0.1)}, "v: 0.1\n", }, { map[string]interface{}{"v": -0.1}, "v: -0.1\n", }, { map[string]interface{}{"v": math.Inf(+1)}, "v: .inf\n", }, { map[string]interface{}{"v": math.Inf(-1)}, "v: -.inf\n", }, { map[string]interface{}{"v": math.NaN()}, "v: .nan\n", }, { map[string]interface{}{"v": nil}, "v: null\n", }, { map[string]interface{}{"v": ""}, "v: \"\"\n", }, { map[string][]string{"v": []string{"A", "B"}}, "v:\n- A\n- B\n", }, { map[string][]string{"v": []string{"A", "B\nC"}}, "v:\n- A\n- |-\n B\n C\n", }, { map[string][]interface{}{"v": []interface{}{"A", 1, map[string][]int{"B": []int{2, 3}}}}, "v:\n- A\n- 1\n- B:\n - 2\n - 3\n", }, { map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, "a:\n b: c\n", }, { map[string]interface{}{"a": "-"}, "a: '-'\n", }, // Simple values. { &marshalIntTest, "123\n", }, // Structures { &struct{ Hello string }{"world"}, "hello: world\n", }, { &struct { A struct { B string } }{struct{ B string }{"c"}}, "a:\n b: c\n", }, { &struct { A *struct { B string } }{&struct{ B string }{"c"}}, "a:\n b: c\n", }, { &struct { A *struct { B string } }{}, "a: null\n", }, { &struct{ A int }{1}, "a: 1\n", }, { &struct{ A []int }{[]int{1, 2}}, "a:\n- 1\n- 2\n", }, { &struct { B int "a" }{1}, "a: 1\n", }, { &struct{ A bool }{true}, "a: true\n", }, // Conditional flag { &struct { A int "a,omitempty" B int "b,omitempty" }{1, 0}, "a: 1\n", }, { &struct { A int "a,omitempty" B int "b,omitempty" }{0, 0}, "{}\n", }, { &struct { A *struct{ X, y int } "a,omitempty,flow" }{&struct{ X, y int }{1, 2}}, "a: {x: 1}\n", }, { &struct { A *struct{ X, y int } "a,omitempty,flow" }{nil}, "{}\n", }, { &struct { A *struct{ X, y int } "a,omitempty,flow" }{&struct{ X, y int }{}}, "a: {x: 0}\n", }, { &struct { A struct{ X, y int } "a,omitempty,flow" }{struct{ X, y int }{1, 2}}, "a: {x: 1}\n", }, { &struct { A struct{ X, y int } "a,omitempty,flow" }{struct{ X, y int }{0, 1}}, "{}\n", }, { &struct { A float64 "a,omitempty" B float64 "b,omitempty" }{1, 0}, "a: 1\n", }, // Flow flag { &struct { A []int "a,flow" }{[]int{1, 2}}, "a: [1, 2]\n", }, { &struct { A map[string]string "a,flow" }{map[string]string{"b": "c", "d": "e"}}, "a: {b: c, d: e}\n", }, { &struct { A struct { B, D string } "a,flow" }{struct{ B, D string }{"c", "e"}}, "a: {b: c, d: e}\n", }, // Unexported field { &struct { u int A int }{0, 1}, "a: 1\n", }, // Ignored field { &struct { A int B int "-" }{1, 2}, "a: 1\n", }, // Struct inlining { &struct { A int C inlineB `yaml:",inline"` }{1, inlineB{2, inlineC{3}}}, "a: 1\nb: 2\nc: 3\n", }, // Map inlining { &struct { A int C map[string]int `yaml:",inline"` }{1, map[string]int{"b": 2, "c": 3}}, "a: 1\nb: 2\nc: 3\n", }, // Duration { map[string]time.Duration{"a": 3 * time.Second}, "a: 3s\n", }, // Issue #24: bug in map merging logic. { map[string]string{"a": ""}, "a: \n", }, // Issue #34: marshal unsupported base 60 floats quoted for compatibility // with old YAML 1.1 parsers. { map[string]string{"a": "1:1"}, "a: \"1:1\"\n", }, // Binary data. { map[string]string{"a": "\x00"}, "a: \"\\0\"\n", }, { map[string]string{"a": "\x80\x81\x82"}, "a: !!binary gIGC\n", }, { map[string]string{"a": strings.Repeat("\x90", 54)}, "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", }, // Ordered maps. { &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, "b: 2\na: 1\nd: 4\nc: 3\nsub:\n e: 5\n", }, // Encode unicode as utf-8 rather than in escaped form. { map[string]string{"a": "你好"}, "a: 你好\n", }, // Support encoding.TextMarshaler. { map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, "a: 1.2.3.4\n", }, { map[string]time.Time{"a": time.Unix(1424801979, 0)}, "a: 2015-02-24T18:19:39Z\n", }, // Ensure strings containing ": " are quoted (reported as PR #43, but not reproducible). { map[string]string{"a": "b: c"}, "a: 'b: c'\n", }, // Containing hash mark ('#') in string should be quoted { map[string]string{"a": "Hello #comment"}, "a: 'Hello #comment'\n", }, { map[string]string{"a": "你好 #comment"}, "a: '你好 #comment'\n", }, } func (s *S) TestMarshal(c *C) { defer os.Setenv("TZ", os.Getenv("TZ")) os.Setenv("TZ", "UTC") for _, item := range marshalTests { data, err := yaml.Marshal(item.value) c.Assert(err, IsNil) c.Assert(string(data), Equals, item.data) } } var marshalErrorTests = []struct { value interface{} error string panic string }{{ value: &struct { B int inlineB ",inline" }{1, inlineB{2, inlineC{3}}}, panic: `Duplicated key 'b' in struct struct \{ B int; .*`, }, { value: &struct { A int B map[string]int ",inline" }{1, map[string]int{"a": 2}}, panic: `Can't have key "a" in inlined map; conflicts with struct field`, }} func (s *S) TestMarshalErrors(c *C) { for _, item := range marshalErrorTests { if item.panic != "" { c.Assert(func() { yaml.Marshal(item.value) }, PanicMatches, item.panic) } else { _, err := yaml.Marshal(item.value) c.Assert(err, ErrorMatches, item.error) } } } func (s *S) TestMarshalTypeCache(c *C) { var data []byte var err error func() { type T struct{ A int } data, err = yaml.Marshal(&T{}) c.Assert(err, IsNil) }() func() { type T struct{ B int } data, err = yaml.Marshal(&T{}) c.Assert(err, IsNil) }() c.Assert(string(data), Equals, "b: 0\n") } var marshalerTests = []struct { data string value interface{} }{ {"_:\n hi: there\n", map[interface{}]interface{}{"hi": "there"}}, {"_:\n- 1\n- A\n", []interface{}{1, "A"}}, {"_: 10\n", 10}, {"_: null\n", nil}, {"_: BAR!\n", "BAR!"}, } type marshalerType struct { value interface{} } func (o marshalerType) MarshalText() ([]byte, error) { panic("MarshalText called on type with MarshalYAML") } func (o marshalerType) MarshalYAML() (interface{}, error) { return o.value, nil } type marshalerValue struct { Field marshalerType "_" } func (s *S) TestMarshaler(c *C) { for _, item := range marshalerTests { obj := &marshalerValue{} obj.Field.value = item.value data, err := yaml.Marshal(obj) c.Assert(err, IsNil) c.Assert(string(data), Equals, string(item.data)) } } func (s *S) TestMarshalerWholeDocument(c *C) { obj := &marshalerType{} obj.value = map[string]string{"hello": "world!"} data, err := yaml.Marshal(obj) c.Assert(err, IsNil) c.Assert(string(data), Equals, "hello: world!\n") } type failingMarshaler struct{} func (ft *failingMarshaler) MarshalYAML() (interface{}, error) { return nil, failingErr } func (s *S) TestMarshalerError(c *C) { _, err := yaml.Marshal(&failingMarshaler{}) c.Assert(err, Equals, failingErr) } func (s *S) TestSortedOutput(c *C) { order := []interface{}{ false, true, 1, uint(1), 1.0, 1.1, 1.2, 2, uint(2), 2.0, 2.1, "", ".1", ".2", ".a", "1", "2", "a!10", "a/2", "a/10", "a~10", "ab/1", "b/1", "b/01", "b/2", "b/02", "b/3", "b/03", "b1", "b01", "b3", "c2.10", "c10.2", "d1", "d12", "d12a", } m := make(map[interface{}]int) for _, k := range order { m[k] = 1 } data, err := yaml.Marshal(m) c.Assert(err, IsNil) out := "\n" + string(data) last := 0 for i, k := range order { repr := fmt.Sprint(k) if s, ok := k.(string); ok { if _, err = strconv.ParseFloat(repr, 32); s == "" || err == nil { repr = `"` + repr + `"` } } index := strings.Index(out, "\n"+repr+":") if index == -1 { c.Fatalf("%#v is not in the output: %#v", k, out) } if index < last { c.Fatalf("%#v was generated before %#v: %q", k, order[i-1], out) } last = index } } dep-0.3.2/vendor/github.com/go-yaml/yaml/parserc.go000066400000000000000000001037111317166637100221330ustar00rootroot00000000000000package 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") } } // 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 } dep-0.3.2/vendor/github.com/go-yaml/yaml/readerc.go000066400000000000000000000272561317166637100221120ustar00rootroot00000000000000package 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 } dep-0.3.2/vendor/github.com/go-yaml/yaml/resolve.go000066400000000000000000000121701317166637100221510ustar00rootroot00000000000000package yaml import ( "encoding/base64" "math" "regexp" "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 } var yamlStyleFloat = regexp.MustCompile(`^[-+]?[0-9]*\.?[0-9]+([eE][-+][0-9]+)?$`) 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 } if yamlStyleFloat.MatchString(plain) { 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]) } dep-0.3.2/vendor/github.com/go-yaml/yaml/scannerc.go000066400000000000000000002267151317166637100223020ustar00rootroot00000000000000package yaml import ( "bytes" "fmt" ) // Introduction // ************ // // The following notes assume that you are familiar with the YAML specification // (http://yaml.org/spec/1.2/spec.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 unknown 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 } dep-0.3.2/vendor/github.com/go-yaml/yaml/sorter.go000066400000000000000000000046541317166637100220200ustar00rootroot00000000000000package 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") } dep-0.3.2/vendor/github.com/go-yaml/yaml/suite_test.go000066400000000000000000000002171317166637100226610ustar00rootroot00000000000000package yaml_test import ( . "gopkg.in/check.v1" "testing" ) func Test(t *testing.T) { TestingT(t) } type S struct{} var _ = Suite(&S{}) dep-0.3.2/vendor/github.com/go-yaml/yaml/writerc.go000066400000000000000000000046031317166637100221530ustar00rootroot00000000000000package 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 } dep-0.3.2/vendor/github.com/go-yaml/yaml/yaml.go000066400000000000000000000232251317166637100214370ustar00rootroot00000000000000// 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 != "" && !field.Anonymous { 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 } dep-0.3.2/vendor/github.com/go-yaml/yaml/yamlh.go000066400000000000000000000615011317166637100216060ustar00rootroot00000000000000package 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. } dep-0.3.2/vendor/github.com/go-yaml/yaml/yamlprivateh.go000066400000000000000000000115411317166637100232000ustar00rootroot00000000000000package 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 } dep-0.3.2/vendor/github.com/golang/000077500000000000000000000000001317166637100171025ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/golang/protobuf/000077500000000000000000000000001317166637100207425ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/golang/protobuf/.gitignore000066400000000000000000000002401317166637100227260ustar00rootroot00000000000000.DS_Store *.[568ao] *.ao *.so *.pyc ._* .nfs.* [568a].out *~ *.orig core _obj _test _testmain.go protoc-gen-go/testdata/multi/*.pb.go _conformance/_conformance dep-0.3.2/vendor/github.com/golang/protobuf/.travis.yml000066400000000000000000000005361317166637100230570ustar00rootroot00000000000000sudo: false language: go go: - 1.6.x - 1.7.x - 1.8.x - 1.9.x install: - go get -v -d -t github.com/golang/protobuf/... - curl -L https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip -o /tmp/protoc.zip - unzip /tmp/protoc.zip -d $HOME/protoc env: - PATH=$HOME/protoc/bin:$PATH script: - make all test dep-0.3.2/vendor/github.com/golang/protobuf/AUTHORS000066400000000000000000000002551317166637100220140ustar00rootroot00000000000000# This source code refers to The Go Authors for copyright purposes. # The master list of authors is in the main Go distribution, # visible at http://tip.golang.org/AUTHORS. dep-0.3.2/vendor/github.com/golang/protobuf/CONTRIBUTORS000066400000000000000000000002521317166637100226210ustar00rootroot00000000000000# This source code was written by the Go contributors. # The master list of contributors is in the main Go distribution, # visible at http://tip.golang.org/CONTRIBUTORS. dep-0.3.2/vendor/github.com/golang/protobuf/LICENSE000066400000000000000000000030571317166637100217540ustar00rootroot00000000000000Go 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. dep-0.3.2/vendor/github.com/golang/protobuf/Make.protobuf000066400000000000000000000036431317166637100234070ustar00rootroot00000000000000# 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. # Includable Makefile to add a rule for generating .pb.go files from .proto files # (Google protocol buffer descriptions). # Typical use if myproto.proto is a file in package mypackage in this directory: # # include $(GOROOT)/src/pkg/github.com/golang/protobuf/Make.protobuf %.pb.go: %.proto protoc --go_out=. $< dep-0.3.2/vendor/github.com/golang/protobuf/Makefile000066400000000000000000000041011317166637100223760ustar00rootroot00000000000000# 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: install install: go install ./proto ./jsonpb ./ptypes go install ./protoc-gen-go test: go test ./proto ./jsonpb ./ptypes make -C protoc-gen-go/testdata test clean: go clean ./... nuke: go clean -i ./... regenerate: make -C protoc-gen-go/descriptor regenerate make -C protoc-gen-go/plugin regenerate make -C protoc-gen-go/testdata regenerate make -C proto/testdata regenerate make -C jsonpb/jsonpb_test_proto regenerate make -C _conformance regenerate dep-0.3.2/vendor/github.com/golang/protobuf/README.md000066400000000000000000000231121317166637100222200ustar00rootroot00000000000000# Go support for Protocol Buffers [![Build Status](https://travis-ci.org/golang/protobuf.svg?branch=master)](https://travis-ci.org/golang/protobuf) Google's data interchange format. Copyright 2010 The Go Authors. https://github.com/golang/protobuf This package and the code it generates requires at least Go 1.4. This software implements Go bindings for protocol buffers. For information about protocol buffers themselves, see https://developers.google.com/protocol-buffers/ ## Installation ## To use this software, you must: - Install the standard C++ implementation of protocol buffers from https://developers.google.com/protocol-buffers/ - Of course, install the Go compiler and tools from https://golang.org/ See https://golang.org/doc/install for details or, if you are using gccgo, follow the instructions at https://golang.org/doc/install/gccgo - Grab the code from the repository and install the proto package. The simplest way is to run `go get -u github.com/golang/protobuf/protoc-gen-go`. The compiler plugin, protoc-gen-go, will be installed in $GOBIN, defaulting to $GOPATH/bin. It must be in your $PATH for the protocol compiler, protoc, to find it. This software has two parts: a 'protocol compiler plugin' that generates Go source files that, once compiled, can access and manage protocol buffers; and a library that implements run-time support for encoding (marshaling), decoding (unmarshaling), and accessing protocol buffers. There is support for gRPC in Go using protocol buffers. See the note at the bottom of this file for details. There are no insertion points in the plugin. ## Using protocol buffers with Go ## Once the software is installed, there are two steps to using it. First you must compile the protocol buffer definitions and then import them, with the support library, into your program. To compile the protocol buffer definition, run protoc with the --go_out parameter set to the directory you want to output the Go code to. protoc --go_out=. *.proto The generated files will be suffixed .pb.go. See the Test code below for an example using such a file. The package comment for the proto library contains text describing the interface provided in Go for protocol buffers. Here is an edited version. ========== The proto package 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. Helpers for getting values are superseded by the GetFoo methods and their use is deprecated. 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 with the enum's type name. Enum types have a String method, and a Enum method to assist in message construction. - Nested 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. - Enum types do not get an Enum method. Consider file test.proto, containing ```proto 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; } } ``` To create and play with a Test object from the example package, ```go package main import ( "log" "github.com/golang/protobuf/proto" "path/to/example" ) func main() { test := &example.Test { Label: proto.String("hello"), Type: proto.Int32(17), Reps: []int64{1, 2, 3}, Optionalgroup: &example.Test_OptionalGroup { RequiredField: proto.String("good bye"), }, } data, err := proto.Marshal(test) if err != nil { log.Fatal("marshaling error: ", err) } newTest := &example.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. } ``` ## Parameters ## To pass extra parameters to the plugin, use a comma-separated parameter list separated from the output directory by a colon: protoc --go_out=plugins=grpc,import_path=mypackage:. *.proto - `import_prefix=xxx` - a prefix that is added onto the beginning of all imports. Useful for things like generating protos in a subdirectory, or regenerating vendored protobufs in-place. - `import_path=foo/bar` - used as the package if no input files declare `go_package`. If it contains slashes, everything up to the rightmost slash is ignored. - `plugins=plugin1+plugin2` - specifies the list of sub-plugins to load. The only plugin in this repo is `grpc`. - `Mfoo/bar.proto=quux/shme` - declares that foo/bar.proto is associated with Go package quux/shme. This is subject to the import_prefix parameter. ## gRPC Support ## If a proto file specifies RPC services, protoc-gen-go can be instructed to generate code compatible with gRPC (http://www.grpc.io/). To do this, pass the `plugins` parameter to protoc-gen-go; the usual way is to insert it into the --go_out argument to protoc: protoc --go_out=plugins=grpc:. *.proto ## Compatibility ## The library and the generated code are expected to be stable over time. However, we reserve the right to make breaking changes without notice for the following reasons: - Security. A security issue in the specification or implementation may come to light whose resolution requires breaking compatibility. We reserve the right to address such security issues. - Unspecified behavior. There are some aspects of the Protocol Buffers specification that are undefined. Programs that depend on such unspecified behavior may break in future releases. - Specification errors or changes. If it becomes necessary to address an inconsistency, incompleteness, or change in the Protocol Buffers specification, resolving the issue could affect the meaning or legality of existing programs. We reserve the right to address such issues, including updating the implementations. - Bugs. If the library has a bug that violates the specification, a program that depends on the buggy behavior may break if the bug is fixed. We reserve the right to fix such bugs. - Adding methods or fields to generated structs. These may conflict with field names that already exist in a schema, causing applications to break. When the code generator encounters a field in the schema that would collide with a generated field or method name, the code generator will append an underscore to the generated field or method name. - Adding, removing, or changing methods or fields in generated structs that start with `XXX`. These parts of the generated code are exported out of necessity, but should not be considered part of the public API. - Adding, removing, or changing unexported symbols in generated code. Any breaking changes outside of these will be announced 6 months in advance to protobuf@googlegroups.com. You should, whenever possible, use generated code created by the `protoc-gen-go` tool built at the same commit as the `proto` package. The `proto` package declares package-level constants in the form `ProtoPackageIsVersionX`. Application code and generated code may depend on one of these constants to ensure that compilation will fail if the available version of the proto library is too old. Whenever we make a change to the generated code that requires newer library support, in the same commit we will increment the version number of the generated code and declare a new package-level constant whose name incorporates the latest version number. Removing a compatibility constant is considered a breaking change and would be subject to the announcement policy stated above. The `protoc-gen-go/generator` package exposes a plugin interface, which is used by the gRPC code generation. This interface is not supported and is subject to incompatible changes without notice. dep-0.3.2/vendor/github.com/golang/protobuf/proto/000077500000000000000000000000001317166637100221055ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/golang/protobuf/proto/Makefile000066400000000000000000000036161317166637100235530ustar00rootroot00000000000000# 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 --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto make dep-0.3.2/vendor/github.com/golang/protobuf/proto/all_test.go000066400000000000000000002035001317166637100242430ustar00rootroot00000000000000// 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/golang/protobuf/proto" . "github.com/golang/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() {} type msgWithFakeMarshaler struct { M *fakeMarshaler `protobuf:"bytes,1,opt,name=fake"` } func (m *msgWithFakeMarshaler) String() string { return CompactTextString(m) } func (m *msgWithFakeMarshaler) ProtoMessage() {} func (m *msgWithFakeMarshaler) Reset() {} // Simple tests for proto messages that implement the Marshaler interface. func TestMarshalerEncoding(t *testing.T) { tests := []struct { name string m Message want []byte errType reflect.Type }{ { name: "Marshaler that fails", m: &fakeMarshaler{ err: errors.New("some marshal err"), b: []byte{5, 6, 7}, }, // Since the Marshal method returned bytes, they should be written to the // buffer. (For efficiency, we assume that Marshal implementations are // always correct w.r.t. RequiredNotSetError and output.) want: []byte{5, 6, 7}, errType: reflect.TypeOf(errors.New("some marshal err")), }, { name: "Marshaler that fails with RequiredNotSetError", m: &msgWithFakeMarshaler{ M: &fakeMarshaler{ err: &RequiredNotSetError{}, b: []byte{5, 6, 7}, }, }, // Since there's an error that can be continued after, // the buffer should be written. want: []byte{ 10, 3, // for &msgWithFakeMarshaler 5, 6, 7, // for &fakeMarshaler }, errType: reflect.TypeOf(&RequiredNotSetError{}), }, { name: "Marshaler that succeeds", m: &fakeMarshaler{ b: []byte{0, 1, 2, 3, 4, 127, 255}, }, want: []byte{0, 1, 2, 3, 4, 127, 255}, }, } for _, test := range tests { b := NewBuffer(nil) err := b.Marshal(test.m) if reflect.TypeOf(err) != test.errType { t.Errorf("%s: got err %T(%v) wanted %T", test.name, err, err, test.errType) } if !reflect.DeepEqual(test.want, b.Bytes()) { t.Errorf("%s: got bytes %v wanted %v", test.name, b.Bytes(), test.want) } if size := Size(test.m); size != len(b.Bytes()) { t.Errorf("%s: Size(_) = %v, but marshaled to %v bytes", test.name, size, len(b.Bytes())) } m, mErr := Marshal(test.m) if !bytes.Equal(b.Bytes(), m) { t.Errorf("%s: Marshal returned %v, but (*Buffer).Marshal wrote %v", test.name, m, b.Bytes()) } if !reflect.DeepEqual(err, mErr) { t.Errorf("%s: Marshal err = %q, but (*Buffer).Marshal returned %q", test.name, fmt.Sprint(mErr), fmt.Sprint(err)) } } } // 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 _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Label") { 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 _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "{Unknown}") { t.Errorf("unmarshal: bad error type: %v", err) } } // Verify that absent required fields in groups cause Marshal/Unmarshal to return errors. func TestRequiredFieldEnforcementGroups(t *testing.T) { pb := &GoTestRequiredGroupField{Group: &GoTestRequiredGroupField_Group{}} if _, err := Marshal(pb); err == nil { t.Error("marshal: expected error, got nil") } else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Group.Field") { t.Errorf("marshal: bad error type: %v", err) } buf := []byte{11, 12} if err := Unmarshal(buf, pb); err == nil { t.Error("unmarshal: expected error, got nil") } else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Group.{Unknown}") { t.Errorf("unmarshal: bad error type: %v", err) } } func TestTypedNilMarshal(t *testing.T) { // A typed nil should return ErrNil and not crash. { var m *GoEnum if _, err := Marshal(m); err != ErrNil { t.Errorf("Marshal(%#v): got %v, want ErrNil", m, err) } } { m := &Communique{Union: &Communique_Msg{nil}} if _, err := Marshal(m); err == nil || err == ErrNil { t.Errorf("Marshal(%#v): got %v, want errOneofHasNil", m, 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: &FloatingPoint{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]) } } } func TestMapFieldWithNil(t *testing.T) { m1 := &MessageWithMap{ MsgMapping: map[int64]*FloatingPoint{ 1: nil, }, } b, err := Marshal(m1) if err != nil { t.Fatalf("Marshal: %v", err) } m2 := new(MessageWithMap) if err := Unmarshal(b, m2); err != nil { t.Fatalf("Unmarshal: %v, got these bytes: %v", err, b) } if v, ok := m2.MsgMapping[1]; !ok { t.Error("msg_mapping[1] not present") } else if v != nil { t.Errorf("msg_mapping[1] not nil: %v", v) } } func TestMapFieldWithNilBytes(t *testing.T) { m1 := &MessageWithMap{ ByteMapping: map[bool][]byte{ false: []byte{}, true: nil, }, } n := Size(m1) b, err := Marshal(m1) if err != nil { t.Fatalf("Marshal: %v", err) } if n != len(b) { t.Errorf("Size(m1) = %d; want len(Marshal(m1)) = %d", n, len(b)) } m2 := new(MessageWithMap) if err := Unmarshal(b, m2); err != nil { t.Fatalf("Unmarshal: %v, got these bytes: %v", err, b) } if v, ok := m2.ByteMapping[false]; !ok { t.Error("byte_mapping[false] not present") } else if len(v) != 0 { t.Errorf("byte_mapping[false] not empty: %#v", v) } if v, ok := m2.ByteMapping[true]; !ok { t.Error("byte_mapping[true] not present") } else if len(v) != 0 { t.Errorf("byte_mapping[true] not empty: %#v", v) } } func TestDecodeMapFieldMissingKey(t *testing.T) { b := []byte{ 0x0A, 0x03, // message, tag 1 (name_mapping), of length 3 bytes // no key 0x12, 0x01, 0x6D, // string value of length 1 byte, value "m" } got := &MessageWithMap{} err := Unmarshal(b, got) if err != nil { t.Fatalf("failed to marshal map with missing key: %v", err) } want := &MessageWithMap{NameMapping: map[int32]string{0: "m"}} if !Equal(got, want) { t.Errorf("Unmarshaled map with no key was not as expected. got: %v, want %v", got, want) } } func TestDecodeMapFieldMissingValue(t *testing.T) { b := []byte{ 0x0A, 0x02, // message, tag 1 (name_mapping), of length 2 bytes 0x08, 0x01, // varint key, value 1 // no value } got := &MessageWithMap{} err := Unmarshal(b, got) if err != nil { t.Fatalf("failed to marshal map with missing value: %v", err) } want := &MessageWithMap{NameMapping: map[int32]string{1: ""}} if !Equal(got, want) { t.Errorf("Unmarshaled map with no value was not as expected. got: %v, want %v", got, want) } } func TestOneof(t *testing.T) { m := &Communique{} b, err := Marshal(m) if err != nil { t.Fatalf("Marshal of empty message with oneof: %v", err) } if len(b) != 0 { t.Errorf("Marshal of empty message yielded too many bytes: %v", b) } m = &Communique{ Union: &Communique_Name{"Barry"}, } // Round-trip. b, err = Marshal(m) if err != nil { t.Fatalf("Marshal of message with oneof: %v", err) } if len(b) != 7 { // name tag/wire (1) + name len (1) + name (5) t.Errorf("Incorrect marshal of message with oneof: %v", b) } m.Reset() if err := Unmarshal(b, m); err != nil { t.Fatalf("Unmarshal of message with oneof: %v", err) } if x, ok := m.Union.(*Communique_Name); !ok || x.Name != "Barry" { t.Errorf("After round trip, Union = %+v", m.Union) } if name := m.GetName(); name != "Barry" { t.Errorf("After round trip, GetName = %q, want %q", name, "Barry") } // Let's try with a message in the oneof. m.Union = &Communique_Msg{&Strings{StringField: String("deep deep string")}} b, err = Marshal(m) if err != nil { t.Fatalf("Marshal of message with oneof set to message: %v", err) } if len(b) != 20 { // msg tag/wire (1) + msg len (1) + msg (1 + 1 + 16) t.Errorf("Incorrect marshal of message with oneof set to message: %v", b) } m.Reset() if err := Unmarshal(b, m); err != nil { t.Fatalf("Unmarshal of message with oneof set to message: %v", err) } ss, ok := m.Union.(*Communique_Msg) if !ok || ss.Msg.GetStringField() != "deep deep string" { t.Errorf("After round trip with oneof set to message, Union = %+v", m.Union) } } func TestInefficientPackedBool(t *testing.T) { // https://github.com/golang/protobuf/issues/76 inp := []byte{ 0x12, 0x02, // 0x12 = 2<<3|2; 2 bytes // Usually a bool should take a single byte, // but it is permitted to be any varint. 0xb9, 0x30, } if err := Unmarshal(inp, new(MoreRepeated)); err != nil { t.Error(err) } } // 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) } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/any_test.go000066400000000000000000000212111317166637100242570ustar00rootroot00000000000000// 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_test import ( "strings" "testing" "github.com/golang/protobuf/proto" pb "github.com/golang/protobuf/proto/proto3_proto" testpb "github.com/golang/protobuf/proto/testdata" anypb "github.com/golang/protobuf/ptypes/any" ) var ( expandedMarshaler = proto.TextMarshaler{ExpandAny: true} expandedCompactMarshaler = proto.TextMarshaler{Compact: true, ExpandAny: true} ) // anyEqual reports whether two messages which may be google.protobuf.Any or may // contain google.protobuf.Any fields are equal. We can't use proto.Equal for // comparison, because semantically equivalent messages may be marshaled to // binary in different tag order. Instead, trust that TextMarshaler with // ExpandAny option works and compare the text marshaling results. func anyEqual(got, want proto.Message) bool { // if messages are proto.Equal, no need to marshal. if proto.Equal(got, want) { return true } g := expandedMarshaler.Text(got) w := expandedMarshaler.Text(want) return g == w } type golden struct { m proto.Message t, c string } var goldenMessages = makeGolden() func makeGolden() []golden { nested := &pb.Nested{Bunny: "Monty"} nb, err := proto.Marshal(nested) if err != nil { panic(err) } m1 := &pb.Message{ Name: "David", ResultCount: 47, Anything: &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(nested), Value: nb}, } m2 := &pb.Message{ Name: "David", ResultCount: 47, Anything: &anypb.Any{TypeUrl: "http://[::1]/type.googleapis.com/" + proto.MessageName(nested), Value: nb}, } m3 := &pb.Message{ Name: "David", ResultCount: 47, Anything: &anypb.Any{TypeUrl: `type.googleapis.com/"/` + proto.MessageName(nested), Value: nb}, } m4 := &pb.Message{ Name: "David", ResultCount: 47, Anything: &anypb.Any{TypeUrl: "type.googleapis.com/a/path/" + proto.MessageName(nested), Value: nb}, } m5 := &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(nested), Value: nb} any1 := &testpb.MyMessage{Count: proto.Int32(47), Name: proto.String("David")} proto.SetExtension(any1, testpb.E_Ext_More, &testpb.Ext{Data: proto.String("foo")}) proto.SetExtension(any1, testpb.E_Ext_Text, proto.String("bar")) any1b, err := proto.Marshal(any1) if err != nil { panic(err) } any2 := &testpb.MyMessage{Count: proto.Int32(42), Bikeshed: testpb.MyMessage_GREEN.Enum(), RepBytes: [][]byte{[]byte("roboto")}} proto.SetExtension(any2, testpb.E_Ext_More, &testpb.Ext{Data: proto.String("baz")}) any2b, err := proto.Marshal(any2) if err != nil { panic(err) } m6 := &pb.Message{ Name: "David", ResultCount: 47, Anything: &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any1), Value: any1b}, ManyThings: []*anypb.Any{ &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any2), Value: any2b}, &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any1), Value: any1b}, }, } const ( m1Golden = ` name: "David" result_count: 47 anything: < [type.googleapis.com/proto3_proto.Nested]: < bunny: "Monty" > > ` m2Golden = ` name: "David" result_count: 47 anything: < ["http://[::1]/type.googleapis.com/proto3_proto.Nested"]: < bunny: "Monty" > > ` m3Golden = ` name: "David" result_count: 47 anything: < ["type.googleapis.com/\"/proto3_proto.Nested"]: < bunny: "Monty" > > ` m4Golden = ` name: "David" result_count: 47 anything: < [type.googleapis.com/a/path/proto3_proto.Nested]: < bunny: "Monty" > > ` m5Golden = ` [type.googleapis.com/proto3_proto.Nested]: < bunny: "Monty" > ` m6Golden = ` name: "David" result_count: 47 anything: < [type.googleapis.com/testdata.MyMessage]: < count: 47 name: "David" [testdata.Ext.more]: < data: "foo" > [testdata.Ext.text]: "bar" > > many_things: < [type.googleapis.com/testdata.MyMessage]: < count: 42 bikeshed: GREEN rep_bytes: "roboto" [testdata.Ext.more]: < data: "baz" > > > many_things: < [type.googleapis.com/testdata.MyMessage]: < count: 47 name: "David" [testdata.Ext.more]: < data: "foo" > [testdata.Ext.text]: "bar" > > ` ) return []golden{ {m1, strings.TrimSpace(m1Golden) + "\n", strings.TrimSpace(compact(m1Golden)) + " "}, {m2, strings.TrimSpace(m2Golden) + "\n", strings.TrimSpace(compact(m2Golden)) + " "}, {m3, strings.TrimSpace(m3Golden) + "\n", strings.TrimSpace(compact(m3Golden)) + " "}, {m4, strings.TrimSpace(m4Golden) + "\n", strings.TrimSpace(compact(m4Golden)) + " "}, {m5, strings.TrimSpace(m5Golden) + "\n", strings.TrimSpace(compact(m5Golden)) + " "}, {m6, strings.TrimSpace(m6Golden) + "\n", strings.TrimSpace(compact(m6Golden)) + " "}, } } func TestMarshalGolden(t *testing.T) { for _, tt := range goldenMessages { if got, want := expandedMarshaler.Text(tt.m), tt.t; got != want { t.Errorf("message %v: got:\n%s\nwant:\n%s", tt.m, got, want) } if got, want := expandedCompactMarshaler.Text(tt.m), tt.c; got != want { t.Errorf("message %v: got:\n`%s`\nwant:\n`%s`", tt.m, got, want) } } } func TestUnmarshalGolden(t *testing.T) { for _, tt := range goldenMessages { want := tt.m got := proto.Clone(tt.m) got.Reset() if err := proto.UnmarshalText(tt.t, got); err != nil { t.Errorf("failed to unmarshal\n%s\nerror: %v", tt.t, err) } if !anyEqual(got, want) { t.Errorf("message:\n%s\ngot:\n%s\nwant:\n%s", tt.t, got, want) } got.Reset() if err := proto.UnmarshalText(tt.c, got); err != nil { t.Errorf("failed to unmarshal\n%s\nerror: %v", tt.c, err) } if !anyEqual(got, want) { t.Errorf("message:\n%s\ngot:\n%s\nwant:\n%s", tt.c, got, want) } } } func TestMarshalUnknownAny(t *testing.T) { m := &pb.Message{ Anything: &anypb.Any{ TypeUrl: "foo", Value: []byte("bar"), }, } want := `anything: < type_url: "foo" value: "bar" > ` got := expandedMarshaler.Text(m) if got != want { t.Errorf("got\n`%s`\nwant\n`%s`", got, want) } } func TestAmbiguousAny(t *testing.T) { pb := &anypb.Any{} err := proto.UnmarshalText(` type_url: "ttt/proto3_proto.Nested" value: "\n\x05Monty" `, pb) t.Logf("result: %v (error: %v)", expandedMarshaler.Text(pb), err) if err != nil { t.Errorf("failed to parse ambiguous Any message: %v", err) } } func TestUnmarshalOverwriteAny(t *testing.T) { pb := &anypb.Any{} err := proto.UnmarshalText(` [type.googleapis.com/a/path/proto3_proto.Nested]: < bunny: "Monty" > [type.googleapis.com/a/path/proto3_proto.Nested]: < bunny: "Rabbit of Caerbannog" > `, pb) want := `line 7: Any message unpacked multiple times, or "type_url" already set` if err.Error() != want { t.Errorf("incorrect error.\nHave: %v\nWant: %v", err.Error(), want) } } func TestUnmarshalAnyMixAndMatch(t *testing.T) { pb := &anypb.Any{} err := proto.UnmarshalText(` value: "\n\x05Monty" [type.googleapis.com/a/path/proto3_proto.Nested]: < bunny: "Rabbit of Caerbannog" > `, pb) want := `line 5: Any message unpacked multiple times, or "value" already set` if err.Error() != want { t.Errorf("incorrect error.\nHave: %v\nWant: %v", err.Error(), want) } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/clone.go000066400000000000000000000154711317166637100235440ustar00rootroot00000000000000// 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 deep copy and merge. // TODO: RawMessage. package proto import ( "log" "reflect" "strings" ) // Clone returns a deep copy of a protocol buffer. func Clone(pb Message) Message { in := reflect.ValueOf(pb) if in.IsNil() { return pb } out := reflect.New(in.Type().Elem()) // out is empty so a merge is a deep copy. mergeStruct(out.Elem(), in.Elem()) return out.Interface().(Message) } // Merge merges src into dst. // Required and optional fields that are set in src will be set to that value in dst. // Elements of repeated fields will be appended. // Merge panics if src and dst are not the same type, or if dst is nil. func Merge(dst, src Message) { in := reflect.ValueOf(src) out := reflect.ValueOf(dst) if out.IsNil() { panic("proto: nil destination") } if in.Type() != out.Type() { // Explicit test prior to mergeStruct so that mistyped nils will fail panic("proto: type mismatch") } if in.IsNil() { // Merging nil into non-nil is a quiet no-op return } mergeStruct(out.Elem(), in.Elem()) } 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), false, sprop.Prop[i]) } 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") if !uf.IsValid() { return } uin := uf.Bytes() if len(uin) > 0 { out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...)) } } // 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() { out.Set(reflect.ValueOf(Clone(in.Interface().(Message)))) } else { Merge(out.Interface().(Message), in.Interface().(Message)) } } return } 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 } if out.IsNil() { out.Set(reflect.MakeMap(in.Type())) } // For maps with value types of *T or []byte we need to deep copy each value. elemKind := in.Type().Elem().Kind() for _, key := range in.MapKeys() { var val reflect.Value switch elemKind { case reflect.Ptr: val = reflect.New(in.Type().Elem().Elem()) mergeAny(val, in.MapIndex(key), false, nil) case reflect.Slice: val = in.MapIndex(key) val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) default: val = in.MapIndex(key) } out.SetMapIndex(key, val) } case reflect.Ptr: if in.IsNil() { return } if out.IsNil() { out.Set(reflect.New(in.Elem().Type())) } 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. out.SetBytes(append([]byte{}, in.Bytes()...)) return } n := in.Len() if out.IsNil() { out.Set(reflect.MakeSlice(in.Type(), 0, n)) } switch in.Type().Elem().Kind() { case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.String, reflect.Uint32, reflect.Uint64: out.Set(reflect.AppendSlice(out, in)) default: for i := 0; i < n; i++ { x := reflect.Indirect(reflect.New(in.Type().Elem())) mergeAny(x, in.Index(i), false, nil) out.Set(reflect.Append(out, x)) } } case reflect.Struct: mergeStruct(out, in) default: // unknown type, so not a protocol buffer log.Printf("proto: don't know how to copy %v", in) } } func mergeExtension(out, in map[int32]Extension) { for extNum, eIn := range in { eOut := Extension{desc: eIn.desc} if eIn.value != nil { v := reflect.New(reflect.TypeOf(eIn.value)).Elem() mergeAny(v, reflect.ValueOf(eIn.value), false, nil) eOut.value = v.Interface() } if eIn.enc != nil { eOut.enc = make([]byte, len(eIn.enc)) copy(eOut.enc, eIn.enc) } out[extNum] = eOut } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/clone_test.go000066400000000000000000000175351317166637100246060ustar00rootroot00000000000000// 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/golang/protobuf/proto" proto3pb "github.com/golang/protobuf/proto/proto3_proto" pb "github.com/golang/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: &pb.FloatingPoint{F: proto.Float64(2.0)}, 0x4002: &pb.FloatingPoint{ 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", }, MsgMapping: map[int64]*pb.FloatingPoint{ 0x4002: &pb.FloatingPoint{ F: proto.Float64(3.0), Exact: proto.Bool(true), }, // the entire message should be overwritten }, }, want: &pb.MessageWithMap{ NameMapping: map[int32]string{ 6: "Nigel", 7: "Andrew", }, MsgMapping: map[int64]*pb.FloatingPoint{ 0x4001: &pb.FloatingPoint{F: proto.Float64(2.0)}, 0x4002: &pb.FloatingPoint{ F: proto.Float64(2.0), }, }, ByteMapping: map[bool][]byte{true: []byte("wowsa")}, }, }, // proto3 shouldn't merge zero values, // in the same way that proto2 shouldn't merge nils. { src: &proto3pb.Message{ Name: "Aaron", Data: []byte(""), // zero value, but not nil }, dst: &proto3pb.Message{ HeightInCm: 176, Data: []byte("texas!"), }, want: &proto3pb.Message{ Name: "Aaron", HeightInCm: 176, Data: []byte("texas!"), }, }, // Oneof fields should merge by assignment. { src: &pb.Communique{ Union: &pb.Communique_Number{41}, }, dst: &pb.Communique{ Union: &pb.Communique_Name{"Bobby Tables"}, }, want: &pb.Communique{ Union: &pb.Communique_Number{41}, }, }, // Oneof nil is the same as not set. { src: &pb.Communique{}, dst: &pb.Communique{ Union: &pb.Communique_Name{"Bobby Tables"}, }, want: &pb.Communique{ Union: &pb.Communique_Name{"Bobby Tables"}, }, }, { src: &proto3pb.Message{ Terrain: map[string]*proto3pb.Nested{ "kay_a": &proto3pb.Nested{Cute: true}, // replace "kay_b": &proto3pb.Nested{Bunny: "rabbit"}, // insert }, }, dst: &proto3pb.Message{ Terrain: map[string]*proto3pb.Nested{ "kay_a": &proto3pb.Nested{Bunny: "lost"}, // replaced "kay_c": &proto3pb.Nested{Bunny: "bunny"}, // keep }, }, want: &proto3pb.Message{ Terrain: map[string]*proto3pb.Nested{ "kay_a": &proto3pb.Nested{Cute: true}, "kay_b": &proto3pb.Nested{Bunny: "rabbit"}, "kay_c": &proto3pb.Nested{Bunny: "bunny"}, }, }, }, } 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) } } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/decode.go000066400000000000000000000575531317166637100236760ustar00rootroot00000000000000// 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, _ := 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 } dep-0.3.2/vendor/github.com/golang/protobuf/proto/decode_test.go000066400000000000000000000165161317166637100247270ustar00rootroot00000000000000// 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. // +build go1.7 package proto_test import ( "fmt" "testing" "github.com/golang/protobuf/proto" tpb "github.com/golang/protobuf/proto/proto3_proto" ) var ( bytesBlackhole []byte msgBlackhole = new(tpb.Message) ) // BenchmarkVarint32ArraySmall shows the performance on an array of small int32 fields (1 and // 2 bytes long). func BenchmarkVarint32ArraySmall(b *testing.B) { for i := uint(1); i <= 10; i++ { dist := genInt32Dist([7]int{0, 3, 1}, 1<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((x << 1) ^ uint64((int64(x) >> 63))) } func sizeZigzag64(x uint64) int { return sizeVarint((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 } dep-0.3.2/vendor/github.com/golang/protobuf/proto/encode_test.go000066400000000000000000000053501317166637100247330ustar00rootroot00000000000000// 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. // +build go1.7 package proto_test import ( "strconv" "testing" "github.com/golang/protobuf/proto" tpb "github.com/golang/protobuf/proto/proto3_proto" "github.com/golang/protobuf/ptypes" ) var ( blackhole []byte ) // BenchmarkAny creates increasingly large arbitrary Any messages. The type is always the // same. func BenchmarkAny(b *testing.B) { data := make([]byte, 1<<20) quantum := 1 << 10 for i := uint(0); i <= 10; i++ { b.Run(strconv.Itoa(quantum<= 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 := extendable(pb) if !ok { return nil, errors.New("proto: not an extendable proto") } 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 } // 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 { 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) { 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()] } dep-0.3.2/vendor/github.com/golang/protobuf/proto/extensions_test.go000066400000000000000000000406741317166637100257050ustar00rootroot00000000000000// 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 ( "bytes" "fmt" "reflect" "sort" "testing" "github.com/golang/protobuf/proto" pb "github.com/golang/protobuf/proto/testdata" "golang.org/x/sync/errgroup" ) 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", err) } 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 TestExtensionDescsWithMissingExtensions(t *testing.T) { msg := &pb.MyMessage{Count: proto.Int32(0)} extdesc1 := pb.E_Ext_More if descs, err := proto.ExtensionDescs(msg); len(descs) != 0 || err != nil { t.Errorf("proto.ExtensionDescs: got %d descs, error %v; want 0, nil", len(descs), err) } ext1 := &pb.Ext{} if err := proto.SetExtension(msg, extdesc1, ext1); err != nil { t.Fatalf("Could not set ext1: %s", err) } extdesc2 := &proto.ExtensionDesc{ ExtendedType: (*pb.MyMessage)(nil), ExtensionType: (*bool)(nil), Field: 123456789, Name: "a.b", Tag: "varint,123456789,opt", } ext2 := proto.Bool(false) if err := proto.SetExtension(msg, extdesc2, ext2); err != nil { t.Fatalf("Could not set ext2: %s", err) } b, err := proto.Marshal(msg) if err != nil { t.Fatalf("Could not marshal msg: %v", err) } if err := proto.Unmarshal(b, msg); err != nil { t.Fatalf("Could not unmarshal into msg: %v", err) } descs, err := proto.ExtensionDescs(msg) if err != nil { t.Fatalf("proto.ExtensionDescs: got error %v", err) } sortExtDescs(descs) wantDescs := []*proto.ExtensionDesc{extdesc1, &proto.ExtensionDesc{Field: extdesc2.Field}} if !reflect.DeepEqual(descs, wantDescs) { t.Errorf("proto.ExtensionDescs(msg) sorted extension ids: got %+v, want %+v", descs, wantDescs) } } type ExtensionDescSlice []*proto.ExtensionDesc func (s ExtensionDescSlice) Len() int { return len(s) } func (s ExtensionDescSlice) Less(i, j int) bool { return s[i].Field < s[j].Field } func (s ExtensionDescSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func sortExtDescs(s []*proto.ExtensionDesc) { sort.Sort(ExtensionDescSlice(s)) } 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 TestGetExtensionDefaults(t *testing.T) { var setFloat64 float64 = 1 var setFloat32 float32 = 2 var setInt32 int32 = 3 var setInt64 int64 = 4 var setUint32 uint32 = 5 var setUint64 uint64 = 6 var setBool = true var setBool2 = false var setString = "Goodnight string" var setBytes = []byte("Goodnight bytes") var setEnum = pb.DefaultsMessage_TWO type testcase struct { ext *proto.ExtensionDesc // Extension we are testing. want interface{} // Expected value of extension, or nil (meaning that GetExtension will fail). def interface{} // Expected value of extension after ClearExtension(). } tests := []testcase{ {pb.E_NoDefaultDouble, setFloat64, nil}, {pb.E_NoDefaultFloat, setFloat32, nil}, {pb.E_NoDefaultInt32, setInt32, nil}, {pb.E_NoDefaultInt64, setInt64, nil}, {pb.E_NoDefaultUint32, setUint32, nil}, {pb.E_NoDefaultUint64, setUint64, nil}, {pb.E_NoDefaultSint32, setInt32, nil}, {pb.E_NoDefaultSint64, setInt64, nil}, {pb.E_NoDefaultFixed32, setUint32, nil}, {pb.E_NoDefaultFixed64, setUint64, nil}, {pb.E_NoDefaultSfixed32, setInt32, nil}, {pb.E_NoDefaultSfixed64, setInt64, nil}, {pb.E_NoDefaultBool, setBool, nil}, {pb.E_NoDefaultBool, setBool2, nil}, {pb.E_NoDefaultString, setString, nil}, {pb.E_NoDefaultBytes, setBytes, nil}, {pb.E_NoDefaultEnum, setEnum, nil}, {pb.E_DefaultDouble, setFloat64, float64(3.1415)}, {pb.E_DefaultFloat, setFloat32, float32(3.14)}, {pb.E_DefaultInt32, setInt32, int32(42)}, {pb.E_DefaultInt64, setInt64, int64(43)}, {pb.E_DefaultUint32, setUint32, uint32(44)}, {pb.E_DefaultUint64, setUint64, uint64(45)}, {pb.E_DefaultSint32, setInt32, int32(46)}, {pb.E_DefaultSint64, setInt64, int64(47)}, {pb.E_DefaultFixed32, setUint32, uint32(48)}, {pb.E_DefaultFixed64, setUint64, uint64(49)}, {pb.E_DefaultSfixed32, setInt32, int32(50)}, {pb.E_DefaultSfixed64, setInt64, int64(51)}, {pb.E_DefaultBool, setBool, true}, {pb.E_DefaultBool, setBool2, true}, {pb.E_DefaultString, setString, "Hello, string"}, {pb.E_DefaultBytes, setBytes, []byte("Hello, bytes")}, {pb.E_DefaultEnum, setEnum, pb.DefaultsMessage_ONE}, } checkVal := func(test testcase, msg *pb.DefaultsMessage, valWant interface{}) error { val, err := proto.GetExtension(msg, test.ext) if err != nil { if valWant != nil { return fmt.Errorf("GetExtension(): %s", err) } if want := proto.ErrMissingExtension; err != want { return fmt.Errorf("Unexpected error: got %v, want %v", err, want) } return nil } // All proto2 extension values are either a pointer to a value or a slice of values. ty := reflect.TypeOf(val) tyWant := reflect.TypeOf(test.ext.ExtensionType) if got, want := ty, tyWant; got != want { return fmt.Errorf("unexpected reflect.TypeOf(): got %v want %v", got, want) } tye := ty.Elem() tyeWant := tyWant.Elem() if got, want := tye, tyeWant; got != want { return fmt.Errorf("unexpected reflect.TypeOf().Elem(): got %v want %v", got, want) } // Check the name of the type of the value. // If it is an enum it will be type int32 with the name of the enum. if got, want := tye.Name(), tye.Name(); got != want { return fmt.Errorf("unexpected reflect.TypeOf().Elem().Name(): got %v want %v", got, want) } // Check that value is what we expect. // If we have a pointer in val, get the value it points to. valExp := val if ty.Kind() == reflect.Ptr { valExp = reflect.ValueOf(val).Elem().Interface() } if got, want := valExp, valWant; !reflect.DeepEqual(got, want) { return fmt.Errorf("unexpected reflect.DeepEqual(): got %v want %v", got, want) } return nil } setTo := func(test testcase) interface{} { setTo := reflect.ValueOf(test.want) if typ := reflect.TypeOf(test.ext.ExtensionType); typ.Kind() == reflect.Ptr { setTo = reflect.New(typ).Elem() setTo.Set(reflect.New(setTo.Type().Elem())) setTo.Elem().Set(reflect.ValueOf(test.want)) } return setTo.Interface() } for _, test := range tests { msg := &pb.DefaultsMessage{} name := test.ext.Name // Check the initial value. if err := checkVal(test, msg, test.def); err != nil { t.Errorf("%s: %v", name, err) } // Set the per-type value and check value. name = fmt.Sprintf("%s (set to %T %v)", name, test.want, test.want) if err := proto.SetExtension(msg, test.ext, setTo(test)); err != nil { t.Errorf("%s: SetExtension(): %v", name, err) continue } if err := checkVal(test, msg, test.want); err != nil { t.Errorf("%s: %v", name, err) continue } // Set and check the value. name += " (cleared)" proto.ClearExtension(msg, test.ext) if err := checkVal(test, msg, test.def); err != nil { t.Errorf("%s: %v", name, err) } } } 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. } func TestMarshalUnmarshalRepeatedExtension(t *testing.T) { // Add a repeated extension to the result. tests := []struct { name string ext []*pb.ComplexExtension }{ { "two fields", []*pb.ComplexExtension{ {First: proto.Int32(7)}, {Second: proto.Int32(11)}, }, }, { "repeated field", []*pb.ComplexExtension{ {Third: []int32{1000}}, {Third: []int32{2000}}, }, }, { "two fields and repeated field", []*pb.ComplexExtension{ {Third: []int32{1000}}, {First: proto.Int32(9)}, {Second: proto.Int32(21)}, {Third: []int32{2000}}, }, }, } for _, test := range tests { // Marshal message with a repeated extension. msg1 := new(pb.OtherMessage) err := proto.SetExtension(msg1, pb.E_RComplex, test.ext) if err != nil { t.Fatalf("[%s] Error setting extension: %v", test.name, err) } b, err := proto.Marshal(msg1) if err != nil { t.Fatalf("[%s] Error marshaling message: %v", test.name, err) } // Unmarshal and read the merged proto. msg2 := new(pb.OtherMessage) err = proto.Unmarshal(b, msg2) if err != nil { t.Fatalf("[%s] Error unmarshaling message: %v", test.name, err) } e, err := proto.GetExtension(msg2, pb.E_RComplex) if err != nil { t.Fatalf("[%s] Error getting extension: %v", test.name, err) } ext := e.([]*pb.ComplexExtension) if ext == nil { t.Fatalf("[%s] Invalid extension", test.name) } if !reflect.DeepEqual(ext, test.ext) { t.Errorf("[%s] Wrong value for ComplexExtension: got: %v want: %v\n", test.name, ext, test.ext) } } } func TestUnmarshalRepeatingNonRepeatedExtension(t *testing.T) { // We may see multiple instances of the same extension in the wire // format. For example, the proto compiler may encode custom options in // this way. Here, we verify that we merge the extensions together. tests := []struct { name string ext []*pb.ComplexExtension }{ { "two fields", []*pb.ComplexExtension{ {First: proto.Int32(7)}, {Second: proto.Int32(11)}, }, }, { "repeated field", []*pb.ComplexExtension{ {Third: []int32{1000}}, {Third: []int32{2000}}, }, }, { "two fields and repeated field", []*pb.ComplexExtension{ {Third: []int32{1000}}, {First: proto.Int32(9)}, {Second: proto.Int32(21)}, {Third: []int32{2000}}, }, }, } for _, test := range tests { var buf bytes.Buffer var want pb.ComplexExtension // Generate a serialized representation of a repeated extension // by catenating bytes together. for i, e := range test.ext { // Merge to create the wanted proto. proto.Merge(&want, e) // serialize the message msg := new(pb.OtherMessage) err := proto.SetExtension(msg, pb.E_Complex, e) if err != nil { t.Fatalf("[%s] Error setting extension %d: %v", test.name, i, err) } b, err := proto.Marshal(msg) if err != nil { t.Fatalf("[%s] Error marshaling message %d: %v", test.name, i, err) } buf.Write(b) } // Unmarshal and read the merged proto. msg2 := new(pb.OtherMessage) err := proto.Unmarshal(buf.Bytes(), msg2) if err != nil { t.Fatalf("[%s] Error unmarshaling message: %v", test.name, err) } e, err := proto.GetExtension(msg2, pb.E_Complex) if err != nil { t.Fatalf("[%s] Error getting extension: %v", test.name, err) } ext := e.(*pb.ComplexExtension) if ext == nil { t.Fatalf("[%s] Invalid extension", test.name) } if !reflect.DeepEqual(*ext, want) { t.Errorf("[%s] Wrong value for ComplexExtension: got: %s want: %s\n", test.name, ext, want) } } } func TestClearAllExtensions(t *testing.T) { // unregistered extension desc := &proto.ExtensionDesc{ ExtendedType: (*pb.MyMessage)(nil), ExtensionType: (*bool)(nil), Field: 101010100, Name: "emptyextension", Tag: "varint,0,opt", } m := &pb.MyMessage{} if proto.HasExtension(m, desc) { t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m)) } if err := proto.SetExtension(m, desc, proto.Bool(true)); err != nil { t.Errorf("proto.SetExtension(m, desc, true): got error %q, want nil", err) } if !proto.HasExtension(m, desc) { t.Errorf("proto.HasExtension(%s): got false, want true", proto.MarshalTextString(m)) } proto.ClearAllExtensions(m) if proto.HasExtension(m, desc) { t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m)) } } func TestMarshalRace(t *testing.T) { // unregistered extension desc := &proto.ExtensionDesc{ ExtendedType: (*pb.MyMessage)(nil), ExtensionType: (*bool)(nil), Field: 101010100, Name: "emptyextension", Tag: "varint,0,opt", } m := &pb.MyMessage{Count: proto.Int32(4)} if err := proto.SetExtension(m, desc, proto.Bool(true)); err != nil { t.Errorf("proto.SetExtension(m, desc, true): got error %q, want nil", err) } var g errgroup.Group for n := 3; n > 0; n-- { g.Go(func() error { _, err := proto.Marshal(m) return err }) } if err := g.Wait(); err != nil { t.Fatal(err) } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/lib.go000066400000000000000000000571501317166637100232120ustar00rootroot00000000000000// 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. - 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/golang/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/golang/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 index := 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 = 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 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 ProtoPackageIsVersion2 = true // ProtoPackageIsVersion1 is referenced from generated protocol buffer files // to assert that that code is compatible with this version of the proto package. const ProtoPackageIsVersion1 = true dep-0.3.2/vendor/github.com/golang/protobuf/proto/map_test.go000066400000000000000000000016501317166637100242520ustar00rootroot00000000000000package proto_test import ( "fmt" "testing" "github.com/golang/protobuf/proto" ppb "github.com/golang/protobuf/proto/proto3_proto" ) func marshalled() []byte { m := &ppb.IntMaps{} for i := 0; i < 1000; i++ { m.Maps = append(m.Maps, &ppb.IntMap{ Rtt: map[int32]int32{1: 2}, }) } b, err := proto.Marshal(m) if err != nil { panic(fmt.Sprintf("Can't marshal %+v: %v", m, err)) } return b } func BenchmarkConcurrentMapUnmarshal(b *testing.B) { in := marshalled() b.RunParallel(func(pb *testing.PB) { for pb.Next() { var out ppb.IntMaps if err := proto.Unmarshal(in, &out); err != nil { b.Errorf("Can't unmarshal ppb.IntMaps: %v", err) } } }) } func BenchmarkSequentialMapUnmarshal(b *testing.B) { in := marshalled() b.ResetTimer() for i := 0; i < b.N; i++ { var out ppb.IntMaps if err := proto.Unmarshal(in, &out); err != nil { b.Errorf("Can't unmarshal ppb.IntMaps: %v", err) } } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/message_set.go000066400000000000000000000216111317166637100247340ustar00rootroot00000000000000// 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 /* * Support for message sets. */ import ( "bytes" "encoding/json" "errors" "fmt" "reflect" "sort" ) // 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") // 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 { // required int32 type_id = 2; // required string message = 3; // }; // } // 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. type _MessageSet_Item struct { TypeId *int32 `protobuf:"varint,2,req,name=type_id"` Message []byte `protobuf:"bytes,3,req,name=message"` } 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) // messageTypeIder is an interface satisfied by a protocol buffer type // that may be stored in a MessageSet. type messageTypeIder interface { MessageTypeId() int32 } func (ms *messageSet) find(pb Message) *_MessageSet_Item { mti, ok := pb.(messageTypeIder) if !ok { return nil } id := mti.MessageTypeId() for _, item := range ms.Item { if *item.TypeId == id { return item } } return nil } func (ms *messageSet) Has(pb Message) bool { if ms.find(pb) != nil { return true } return false } 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 nil // TODO: return error instead? } func (ms *messageSet) Marshal(pb Message) error { msg, err := Marshal(pb) if err != nil { return err } if item := ms.find(pb); item != nil { // reuse existing item item.Message = msg return nil } mti, ok := pb.(messageTypeIder) if !ok { return errNoMessageTypeID } mtid := mti.MessageTypeId() ms.Item = append(ms.Item, &_MessageSet_Item{ TypeId: &mtid, Message: msg, }) return nil } 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. func skipVarint(buf []byte) []byte { i := 0 for ; buf[i]&0x80 != 0; i++ { } return buf[i+1:] } // MarshalMessageSet encodes the extension map represented by m in the message set wire format. // It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. func MarshalMessageSet(exts interface{}) ([]byte, error) { 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. // See also enc_map in encode.go. ids := make([]int, 0, len(m)) for id := range m { ids = append(ids, int(id)) } sort.Ints(ids) 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. msg := skipVarint(skipVarint(e.enc)) ms.Item = append(ms.Item, &_MessageSet_Item{ TypeId: Int32(int32(id)), Message: msg, }) } return Marshal(ms) } // 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, 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 } for _, item := range ms.Item { id := *item.TypeId msg := item.Message // Restore wire type and field number varint, plus length varint. // Be careful to preserve duplicate items. b := EncodeVarint(uint64(id)<<3 | WireBytes) if ext, ok := m[id]; ok { // Existing data; rip off the tag and length varint // so we join the new data correctly. // We can assume that ext.enc is set because we are unmarshaling. o := ext.enc[len(b):] // skip wire type and field number _, n := DecodeVarint(o) // calculate length of length varint o = o[n:] // skip length varint msg = append(o, msg...) // join old data and new data } b = append(b, EncodeVarint(uint64(len(msg)))...) b = append(b, msg...) m[id] = Extension{enc: b} } return nil } // MarshalMessageSetJSON encodes the extension map represented by m in JSON format. // It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { var m map[int32]Extension switch exts := exts.(type) { case *XXX_InternalExtensions: 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('{') // Process the map in key order for deterministic output. ids := make([]int32, 0, len(m)) for id := range m { ids = append(ids, id) } sort.Sort(int32Slice(ids)) // int32Slice defined in text.go for i, id := range ids { ext := m[id] if i > 0 { b.WriteByte(',') } msd, ok := messageSetMap[id] if !ok { // Unknown type; we can't render it, so skip it. continue } fmt.Fprintf(&b, `"[%s]":`, msd.name) x := ext.value if x == nil { x = reflect.New(msd.t.Elem()).Interface() if err := Unmarshal(ext.enc, x.(Message)); err != nil { return nil, err } } d, err := json.Marshal(x) if err != nil { return nil, err } b.Write(d) } b.WriteByte('}') return b.Bytes(), nil } // UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. // It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { // Common-case fast path. if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { return nil } // This is fairly tricky, and it's not clear that it is needed. return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented") } // A global registry of types that can be used in a MessageSet. var messageSetMap = make(map[int32]messageSetDesc) type messageSetDesc struct { t reflect.Type // pointer to struct name string } // RegisterMessageSetType is called from the generated code. func RegisterMessageSetType(m Message, fieldNum int32, name string) { messageSetMap[fieldNum] = messageSetDesc{ t: reflect.TypeOf(m), name: name, } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/message_set_test.go000066400000000000000000000050601317166637100257730ustar00rootroot00000000000000// 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) var extensions XXX_InternalExtensions if err := UnmarshalMessageSet(b, &extensions); err != nil { t.Fatalf("UnmarshalMessageSet: %v", err) } ext, ok := extensions.p.extensionMap[12345] if !ok { t.Fatalf("Didn't retrieve extension 12345; map is %v", extensions.p.extensionMap) } // Skip wire type/field number and length varints. got := skipVarint(skipVarint(ext.enc)) if want := []byte("hoohah"); !bytes.Equal(got, want) { t.Errorf("Combined extension is %q, want %q", got, want) } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/pointer_reflect.go000066400000000000000000000331101317166637100256160ustar00rootroot00000000000000// 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. // +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 // be used on App Engine. package proto import ( "math" "reflect" ) // A structPointer is a pointer to a struct. type structPointer struct { v reflect.Value } // toStructPointer returns a structPointer equivalent to the given reflect value. // The reflect value must itself be a pointer to a struct. func toStructPointer(v reflect.Value) structPointer { return structPointer{v} } // IsNil reports whether p is nil. func structPointer_IsNil(p structPointer) bool { return p.v.IsNil() } // Interface returns the struct pointer as an interface value. func structPointer_Interface(p structPointer, _ reflect.Type) interface{} { return p.v.Interface() } // A field identifies a field in a struct, accessible from a structPointer. // In this implementation, a field is identified by the sequence of field indices // passed to reflect's FieldByIndex. type field []int // toField returns a field equivalent to the given reflect field. func toField(f *reflect.StructField) field { return f.Index } // invalidField is an invalid field identifier. var invalidField = field(nil) // IsValid reports whether the field identifier is valid. func (f field) IsValid() bool { return f != nil } // field returns the given field in the struct as a reflect value. func structPointer_field(p structPointer, f field) reflect.Value { // Special case: an extension map entry with a value of type T // passes a *T to the struct-handling code with a zero field, // expecting that it will be treated as equivalent to *struct{ X T }, // which has the same memory layout. We have to handle that case // specially, because reflect will panic if we call FieldByIndex on a // non-struct. if f == nil { return p.v.Elem() } return p.v.Elem().FieldByIndex(f) } // ifield returns the given field in the struct as an interface value. func structPointer_ifield(p structPointer, f field) interface{} { return structPointer_field(p, f).Addr().Interface() } // Bytes returns the address of a []byte field in the struct. func structPointer_Bytes(p structPointer, f field) *[]byte { return structPointer_ifield(p, f).(*[]byte) } // BytesSlice returns the address of a [][]byte field in the struct. func structPointer_BytesSlice(p structPointer, f field) *[][]byte { return structPointer_ifield(p, f).(*[][]byte) } // Bool returns the address of a *bool field in the struct. func structPointer_Bool(p structPointer, f field) **bool { return structPointer_ifield(p, f).(**bool) } // BoolVal returns the address of a bool field in the struct. func structPointer_BoolVal(p structPointer, f field) *bool { return structPointer_ifield(p, f).(*bool) } // BoolSlice returns the address of a []bool field in the struct. func structPointer_BoolSlice(p structPointer, f field) *[]bool { return structPointer_ifield(p, f).(*[]bool) } // String returns the address of a *string field in the struct. func structPointer_String(p structPointer, f field) **string { return structPointer_ifield(p, f).(**string) } // StringVal returns the address of a string field in the struct. func structPointer_StringVal(p structPointer, f field) *string { return structPointer_ifield(p, f).(*string) } // StringSlice returns the address of a []string field in the struct. 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) } // 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() } // SetStructPointer writes a *struct field in the struct. func structPointer_SetStructPointer(p structPointer, f field, q structPointer) { structPointer_field(p, f).Set(q.v) } // GetStructPointer reads a *struct field in the struct. func structPointer_GetStructPointer(p structPointer, f field) structPointer { return structPointer{structPointer_field(p, f)} } // StructPointerSlice the address of a []*struct field in the struct. func structPointer_StructPointerSlice(p structPointer, f field) structPointerSlice { return structPointerSlice{structPointer_field(p, f)} } // A structPointerSlice represents the address of a slice of pointers to structs // (themselves messages or groups). That is, v.Type() is *[]*struct{...}. type structPointerSlice struct { v reflect.Value } func (p structPointerSlice) Len() int { return p.v.Len() } func (p structPointerSlice) Index(i int) structPointer { return structPointer{p.v.Index(i)} } func (p structPointerSlice) Append(q structPointer) { p.v.Set(reflect.Append(p.v, q.v)) } var ( int32Type = reflect.TypeOf(int32(0)) uint32Type = reflect.TypeOf(uint32(0)) float32Type = reflect.TypeOf(float32(0)) int64Type = reflect.TypeOf(int64(0)) uint64Type = reflect.TypeOf(uint64(0)) float64Type = reflect.TypeOf(float64(0)) ) // A word32 represents a field of type *int32, *uint32, *float32, or *enum. // That is, v.Type() is *int32, *uint32, *float32, or *enum and v is assignable. type word32 struct { v reflect.Value } // IsNil reports whether p is nil. func word32_IsNil(p word32) bool { return p.v.IsNil() } // Set sets p to point at a newly allocated word with bits set to x. func word32_Set(p word32, o *Buffer, x uint32) { t := p.v.Type().Elem() switch t { case int32Type: if len(o.int32s) == 0 { o.int32s = make([]int32, uint32PoolSize) } o.int32s[0] = int32(x) p.v.Set(reflect.ValueOf(&o.int32s[0])) o.int32s = o.int32s[1:] return case uint32Type: if len(o.uint32s) == 0 { o.uint32s = make([]uint32, uint32PoolSize) } o.uint32s[0] = x p.v.Set(reflect.ValueOf(&o.uint32s[0])) o.uint32s = o.uint32s[1:] return case float32Type: if len(o.float32s) == 0 { o.float32s = make([]float32, uint32PoolSize) } o.float32s[0] = math.Float32frombits(x) p.v.Set(reflect.ValueOf(&o.float32s[0])) o.float32s = o.float32s[1:] return } // must be enum p.v.Set(reflect.New(t)) p.v.Elem().SetInt(int64(int32(x))) } // Get gets the bits pointed at by p, as a uint32. func word32_Get(p word32) uint32 { elem := p.v.Elem() switch elem.Kind() { case reflect.Int32: return uint32(elem.Int()) case reflect.Uint32: return uint32(elem.Uint()) case reflect.Float32: return math.Float32bits(float32(elem.Float())) } panic("unreachable") } // Word32 returns a reference to a *int32, *uint32, *float32, or *enum field in the struct. func structPointer_Word32(p structPointer, f field) word32 { return word32{structPointer_field(p, f)} } // A word32Val represents a field of type int32, uint32, float32, or enum. // That is, v.Type() is int32, uint32, float32, or enum and v is assignable. type word32Val struct { v reflect.Value } // Set sets *p to x. func word32Val_Set(p word32Val, x uint32) { switch p.v.Type() { case int32Type: p.v.SetInt(int64(x)) return case uint32Type: p.v.SetUint(uint64(x)) return case float32Type: p.v.SetFloat(float64(math.Float32frombits(x))) return } // must be enum p.v.SetInt(int64(int32(x))) } // Get gets the bits pointed at by p, as a uint32. func word32Val_Get(p word32Val) uint32 { elem := p.v switch elem.Kind() { case reflect.Int32: return uint32(elem.Int()) case reflect.Uint32: return uint32(elem.Uint()) case reflect.Float32: return math.Float32bits(float32(elem.Float())) } panic("unreachable") } // Word32Val returns a reference to a int32, uint32, float32, or enum field in the struct. func structPointer_Word32Val(p structPointer, f field) word32Val { return word32Val{structPointer_field(p, f)} } // A word32Slice is a slice of 32-bit values. // That is, v.Type() is []int32, []uint32, []float32, or []enum. type word32Slice struct { v reflect.Value } func (p word32Slice) Append(x uint32) { n, m := p.v.Len(), p.v.Cap() if n < m { p.v.SetLen(n + 1) } else { t := p.v.Type().Elem() p.v.Set(reflect.Append(p.v, reflect.Zero(t))) } elem := p.v.Index(n) switch elem.Kind() { case reflect.Int32: elem.SetInt(int64(int32(x))) case reflect.Uint32: elem.SetUint(uint64(x)) case reflect.Float32: elem.SetFloat(float64(math.Float32frombits(x))) } } func (p word32Slice) Len() int { return p.v.Len() } func (p word32Slice) Index(i int) uint32 { elem := p.v.Index(i) switch elem.Kind() { case reflect.Int32: return uint32(elem.Int()) case reflect.Uint32: return uint32(elem.Uint()) case reflect.Float32: return math.Float32bits(float32(elem.Float())) } panic("unreachable") } // Word32Slice returns a reference to a []int32, []uint32, []float32, or []enum field in the struct. func structPointer_Word32Slice(p structPointer, f field) word32Slice { return word32Slice{structPointer_field(p, f)} } // word64 is like word32 but for 64-bit values. type word64 struct { v reflect.Value } func word64_Set(p word64, o *Buffer, x uint64) { t := p.v.Type().Elem() switch t { case int64Type: if len(o.int64s) == 0 { o.int64s = make([]int64, uint64PoolSize) } o.int64s[0] = int64(x) p.v.Set(reflect.ValueOf(&o.int64s[0])) o.int64s = o.int64s[1:] return case uint64Type: if len(o.uint64s) == 0 { o.uint64s = make([]uint64, uint64PoolSize) } o.uint64s[0] = x p.v.Set(reflect.ValueOf(&o.uint64s[0])) o.uint64s = o.uint64s[1:] return case float64Type: if len(o.float64s) == 0 { o.float64s = make([]float64, uint64PoolSize) } o.float64s[0] = math.Float64frombits(x) p.v.Set(reflect.ValueOf(&o.float64s[0])) o.float64s = o.float64s[1:] return } panic("unreachable") } func word64_IsNil(p word64) bool { return p.v.IsNil() } func word64_Get(p word64) uint64 { elem := p.v.Elem() switch elem.Kind() { case reflect.Int64: return uint64(elem.Int()) case reflect.Uint64: return elem.Uint() case reflect.Float64: return math.Float64bits(elem.Float()) } panic("unreachable") } func structPointer_Word64(p structPointer, f field) word64 { return word64{structPointer_field(p, f)} } // word64Val is like word32Val but for 64-bit values. type word64Val struct { v reflect.Value } func word64Val_Set(p word64Val, o *Buffer, x uint64) { switch p.v.Type() { case int64Type: p.v.SetInt(int64(x)) return case uint64Type: p.v.SetUint(x) return case float64Type: p.v.SetFloat(math.Float64frombits(x)) return } panic("unreachable") } func word64Val_Get(p word64Val) uint64 { elem := p.v switch elem.Kind() { case reflect.Int64: return uint64(elem.Int()) case reflect.Uint64: return elem.Uint() case reflect.Float64: return math.Float64bits(elem.Float()) } panic("unreachable") } func structPointer_Word64Val(p structPointer, f field) word64Val { return word64Val{structPointer_field(p, f)} } type word64Slice struct { v reflect.Value } func (p word64Slice) Append(x uint64) { n, m := p.v.Len(), p.v.Cap() if n < m { p.v.SetLen(n + 1) } else { t := p.v.Type().Elem() p.v.Set(reflect.Append(p.v, reflect.Zero(t))) } elem := p.v.Index(n) switch elem.Kind() { case reflect.Int64: elem.SetInt(int64(int64(x))) case reflect.Uint64: elem.SetUint(uint64(x)) case reflect.Float64: elem.SetFloat(float64(math.Float64frombits(x))) } } func (p word64Slice) Len() int { return p.v.Len() } func (p word64Slice) Index(i int) uint64 { elem := p.v.Index(i) switch elem.Kind() { case reflect.Int64: return uint64(elem.Int()) case reflect.Uint64: return uint64(elem.Uint()) case reflect.Float64: return math.Float64bits(float64(elem.Float())) } panic("unreachable") } func structPointer_Word64Slice(p structPointer, f field) word64Slice { return word64Slice{structPointer_field(p, f)} } dep-0.3.2/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go000066400000000000000000000224251317166637100254620ustar00rootroot00000000000000// 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. // +build !appengine,!js // This file contains the implementation of the proto field accesses using package unsafe. package proto import ( "reflect" "unsafe" ) // NOTE: These type_Foo functions would more idiomatically be methods, // but Go does not allow methods on pointer types, and we must preserve // some pointer type for the garbage collector. We use these // funcs with clunky names as our poor approximation to methods. // // An alternative would be // type structPointer struct { p unsafe.Pointer } // but that does not registerize as well. // A structPointer is a pointer to a struct. type structPointer unsafe.Pointer // toStructPointer returns a structPointer equivalent to the given reflect value. func toStructPointer(v reflect.Value) structPointer { return structPointer(unsafe.Pointer(v.Pointer())) } // IsNil reports whether p is nil. func structPointer_IsNil(p structPointer) bool { return p == nil } // Interface returns the struct pointer, assumed to have element type t, // as an interface value. func structPointer_Interface(p structPointer, t reflect.Type) interface{} { return reflect.NewAt(t, unsafe.Pointer(p)).Interface() } // A field identifies a field in a struct, accessible from a structPointer. // In this implementation, a field is identified by its byte offset from the start of the struct. type field uintptr // toField returns a field equivalent to the given reflect field. func toField(f *reflect.StructField) field { return field(f.Offset) } // invalidField is an invalid field identifier. const invalidField = ^field(0) // IsValid reports whether the field identifier is valid. func (f field) IsValid() bool { return f != ^field(0) } // Bytes returns the address of a []byte field in the struct. func structPointer_Bytes(p structPointer, f field) *[]byte { return (*[]byte)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // BytesSlice returns the address of a [][]byte field in the struct. func structPointer_BytesSlice(p structPointer, f field) *[][]byte { return (*[][]byte)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // Bool returns the address of a *bool field in the struct. func structPointer_Bool(p structPointer, f field) **bool { return (**bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // BoolVal returns the address of a bool field in the struct. func structPointer_BoolVal(p structPointer, f field) *bool { return (*bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // BoolSlice returns the address of a []bool field in the struct. func structPointer_BoolSlice(p structPointer, f field) *[]bool { return (*[]bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // String returns the address of a *string field in the struct. func structPointer_String(p structPointer, f field) **string { return (**string)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // StringVal returns the address of a string field in the struct. func structPointer_StringVal(p structPointer, f field) *string { return (*string)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // StringSlice returns the address of a []string field in the struct. func structPointer_StringSlice(p structPointer, f field) *[]string { return (*[]string)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // 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))) } // 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))) } // SetStructPointer writes a *struct field in the struct. func structPointer_SetStructPointer(p structPointer, f field, q structPointer) { *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) = q } // GetStructPointer reads a *struct field in the struct. func structPointer_GetStructPointer(p structPointer, f field) structPointer { return *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // StructPointerSlice the address of a []*struct field in the struct. func structPointer_StructPointerSlice(p structPointer, f field) *structPointerSlice { return (*structPointerSlice)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // A structPointerSlice represents a slice of pointers to structs (themselves submessages or groups). type structPointerSlice []structPointer func (v *structPointerSlice) Len() int { return len(*v) } func (v *structPointerSlice) Index(i int) structPointer { return (*v)[i] } func (v *structPointerSlice) Append(p structPointer) { *v = append(*v, p) } // A word32 is the address of a "pointer to 32-bit value" field. type word32 **uint32 // IsNil reports whether *v is nil. func word32_IsNil(p word32) bool { return *p == nil } // Set sets *v to point at a newly allocated word set to x. func word32_Set(p word32, o *Buffer, x uint32) { if len(o.uint32s) == 0 { o.uint32s = make([]uint32, uint32PoolSize) } o.uint32s[0] = x *p = &o.uint32s[0] o.uint32s = o.uint32s[1:] } // Get gets the value pointed at by *v. func word32_Get(p word32) uint32 { return **p } // Word32 returns the address of a *int32, *uint32, *float32, or *enum field in the struct. func structPointer_Word32(p structPointer, f field) word32 { return word32((**uint32)(unsafe.Pointer(uintptr(p) + uintptr(f)))) } // A word32Val is the address of a 32-bit value field. type word32Val *uint32 // Set sets *p to x. func word32Val_Set(p word32Val, x uint32) { *p = x } // Get gets the value pointed at by p. func word32Val_Get(p word32Val) uint32 { return *p } // Word32Val returns the address of a *int32, *uint32, *float32, or *enum field in the struct. func structPointer_Word32Val(p structPointer, f field) word32Val { return word32Val((*uint32)(unsafe.Pointer(uintptr(p) + uintptr(f)))) } // A word32Slice is a slice of 32-bit values. type word32Slice []uint32 func (v *word32Slice) Append(x uint32) { *v = append(*v, x) } func (v *word32Slice) Len() int { return len(*v) } func (v *word32Slice) Index(i int) uint32 { return (*v)[i] } // Word32Slice returns the address of a []int32, []uint32, []float32, or []enum field in the struct. func structPointer_Word32Slice(p structPointer, f field) *word32Slice { return (*word32Slice)(unsafe.Pointer(uintptr(p) + uintptr(f))) } // word64 is like word32 but for 64-bit values. type word64 **uint64 func word64_Set(p word64, o *Buffer, x uint64) { if len(o.uint64s) == 0 { o.uint64s = make([]uint64, uint64PoolSize) } o.uint64s[0] = x *p = &o.uint64s[0] o.uint64s = o.uint64s[1:] } func word64_IsNil(p word64) bool { return *p == nil } func word64_Get(p word64) uint64 { return **p } func structPointer_Word64(p structPointer, f field) word64 { return word64((**uint64)(unsafe.Pointer(uintptr(p) + uintptr(f)))) } // word64Val is like word32Val but for 64-bit values. type word64Val *uint64 func word64Val_Set(p word64Val, o *Buffer, x uint64) { *p = x } func word64Val_Get(p word64Val) uint64 { return *p } func structPointer_Word64Val(p structPointer, f field) word64Val { return word64Val((*uint64)(unsafe.Pointer(uintptr(p) + uintptr(f)))) } // word64Slice is like word32Slice but for 64-bit values. type word64Slice []uint64 func (v *word64Slice) Append(x uint64) { *v = append(*v, x) } func (v *word64Slice) Len() int { return len(*v) } func (v *word64Slice) Index(i int) uint64 { return (*v)[i] } func structPointer_Word64Slice(p structPointer, f field) *word64Slice { return (*word64Slice)(unsafe.Pointer(uintptr(p) + uintptr(f))) } dep-0.3.2/vendor/github.com/golang/protobuf/proto/properties.go000066400000000000000000000623311317166637100246350ustar00rootroot00000000000000// 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 ( "fmt" "log" "os" "reflect" "sort" "strconv" "strings" "sync" ) const debug bool = false // Constants that identify the encoding of a value on the wire. const ( WireVarint = 0 WireFixed64 = 1 WireBytes = 2 WireStartGroup = 3 WireEndGroup = 4 WireFixed32 = 5 ) const startSize = 10 // initial slice/string sizes // Encoders are defined in encode.go // An encoder outputs the full representation of a field, including its // tag and encoder type. type encoder func(p *Buffer, prop *Properties, base structPointer) error // A valueEncoder encodes a single integer in a particular encoding. type valueEncoder func(o *Buffer, x uint64) error // Sizers are defined in encode.go // A sizer returns the encoded size of a field, including its tag and encoder // type. type sizer func(prop *Properties, base structPointer) int // A valueSizer returns the encoded size of a single integer in a particular // encoding. type valueSizer func(x uint64) int // Decoders are defined in decode.go // A decoder creates a value from its wire representation. // Unrecognized subelements are saved in unrec. 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. type tagMap struct { fastTags []int slowTags map[int]int } // tagMapFastLimit is the upper bound on the tag number that will be stored in // the tagMap slice rather than its map. const tagMapFastLimit = 1024 func (p *tagMap) get(t int) (int, bool) { if t > 0 && t < tagMapFastLimit { if t >= len(p.fastTags) { return 0, false } fi := p.fastTags[t] return fi, fi >= 0 } fi, ok := p.slowTags[t] return fi, ok } func (p *tagMap) put(t int, fi int) { if t > 0 && t < tagMapFastLimit { for len(p.fastTags) < t+1 { p.fastTags = append(p.fastTags, -1) } p.fastTags[t] = fi return } if p.slowTags == nil { p.slowTags = make(map[int]int) } p.slowTags[t] = fi } // StructProperties represents properties for all the fields of a struct. // decoderTags and decoderOrigNames should only be used by the decoder. type StructProperties struct { Prop []*Properties // properties for each field reqCount int // required count decoderTags tagMap // map from proto tag to struct field number decoderOrigNames map[string]int // map from original name to struct field number 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. // See encode.go, (*Buffer).enc_struct. func (sp *StructProperties) Len() int { return len(sp.order) } func (sp *StructProperties) Less(i, j int) bool { return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag } func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] } // Properties represents the protocol-specific behavior of a single struct field. 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 Required bool Optional bool Repeated bool 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 def_uint64 uint64 enc encoder valEnc valueEncoder // set for bool and numeric types only field field tagcode []byte // encoding of EncodeVarint((Tag<<3)|WireType) tagbuf [8]byte stype reflect.Type // set for struct types only sprop *StructProperties // set for struct types only isMarshaler bool isUnmarshaler bool mtype reflect.Type // set for map types only mkeyprop *Properties // set for map types only mvalprop *Properties // set for map types only size sizer valSize valueSizer // set for bool and numeric types only dec decoder valDec valueDecoder // set for bool and numeric types only // If this is a packable field, this will be the decoder for the packed version of the field. packedDec decoder } // String formats the properties in the protobuf struct field tag style. func (p *Properties) String() string { s := p.Wire s = "," s += strconv.Itoa(p.Tag) if p.Required { s += ",req" } if p.Optional { s += ",opt" } if p.Repeated { s += ",rep" } if p.Packed { s += ",packed" } 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 } if p.HasDefault { s += ",def=" + p.Default } return s } // Parse populates p by parsing a string in the protobuf struct field tag style. func (p *Properties) Parse(s string) { // "bytes,49,opt,name=foo,def=hello!" fields := strings.Split(s, ",") // breaks def=, but handled below. if len(fields) < 2 { fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s) return } p.Wire = fields[0] switch p.Wire { case "varint": p.WireType = WireVarint p.valEnc = (*Buffer).EncodeVarint p.valDec = (*Buffer).DecodeVarint p.valSize = sizeVarint case "fixed32": p.WireType = WireFixed32 p.valEnc = (*Buffer).EncodeFixed32 p.valDec = (*Buffer).DecodeFixed32 p.valSize = sizeFixed32 case "fixed64": p.WireType = WireFixed64 p.valEnc = (*Buffer).EncodeFixed64 p.valDec = (*Buffer).DecodeFixed64 p.valSize = sizeFixed64 case "zigzag32": p.WireType = WireVarint p.valEnc = (*Buffer).EncodeZigzag32 p.valDec = (*Buffer).DecodeZigzag32 p.valSize = sizeZigzag32 case "zigzag64": p.WireType = WireVarint p.valEnc = (*Buffer).EncodeZigzag64 p.valDec = (*Buffer).DecodeZigzag64 p.valSize = sizeZigzag64 case "bytes", "group": p.WireType = WireBytes // no numeric converter for non-numeric types default: fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s) return } var err error p.Tag, err = strconv.Atoi(fields[1]) if err != nil { return } for i := 2; i < len(fields); i++ { f := fields[i] switch { case f == "req": p.Required = true case f == "opt": p.Optional = true case f == "rep": p.Repeated = true case f == "packed": 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 if i+1 < len(fields) { // Commas aren't escaped, and def is always last. p.Default += "," + strings.Join(fields[i+1:], ",") break } } } } func logNoSliceEnc(t1, t2 reflect.Type) { fmt.Fprintf(os.Stderr, "proto: no slice oenc for %T = []%T\n", t1, t2) } var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() // Initialize the fields for encoding and decoding. func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { p.enc = nil p.dec = nil p.size = nil switch t1 := typ; t1.Kind() { default: fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1) // proto3 scalar types case reflect.Bool: p.enc = (*Buffer).enc_proto3_bool p.dec = (*Buffer).dec_proto3_bool p.size = size_proto3_bool case reflect.Int32: p.enc = (*Buffer).enc_proto3_int32 p.dec = (*Buffer).dec_proto3_int32 p.size = size_proto3_int32 case reflect.Uint32: p.enc = (*Buffer).enc_proto3_uint32 p.dec = (*Buffer).dec_proto3_int32 // can reuse p.size = size_proto3_uint32 case reflect.Int64, reflect.Uint64: p.enc = (*Buffer).enc_proto3_int64 p.dec = (*Buffer).dec_proto3_int64 p.size = size_proto3_int64 case reflect.Float32: p.enc = (*Buffer).enc_proto3_uint32 // can just treat them as bits p.dec = (*Buffer).dec_proto3_int32 p.size = size_proto3_uint32 case reflect.Float64: p.enc = (*Buffer).enc_proto3_int64 // can just treat them as bits p.dec = (*Buffer).dec_proto3_int64 p.size = size_proto3_int64 case reflect.String: p.enc = (*Buffer).enc_proto3_string p.dec = (*Buffer).dec_proto3_string p.size = size_proto3_string case reflect.Ptr: switch t2 := t1.Elem(); t2.Kind() { default: fmt.Fprintf(os.Stderr, "proto: no encoder function for %v -> %v\n", t1, t2) break case reflect.Bool: p.enc = (*Buffer).enc_bool p.dec = (*Buffer).dec_bool p.size = size_bool case reflect.Int32: p.enc = (*Buffer).enc_int32 p.dec = (*Buffer).dec_int32 p.size = size_int32 case reflect.Uint32: p.enc = (*Buffer).enc_uint32 p.dec = (*Buffer).dec_int32 // can reuse p.size = size_uint32 case reflect.Int64, reflect.Uint64: p.enc = (*Buffer).enc_int64 p.dec = (*Buffer).dec_int64 p.size = size_int64 case reflect.Float32: p.enc = (*Buffer).enc_uint32 // can just treat them as bits p.dec = (*Buffer).dec_int32 p.size = size_uint32 case reflect.Float64: p.enc = (*Buffer).enc_int64 // can just treat them as bits p.dec = (*Buffer).dec_int64 p.size = size_int64 case reflect.String: p.enc = (*Buffer).enc_string p.dec = (*Buffer).dec_string p.size = size_string case reflect.Struct: p.stype = t1.Elem() p.isMarshaler = isMarshaler(t1) p.isUnmarshaler = isUnmarshaler(t1) if p.Wire == "bytes" { p.enc = (*Buffer).enc_struct_message p.dec = (*Buffer).dec_struct_message p.size = size_struct_message } else { p.enc = (*Buffer).enc_struct_group p.dec = (*Buffer).dec_struct_group p.size = size_struct_group } } case reflect.Slice: switch t2 := t1.Elem(); t2.Kind() { default: logNoSliceEnc(t1, t2) break case reflect.Bool: if p.Packed { p.enc = (*Buffer).enc_slice_packed_bool p.size = size_slice_packed_bool } else { p.enc = (*Buffer).enc_slice_bool p.size = size_slice_bool } p.dec = (*Buffer).dec_slice_bool p.packedDec = (*Buffer).dec_slice_packed_bool case reflect.Int32: if p.Packed { p.enc = (*Buffer).enc_slice_packed_int32 p.size = size_slice_packed_int32 } else { p.enc = (*Buffer).enc_slice_int32 p.size = size_slice_int32 } p.dec = (*Buffer).dec_slice_int32 p.packedDec = (*Buffer).dec_slice_packed_int32 case reflect.Uint32: if p.Packed { p.enc = (*Buffer).enc_slice_packed_uint32 p.size = size_slice_packed_uint32 } else { p.enc = (*Buffer).enc_slice_uint32 p.size = size_slice_uint32 } p.dec = (*Buffer).dec_slice_int32 p.packedDec = (*Buffer).dec_slice_packed_int32 case reflect.Int64, reflect.Uint64: if p.Packed { p.enc = (*Buffer).enc_slice_packed_int64 p.size = size_slice_packed_int64 } else { p.enc = (*Buffer).enc_slice_int64 p.size = size_slice_int64 } p.dec = (*Buffer).dec_slice_int64 p.packedDec = (*Buffer).dec_slice_packed_int64 case reflect.Uint8: p.dec = (*Buffer).dec_slice_byte 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() { case 32: // can just treat them as bits if p.Packed { p.enc = (*Buffer).enc_slice_packed_uint32 p.size = size_slice_packed_uint32 } else { p.enc = (*Buffer).enc_slice_uint32 p.size = size_slice_uint32 } p.dec = (*Buffer).dec_slice_int32 p.packedDec = (*Buffer).dec_slice_packed_int32 case 64: // can just treat them as bits if p.Packed { p.enc = (*Buffer).enc_slice_packed_int64 p.size = size_slice_packed_int64 } else { p.enc = (*Buffer).enc_slice_int64 p.size = size_slice_int64 } p.dec = (*Buffer).dec_slice_int64 p.packedDec = (*Buffer).dec_slice_packed_int64 default: logNoSliceEnc(t1, t2) break } case reflect.String: p.enc = (*Buffer).enc_slice_string p.dec = (*Buffer).dec_slice_string p.size = size_slice_string case reflect.Ptr: switch t3 := t2.Elem(); t3.Kind() { default: fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T -> %T\n", t1, t2, t3) break case reflect.Struct: p.stype = t2.Elem() p.isMarshaler = isMarshaler(t2) p.isUnmarshaler = isUnmarshaler(t2) if p.Wire == "bytes" { p.enc = (*Buffer).enc_slice_struct_message p.dec = (*Buffer).dec_slice_struct_message p.size = size_slice_struct_message } else { p.enc = (*Buffer).enc_slice_struct_group p.dec = (*Buffer).dec_slice_struct_group p.size = size_slice_struct_group } } case reflect.Slice: switch t2.Elem().Kind() { default: fmt.Fprintf(os.Stderr, "proto: no slice elem oenc for %T -> %T -> %T\n", t1, t2, t2.Elem()) break case reflect.Uint8: p.enc = (*Buffer).enc_slice_slice_byte p.dec = (*Buffer).dec_slice_slice_byte p.size = size_slice_slice_byte } } case reflect.Map: p.enc = (*Buffer).enc_new_map p.dec = (*Buffer).dec_new_map p.size = size_new_map p.mtype = t1 p.mkeyprop = &Properties{} p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) p.mvalprop = &Properties{} vtype := p.mtype.Elem() if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice { // The value type is not a message (*T) or bytes ([]byte), // so we need encoders for the pointer to this type. vtype = reflect.PtrTo(vtype) } p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) } // precalculate tag code wire := p.WireType if p.Packed { wire = WireBytes } x := uint32(p.Tag)<<3 | uint32(wire) i := 0 for i = 0; x > 127; i++ { p.tagbuf[i] = 0x80 | uint8(x&0x7F) x >>= 7 } p.tagbuf[i] = uint8(x) p.tagcode = p.tagbuf[0 : i+1] if p.stype != nil { if lockGetProp { p.sprop = GetProperties(p.stype) } else { p.sprop = getPropertiesLocked(p.stype) } } } var ( marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem() ) // isMarshaler reports whether type t implements Marshaler. func isMarshaler(t reflect.Type) bool { // We're checking for (likely) pointer-receiver methods // so if t is not a pointer, something is very wrong. // The calls above only invoke isMarshaler on pointer types. if t.Kind() != reflect.Ptr { panic("proto: misuse of isMarshaler") } return t.Implements(marshalerType) } // isUnmarshaler reports whether type t implements Unmarshaler. func isUnmarshaler(t reflect.Type) bool { // We're checking for (likely) pointer-receiver methods // so if t is not a pointer, something is very wrong. // The calls above only invoke isUnmarshaler on pointer types. if t.Kind() != reflect.Ptr { panic("proto: misuse of isUnmarshaler") } return t.Implements(unmarshalerType) } // Init populates the properties from a protocol buffer struct tag. func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { p.init(typ, name, tag, f, true) } func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) { // "bytes,49,opt,def=hello!" p.Name = name p.OrigName = name if f != nil { p.field = toField(f) } if tag == "" { return } p.Parse(tag) p.setEncAndDec(typ, f, lockGetProp) } var ( propertiesMu sync.RWMutex propertiesMap = make(map[reflect.Type]*StructProperties) ) // GetProperties returns the list of properties for the type represented by t. // t must represent a generated struct type of a protocol message. func GetProperties(t reflect.Type) *StructProperties { if t.Kind() != reflect.Struct { panic("proto: type must have kind struct") } // Most calls to GetProperties in a long-running program will be // retrieving details for types we have seen before. propertiesMu.RLock() sprop, ok := propertiesMap[t] propertiesMu.RUnlock() if ok { if collectStats { stats.Chit++ } return sprop } propertiesMu.Lock() sprop = getPropertiesLocked(t) propertiesMu.Unlock() return sprop } // getPropertiesLocked requires that propertiesMu is held. func getPropertiesLocked(t reflect.Type) *StructProperties { if prop, ok := propertiesMap[t]; ok { if collectStats { stats.Chit++ } return prop } if collectStats { stats.Cmiss++ } prop := new(StructProperties) // in case of recursive protos, fill this in now. propertiesMap[t] = prop // build properties prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) || reflect.PtrTo(t).Implements(extendableProtoV1Type) prop.unrecField = invalidField prop.Prop = make([]*Properties, t.NumField()) prop.order = make([]int, t.NumField()) 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_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 p.enc = (*Buffer).enc_map p.dec = nil // not needed p.size = size_map } else if f.Name == "XXX_unrecognized" { // special case prop.unrecField = toField(&f) } oneof := f.Tag.Get("protobuf_oneof") // special case if oneof != "" { // Oneof fields don't use the traditional protobuf tag. p.OrigName = oneof } prop.Prop[i] = p prop.order[i] = i if debug { print(i, " ", f.Name, " ", t.String(), " ") if p.Tag > 0 { print(p.String()) } print("\n") } if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" { fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]") } } // 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); 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 prop.decoderOrigNames = make(map[string]int) for i, p := range prop.Prop { if strings.HasPrefix(p.Name, "XXX_") { // Internal fields should not appear in tags/origNames maps. // They are handled specially when encoding and decoding. continue } if p.Required { reqCount++ } prop.decoderTags.put(p.Tag, i) prop.decoderOrigNames[p.OrigName] = i } prop.reqCount = reqCount return prop } // Return the Properties object for the x[0]'th field of the structure. func propByIndex(t reflect.Type, x []int) *Properties { if len(x) != 1 { fmt.Fprintf(os.Stderr, "proto: field index dimension %d (not 1) for type %s\n", len(x), t) return nil } prop := GetProperties(t) return prop.Prop[x[0]] } // Get the address and type of a pointer to a struct from an interface. func getbase(pb Message) (t reflect.Type, b structPointer, err error) { if pb == nil { err = ErrNil return } // get the reflect type of the pointer to the struct. t = reflect.TypeOf(pb) // get the address of the struct. value := reflect.ValueOf(pb) b = toStructPointer(value) return } // A global registry of enum types. // The generated code will register the generated maps by calling RegisterEnum. var enumValueMaps = make(map[string]map[string]int32) // RegisterEnum is called from the generated code to install the enum descriptor // maps into the global table to aid parsing text format protocol buffers. func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) { if _, ok := enumValueMaps[typeName]; ok { panic("proto: duplicate enum registered: " + typeName) } enumValueMaps[typeName] = valueMap } // 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] } dep-0.3.2/vendor/github.com/golang/protobuf/proto/proto3_test.go000066400000000000000000000104021317166637100247160ustar00rootroot00000000000000// 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/golang/protobuf/proto" pb "github.com/golang/protobuf/proto/proto3_proto" tpb "github.com/golang/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 TestGettersForBasicTypesExist(t *testing.T) { var m pb.Message if got := m.GetNested().GetBunny(); got != "" { t.Errorf("m.GetNested().GetBunny() = %q, want empty string", got) } if got := m.GetNested().GetCute(); got { t.Errorf("m.GetNested().GetCute() = %t, want false", got) } } 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": &tpb.SubDefaults{N: proto.Int64(7)}, }, } if !proto.Equal(got, want) { t.Errorf("with in = %v\nproto.SetDefaults(in) =>\ngot %v\nwant %v", in, got, want) } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/size2_test.go000066400000000000000000000044361317166637100245360ustar00rootroot00000000000000// 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) } } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/size_test.go000066400000000000000000000175221317166637100244540ustar00rootroot00000000000000// 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/golang/protobuf/proto" proto3pb "github.com/golang/protobuf/proto/proto3_proto" pb "github.com/golang/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: []byte{}}}}, {"map field", &pb.MessageWithMap{NameMapping: map[int32]string{1: "Rob", 7: "Andrew"}}}, {"map field with message", &pb.MessageWithMap{MsgMapping: map[int64]*pb.FloatingPoint{0x7001: &pb.FloatingPoint{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: []byte{}}}}, {"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"}}}, {"oneof not set", &pb.Oneof{}}, {"oneof bool", &pb.Oneof{Union: &pb.Oneof_F_Bool{true}}}, {"oneof zero int32", &pb.Oneof{Union: &pb.Oneof_F_Int32{0}}}, {"oneof big int32", &pb.Oneof{Union: &pb.Oneof_F_Int32{1 << 20}}}, {"oneof int64", &pb.Oneof{Union: &pb.Oneof_F_Int64{42}}}, {"oneof fixed32", &pb.Oneof{Union: &pb.Oneof_F_Fixed32{43}}}, {"oneof fixed64", &pb.Oneof{Union: &pb.Oneof_F_Fixed64{44}}}, {"oneof uint32", &pb.Oneof{Union: &pb.Oneof_F_Uint32{45}}}, {"oneof uint64", &pb.Oneof{Union: &pb.Oneof_F_Uint64{46}}}, {"oneof float", &pb.Oneof{Union: &pb.Oneof_F_Float{47.1}}}, {"oneof double", &pb.Oneof{Union: &pb.Oneof_F_Double{48.9}}}, {"oneof string", &pb.Oneof{Union: &pb.Oneof_F_String{"Rhythmic Fman"}}}, {"oneof bytes", &pb.Oneof{Union: &pb.Oneof_F_Bytes{[]byte("let go")}}}, {"oneof sint32", &pb.Oneof{Union: &pb.Oneof_F_Sint32{50}}}, {"oneof sint64", &pb.Oneof{Union: &pb.Oneof_F_Sint64{51}}}, {"oneof enum", &pb.Oneof{Union: &pb.Oneof_F_Enum{pb.MyMessage_BLUE}}}, {"message for oneof", &pb.GoTestField{Label: String("k"), Type: String("v")}}, {"oneof message", &pb.Oneof{Union: &pb.Oneof_F_Message{&pb.GoTestField{Label: String("k"), Type: String("v")}}}}, {"oneof group", &pb.Oneof{Union: &pb.Oneof_FGroup{&pb.Oneof_F_Group{X: Int32(52)}}}}, {"oneof largest tag", &pb.Oneof{Union: &pb.Oneof_F_Largest_Tag{1}}}, {"multiple oneofs", &pb.Oneof{Union: &pb.Oneof_F_Int32{1}, Tormato: &pb.Oneof_Value{2}}}, } 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) } } } dep-0.3.2/vendor/github.com/golang/protobuf/proto/text.go000066400000000000000000000513141317166637100234240ustar00rootroot00000000000000// 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" ) 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 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 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 } // Enums have a String method, so writeAny will work fine. 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.Addr() if _, ok := extendable(pv.Interface()); ok { 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) // 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 { _, 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 (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { emap := extensionMaps[pv.Type().Elem()] ep, _ := extendable(pv.Interface()) // Order the extensions by ID. // This isn't strictly necessary, but it will give us // canonical output, which will also make testing easier. m, mu := ep.extensionsRead() if m == nil { return nil } 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(ep, 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) } dep-0.3.2/vendor/github.com/golang/protobuf/proto/text_parser.go000066400000000000000000000536351317166637100250100ustar00rootroot00000000000000// 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" ) // 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") } 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 } tok := p.next() if tok.err != nil { return tok.err } if tok.value == "]" { break } if tok.value != "," { return p.errorf("Expected ']' or ',' found %q", tok.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(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 } dep-0.3.2/vendor/github.com/golang/protobuf/proto/text_parser_test.go000066400000000000000000000371361317166637100260450ustar00rootroot00000000000000// 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/golang/protobuf/proto" proto3pb "github.com/golang/protobuf/proto/proto3_proto" . "github.com/golang/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 with double quotes { in: `count:42 name: "My name is "` + "\n" + `"elsewhere"`, out: &MyMessage{ Count: Int32(42), Name: String("My name is elsewhere"), }, }, // Quoted string concatenation with single quotes { in: "count:42 name: 'My name is '\n'elsewhere'", out: &MyMessage{ Count: Int32(42), Name: String("My name is elsewhere"), }, }, // Quoted string concatenations with mixed quotes { in: "count:42 name: 'My name is '\n\"elsewhere\"", out: &MyMessage{ Count: Int32(42), Name: String("My name is elsewhere"), }, }, { 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": \0 requires 2 following digits`, }, // 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 field with list notation { in: `count:42 pet: ["horsey", "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"), }, }, // Missing required field in a required submessage { in: `count: 42 we_must_go_deeper < leo_finally_won_an_oscar <> >`, err: `proto: required field "testdata.InnerMessage.host" not set`, out: &MyMessage{ Count: Int32(42), WeMustGoDeeper: &RequiredInnerMessage{LeoFinallyWonAnOscar: &InnerMessage{}}, }, }, // 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"), }, }, // Boolean false { in: `count:42 inner { host: "example.com" connected: false }`, out: &MyMessage{ Count: Int32(42), Inner: &InnerMessage{ Host: String("example.com"), Connected: Bool(false), }, }, }, // Boolean true { in: `count:42 inner { host: "example.com" connected: true }`, out: &MyMessage{ Count: Int32(42), Inner: &InnerMessage{ Host: String("example.com"), Connected: Bool(true), }, }, }, // Boolean 0 { in: `count:42 inner { host: "example.com" connected: 0 }`, out: &MyMessage{ Count: Int32(42), Inner: &InnerMessage{ Host: String("example.com"), Connected: Bool(false), }, }, }, // Boolean 1 { in: `count:42 inner { host: "example.com" connected: 1 }`, out: &MyMessage{ Count: Int32(42), Inner: &InnerMessage{ Host: String("example.com"), Connected: Bool(true), }, }, }, // Boolean f { in: `count:42 inner { host: "example.com" connected: f }`, out: &MyMessage{ Count: Int32(42), Inner: &InnerMessage{ Host: String("example.com"), Connected: Bool(false), }, }, }, // Boolean t { in: `count:42 inner { host: "example.com" connected: t }`, out: &MyMessage{ Count: Int32(42), Inner: &InnerMessage{ Host: String("example.com"), Connected: Bool(true), }, }, }, // Boolean False { in: `count:42 inner { host: "example.com" connected: False }`, out: &MyMessage{ Count: Int32(42), Inner: &InnerMessage{ Host: String("example.com"), Connected: Bool(false), }, }, }, // Boolean True { in: `count:42 inner { host: "example.com" connected: True }`, out: &MyMessage{ Count: Int32(42), Inner: &InnerMessage{ Host: String("example.com"), Connected: Bool(true), }, }, }, // 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:,>` + // separating commas are okay `msg_mapping>` + // no colon after "value" `msg_mapping:>` + // omitted key `msg_mapping:` + // omitted value `byte_mapping:` + `byte_mapping:<>` // omitted key and value want := &MessageWithMap{ NameMapping: map[int32]string{ 1: "Beatles", 1234: "Feist", }, MsgMapping: map[int64]*FloatingPoint{ -4: {F: Float64(2.0)}, -2: {F: Float64(4.0)}, 0: {F: Float64(5.0)}, 1: nil, }, ByteMapping: map[bool][]byte{ false: nil, 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) } } func TestOneofParsing(t *testing.T) { const in = `name:"Shrek"` m := new(Communique) want := &Communique{Union: &Communique_Name{"Shrek"}} if err := UnmarshalText(in, m); err != nil { t.Fatal(err) } if !Equal(m, want) { t.Errorf("\n got %v\nwant %v", m, want) } const inOverwrite = `name:"Shrek" number:42` m = new(Communique) testErr := "line 1.13: field 'number' would overwrite already parsed oneof 'Union'" if err := UnmarshalText(inOverwrite, m); err == nil { t.Errorf("TestOneofParsing: Didn't get expected error: %v", testErr) } else if err.Error() != testErr { t.Errorf("TestOneofParsing: Incorrect error.\nHave: %v\nWant: %v", err.Error(), testErr) } } 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))) } dep-0.3.2/vendor/github.com/golang/protobuf/proto/text_test.go000066400000000000000000000275631317166637100244740ustar00rootroot00000000000000// 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/golang/protobuf/proto" proto3pb "github.com/golang/protobuf/proto/proto3_proto" pb "github.com/golang/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 TestTextOneof(t *testing.T) { tests := []struct { m proto.Message want string }{ // zero message {&pb.Communique{}, ``}, // scalar field {&pb.Communique{Union: &pb.Communique_Number{4}}, `number:4`}, // message field {&pb.Communique{Union: &pb.Communique_Msg{ &pb.Strings{StringField: proto.String("why hello!")}, }}, `msg:`}, // bad oneof (should not panic) {&pb.Communique{Union: &pb.Communique_Msg{nil}}, `msg:/* nil */`}, } for _, test := range tests { got := strings.TrimSpace(test.m.String()) if got != test.want { t.Errorf("\n got %s\nwant %s", got, test.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, &pb.MessageList_Message{ 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; map format is the same as a repeated struct, // and they are sorted by key (numerically for numeric keys). { &pb.MessageWithMap{NameMapping: map[int32]string{ -1: "Negatory", 7: "Lucky", 1234: "Feist", 6345789: "Otis", }}, `name_mapping: ` + `name_mapping: ` + `name_mapping: ` + `name_mapping:`, }, // map with nil value; not well-defined, but we shouldn't crash { &pb.MessageWithMap{MsgMapping: map[int64]*pb.FloatingPoint{7: nil}}, `msg_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) } } } dep-0.3.2/vendor/github.com/jmank88/000077500000000000000000000000001317166637100171135ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/jmank88/nuts/000077500000000000000000000000001317166637100201045ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/jmank88/nuts/.gitignore000066400000000000000000000000261317166637100220720ustar00rootroot00000000000000.idea testdata vendor/dep-0.3.2/vendor/github.com/jmank88/nuts/.travis.yml000066400000000000000000000001671317166637100222210ustar00rootroot00000000000000language: go go: - 1.x - tip install: - go get -u github.com/golang/dep/... - dep ensure -vendor-onlydep-0.3.2/vendor/github.com/jmank88/nuts/Gopkg.lock000066400000000000000000000013161317166637100220260ustar00rootroot00000000000000# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/boltdb/bolt" packages = ["."] revision = "2f1ce7a837dcb8da3ec595b1dac9d0632f0f99e8" version = "v1.3.1" [[projects]] branch = "master" name = "github.com/dgryski/go-metro" packages = ["."] revision = "0f6473574cdfd7be3962c41fb23dc4768b1f7deb" [[projects]] branch = "master" name = "golang.org/x/sys" packages = ["unix"] revision = "7ddbeae9ae08c6a06a59597f0c9edbc5ff2444ce" [solve-meta] analyzer-name = "dep" analyzer-version = 1 inputs-digest = "051cec76ab73ca227eb718f999fe302404bd5b6673fc29b438eb5945e97f571b" solver-name = "gps-cdcl" solver-version = 1 dep-0.3.2/vendor/github.com/jmank88/nuts/Gopkg.toml000066400000000000000000000002211317166637100220430ustar00rootroot00000000000000[[constraint]] name = "github.com/boltdb/bolt" version = "^1.0.0" [[constraint]] name = "github.com/dgryski/go-metro" branch = "master" dep-0.3.2/vendor/github.com/jmank88/nuts/LICENSE000066400000000000000000000020551317166637100211130ustar00rootroot00000000000000MIT License Copyright (c) 2017 Jordan Krage 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. dep-0.3.2/vendor/github.com/jmank88/nuts/README.md000066400000000000000000000030201317166637100213560ustar00rootroot00000000000000# Nuts - BoltDB Utilities [![GoDoc](https://godoc.org/github.com/jmank88/nuts?status.svg)](https://godoc.org/github.com/jmank88/nuts) [![Go Report Card](https://goreportcard.com/badge/github.com/jmank88/nuts)](https://goreportcard.com/report/github.com/jmank88/nuts) [![Coverage Status](https://coveralls.io/repos/github/jmank88/nuts/badge.svg?branch=master)](https://coveralls.io/github/jmank88/nuts?branch=master) A collection of [BoltDB](https://github.com/boltdb/bolt) utilities. ## Path Prefix Scans The prefix scanning functions `SeekPathConflict` and `SeekPathMatch` facilitate maintenance and access to buckets of paths supporting *variable elements* with *exclusive matches*. Paths are `/` delimited, must begin with a `/`, and elements beginning with `:` or `*` are variable. Examples: ``` / /blogs/ /blogs/:blog_id ``` ### Variable Elements Path elements beginning with a `:` match any single element. Path elements beginning with `*` match any remaining elements, and therefore must be last. Examples: ``` Path: /blogs/:blog_id Match: /blogs/someblog ``` ``` Path: /blogs/:blog_id/comments/:comment_id/*suffix Match: /blogs/42/comments/100/edit ``` ### Exclusive Matches Using `SeekPathConflict` before putting new paths to ensure the bucket remains conflict-free guarantees that `SeekPathMatch` will never match more than one path. Examples: ``` Conflicts: `/blogs/:blog_id`, `/blogs/golang` Match: `/blogs/golang` ``` ``` Conflicts: `/blogs/*`, `/blogs/:blog_id/comments` Match: `/blogs/42/comments` ``` dep-0.3.2/vendor/github.com/jmank88/nuts/example_test.go000066400000000000000000000004461317166637100231310ustar00rootroot00000000000000package nuts import ( "fmt" ) func ExampleKey_UUID() { type uuid struct{ a, b uint64 } u := uuid{ a: 0xaaaaaaaaaaaaaaaa, b: 0xbbbbbbbbbbbbbbbb, } key := make(Key, 16) key[:8].Put(u.a) key[8:].Put(u.b) fmt.Printf("%#x", key) // Output: // 0xaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb } dep-0.3.2/vendor/github.com/jmank88/nuts/key.go000066400000000000000000000014721317166637100212270ustar00rootroot00000000000000package nuts // KeyLen returns the minimum number of bytes required to represent x; the result is 1 for x == 0. // Returns 1-8. func KeyLen(x uint64) int { n := 1 if x >= 1<<32 { x >>= 32 n += 4 } if x >= 1<<16 { x >>= 16 n += 2 } if x >= 1<<8 { x >>= 8 n += 1 } return n } // Key is a byte slice with methods for serializing uint64 (big endian). // Length can minimized (<8) with KeyLen. // make(Key, KeyLen(uint64(max))) // Large Keys can constructed by slicing. // uuid := make(Key, 16) // uuid[:8].Put(a) // uuid[8:].Put(b) type Key []byte // Put serializes x into the buffer (big endian). Behavior is undefined when x // does not fit, so the caller must ensure c is large enough. func (c Key) Put(x uint64) { s := uint(8 * (len(c) - 1)) for i := range c { c[i] = byte(x >> s) s -= 8 } } dep-0.3.2/vendor/github.com/jmank88/nuts/key_test.go000066400000000000000000000043631317166637100222700ustar00rootroot00000000000000package nuts import ( "bytes" "strconv" "testing" ) func TestKeyLen(t *testing.T) { for _, test := range []struct { x uint64 exp int }{ {0, 1}, {1, 1}, {1 << 8, 2}, {1 << 16, 3}, {1 << 24, 4}, {1 << 32, 5}, {1 << 40, 6}, {1 << 48, 7}, {1 << 56, 8}, } { got := KeyLen(test.x) if got != test.exp { t.Errorf("%d: expected length %d but got %d", test.x, test.exp, got) } } } func TestKey(t *testing.T) { for _, test := range []struct { max int xs []uint64 bs [][]byte }{ { max: 1 << 7, xs: []uint64{0, 1, (1 << 8) - 1}, bs: [][]byte{ {0x00}, {0x01}, {0xFF}, }, }, { max: 1 << 15, xs: []uint64{0, 1, (1 << 16) - 1}, bs: [][]byte{ {0x00, 0x00}, {0x00, 0x01}, {0xFF, 0xFF}, }, }, { max: 1 << 23, xs: []uint64{0, 1, (1 << 24) - 1}, bs: [][]byte{ {0x00, 0x00, 0x00}, {0x00, 0x00, 0x01}, {0xFF, 0xFF, 0xFF}, }, }, { max: 1 << 31, xs: []uint64{0, 1, (1 << 32) - 1}, bs: [][]byte{ {0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x01}, {0xFF, 0xFF, 0xFF, 0xFF}, }, }, { max: 1 << 39, xs: []uint64{0, 1, (1 << 40) - 1}, bs: [][]byte{ {0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x01}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, }, }, { max: 1 << 47, xs: []uint64{0, 1, (1 << 48) - 1}, bs: [][]byte{ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, }, }, { max: 1 << 55, xs: []uint64{0, 1, (1 << 56) - 1}, bs: [][]byte{ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, }, }, { max: 1 << 60, xs: []uint64{0, 1, (1 << 60) - 1}, bs: [][]byte{ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, {0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, }, }, } { t.Run(strconv.Itoa(test.max), func(t *testing.T) { k := make(Key, KeyLen(uint64(test.max))) for i, x := range test.xs { k.Put(x) if !bytes.Equal(k, test.bs[i]) { t.Errorf("unexpected serialized integer %d:\n\t(GOT): %#x\n\t(WNT): %#x", x, k, test.bs[i]) } } }) } } dep-0.3.2/vendor/github.com/jmank88/nuts/nuts.go000066400000000000000000000001471317166637100214260ustar00rootroot00000000000000// Package nuts is a collection of utilities for BoltDB (https://github.com/boltdb/bolt). package nuts dep-0.3.2/vendor/github.com/jmank88/nuts/paths.go000066400000000000000000000125321317166637100215550ustar00rootroot00000000000000package nuts /* Path Prefix Scans The prefix scanning methods `SeekPathConflict` and `SeekPathMatch` facilitate maintenance and access to buckets of paths supporting variable elements with exclusive matches. Paths are `/` delimited, must begin with a `/`, and elements beginning with `:` or `*` are variable. Examples: / /blogs/ /blogs/:blog_id Variable Paths Path elements beginning with a `:` match any single element. Path elements beginning with `*` match any remaining suffix, and therefore must be the last element. Examples: Path: /blogs/:blog_id Match: /blogs/someblog Path: /blogs/:blog_id/comments/:comment_id/*suffix Match: /blogs/42/comments/100/edit Exclusive Matches Using `SeekPathConflict` before putting new paths to ensure the bucket remains conflict-free guarantees that `SeekPathMatch` will never match more than one path. Examples: Conflicts: /blogs/:blog_id, /blogs/golang Match: /blogs/golang Conflicts: /blogs/*, /blogs/:blog_id/comments Match: /blogs/42/comments */ import ( "bytes" "github.com/boltdb/bolt" ) // SeekPathMatch seeks an entry which matches `path`, or returns `nil, nil` when no match is found. // Returned key may be `path`, or a matching dynamic path. // Matches are exclusive if the set of keys are conflict free (see SeekPathConflict). func SeekPathMatch(c *bolt.Cursor, path []byte) ([]byte, []byte) { // Validation if len(path) == 0 { return nil, nil } if path[0] != '/' { return nil, nil } // Exact match fast-path if k, v := c.Seek(path); bytes.Equal(k, path) { return k, v } // Prefix scan prefixBuf := bytes.NewBuffer(make([]byte, 0, len(path))) for { // Match slash prefixBuf.WriteByte('/') prefix := prefixBuf.Bytes() k, v := c.Seek(prefix) if !bytes.HasPrefix(k, prefix) { return nil, nil } // Advance past '/' path = path[1:] // Exact match required for trailing slash. if len(path) == 0 { if len(k) == len(prefix) { return k, v } return nil, nil } // Advance cursor past exact match to first prefix match. if len(k) == len(prefix) { k, v = c.Next() if !bytes.HasPrefix(k, prefix) { return nil, nil } } // Find end of element. i := bytes.IndexByte(path, '/') last := i < 0 switch k[len(prefix)] { case '*': return k, v case ':': // Append variable path element to prefix ki := bytes.IndexByte(k[len(prefix):], '/') if ki < 0 { prefixBuf.Write(k[len(prefix):]) } else { prefixBuf.Write(k[len(prefix) : len(prefix)+ki]) } if last { // Exact match required for last element. prefix = prefixBuf.Bytes() if k, v = c.Seek(prefix); bytes.Equal(k, prefix) { return k, v } return nil, nil } default: // Append path component to prefix. if last { prefixBuf.Write(path) } else { prefixBuf.Write(path[:i]) } prefix = prefixBuf.Bytes() k, v = c.Seek(prefix) if last { // Exact match required for last element. if bytes.Equal(k, prefix) { return k, v } return nil, nil } // Prefix match required for other elements. if !bytes.HasPrefix(k, prefix) { return nil, nil } } // Advance past element. path = path[i:] } } // SeekPathConflict seeks an entry which conflicts with `path`, and returns the first encountered or `nil, nil` if none // is found. func SeekPathConflict(c *bolt.Cursor, path []byte) ([]byte, []byte) { // Validation if len(path) == 0 { return nil, nil } if path[0] != '/' { return nil, nil } // Fast-path for exact and prefix match. if k, v := c.Seek(path); bytes.Equal(k, path) { return k, v } else if bytes.HasPrefix(k, path) { // Any prefixed k is good enough when path ends in '/'. if path[len(path)-1] == '/' { return nil, nil } // If k's last element is longer it could be a conflict. if k[len(path)] == '/' { return nil, nil } } // Prefix scan. i := 0 for { i++ // Match slash. prefix := path[:i] k, v := c.Seek(prefix) if !bytes.HasPrefix(k, prefix) { return nil, nil } // Exact match is a conflict for trailing slash. if i == len(path) { if len(k) == len(path) { return k, v } return nil, nil } // Advance cursor past exact match to first prefix match. if len(k) == len(prefix) { k, v = c.Next() if !bytes.HasPrefix(k, prefix) { return nil, nil } } // Find end of element. offset := bytes.IndexByte(path[i:], '/') last := offset < 0 if last { i = len(path) } else { i += offset } switch k[len(prefix)] { case '*': return k, v case ':': // Find end of element. kPrefix := k offset := bytes.IndexByte(k[len(prefix):], '/') if offset > 0 { kPrefix = k[:len(prefix)+offset] } // Exact match required through variable element. prefix = path[:i] if !bytes.Equal(prefix, kPrefix) { return k, v } if last { // Exact match is a conflict for the last element. if k, v = c.Seek(prefix); bytes.Equal(k, prefix) { return k, v } return nil, nil } default: // Static (non-variable) element required. next := path[len(prefix)] if next == ':' || next == '*' { return k, v } prefix = path[:i] k, v = c.Seek(prefix) if last { // Exact match is a conflict for the last element. if bytes.Equal(k, prefix) { return k, v } return nil, nil } if !bytes.HasPrefix(k, prefix) { return nil, nil } } } } dep-0.3.2/vendor/github.com/jmank88/nuts/paths_test.go000066400000000000000000000177261317166637100226260ustar00rootroot00000000000000//go:generate rm -r testdata // //go:generate go run cmd/testpaths/main.go testdata standard 10 100 1000 10000 100000 1000000 //go:generate go run cmd/testpaths/main.go testdata segmentCount 1 5 10 50 100 //go:generate go run cmd/testpaths/main.go testdata branchFactor 1 5 10 50 100 500 1000 5000 10000 //go:generate go run cmd/testpaths/main.go testdata segmentSize 1 5 10 50 100 200 // //go:generate go run cmd/testdb/main.go testdata package nuts import ( "bufio" "bytes" "errors" "fmt" "io/ioutil" "log" "os" "path/filepath" "strings" "testing" "github.com/boltdb/bolt" ) var bucketName = []byte("testBucket") func exDB(f func(db *bolt.DB)) { tmp := tempfile() defer os.Remove(tmp) db, err := bolt.Open(tmp, 0666, nil) if err != nil { log.Fatal(err) } defer db.Close() f(db) } func ExampleSeekPathMatch() { exDB(func(db *bolt.DB) { if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket(bucketName) if err != nil { return err } // Put a variable path. return b.Put([]byte("/blogs/:blog_id/comments/:comment_id"), []byte{}) }); err != nil { log.Fatal(err) } if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket(bucketName) // Match path. path, _ := SeekPathMatch(b.Cursor(), []byte("/blogs/asdf/comments/42")) fmt.Println(string(path)) return nil }); err != nil { log.Fatal(err) } }) // Output: /blogs/:blog_id/comments/:comment_id } func ExampleSeekPathConflict() { exDB(func(db *bolt.DB) { insert := func(path string) { if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists(bucketName) if err != nil { return err } // Check for conflicts. if k, _ := SeekPathConflict(b.Cursor(), []byte(path)); k != nil { fmt.Printf("Put(%s) blocked - conflict: %s\n", path, string(k)) return nil } // Put. if err := b.Put([]byte(path), []byte{}); err != nil { return err } fmt.Printf("Put(%s)\n", path) return nil }); err != nil { log.Fatal(err) } } // Put insert("/blogs/") // Put insert("/blogs/:blog_id") // Conflict insert("/blogs/a_blog") }) // Output: // Put(/blogs/) // Put(/blogs/:blog_id) // Put(/blogs/a_blog) blocked - conflict: /blogs/:blog_id } var matchTests = []struct { path string matches []string }{ {`/blogs`, []string{`/blogs`}}, {`/blogs/`, []string{`/blogs/`}}, {`/blogs/:blog_id`, []string{`/blogs/123`}}, {`/blogs/:blog_id/comments`, []string{`/blogs/123/comments`}}, {`/blogs/:blog_id/comments/`, []string{`/blogs/123/comments/`}}, {`/blogs/:blog_id/comments/:comment_id`, []string{`/blogs/123/comments/456`}}, {`/blogs/:blog_id/comments/:comment_id/*suffix`, []string{`/blogs/123/comments/456/test`, `/blogs/123/comments/456/test/test`}}, } func TestMatchPath(t *testing.T) { testDB(t, func(db *bolt.DB) { bucketName := []byte("testBucket") // Setup - Put all paths if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket(bucketName) if err != nil { return err } for _, test := range matchTests { err := b.Put([]byte(test.path), []byte{}) if err != nil { return err } } return nil }); err != nil { t.Fatal("failed to insert paths:", err) } // Test - Match each if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket(bucketName) for _, test := range matchTests { for _, match := range test.matches { k, _ := SeekPathMatch(b.Cursor(), []byte(match)) if k == nil { t.Errorf("expected %q to match %q but got none", match, test.path) } else if !bytes.Equal(k, []byte(test.path)) { t.Errorf("expected %q to match %q but got %q", match, test.path, string(k)) } } } return nil }); err != nil { t.Fatal("tests failed:", err) } }) } func TestConflicts(t *testing.T) { for _, test := range []struct { path string conflicts []string }{ {`/test/test`, []string{`/test/test`, `/:test`, `/*test`, `/test/:test`, `/test/*test`, `/:test/test`}}, {`/:test`, []string{`/:tst`, `/test`, `/*test`}}, {`/test/*test`, []string{`/test/*tst`, `/test/test`, `/test/:tst`, `/test/test/test`, `/test/test/:test`, `/test/test/*test`}}, } { testDB(t, func(db *bolt.DB) { // Setup - Put path if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket(bucketName) if err != nil { return err } return b.Put([]byte(test.path), []byte{}) }); err != nil { t.Fatal("failed to insert path", err) } // Test - Verify all conflicts if err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket(bucketName) for _, c := range test.conflicts { k, _ := SeekPathConflict(b.Cursor(), []byte(c)) kStr := string(k) if kStr != test.path { t.Errorf("expected %q to match %q but got %q", c, test.path, kStr) } } return nil }); err != nil { t.Fatal("failed to run tests", err) } }) } } // Attempts to put all matchTests w/o conflict. func TestNoConflicts(t *testing.T) { testDB(t, func(db *bolt.DB) { bucketName := []byte("testBucket") if err := db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket(bucketName) if err != nil { return err } c := b.Cursor() for _, test := range matchTests { pathB := []byte(test.path) if k, _ := SeekPathConflict(c, pathB); k != nil { t.Errorf("unexpected conflict with %q: %s", test.path, string(k)) } if err := b.Put(pathB, []byte{}); err != nil { return err } } return nil }); err != nil { t.Fatal("failed to insert paths:", err) } }) } func Benchmark(b *testing.B) { b.Run("standard", forEachDB("standard", strings.NewReplacer(":", "", "*", "").Replace)) b.Run("branchFactor", forEachDB("branchFactor", nil)) b.Run("segmentCount", forEachDB("segmentCount", nil)) b.Run("segmentSize", forEachDB("segmentSize", nil)) } func forEachDB(testname string, fn func(path string) string) func(*testing.B) { return func(b *testing.B) { dir := filepath.Join("testdata", testname) err := filepath.Walk(dir, func(testfile string, info os.FileInfo, err error) error { if !info.IsDir() && filepath.Ext(testfile) == ".db" { arg := strings.TrimSuffix(filepath.Base(testfile), ".db") b.Run(arg, benchMatch(testfile, fn)) } return nil }) if err != nil { b.Fatal(err) } } } func benchMatch(testdb string, pathFn func(path string) string) func(b *testing.B) { return func(b *testing.B) { db, err := bolt.Open(testdb, 0666, nil) if err != nil { b.Fatalf("failed to open database %s: %s", testdb, err) } defer db.Close() testtxt := strings.TrimSuffix(testdb, ".db") + ".txt" f, err := os.Open(testtxt) if err != nil { b.Fatalf("failed to open file %s: %s", testtxt, err) } var paths [][]byte func() { defer f.Close() // Use default, ScanLines s := bufio.NewScanner(f) paths = make([][]byte, 0, b.N) for s.Scan() { if pathFn == nil { paths = append(paths, s.Bytes()) } else { paths = append(paths, []byte(pathFn(s.Text()))) } if len(paths) == cap(paths) { break } } if s.Err() != nil { b.Fatal("failed to read text paths:", s.Err()) } }() b.ResetTimer() lookup := func(path []byte) error { return db.View(func(tx *bolt.Tx) error { bk := tx.Bucket([]byte("paths")) k, _ := SeekPathMatch(bk.Cursor(), path) if k == nil { return errors.New("no match found") } return nil }) } for i := 0; i < b.N; i++ { path := paths[i%len(paths)] if err := lookup(path); err != nil { b.Fatalf("failed to match %q: %s", string(path), err) } } } } func testDB(t *testing.T, f func(db *bolt.DB)) { tmp := tempfile() defer os.Remove(tmp) db, err := bolt.Open(tmp, 0666, nil) if err != nil { t.Fatal("failed to open db:", err) } defer db.Close() f(db) } func tempfile() string { f, err := ioutil.TempFile("", "nuts-bolt-") if err != nil { panic(err) } if err := f.Close(); err != nil { panic(err) } if err := os.Remove(f.Name()); err != nil { panic(err) } return f.Name() } dep-0.3.2/vendor/github.com/jmank88/nuts/types.go000066400000000000000000000006541317166637100216040ustar00rootroot00000000000000package nuts import "github.com/boltdb/bolt" var _ Buckets = &bolt.Bucket{} var _ Buckets = &bolt.Tx{} // Buckets is a collection of methods for managing bolt.Buckets which is satisfied // by *bolt.Tx and *bolt.Bucket. type Buckets interface { Bucket([]byte) *bolt.Bucket CreateBucket([]byte) (*bolt.Bucket, error) CreateBucketIfNotExists([]byte) (*bolt.Bucket, error) DeleteBucket([]byte) error Cursor() *bolt.Cursor } dep-0.3.2/vendor/github.com/nightlyone/000077500000000000000000000000001317166637100200135ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/nightlyone/lockfile/000077500000000000000000000000001317166637100216035ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/nightlyone/lockfile/.gitignore000066400000000000000000000004431317166637100235740ustar00rootroot00000000000000# Compiled Object files, Static and Dynamic libs (Shared Objects) *.o *.a *.so # Folders _obj _test # popular temporaries .err .out .diff # Architecture specific extensions/prefixes *.[568vq] [568vq].out *.cgo1.go *.cgo2.c _cgo_defun.c _cgo_gotypes.go _cgo_export.* _testmain.go *.exe dep-0.3.2/vendor/github.com/nightlyone/lockfile/.gitmodules000066400000000000000000000001311317166637100237530ustar00rootroot00000000000000[submodule "git-hooks"] path = git-hooks url = https://github.com/nightlyone/git-hooks dep-0.3.2/vendor/github.com/nightlyone/lockfile/.travis.yml000066400000000000000000000002631317166637100237150ustar00rootroot00000000000000language: go go: - 1.4.3 - 1.6.2 - tip # Only test commits to production branch and all pull requests branches: only: - master matrix: allow_failures: - go: tip dep-0.3.2/vendor/github.com/nightlyone/lockfile/LICENSE000066400000000000000000000020361317166637100226110ustar00rootroot00000000000000Copyright (c) 2012 Ingo Oeser 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. dep-0.3.2/vendor/github.com/nightlyone/lockfile/README.md000066400000000000000000000022401317166637100230600ustar00rootroot00000000000000lockfile ========= Handle locking via pid files. [![Build Status Unix][1]][2] [![Build status Windows][3]][4] [1]: https://secure.travis-ci.org/nightlyone/lockfile.png [2]: https://travis-ci.org/nightlyone/lockfile [3]: https://ci.appveyor.com/api/projects/status/7mojkmauj81uvp8u/branch/master?svg=true [4]: https://ci.appveyor.com/project/nightlyone/lockfile/branch/master install ------- Install [Go 1][5], either [from source][6] or [with a prepackaged binary][7]. For Windows suport, Go 1.4 or newer is required. Then run go get github.com/nightlyone/lockfile [5]: http://golang.org [6]: http://golang.org/doc/install/source [7]: http://golang.org/doc/install LICENSE ------- MIT documentation ------------- [package documentation at godoc.org](http://godoc.org/github.com/nightlyone/lockfile) install ------------------- go get github.com/nightlyone/lockfile contributing ============ Contributions are welcome. Please open an issue or send me a pull request for a dedicated branch. Make sure the git commit hooks show it works. git commit hooks ----------------------- enable commit hooks via cd .git ; rm -rf hooks; ln -s ../git-hooks hooks ; cd .. dep-0.3.2/vendor/github.com/nightlyone/lockfile/appveyor.yml000066400000000000000000000002741317166637100241760ustar00rootroot00000000000000clone_folder: c:\gopath\src\github.com\nightlyone\lockfile environment: GOPATH: c:\gopath install: - go version - go env - go get -v -t ./... build_script: - go test -v ./... dep-0.3.2/vendor/github.com/nightlyone/lockfile/lockfile.go000066400000000000000000000124441317166637100237270ustar00rootroot00000000000000// Package lockfile handles pid file based locking. // While a sync.Mutex helps against concurrency issues within a single process, // this package is designed to help against concurrency issues between cooperating processes // or serializing multiple invocations of the same process. You can also combine sync.Mutex // with Lockfile in order to serialize an action between different goroutines in a single program // and also multiple invocations of this program. package lockfile import ( "errors" "fmt" "io" "io/ioutil" "os" "path/filepath" ) // Lockfile is a pid file which can be locked type Lockfile string // TemporaryError is a type of error where a retry after a random amount of sleep should help to mitigate it. type TemporaryError string func (t TemporaryError) Error() string { return string(t) } // Temporary returns always true. // It exists, so you can detect it via // if te, ok := err.(interface{ Temporary() bool }); ok { // fmt.Println("I am a temporay error situation, so wait and retry") // } func (t TemporaryError) Temporary() bool { return true } // Various errors returned by this package var ( ErrBusy = TemporaryError("Locked by other process") // If you get this, retry after a short sleep might help ErrNotExist = TemporaryError("Lockfile created, but doesn't exist") // If you get this, retry after a short sleep might help ErrNeedAbsPath = errors.New("Lockfiles must be given as absolute path names") ErrInvalidPid = errors.New("Lockfile contains invalid pid for system") ErrDeadOwner = errors.New("Lockfile contains pid of process not existent on this system anymore") ErrRogueDeletion = errors.New("Lockfile owned by me has been removed unexpectedly") ) // New describes a new filename located at the given absolute path. func New(path string) (Lockfile, error) { if !filepath.IsAbs(path) { return Lockfile(""), ErrNeedAbsPath } return Lockfile(path), nil } // GetOwner returns who owns the lockfile. func (l Lockfile) GetOwner() (*os.Process, error) { name := string(l) // Ok, see, if we have a stale lockfile here content, err := ioutil.ReadFile(name) if err != nil { return nil, err } // try hard for pids. If no pid, the lockfile is junk anyway and we delete it. pid, err := scanPidLine(content) if err != nil { return nil, err } running, err := isRunning(pid) if err != nil { return nil, err } if running { proc, err := os.FindProcess(pid) if err != nil { return nil, err } return proc, nil } return nil, ErrDeadOwner } // TryLock tries to own the lock. // It Returns nil, if successful and and error describing the reason, it didn't work out. // Please note, that existing lockfiles containing pids of dead processes // and lockfiles containing no pid at all are simply deleted. func (l Lockfile) TryLock() error { name := string(l) // This has been checked by New already. If we trigger here, // the caller didn't use New and re-implemented it's functionality badly. // So panic, that he might find this easily during testing. if !filepath.IsAbs(name) { panic(ErrNeedAbsPath) } tmplock, err := ioutil.TempFile(filepath.Dir(name), filepath.Base(name)+".") if err != nil { return err } cleanup := func() { _ = tmplock.Close() _ = os.Remove(tmplock.Name()) } defer cleanup() if err := writePidLine(tmplock, os.Getpid()); err != nil { return err } // return value intentionally ignored, as ignoring it is part of the algorithm _ = os.Link(tmplock.Name(), name) fiTmp, err := os.Lstat(tmplock.Name()) if err != nil { return err } fiLock, err := os.Lstat(name) if err != nil { // tell user that a retry would be a good idea if os.IsNotExist(err) { return ErrNotExist } return err } // Success if os.SameFile(fiTmp, fiLock) { return nil } proc, err := l.GetOwner() switch err { default: // Other errors -> defensively fail and let caller handle this return err case nil: if proc.Pid != os.Getpid() { return ErrBusy } case ErrDeadOwner, ErrInvalidPid: // cases we can fix below } // clean stale/invalid lockfile err = os.Remove(name) if err != nil { // If it doesn't exist, then it doesn't matter who removed it. if !os.IsNotExist(err) { return err } } // now that the stale lockfile is gone, let's recurse return l.TryLock() } // Unlock a lock again, if we owned it. Returns any error that happend during release of lock. func (l Lockfile) Unlock() error { proc, err := l.GetOwner() switch err { case ErrInvalidPid, ErrDeadOwner: return ErrRogueDeletion case nil: if proc.Pid == os.Getpid() { // we really own it, so let's remove it. return os.Remove(string(l)) } // Not owned by me, so don't delete it. return ErrRogueDeletion default: // This is an application error or system error. // So give a better error for logging here. if os.IsNotExist(err) { return ErrRogueDeletion } // Other errors -> defensively fail and let caller handle this return err } } func writePidLine(w io.Writer, pid int) error { _, err := io.WriteString(w, fmt.Sprintf("%d\n", pid)) return err } func scanPidLine(content []byte) (int, error) { if len(content) == 0 { return 0, ErrInvalidPid } var pid int if _, err := fmt.Sscanln(string(content), &pid); err != nil { return 0, ErrInvalidPid } if pid <= 0 { return 0, ErrInvalidPid } return pid, nil } dep-0.3.2/vendor/github.com/nightlyone/lockfile/lockfile_test.go000066400000000000000000000126411317166637100247650ustar00rootroot00000000000000package lockfile import ( "fmt" "io/ioutil" "math/rand" "os" "path/filepath" "strconv" "testing" ) func ExampleLockfile() { lock, err := New(filepath.Join(os.TempDir(), "lock.me.now.lck")) if err != nil { fmt.Printf("Cannot init lock. reason: %v", err) panic(err) // handle properly please! } err = lock.TryLock() // Error handling is essential, as we only try to get the lock. if err != nil { fmt.Printf("Cannot lock %q, reason: %v", lock, err) panic(err) // handle properly please! } defer lock.Unlock() fmt.Println("Do stuff under lock") // Output: Do stuff under lock } func TestBasicLockUnlock(t *testing.T) { path, err := filepath.Abs("test_lockfile.pid") if err != nil { panic(err) } lf, err := New(path) if err != nil { t.Fail() fmt.Println("Error making lockfile: ", err) return } err = lf.TryLock() if err != nil { t.Fail() fmt.Println("Error locking lockfile: ", err) return } err = lf.Unlock() if err != nil { t.Fail() fmt.Println("Error unlocking lockfile: ", err) return } } func GetDeadPID() int { // I have no idea how windows handles large PIDs, or if they even exist. // So limit it to be less or equal to 4096 to be safe. const maxPid = 4095 // limited iteration, so we finish one day seen := map[int]bool{} for len(seen) < maxPid { pid := rand.Intn(maxPid + 1) // see https://godoc.org/math/rand#Intn why if seen[pid] { continue } seen[pid] = true running, err := isRunning(pid) if err != nil { fmt.Println("Error checking PID: ", err) continue } if !running { return pid } } panic(fmt.Sprintf("all pids lower %d are used, cannot test this", maxPid)) } func TestBusy(t *testing.T) { path, err := filepath.Abs("test_lockfile.pid") if err != nil { t.Fatal(err) return } pid := os.Getppid() if err := ioutil.WriteFile(path, []byte(strconv.Itoa(pid)+"\n"), 0666); err != nil { t.Fatal(err) return } defer os.Remove(path) lf, err := New(path) if err != nil { t.Fatal(err) return } got := lf.TryLock() if got != ErrBusy { t.Fatalf("expected error %q, got %v", ErrBusy, got) return } } func TestRogueDeletion(t *testing.T) { path, err := filepath.Abs("test_lockfile.pid") if err != nil { t.Fatal(err) return } lf, err := New(path) if err != nil { t.Fatal(err) return } err = lf.TryLock() if err != nil { t.Fatal(err) return } err = os.Remove(path) if err != nil { t.Fatal(err) return } got := lf.Unlock() if got != ErrRogueDeletion { t.Fatalf("unexpected error: %v", got) return } } func TestRogueDeletionDeadPid(t *testing.T) { path, err := filepath.Abs("test_lockfile.pid") if err != nil { t.Fatal(err) return } lf, err := New(path) if err != nil { t.Fatal(err) return } err = lf.TryLock() if err != nil { t.Fatal(err) return } pid := GetDeadPID() if err := ioutil.WriteFile(path, []byte(strconv.Itoa(pid)+"\n"), 0666); err != nil { t.Fatal(err) return } defer os.Remove(path) err = lf.Unlock() if err != ErrRogueDeletion { t.Fatalf("unexpected error: %v", err) return } if _, err := os.Stat(path); os.IsNotExist(err) { t.Fatal("lockfile should not be deleted by us, if we didn't create it") } else { if err != nil { t.Fatalf("unexpected error %v", err) } } } func TestRemovesStaleLockOnDeadOwner(t *testing.T) { path, err := filepath.Abs("test_lockfile.pid") if err != nil { t.Fatal(err) return } lf, err := New(path) if err != nil { t.Fatal(err) return } pid := GetDeadPID() if err := ioutil.WriteFile(path, []byte(strconv.Itoa(pid)+"\n"), 0666); err != nil { t.Fatal(err) return } err = lf.TryLock() if err != nil { t.Fatal(err) return } if err := lf.Unlock(); err != nil { t.Fatal(err) return } } func TestInvalidPidLeadToReplacedLockfileAndSuccess(t *testing.T) { path, err := filepath.Abs("test_lockfile.pid") if err != nil { t.Fatal(err) return } if err := ioutil.WriteFile(path, []byte("\n"), 0666); err != nil { t.Fatal(err) return } defer os.Remove(path) lf, err := New(path) if err != nil { t.Fatal(err) return } if err := lf.TryLock(); err != nil { t.Fatalf("unexpected error: %v", err) return } // now check if file exists and contains the correct content got, err := ioutil.ReadFile(path) if err != nil { t.Fatalf("unexpected error %v", err) return } want := fmt.Sprintf("%d\n", os.Getpid()) if string(got) != want { t.Fatalf("got %q, want %q", got, want) } } func TestScanPidLine(t *testing.T) { tests := [...]struct { input []byte pid int xfail error }{ { xfail: ErrInvalidPid, }, { input: []byte(""), xfail: ErrInvalidPid, }, { input: []byte("\n"), xfail: ErrInvalidPid, }, { input: []byte("-1\n"), xfail: ErrInvalidPid, }, { input: []byte("0\n"), xfail: ErrInvalidPid, }, { input: []byte("a\n"), xfail: ErrInvalidPid, }, { input: []byte("1\n"), pid: 1, }, } // test positive cases first for step, tc := range tests { if tc.xfail != nil { continue } want := tc.pid got, err := scanPidLine(tc.input) if err != nil { t.Fatalf("%d: unexpected error %v", step, err) } if got != want { t.Errorf("%d: expected pid %d, got %d", step, want, got) } } // test negative cases now for step, tc := range tests { if tc.xfail == nil { continue } want := tc.xfail _, got := scanPidLine(tc.input) if got != want { t.Errorf("%d: expected error %v, got %v", step, want, got) } } } dep-0.3.2/vendor/github.com/nightlyone/lockfile/lockfile_unix.go000066400000000000000000000005131317166637100247640ustar00rootroot00000000000000// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris package lockfile import ( "os" "syscall" ) func isRunning(pid int) (bool, error) { proc, err := os.FindProcess(pid) if err != nil { return false, err } if err := proc.Signal(syscall.Signal(0)); err != nil { return false, nil } return true, nil } dep-0.3.2/vendor/github.com/nightlyone/lockfile/lockfile_windows.go000066400000000000000000000011221317166637100254700ustar00rootroot00000000000000package lockfile import ( "syscall" ) //For some reason these consts don't exist in syscall. const ( error_invalid_parameter = 87 code_still_active = 259 ) func isRunning(pid int) (bool, error) { procHnd, err := syscall.OpenProcess(syscall.PROCESS_QUERY_INFORMATION, true, uint32(pid)) if err != nil { if scerr, ok := err.(syscall.Errno); ok { if uintptr(scerr) == error_invalid_parameter { return false, nil } } } var code uint32 err = syscall.GetExitCodeProcess(procHnd, &code) if err != nil { return false, err } return code == code_still_active, nil } dep-0.3.2/vendor/github.com/pelletier/000077500000000000000000000000001317166637100176205ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/pelletier/go-buffruneio/000077500000000000000000000000001317166637100223675ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/pelletier/go-buffruneio/.gitignore000066400000000000000000000000061317166637100243530ustar00rootroot00000000000000*.testdep-0.3.2/vendor/github.com/pelletier/go-buffruneio/.travis.yml000066400000000000000000000001131317166637100244730ustar00rootroot00000000000000language: go sudo: false go: - 1.3.3 - 1.4.3 - 1.5.3 - tip dep-0.3.2/vendor/github.com/pelletier/go-buffruneio/README.md000066400000000000000000000042551317166637100236540ustar00rootroot00000000000000# buffruneio [![Tests Status](https://travis-ci.org/pelletier/go-buffruneio.svg?branch=master)](https://travis-ci.org/pelletier/go-buffruneio) [![GoDoc](https://godoc.org/github.com/pelletier/go-buffruneio?status.svg)](https://godoc.org/github.com/pelletier/go-buffruneio) Buffruneio is a wrapper around bufio to provide buffered runes access with unlimited unreads. ```go import "github.com/pelletier/go-buffruneio" ``` ## Examples ```go import ( "fmt" "github.com/pelletier/go-buffruneio" "strings" ) reader := buffruneio.NewReader(strings.NewReader("abcd")) fmt.Println(reader.ReadRune()) // 'a' fmt.Println(reader.ReadRune()) // 'b' fmt.Println(reader.ReadRune()) // 'c' reader.UnreadRune() reader.UnreadRune() fmt.Println(reader.ReadRune()) // 'b' fmt.Println(reader.ReadRune()) // 'c' ``` ## Documentation The documentation and additional examples are available at [godoc.org](http://godoc.org/github.com/pelletier/go-buffruneio). ## Contribute Feel free to report bugs and patches using GitHub's pull requests system on [pelletier/go-toml](https://github.com/pelletier/go-buffruneio). Any feedback is much appreciated! ## LICENSE Copyright (c) 2016 Thomas Pelletier 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. dep-0.3.2/vendor/github.com/pelletier/go-buffruneio/buffruneio.go000066400000000000000000000050271317166637100250660ustar00rootroot00000000000000// Package buffruneio is a wrapper around bufio to provide buffered runes access with unlimited unreads. package buffruneio import ( "bufio" "container/list" "errors" "io" ) // Rune to indicate end of file. const ( EOF = -(iota + 1) ) // ErrNoRuneToUnread is returned by UnreadRune() when the read index is already at the beginning of the buffer. var ErrNoRuneToUnread = errors.New("no rune to unwind") // Reader implements runes buffering for an io.Reader object. type Reader struct { buffer *list.List current *list.Element input *bufio.Reader } // NewReader returns a new Reader. func NewReader(rd io.Reader) *Reader { return &Reader{ buffer: list.New(), input: bufio.NewReader(rd), } } type runeWithSize struct { r rune size int } func (rd *Reader) feedBuffer() error { r, size, err := rd.input.ReadRune() if err != nil { if err != io.EOF { return err } r = EOF } newRuneWithSize := runeWithSize{r, size} rd.buffer.PushBack(newRuneWithSize) if rd.current == nil { rd.current = rd.buffer.Back() } return nil } // ReadRune reads the next rune from buffer, or from the underlying reader if needed. func (rd *Reader) ReadRune() (rune, int, error) { if rd.current == rd.buffer.Back() || rd.current == nil { err := rd.feedBuffer() if err != nil { return EOF, 0, err } } runeWithSize := rd.current.Value.(runeWithSize) rd.current = rd.current.Next() return runeWithSize.r, runeWithSize.size, nil } // UnreadRune pushes back the previously read rune in the buffer, extending it if needed. func (rd *Reader) UnreadRune() error { if rd.current == rd.buffer.Front() { return ErrNoRuneToUnread } if rd.current == nil { rd.current = rd.buffer.Back() } else { rd.current = rd.current.Prev() } return nil } // Forget removes runes stored before the current stream position index. func (rd *Reader) Forget() { if rd.current == nil { rd.current = rd.buffer.Back() } for ; rd.current != rd.buffer.Front(); rd.buffer.Remove(rd.current.Prev()) { } } // PeekRune returns at most the next n runes, reading from the uderlying source if // needed. Does not move the current index. It includes EOF if reached. func (rd *Reader) PeekRunes(n int) []rune { res := make([]rune, 0, n) cursor := rd.current for i := 0; i < n; i++ { if cursor == nil { err := rd.feedBuffer() if err != nil { return res } cursor = rd.buffer.Back() } if cursor != nil { r := cursor.Value.(runeWithSize).r res = append(res, r) if r == EOF { return res } cursor = cursor.Next() } } return res } dep-0.3.2/vendor/github.com/pelletier/go-buffruneio/buffruneio_test.go000066400000000000000000000056071317166637100261310ustar00rootroot00000000000000package buffruneio import ( "runtime/debug" "strings" "testing" ) func assertNoError(t *testing.T, err error) { if err != nil { t.Log("unexpected error", err) debug.PrintStack() t.FailNow() } } func assumeRunesArray(t *testing.T, expected []rune, got []rune) { if len(expected) != len(got) { t.Fatal("expected", len(expected), "runes, but got", len(got)) } for i := 0; i < len(got); i++ { if expected[i] != got[i] { t.Fatal("expected rune", expected[i], "at index", i, "but got", got[i]) } } } func assumeRune(t *testing.T, rd *Reader, r rune) { gotRune, size, err := rd.ReadRune() assertNoError(t, err) if gotRune != r { t.Fatal("got", string(gotRune), "(", []byte(string(gotRune)), ")", "expected", string(r), "(", []byte(string(r)), ")") t.Fatal("got size", size, "expected", len([]byte(string(r)))) } } func TestReadString(t *testing.T) { s := "hello" rd := NewReader(strings.NewReader(s)) assumeRune(t, rd, 'h') assumeRune(t, rd, 'e') assumeRune(t, rd, 'l') assumeRune(t, rd, 'l') assumeRune(t, rd, 'o') assumeRune(t, rd, EOF) } func TestMultipleEOF(t *testing.T) { s := "" rd := NewReader(strings.NewReader(s)) assumeRune(t, rd, EOF) assumeRune(t, rd, EOF) } func TestUnread(t *testing.T) { s := "ab" rd := NewReader(strings.NewReader(s)) assumeRune(t, rd, 'a') assumeRune(t, rd, 'b') assertNoError(t, rd.UnreadRune()) assumeRune(t, rd, 'b') assumeRune(t, rd, EOF) } func TestUnreadEOF(t *testing.T) { s := "" rd := NewReader(strings.NewReader(s)) _ = rd.UnreadRune() assumeRune(t, rd, EOF) assumeRune(t, rd, EOF) assertNoError(t, rd.UnreadRune()) assumeRune(t, rd, EOF) } func TestForget(t *testing.T) { s := "hello" rd := NewReader(strings.NewReader(s)) assumeRune(t, rd, 'h') assumeRune(t, rd, 'e') assumeRune(t, rd, 'l') assumeRune(t, rd, 'l') rd.Forget() if rd.UnreadRune() != ErrNoRuneToUnread { t.Fatal("no rune should be available") } } func TestForgetEmpty(t *testing.T) { s := "" rd := NewReader(strings.NewReader(s)) rd.Forget() assumeRune(t, rd, EOF) rd.Forget() } func TestPeekEmpty(t *testing.T) { s := "" rd := NewReader(strings.NewReader(s)) runes := rd.PeekRunes(1) if len(runes) != 1 { t.Fatal("incorrect number of runes", len(runes)) } if runes[0] != EOF { t.Fatal("incorrect rune", runes[0]) } } func TestPeek(t *testing.T) { s := "a" rd := NewReader(strings.NewReader(s)) runes := rd.PeekRunes(1) assumeRunesArray(t, []rune{'a'}, runes) runes = rd.PeekRunes(1) assumeRunesArray(t, []rune{'a'}, runes) assumeRune(t, rd, 'a') runes = rd.PeekRunes(1) assumeRunesArray(t, []rune{EOF}, runes) assumeRune(t, rd, EOF) } func TestPeekLarge(t *testing.T) { s := "abcdefg" rd := NewReader(strings.NewReader(s)) runes := rd.PeekRunes(100) if len(runes) != len(s)+1 { t.Fatal("incorrect number of runes", len(runes)) } assumeRunesArray(t, []rune{'a', 'b', 'c', 'd', 'e', 'f', 'g', EOF}, runes) } dep-0.3.2/vendor/github.com/pelletier/go-toml/000077500000000000000000000000001317166637100211765ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/pelletier/go-toml/.gitignore000066400000000000000000000000361317166637100231650ustar00rootroot00000000000000test_program/test_program_bin dep-0.3.2/vendor/github.com/pelletier/go-toml/.travis.yml000066400000000000000000000007451317166637100233150ustar00rootroot00000000000000sudo: false language: go go: - 1.6.4 - 1.7.5 - 1.8 - tip matrix: allow_failures: - go: tip fast_finish: true script: - ./test.sh before_install: - go get github.com/axw/gocov/gocov - go get github.com/mattn/goveralls - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi branches: only: [master] after_success: - $HOME/gopath/bin/goveralls -service=travis-ci -coverprofile=coverage.out -repotoken $COVERALLS_TOKEN dep-0.3.2/vendor/github.com/pelletier/go-toml/LICENSE000066400000000000000000000021211317166637100221770ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2013 - 2017 Thomas Pelletier, Eric Anderton 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. dep-0.3.2/vendor/github.com/pelletier/go-toml/README.md000066400000000000000000000070611317166637100224610ustar00rootroot00000000000000# go-toml Go library for the [TOML](https://github.com/mojombo/toml) format. This library supports TOML version [v0.4.0](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md) [![GoDoc](https://godoc.org/github.com/pelletier/go-toml?status.svg)](http://godoc.org/github.com/pelletier/go-toml) [![license](https://img.shields.io/github/license/pelletier/go-toml.svg)](https://github.com/pelletier/go-toml/blob/master/LICENSE) [![Build Status](https://travis-ci.org/pelletier/go-toml.svg?branch=master)](https://travis-ci.org/pelletier/go-toml) [![Coverage Status](https://coveralls.io/repos/github/pelletier/go-toml/badge.svg?branch=master)](https://coveralls.io/github/pelletier/go-toml?branch=master) [![Go Report Card](https://goreportcard.com/badge/github.com/pelletier/go-toml)](https://goreportcard.com/report/github.com/pelletier/go-toml) ## Features Go-toml provides the following features for using data parsed from TOML documents: * Load TOML documents from files and string data * Easily navigate TOML structure using TomlTree * Line & column position data for all parsed elements * Query support similar to JSON-Path * Syntax errors contain line and column numbers Go-toml is designed to help cover use-cases not covered by reflection-based TOML parsing: * Semantic evaluation of parsed TOML * Informing a user of mistakes in the source document, after it has been parsed * Programatic handling of default values on a case-by-case basis * Using a TOML document as a flexible data-store ## Import import "github.com/pelletier/go-toml" ## Usage ### Example Say you have a TOML file that looks like this: ```toml [postgres] user = "pelletier" password = "mypassword" ``` Read the username and password like this: ```go import ( "fmt" "github.com/pelletier/go-toml" ) config, err := toml.LoadFile("config.toml") if err != nil { fmt.Println("Error ", err.Error()) } else { // retrieve data directly user := config.Get("postgres.user").(string) password := config.Get("postgres.password").(string) // or using an intermediate object configTree := config.Get("postgres").(*toml.TomlTree) user = configTree.Get("user").(string) password = configTree.Get("password").(string) fmt.Println("User is ", user, ". Password is ", password) // show where elements are in the file fmt.Println("User position: %v", configTree.GetPosition("user")) fmt.Println("Password position: %v", configTree.GetPosition("password")) // use a query to gather elements without walking the tree results, _ := config.Query("$..[user,password]") for ii, item := range results.Values() { fmt.Println("Query result %d: %v", ii, item) } } ``` ## Documentation The documentation and additional examples are available at [godoc.org](http://godoc.org/github.com/pelletier/go-toml). ## Tools Go-toml provides two handy command line tools: * `tomll`: Reads TOML files and lint them. ``` go install github.com/pelletier/go-toml/cmd/tomll tomll --help ``` * `tomljson`: Reads a TOML file and outputs its JSON representation. ``` go install github.com/pelletier/go-toml/cmd/tomljson tomljson --help ``` ## Contribute Feel free to report bugs and patches using GitHub's pull requests system on [pelletier/go-toml](https://github.com/pelletier/go-toml). Any feedback would be much appreciated! ### Run tests You have to make sure two kind of tests run: 1. The Go unit tests 2. The TOML examples base You can run both of them using `./test.sh`. ## License The MIT License (MIT). Read [LICENSE](LICENSE). dep-0.3.2/vendor/github.com/pelletier/go-toml/clean.sh000077500000000000000000000002211317166637100226120ustar00rootroot00000000000000#!/bin/bash # fail out of the script if anything here fails set -e # clear out stuff generated by test.sh rm -rf src test_program_bin toml-test dep-0.3.2/vendor/github.com/pelletier/go-toml/doc.go000066400000000000000000000211731317166637100222760ustar00rootroot00000000000000// Package toml is a TOML markup language parser. // // This version supports the specification as described in // https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md // // TOML Parsing // // TOML data may be parsed in two ways: by file, or by string. // // // load TOML data by filename // tree, err := toml.LoadFile("filename.toml") // // // load TOML data stored in a string // tree, err := toml.Load(stringContainingTomlData) // // Either way, the result is a TomlTree object that can be used to navigate the // structure and data within the original document. // // // Getting data from the TomlTree // // After parsing TOML data with Load() or LoadFile(), use the Has() and Get() // methods on the returned TomlTree, to find your way through the document data. // // if tree.Has("foo") { // fmt.Println("foo is:", tree.Get("foo")) // } // // Working with Paths // // Go-toml has support for basic dot-separated key paths on the Has(), Get(), Set() // and GetDefault() methods. These are the same kind of key paths used within the // TOML specification for struct tames. // // // looks for a key named 'baz', within struct 'bar', within struct 'foo' // tree.Has("foo.bar.baz") // // // returns the key at this path, if it is there // tree.Get("foo.bar.baz") // // TOML allows keys to contain '.', which can cause this syntax to be problematic // for some documents. In such cases, use the GetPath(), HasPath(), and SetPath(), // methods to explicitly define the path. This form is also faster, since // it avoids having to parse the passed key for '.' delimiters. // // // looks for a key named 'baz', within struct 'bar', within struct 'foo' // tree.HasPath([]string{"foo","bar","baz"}) // // // returns the key at this path, if it is there // tree.GetPath([]string{"foo","bar","baz"}) // // Note that this is distinct from the heavyweight query syntax supported by // TomlTree.Query() and the Query() struct (see below). // // Position Support // // Each element within the TomlTree is stored with position metadata, which is // invaluable for providing semantic feedback to a user. This helps in // situations where the TOML file parses correctly, but contains data that is // not correct for the application. In such cases, an error message can be // generated that indicates the problem line and column number in the source // TOML document. // // // load TOML data // tree, _ := toml.Load("filename.toml") // // // get an entry and report an error if it's the wrong type // element := tree.Get("foo") // if value, ok := element.(int64); !ok { // return fmt.Errorf("%v: Element 'foo' must be an integer", tree.GetPosition("foo")) // } // // // report an error if an expected element is missing // if !tree.Has("bar") { // return fmt.Errorf("%v: Expected 'bar' element", tree.GetPosition("")) // } // // Query Support // // The TOML query path implementation is based loosely on the JSONPath specification: // http://goessner.net/articles/JsonPath/ // // The idea behind a query path is to allow quick access to any element, or set // of elements within TOML document, with a single expression. // // result, err := tree.Query("$.foo.bar.baz") // // This is roughly equivalent to: // // next := tree.Get("foo") // if next != nil { // next = next.Get("bar") // if next != nil { // next = next.Get("baz") // } // } // result := next // // err is nil if any parsing exception occurs. // // If no node in the tree matches the query, result will simply contain an empty list of // items. // // As illustrated above, the query path is much more efficient, especially since // the structure of the TOML file can vary. Rather than making assumptions about // a document's structure, a query allows the programmer to make structured // requests into the document, and get zero or more values as a result. // // The syntax of a query begins with a root token, followed by any number // sub-expressions: // // $ // Root of the TOML tree. This must always come first. // .name // Selects child of this node, where 'name' is a TOML key // name. // ['name'] // Selects child of this node, where 'name' is a string // containing a TOML key name. // [index] // Selcts child array element at 'index'. // ..expr // Recursively selects all children, filtered by an a union, // index, or slice expression. // ..* // Recursive selection of all nodes at this point in the // tree. // .* // Selects all children of the current node. // [expr,expr] // Union operator - a logical 'or' grouping of two or more // sub-expressions: index, key name, or filter. // [start:end:step] // Slice operator - selects array elements from start to // end-1, at the given step. All three arguments are // optional. // [?(filter)] // Named filter expression - the function 'filter' is // used to filter children at this node. // // Query Indexes And Slices // // Index expressions perform no bounds checking, and will contribute no // values to the result set if the provided index or index range is invalid. // Negative indexes represent values from the end of the array, counting backwards. // // // select the last index of the array named 'foo' // tree.Query("$.foo[-1]") // // Slice expressions are supported, by using ':' to separate a start/end index pair. // // // select up to the first five elements in the array // tree.Query("$.foo[0:5]") // // Slice expressions also allow negative indexes for the start and stop // arguments. // // // select all array elements. // tree.Query("$.foo[0:-1]") // // Slice expressions may have an optional stride/step parameter: // // // select every other element // tree.Query("$.foo[0:-1:2]") // // Slice start and end parameters are also optional: // // // these are all equivalent and select all the values in the array // tree.Query("$.foo[:]") // tree.Query("$.foo[0:]") // tree.Query("$.foo[:-1]") // tree.Query("$.foo[0:-1:]") // tree.Query("$.foo[::1]") // tree.Query("$.foo[0::1]") // tree.Query("$.foo[:-1:1]") // tree.Query("$.foo[0:-1:1]") // // Query Filters // // Query filters are used within a Union [,] or single Filter [] expression. // A filter only allows nodes that qualify through to the next expression, // and/or into the result set. // // // returns children of foo that are permitted by the 'bar' filter. // tree.Query("$.foo[?(bar)]") // // There are several filters provided with the library: // // tree // Allows nodes of type TomlTree. // int // Allows nodes of type int64. // float // Allows nodes of type float64. // string // Allows nodes of type string. // time // Allows nodes of type time.Time. // bool // Allows nodes of type bool. // // Query Results // // An executed query returns a QueryResult object. This contains the nodes // in the TOML tree that qualify the query expression. Position information // is also available for each value in the set. // // // display the results of a query // results := tree.Query("$.foo.bar.baz") // for idx, value := results.Values() { // fmt.Println("%v: %v", results.Positions()[idx], value) // } // // Compiled Queries // // Queries may be executed directly on a TomlTree object, or compiled ahead // of time and executed discretely. The former is more convienent, but has the // penalty of having to recompile the query expression each time. // // // basic query // results := tree.Query("$.foo.bar.baz") // // // compiled query // query := toml.CompileQuery("$.foo.bar.baz") // results := query.Execute(tree) // // // run the compiled query again on a different tree // moreResults := query.Execute(anotherTree) // // User Defined Query Filters // // Filter expressions may also be user defined by using the SetFilter() // function on the Query object. The function must return true/false, which // signifies if the passed node is kept or discarded, respectively. // // // create a query that references a user-defined filter // query, _ := CompileQuery("$[?(bazOnly)]") // // // define the filter, and assign it to the query // query.SetFilter("bazOnly", func(node interface{}) bool{ // if tree, ok := node.(*TomlTree); ok { // return tree.Has("baz") // } // return false // reject all other node types // }) // // // run the query // query.Execute(tree) // package toml dep-0.3.2/vendor/github.com/pelletier/go-toml/doc_test.go000066400000000000000000000037501317166637100233360ustar00rootroot00000000000000// code examples for godoc package toml import ( "fmt" ) func ExampleNodeFilterFn_filterExample() { tree, _ := Load(` [struct_one] foo = "foo" bar = "bar" [struct_two] baz = "baz" gorf = "gorf" `) // create a query that references a user-defined-filter query, _ := CompileQuery("$[?(bazOnly)]") // define the filter, and assign it to the query query.SetFilter("bazOnly", func(node interface{}) bool { if tree, ok := node.(*TomlTree); ok { return tree.Has("baz") } return false // reject all other node types }) // results contain only the 'struct_two' TomlTree query.Execute(tree) } func ExampleQuery_queryExample() { config, _ := Load(` [[book]] title = "The Stand" author = "Stephen King" [[book]] title = "For Whom the Bell Tolls" author = "Ernest Hemmingway" [[book]] title = "Neuromancer" author = "William Gibson" `) // find and print all the authors in the document authors, _ := config.Query("$.book.author") for _, name := range authors.Values() { fmt.Println(name) } } func Example_comprehensiveExample() { config, err := LoadFile("config.toml") if err != nil { fmt.Println("Error ", err.Error()) } else { // retrieve data directly user := config.Get("postgres.user").(string) password := config.Get("postgres.password").(string) // or using an intermediate object configTree := config.Get("postgres").(*TomlTree) user = configTree.Get("user").(string) password = configTree.Get("password").(string) fmt.Println("User is ", user, ". Password is ", password) // show where elements are in the file fmt.Printf("User position: %v\n", configTree.GetPosition("user")) fmt.Printf("Password position: %v\n", configTree.GetPosition("password")) // use a query to gather elements without walking the tree results, _ := config.Query("$..[user,password]") for ii, item := range results.Values() { fmt.Printf("Query result %d: %v\n", ii, item) } } } dep-0.3.2/vendor/github.com/pelletier/go-toml/example-crlf.toml000066400000000000000000000012051317166637100244500ustar00rootroot00000000000000# This is a TOML document. Boom. title = "TOML Example" [owner] name = "Tom Preston-Werner" organization = "GitHub" bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." dob = 1979-05-27T07:32:00Z # First class dates? Why not? [database] server = "192.168.1.1" ports = [ 8001, 8001, 8002 ] connection_max = 5000 enabled = true [servers] # You can indent as you please. Tabs or spaces. TOML don't care. [servers.alpha] ip = "10.0.0.1" dc = "eqdc10" [servers.beta] ip = "10.0.0.2" dc = "eqdc10" [clients] data = [ ["gamma", "delta"], [1, 2] ] # just an update to make sure parsers support it dep-0.3.2/vendor/github.com/pelletier/go-toml/example.toml000066400000000000000000000011501317166637100235230ustar00rootroot00000000000000# This is a TOML document. Boom. title = "TOML Example" [owner] name = "Tom Preston-Werner" organization = "GitHub" bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." dob = 1979-05-27T07:32:00Z # First class dates? Why not? [database] server = "192.168.1.1" ports = [ 8001, 8001, 8002 ] connection_max = 5000 enabled = true [servers] # You can indent as you please. Tabs or spaces. TOML don't care. [servers.alpha] ip = "10.0.0.1" dc = "eqdc10" [servers.beta] ip = "10.0.0.2" dc = "eqdc10" [clients] data = [ ["gamma", "delta"], [1, 2] ] # just an update to make sure parsers support it dep-0.3.2/vendor/github.com/pelletier/go-toml/keysparsing.go000066400000000000000000000033771317166637100240760ustar00rootroot00000000000000// Parsing keys handling both bare and quoted keys. package toml import ( "bytes" "errors" "fmt" "unicode" ) func parseKey(key string) ([]string, error) { groups := []string{} var buffer bytes.Buffer inQuotes := false wasInQuotes := false escapeNext := false ignoreSpace := true expectDot := false for _, char := range key { if ignoreSpace { if char == ' ' { continue } ignoreSpace = false } if escapeNext { buffer.WriteRune(char) escapeNext = false continue } switch char { case '\\': escapeNext = true continue case '"': if inQuotes { groups = append(groups, buffer.String()) buffer.Reset() wasInQuotes = true } inQuotes = !inQuotes expectDot = false case '.': if inQuotes { buffer.WriteRune(char) } else { if !wasInQuotes { if buffer.Len() == 0 { return nil, errors.New("empty table key") } groups = append(groups, buffer.String()) buffer.Reset() } ignoreSpace = true expectDot = false wasInQuotes = false } case ' ': if inQuotes { buffer.WriteRune(char) } else { expectDot = true } default: if !inQuotes && !isValidBareChar(char) { return nil, fmt.Errorf("invalid bare character: %c", char) } if !inQuotes && expectDot { return nil, errors.New("what?") } buffer.WriteRune(char) expectDot = false } } if inQuotes { return nil, errors.New("mismatched quotes") } if escapeNext { return nil, errors.New("unfinished escape sequence") } if buffer.Len() > 0 { groups = append(groups, buffer.String()) } if len(groups) == 0 { return nil, errors.New("empty key") } return groups, nil } func isValidBareChar(r rune) bool { return isAlphanumeric(r) || r == '-' || unicode.IsNumber(r) } dep-0.3.2/vendor/github.com/pelletier/go-toml/keysparsing_test.go000066400000000000000000000026361317166637100251320ustar00rootroot00000000000000package toml import ( "fmt" "testing" ) func testResult(t *testing.T, key string, expected []string) { parsed, err := parseKey(key) t.Logf("key=%s expected=%s parsed=%s", key, expected, parsed) if err != nil { t.Fatal("Unexpected error:", err) } if len(expected) != len(parsed) { t.Fatal("Expected length", len(expected), "but", len(parsed), "parsed") } for index, expectedKey := range expected { if expectedKey != parsed[index] { t.Fatal("Expected", expectedKey, "at index", index, "but found", parsed[index]) } } } func testError(t *testing.T, key string, expectedError string) { _, err := parseKey(key) if fmt.Sprintf("%s", err) != expectedError { t.Fatalf("Expected error \"%s\", but got \"%s\".", expectedError, err) } } func TestBareKeyBasic(t *testing.T) { testResult(t, "test", []string{"test"}) } func TestBareKeyDotted(t *testing.T) { testResult(t, "this.is.a.key", []string{"this", "is", "a", "key"}) } func TestDottedKeyBasic(t *testing.T) { testResult(t, "\"a.dotted.key\"", []string{"a.dotted.key"}) } func TestBaseKeyPound(t *testing.T) { testError(t, "hello#world", "invalid bare character: #") } func TestQuotedKeys(t *testing.T) { testResult(t, `hello."foo".bar`, []string{"hello", "foo", "bar"}) testResult(t, `"hello!"`, []string{"hello!"}) } func TestEmptyKey(t *testing.T) { testError(t, "", "empty key") testError(t, " ", "empty key") testResult(t, `""`, []string{""}) } dep-0.3.2/vendor/github.com/pelletier/go-toml/lexer.go000066400000000000000000000301641317166637100226500ustar00rootroot00000000000000// TOML lexer. // // Written using the principles developed by Rob Pike in // http://www.youtube.com/watch?v=HxaD_trXwRE package toml import ( "errors" "fmt" "io" "regexp" "strconv" "strings" "github.com/pelletier/go-buffruneio" ) var dateRegexp *regexp.Regexp // Define state functions type tomlLexStateFn func() tomlLexStateFn // Define lexer type tomlLexer struct { input *buffruneio.Reader // Textual source buffer []rune // Runes composing the current token tokens chan token depth int line int col int endbufferLine int endbufferCol int } // Basic read operations on input func (l *tomlLexer) read() rune { r, _, err := l.input.ReadRune() if err != nil { panic(err) } if r == '\n' { l.endbufferLine++ l.endbufferCol = 1 } else { l.endbufferCol++ } return r } func (l *tomlLexer) next() rune { r := l.read() if r != eof { l.buffer = append(l.buffer, r) } return r } func (l *tomlLexer) ignore() { l.buffer = make([]rune, 0) l.line = l.endbufferLine l.col = l.endbufferCol } func (l *tomlLexer) skip() { l.next() l.ignore() } func (l *tomlLexer) fastForward(n int) { for i := 0; i < n; i++ { l.next() } } func (l *tomlLexer) emitWithValue(t tokenType, value string) { l.tokens <- token{ Position: Position{l.line, l.col}, typ: t, val: value, } l.ignore() } func (l *tomlLexer) emit(t tokenType) { l.emitWithValue(t, string(l.buffer)) } func (l *tomlLexer) peek() rune { r, _, err := l.input.ReadRune() if err != nil { panic(err) } l.input.UnreadRune() return r } func (l *tomlLexer) follow(next string) bool { for _, expectedRune := range next { r, _, err := l.input.ReadRune() defer l.input.UnreadRune() if err != nil { panic(err) } if expectedRune != r { return false } } return true } // Error management func (l *tomlLexer) errorf(format string, args ...interface{}) tomlLexStateFn { l.tokens <- token{ Position: Position{l.line, l.col}, typ: tokenError, val: fmt.Sprintf(format, args...), } return nil } // State functions func (l *tomlLexer) lexVoid() tomlLexStateFn { for { next := l.peek() switch next { case '[': return l.lexTableKey case '#': return l.lexComment(l.lexVoid) case '=': return l.lexEqual case '\r': fallthrough case '\n': l.skip() continue } if isSpace(next) { l.skip() } if l.depth > 0 { return l.lexRvalue } if isKeyStartChar(next) { return l.lexKey } if next == eof { l.next() break } } l.emit(tokenEOF) return nil } func (l *tomlLexer) lexRvalue() tomlLexStateFn { for { next := l.peek() switch next { case '.': return l.errorf("cannot start float with a dot") case '=': return l.lexEqual case '[': l.depth++ return l.lexLeftBracket case ']': l.depth-- return l.lexRightBracket case '{': return l.lexLeftCurlyBrace case '}': return l.lexRightCurlyBrace case '#': return l.lexComment(l.lexRvalue) case '"': return l.lexString case '\'': return l.lexLiteralString case ',': return l.lexComma case '\r': fallthrough case '\n': l.skip() if l.depth == 0 { return l.lexVoid } return l.lexRvalue case '_': return l.errorf("cannot start number with underscore") } if l.follow("true") { return l.lexTrue } if l.follow("false") { return l.lexFalse } if isSpace(next) { l.skip() continue } if next == eof { l.next() break } possibleDate := string(l.input.PeekRunes(35)) dateMatch := dateRegexp.FindString(possibleDate) if dateMatch != "" { l.fastForward(len(dateMatch)) return l.lexDate } if next == '+' || next == '-' || isDigit(next) { return l.lexNumber } if isAlphanumeric(next) { return l.lexKey } return l.errorf("no value can start with %c", next) } l.emit(tokenEOF) return nil } func (l *tomlLexer) lexLeftCurlyBrace() tomlLexStateFn { l.next() l.emit(tokenLeftCurlyBrace) return l.lexRvalue } func (l *tomlLexer) lexRightCurlyBrace() tomlLexStateFn { l.next() l.emit(tokenRightCurlyBrace) return l.lexRvalue } func (l *tomlLexer) lexDate() tomlLexStateFn { l.emit(tokenDate) return l.lexRvalue } func (l *tomlLexer) lexTrue() tomlLexStateFn { l.fastForward(4) l.emit(tokenTrue) return l.lexRvalue } func (l *tomlLexer) lexFalse() tomlLexStateFn { l.fastForward(5) l.emit(tokenFalse) return l.lexRvalue } func (l *tomlLexer) lexEqual() tomlLexStateFn { l.next() l.emit(tokenEqual) return l.lexRvalue } func (l *tomlLexer) lexComma() tomlLexStateFn { l.next() l.emit(tokenComma) return l.lexRvalue } func (l *tomlLexer) lexKey() tomlLexStateFn { growingString := "" for r := l.peek(); isKeyChar(r) || r == '\n' || r == '\r'; r = l.peek() { if r == '"' { l.next() str, err := l.lexStringAsString(`"`, false, true) if err != nil { return l.errorf(err.Error()) } growingString += `"` + str + `"` l.next() continue } else if r == '\n' { return l.errorf("keys cannot contain new lines") } else if isSpace(r) { break } else if !isValidBareChar(r) { return l.errorf("keys cannot contain %c character", r) } growingString += string(r) l.next() } l.emitWithValue(tokenKey, growingString) return l.lexVoid } func (l *tomlLexer) lexComment(previousState tomlLexStateFn) tomlLexStateFn { return func() tomlLexStateFn { for next := l.peek(); next != '\n' && next != eof; next = l.peek() { if next == '\r' && l.follow("\r\n") { break } l.next() } l.ignore() return previousState } } func (l *tomlLexer) lexLeftBracket() tomlLexStateFn { l.next() l.emit(tokenLeftBracket) return l.lexRvalue } func (l *tomlLexer) lexLiteralStringAsString(terminator string, discardLeadingNewLine bool) (string, error) { growingString := "" if discardLeadingNewLine { if l.follow("\r\n") { l.skip() l.skip() } else if l.peek() == '\n' { l.skip() } } // find end of string for { if l.follow(terminator) { return growingString, nil } next := l.peek() if next == eof { break } growingString += string(l.next()) } return "", errors.New("unclosed string") } func (l *tomlLexer) lexLiteralString() tomlLexStateFn { l.skip() // handle special case for triple-quote terminator := "'" discardLeadingNewLine := false if l.follow("''") { l.skip() l.skip() terminator = "'''" discardLeadingNewLine = true } str, err := l.lexLiteralStringAsString(terminator, discardLeadingNewLine) if err != nil { return l.errorf(err.Error()) } l.emitWithValue(tokenString, str) l.fastForward(len(terminator)) l.ignore() return l.lexRvalue } // Lex a string and return the results as a string. // Terminator is the substring indicating the end of the token. // The resulting string does not include the terminator. func (l *tomlLexer) lexStringAsString(terminator string, discardLeadingNewLine, acceptNewLines bool) (string, error) { growingString := "" if discardLeadingNewLine { if l.follow("\r\n") { l.skip() l.skip() } else if l.peek() == '\n' { l.skip() } } for { if l.follow(terminator) { return growingString, nil } if l.follow("\\") { l.next() switch l.peek() { case '\r': fallthrough case '\n': fallthrough case '\t': fallthrough case ' ': // skip all whitespace chars following backslash for strings.ContainsRune("\r\n\t ", l.peek()) { l.next() } case '"': growingString += "\"" l.next() case 'n': growingString += "\n" l.next() case 'b': growingString += "\b" l.next() case 'f': growingString += "\f" l.next() case '/': growingString += "/" l.next() case 't': growingString += "\t" l.next() case 'r': growingString += "\r" l.next() case '\\': growingString += "\\" l.next() case 'u': l.next() code := "" for i := 0; i < 4; i++ { c := l.peek() if !isHexDigit(c) { return "", errors.New("unfinished unicode escape") } l.next() code = code + string(c) } intcode, err := strconv.ParseInt(code, 16, 32) if err != nil { return "", errors.New("invalid unicode escape: \\u" + code) } growingString += string(rune(intcode)) case 'U': l.next() code := "" for i := 0; i < 8; i++ { c := l.peek() if !isHexDigit(c) { return "", errors.New("unfinished unicode escape") } l.next() code = code + string(c) } intcode, err := strconv.ParseInt(code, 16, 64) if err != nil { return "", errors.New("invalid unicode escape: \\U" + code) } growingString += string(rune(intcode)) default: return "", errors.New("invalid escape sequence: \\" + string(l.peek())) } } else { r := l.peek() if 0x00 <= r && r <= 0x1F && !(acceptNewLines && (r == '\n' || r == '\r')) { return "", fmt.Errorf("unescaped control character %U", r) } l.next() growingString += string(r) } if l.peek() == eof { break } } return "", errors.New("unclosed string") } func (l *tomlLexer) lexString() tomlLexStateFn { l.skip() // handle special case for triple-quote terminator := `"` discardLeadingNewLine := false acceptNewLines := false if l.follow(`""`) { l.skip() l.skip() terminator = `"""` discardLeadingNewLine = true acceptNewLines = true } str, err := l.lexStringAsString(terminator, discardLeadingNewLine, acceptNewLines) if err != nil { return l.errorf(err.Error()) } l.emitWithValue(tokenString, str) l.fastForward(len(terminator)) l.ignore() return l.lexRvalue } func (l *tomlLexer) lexTableKey() tomlLexStateFn { l.next() if l.peek() == '[' { // token '[[' signifies an array of tables l.next() l.emit(tokenDoubleLeftBracket) return l.lexInsideTableArrayKey } // vanilla table key l.emit(tokenLeftBracket) return l.lexInsideTableKey } func (l *tomlLexer) lexInsideTableArrayKey() tomlLexStateFn { for r := l.peek(); r != eof; r = l.peek() { switch r { case ']': if len(l.buffer) > 0 { l.emit(tokenKeyGroupArray) } l.next() if l.peek() != ']' { break } l.next() l.emit(tokenDoubleRightBracket) return l.lexVoid case '[': return l.errorf("table array key cannot contain ']'") default: l.next() } } return l.errorf("unclosed table array key") } func (l *tomlLexer) lexInsideTableKey() tomlLexStateFn { for r := l.peek(); r != eof; r = l.peek() { switch r { case ']': if len(l.buffer) > 0 { l.emit(tokenKeyGroup) } l.next() l.emit(tokenRightBracket) return l.lexVoid case '[': return l.errorf("table key cannot contain ']'") default: l.next() } } return l.errorf("unclosed table key") } func (l *tomlLexer) lexRightBracket() tomlLexStateFn { l.next() l.emit(tokenRightBracket) return l.lexRvalue } func (l *tomlLexer) lexNumber() tomlLexStateFn { r := l.peek() if r == '+' || r == '-' { l.next() } pointSeen := false expSeen := false digitSeen := false for { next := l.peek() if next == '.' { if pointSeen { return l.errorf("cannot have two dots in one float") } l.next() if !isDigit(l.peek()) { return l.errorf("float cannot end with a dot") } pointSeen = true } else if next == 'e' || next == 'E' { expSeen = true l.next() r := l.peek() if r == '+' || r == '-' { l.next() } } else if isDigit(next) { digitSeen = true l.next() } else if next == '_' { l.next() } else { break } if pointSeen && !digitSeen { return l.errorf("cannot start float with a dot") } } if !digitSeen { return l.errorf("no digit in that number") } if pointSeen || expSeen { l.emit(tokenFloat) } else { l.emit(tokenInteger) } return l.lexRvalue } func (l *tomlLexer) run() { for state := l.lexVoid; state != nil; { state = state() } close(l.tokens) } func init() { dateRegexp = regexp.MustCompile(`^\d{1,4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})`) } // Entry point func lexToml(input io.Reader) chan token { bufferedInput := buffruneio.NewReader(input) l := &tomlLexer{ input: bufferedInput, tokens: make(chan token), line: 1, col: 1, endbufferLine: 1, endbufferCol: 1, } go l.run() return l.tokens } dep-0.3.2/vendor/github.com/pelletier/go-toml/lexer_test.go000066400000000000000000000540531317166637100237120ustar00rootroot00000000000000package toml import ( "strings" "testing" ) func testFlow(t *testing.T, input string, expectedFlow []token) { ch := lexToml(strings.NewReader(input)) for _, expected := range expectedFlow { token := <-ch if token != expected { t.Log("While testing: ", input) t.Log("compared (got)", token, "to (expected)", expected) t.Log("\tvalue:", token.val, "<->", expected.val) t.Log("\tvalue as bytes:", []byte(token.val), "<->", []byte(expected.val)) t.Log("\ttype:", token.typ.String(), "<->", expected.typ.String()) t.Log("\tline:", token.Line, "<->", expected.Line) t.Log("\tcolumn:", token.Col, "<->", expected.Col) t.Log("compared", token, "to", expected) t.FailNow() } } tok, ok := <-ch if ok { t.Log("channel is not closed!") t.Log(len(ch)+1, "tokens remaining:") t.Log("token ->", tok) for token := range ch { t.Log("token ->", token) } t.FailNow() } } func TestValidKeyGroup(t *testing.T) { testFlow(t, "[hello world]", []token{ {Position{1, 1}, tokenLeftBracket, "["}, {Position{1, 2}, tokenKeyGroup, "hello world"}, {Position{1, 13}, tokenRightBracket, "]"}, {Position{1, 14}, tokenEOF, ""}, }) } func TestNestedQuotedUnicodeKeyGroup(t *testing.T) { testFlow(t, `[ j . "ʞ" . l ]`, []token{ {Position{1, 1}, tokenLeftBracket, "["}, {Position{1, 2}, tokenKeyGroup, ` j . "ʞ" . l `}, {Position{1, 15}, tokenRightBracket, "]"}, {Position{1, 16}, tokenEOF, ""}, }) } func TestUnclosedKeyGroup(t *testing.T) { testFlow(t, "[hello world", []token{ {Position{1, 1}, tokenLeftBracket, "["}, {Position{1, 2}, tokenError, "unclosed table key"}, }) } func TestComment(t *testing.T) { testFlow(t, "# blahblah", []token{ {Position{1, 11}, tokenEOF, ""}, }) } func TestKeyGroupComment(t *testing.T) { testFlow(t, "[hello world] # blahblah", []token{ {Position{1, 1}, tokenLeftBracket, "["}, {Position{1, 2}, tokenKeyGroup, "hello world"}, {Position{1, 13}, tokenRightBracket, "]"}, {Position{1, 25}, tokenEOF, ""}, }) } func TestMultipleKeyGroupsComment(t *testing.T) { testFlow(t, "[hello world] # blahblah\n[test]", []token{ {Position{1, 1}, tokenLeftBracket, "["}, {Position{1, 2}, tokenKeyGroup, "hello world"}, {Position{1, 13}, tokenRightBracket, "]"}, {Position{2, 1}, tokenLeftBracket, "["}, {Position{2, 2}, tokenKeyGroup, "test"}, {Position{2, 6}, tokenRightBracket, "]"}, {Position{2, 7}, tokenEOF, ""}, }) } func TestSimpleWindowsCRLF(t *testing.T) { testFlow(t, "a=4\r\nb=2", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 2}, tokenEqual, "="}, {Position{1, 3}, tokenInteger, "4"}, {Position{2, 1}, tokenKey, "b"}, {Position{2, 2}, tokenEqual, "="}, {Position{2, 3}, tokenInteger, "2"}, {Position{2, 4}, tokenEOF, ""}, }) } func TestBasicKey(t *testing.T) { testFlow(t, "hello", []token{ {Position{1, 1}, tokenKey, "hello"}, {Position{1, 6}, tokenEOF, ""}, }) } func TestBasicKeyWithUnderscore(t *testing.T) { testFlow(t, "hello_hello", []token{ {Position{1, 1}, tokenKey, "hello_hello"}, {Position{1, 12}, tokenEOF, ""}, }) } func TestBasicKeyWithDash(t *testing.T) { testFlow(t, "hello-world", []token{ {Position{1, 1}, tokenKey, "hello-world"}, {Position{1, 12}, tokenEOF, ""}, }) } func TestBasicKeyWithUppercaseMix(t *testing.T) { testFlow(t, "helloHELLOHello", []token{ {Position{1, 1}, tokenKey, "helloHELLOHello"}, {Position{1, 16}, tokenEOF, ""}, }) } func TestBasicKeyWithInternationalCharacters(t *testing.T) { testFlow(t, "héllÖ", []token{ {Position{1, 1}, tokenKey, "héllÖ"}, {Position{1, 6}, tokenEOF, ""}, }) } func TestBasicKeyAndEqual(t *testing.T) { testFlow(t, "hello =", []token{ {Position{1, 1}, tokenKey, "hello"}, {Position{1, 7}, tokenEqual, "="}, {Position{1, 8}, tokenEOF, ""}, }) } func TestKeyWithSharpAndEqual(t *testing.T) { testFlow(t, "key#name = 5", []token{ {Position{1, 1}, tokenError, "keys cannot contain # character"}, }) } func TestKeyWithSymbolsAndEqual(t *testing.T) { testFlow(t, "~!@$^&*()_+-`1234567890[]\\|/?><.,;:' = 5", []token{ {Position{1, 1}, tokenError, "keys cannot contain ~ character"}, }) } func TestKeyEqualStringEscape(t *testing.T) { testFlow(t, `foo = "hello\""`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "hello\""}, {Position{1, 16}, tokenEOF, ""}, }) } func TestKeyEqualStringUnfinished(t *testing.T) { testFlow(t, `foo = "bar`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenError, "unclosed string"}, }) } func TestKeyEqualString(t *testing.T) { testFlow(t, `foo = "bar"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "bar"}, {Position{1, 12}, tokenEOF, ""}, }) } func TestKeyEqualTrue(t *testing.T) { testFlow(t, "foo = true", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenTrue, "true"}, {Position{1, 11}, tokenEOF, ""}, }) } func TestKeyEqualFalse(t *testing.T) { testFlow(t, "foo = false", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenFalse, "false"}, {Position{1, 12}, tokenEOF, ""}, }) } func TestArrayNestedString(t *testing.T) { testFlow(t, `a = [ ["hello", "world"] ]`, []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenLeftBracket, "["}, {Position{1, 7}, tokenLeftBracket, "["}, {Position{1, 9}, tokenString, "hello"}, {Position{1, 15}, tokenComma, ","}, {Position{1, 18}, tokenString, "world"}, {Position{1, 24}, tokenRightBracket, "]"}, {Position{1, 26}, tokenRightBracket, "]"}, {Position{1, 27}, tokenEOF, ""}, }) } func TestArrayNestedInts(t *testing.T) { testFlow(t, "a = [ [42, 21], [10] ]", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenLeftBracket, "["}, {Position{1, 7}, tokenLeftBracket, "["}, {Position{1, 8}, tokenInteger, "42"}, {Position{1, 10}, tokenComma, ","}, {Position{1, 12}, tokenInteger, "21"}, {Position{1, 14}, tokenRightBracket, "]"}, {Position{1, 15}, tokenComma, ","}, {Position{1, 17}, tokenLeftBracket, "["}, {Position{1, 18}, tokenInteger, "10"}, {Position{1, 20}, tokenRightBracket, "]"}, {Position{1, 22}, tokenRightBracket, "]"}, {Position{1, 23}, tokenEOF, ""}, }) } func TestArrayInts(t *testing.T) { testFlow(t, "a = [ 42, 21, 10, ]", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenLeftBracket, "["}, {Position{1, 7}, tokenInteger, "42"}, {Position{1, 9}, tokenComma, ","}, {Position{1, 11}, tokenInteger, "21"}, {Position{1, 13}, tokenComma, ","}, {Position{1, 15}, tokenInteger, "10"}, {Position{1, 17}, tokenComma, ","}, {Position{1, 19}, tokenRightBracket, "]"}, {Position{1, 20}, tokenEOF, ""}, }) } func TestMultilineArrayComments(t *testing.T) { testFlow(t, "a = [1, # wow\n2, # such items\n3, # so array\n]", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenLeftBracket, "["}, {Position{1, 6}, tokenInteger, "1"}, {Position{1, 7}, tokenComma, ","}, {Position{2, 1}, tokenInteger, "2"}, {Position{2, 2}, tokenComma, ","}, {Position{3, 1}, tokenInteger, "3"}, {Position{3, 2}, tokenComma, ","}, {Position{4, 1}, tokenRightBracket, "]"}, {Position{4, 2}, tokenEOF, ""}, }) } func TestNestedArraysComment(t *testing.T) { toml := ` someArray = [ # does not work ["entry1"] ]` testFlow(t, toml, []token{ {Position{2, 1}, tokenKey, "someArray"}, {Position{2, 11}, tokenEqual, "="}, {Position{2, 13}, tokenLeftBracket, "["}, {Position{4, 1}, tokenLeftBracket, "["}, {Position{4, 3}, tokenString, "entry1"}, {Position{4, 10}, tokenRightBracket, "]"}, {Position{5, 1}, tokenRightBracket, "]"}, {Position{5, 2}, tokenEOF, ""}, }) } func TestKeyEqualArrayBools(t *testing.T) { testFlow(t, "foo = [true, false, true]", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenLeftBracket, "["}, {Position{1, 8}, tokenTrue, "true"}, {Position{1, 12}, tokenComma, ","}, {Position{1, 14}, tokenFalse, "false"}, {Position{1, 19}, tokenComma, ","}, {Position{1, 21}, tokenTrue, "true"}, {Position{1, 25}, tokenRightBracket, "]"}, {Position{1, 26}, tokenEOF, ""}, }) } func TestKeyEqualArrayBoolsWithComments(t *testing.T) { testFlow(t, "foo = [true, false, true] # YEAH", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenLeftBracket, "["}, {Position{1, 8}, tokenTrue, "true"}, {Position{1, 12}, tokenComma, ","}, {Position{1, 14}, tokenFalse, "false"}, {Position{1, 19}, tokenComma, ","}, {Position{1, 21}, tokenTrue, "true"}, {Position{1, 25}, tokenRightBracket, "]"}, {Position{1, 33}, tokenEOF, ""}, }) } func TestDateRegexp(t *testing.T) { if dateRegexp.FindString("1979-05-27T07:32:00Z") == "" { t.Error("basic lexing") } if dateRegexp.FindString("1979-05-27T00:32:00-07:00") == "" { t.Error("offset lexing") } if dateRegexp.FindString("1979-05-27T00:32:00.999999-07:00") == "" { t.Error("nano precision lexing") } } func TestKeyEqualDate(t *testing.T) { testFlow(t, "foo = 1979-05-27T07:32:00Z", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenDate, "1979-05-27T07:32:00Z"}, {Position{1, 27}, tokenEOF, ""}, }) testFlow(t, "foo = 1979-05-27T00:32:00-07:00", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenDate, "1979-05-27T00:32:00-07:00"}, {Position{1, 32}, tokenEOF, ""}, }) testFlow(t, "foo = 1979-05-27T00:32:00.999999-07:00", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenDate, "1979-05-27T00:32:00.999999-07:00"}, {Position{1, 39}, tokenEOF, ""}, }) } func TestFloatEndingWithDot(t *testing.T) { testFlow(t, "foo = 42.", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenError, "float cannot end with a dot"}, }) } func TestFloatWithTwoDots(t *testing.T) { testFlow(t, "foo = 4.2.", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenError, "cannot have two dots in one float"}, }) } func TestFloatWithExponent1(t *testing.T) { testFlow(t, "a = 5e+22", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenFloat, "5e+22"}, {Position{1, 10}, tokenEOF, ""}, }) } func TestFloatWithExponent2(t *testing.T) { testFlow(t, "a = 5E+22", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenFloat, "5E+22"}, {Position{1, 10}, tokenEOF, ""}, }) } func TestFloatWithExponent3(t *testing.T) { testFlow(t, "a = -5e+22", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenFloat, "-5e+22"}, {Position{1, 11}, tokenEOF, ""}, }) } func TestFloatWithExponent4(t *testing.T) { testFlow(t, "a = -5e-22", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenFloat, "-5e-22"}, {Position{1, 11}, tokenEOF, ""}, }) } func TestFloatWithExponent5(t *testing.T) { testFlow(t, "a = 6.626e-34", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenFloat, "6.626e-34"}, {Position{1, 14}, tokenEOF, ""}, }) } func TestInvalidEsquapeSequence(t *testing.T) { testFlow(t, `foo = "\x"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenError, "invalid escape sequence: \\x"}, }) } func TestNestedArrays(t *testing.T) { testFlow(t, "foo = [[[]]]", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenLeftBracket, "["}, {Position{1, 8}, tokenLeftBracket, "["}, {Position{1, 9}, tokenLeftBracket, "["}, {Position{1, 10}, tokenRightBracket, "]"}, {Position{1, 11}, tokenRightBracket, "]"}, {Position{1, 12}, tokenRightBracket, "]"}, {Position{1, 13}, tokenEOF, ""}, }) } func TestKeyEqualNumber(t *testing.T) { testFlow(t, "foo = 42", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenInteger, "42"}, {Position{1, 9}, tokenEOF, ""}, }) testFlow(t, "foo = +42", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenInteger, "+42"}, {Position{1, 10}, tokenEOF, ""}, }) testFlow(t, "foo = -42", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenInteger, "-42"}, {Position{1, 10}, tokenEOF, ""}, }) testFlow(t, "foo = 4.2", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenFloat, "4.2"}, {Position{1, 10}, tokenEOF, ""}, }) testFlow(t, "foo = +4.2", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenFloat, "+4.2"}, {Position{1, 11}, tokenEOF, ""}, }) testFlow(t, "foo = -4.2", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenFloat, "-4.2"}, {Position{1, 11}, tokenEOF, ""}, }) testFlow(t, "foo = 1_000", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenInteger, "1_000"}, {Position{1, 12}, tokenEOF, ""}, }) testFlow(t, "foo = 5_349_221", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenInteger, "5_349_221"}, {Position{1, 16}, tokenEOF, ""}, }) testFlow(t, "foo = 1_2_3_4_5", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenInteger, "1_2_3_4_5"}, {Position{1, 16}, tokenEOF, ""}, }) testFlow(t, "flt8 = 9_224_617.445_991_228_313", []token{ {Position{1, 1}, tokenKey, "flt8"}, {Position{1, 6}, tokenEqual, "="}, {Position{1, 8}, tokenFloat, "9_224_617.445_991_228_313"}, {Position{1, 33}, tokenEOF, ""}, }) testFlow(t, "foo = +", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenError, "no digit in that number"}, }) } func TestMultiline(t *testing.T) { testFlow(t, "foo = 42\nbar=21", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 7}, tokenInteger, "42"}, {Position{2, 1}, tokenKey, "bar"}, {Position{2, 4}, tokenEqual, "="}, {Position{2, 5}, tokenInteger, "21"}, {Position{2, 7}, tokenEOF, ""}, }) } func TestKeyEqualStringUnicodeEscape(t *testing.T) { testFlow(t, `foo = "hello \u2665"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "hello ♥"}, {Position{1, 21}, tokenEOF, ""}, }) testFlow(t, `foo = "hello \U000003B4"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "hello δ"}, {Position{1, 25}, tokenEOF, ""}, }) testFlow(t, `foo = "\uabcd"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "\uabcd"}, {Position{1, 15}, tokenEOF, ""}, }) testFlow(t, `foo = "\uABCD"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "\uABCD"}, {Position{1, 15}, tokenEOF, ""}, }) testFlow(t, `foo = "\U000bcdef"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "\U000bcdef"}, {Position{1, 19}, tokenEOF, ""}, }) testFlow(t, `foo = "\U000BCDEF"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "\U000BCDEF"}, {Position{1, 19}, tokenEOF, ""}, }) testFlow(t, `foo = "\u2"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenError, "unfinished unicode escape"}, }) testFlow(t, `foo = "\U2"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenError, "unfinished unicode escape"}, }) } func TestKeyEqualStringNoEscape(t *testing.T) { testFlow(t, "foo = \"hello \u0002\"", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenError, "unescaped control character U+0002"}, }) testFlow(t, "foo = \"hello \u001F\"", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenError, "unescaped control character U+001F"}, }) } func TestLiteralString(t *testing.T) { testFlow(t, `foo = 'C:\Users\nodejs\templates'`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, `C:\Users\nodejs\templates`}, {Position{1, 34}, tokenEOF, ""}, }) testFlow(t, `foo = '\\ServerX\admin$\system32\'`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, `\\ServerX\admin$\system32\`}, {Position{1, 35}, tokenEOF, ""}, }) testFlow(t, `foo = 'Tom "Dubs" Preston-Werner'`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, `Tom "Dubs" Preston-Werner`}, {Position{1, 34}, tokenEOF, ""}, }) testFlow(t, `foo = '<\i\c*\s*>'`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, `<\i\c*\s*>`}, {Position{1, 19}, tokenEOF, ""}, }) testFlow(t, `foo = 'C:\Users\nodejs\unfinis`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenError, "unclosed string"}, }) } func TestMultilineLiteralString(t *testing.T) { testFlow(t, `foo = '''hello 'literal' world'''`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 10}, tokenString, `hello 'literal' world`}, {Position{1, 34}, tokenEOF, ""}, }) testFlow(t, "foo = '''\nhello\n'literal'\nworld'''", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{2, 1}, tokenString, "hello\n'literal'\nworld"}, {Position{4, 9}, tokenEOF, ""}, }) testFlow(t, "foo = '''\r\nhello\r\n'literal'\r\nworld'''", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{2, 1}, tokenString, "hello\r\n'literal'\r\nworld"}, {Position{4, 9}, tokenEOF, ""}, }) } func TestMultilineString(t *testing.T) { testFlow(t, `foo = """hello "literal" world"""`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 10}, tokenString, `hello "literal" world`}, {Position{1, 34}, tokenEOF, ""}, }) testFlow(t, "foo = \"\"\"\r\nhello\\\r\n\"literal\"\\\nworld\"\"\"", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{2, 1}, tokenString, "hello\"literal\"world"}, {Position{4, 9}, tokenEOF, ""}, }) testFlow(t, "foo = \"\"\"\\\n \\\n \\\n hello\\\nmultiline\\\nworld\"\"\"", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 10}, tokenString, "hellomultilineworld"}, {Position{6, 9}, tokenEOF, ""}, }) testFlow(t, "key2 = \"\"\"\nThe quick brown \\\n\n\n fox jumps over \\\n the lazy dog.\"\"\"", []token{ {Position{1, 1}, tokenKey, "key2"}, {Position{1, 6}, tokenEqual, "="}, {Position{2, 1}, tokenString, "The quick brown fox jumps over the lazy dog."}, {Position{6, 21}, tokenEOF, ""}, }) testFlow(t, "key2 = \"\"\"\\\n The quick brown \\\n fox jumps over \\\n the lazy dog.\\\n \"\"\"", []token{ {Position{1, 1}, tokenKey, "key2"}, {Position{1, 6}, tokenEqual, "="}, {Position{1, 11}, tokenString, "The quick brown fox jumps over the lazy dog."}, {Position{5, 11}, tokenEOF, ""}, }) testFlow(t, `key2 = "Roses are red\nViolets are blue"`, []token{ {Position{1, 1}, tokenKey, "key2"}, {Position{1, 6}, tokenEqual, "="}, {Position{1, 9}, tokenString, "Roses are red\nViolets are blue"}, {Position{1, 41}, tokenEOF, ""}, }) testFlow(t, "key2 = \"\"\"\nRoses are red\nViolets are blue\"\"\"", []token{ {Position{1, 1}, tokenKey, "key2"}, {Position{1, 6}, tokenEqual, "="}, {Position{2, 1}, tokenString, "Roses are red\nViolets are blue"}, {Position{3, 20}, tokenEOF, ""}, }) } func TestUnicodeString(t *testing.T) { testFlow(t, `foo = "hello ♥ world"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "hello ♥ world"}, {Position{1, 22}, tokenEOF, ""}, }) } func TestEscapeInString(t *testing.T) { testFlow(t, `foo = "\b\f\/"`, []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenEqual, "="}, {Position{1, 8}, tokenString, "\b\f/"}, {Position{1, 15}, tokenEOF, ""}, }) } func TestKeyGroupArray(t *testing.T) { testFlow(t, "[[foo]]", []token{ {Position{1, 1}, tokenDoubleLeftBracket, "[["}, {Position{1, 3}, tokenKeyGroupArray, "foo"}, {Position{1, 6}, tokenDoubleRightBracket, "]]"}, {Position{1, 8}, tokenEOF, ""}, }) } func TestQuotedKey(t *testing.T) { testFlow(t, "\"a b\" = 42", []token{ {Position{1, 1}, tokenKey, "\"a b\""}, {Position{1, 7}, tokenEqual, "="}, {Position{1, 9}, tokenInteger, "42"}, {Position{1, 11}, tokenEOF, ""}, }) } func TestKeyNewline(t *testing.T) { testFlow(t, "a\n= 4", []token{ {Position{1, 1}, tokenError, "keys cannot contain new lines"}, }) } func TestInvalidFloat(t *testing.T) { testFlow(t, "a=7e1_", []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 2}, tokenEqual, "="}, {Position{1, 3}, tokenFloat, "7e1_"}, {Position{1, 7}, tokenEOF, ""}, }) } func TestLexUnknownRvalue(t *testing.T) { testFlow(t, `a = !b`, []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenError, "no value can start with !"}, }) testFlow(t, `a = \b`, []token{ {Position{1, 1}, tokenKey, "a"}, {Position{1, 3}, tokenEqual, "="}, {Position{1, 5}, tokenError, `no value can start with \`}, }) } dep-0.3.2/vendor/github.com/pelletier/go-toml/marshal.go000066400000000000000000000324431317166637100231620ustar00rootroot00000000000000package toml import ( "errors" "fmt" "reflect" "strings" "time" ) /* TomlTree structural types and corresponding marshal types ------------------------------------------------------------------------------- *TomlTree (*)struct, (*)map[string]interface{} []*TomlTree (*)[](*)struct, (*)[](*)map[string]interface{} []interface{} (as interface{}) (*)[]primitive, (*)[]([]interface{}) interface{} (*)primitive TomlTree primitive types and corresponding marshal types ----------------------------------------------------------- uint64 uint, uint8-uint64, pointers to same int64 int, int8-uint64, pointers to same float64 float32, float64, pointers to same string string, pointers to same bool bool, pointers to same time.Time time.Time{}, pointers to same */ type tomlOpts struct { name string include bool omitempty bool } var timeType = reflect.TypeOf(time.Time{}) var marshalerType = reflect.TypeOf(new(Marshaler)).Elem() // Check if the given marshall type maps to a TomlTree primitive func isPrimitive(mtype reflect.Type) bool { switch mtype.Kind() { case reflect.Ptr: return isPrimitive(mtype.Elem()) case reflect.Bool: return true case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return true case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: return true case reflect.Float32, reflect.Float64: return true case reflect.String: return true case reflect.Struct: return mtype == timeType || isCustomMarshaler(mtype) default: return false } } // Check if the given marshall type maps to a TomlTree slice func isTreeSlice(mtype reflect.Type) bool { switch mtype.Kind() { case reflect.Slice: return !isOtherSlice(mtype) default: return false } } // Check if the given marshall type maps to a non-TomlTree slice func isOtherSlice(mtype reflect.Type) bool { switch mtype.Kind() { case reflect.Ptr: return isOtherSlice(mtype.Elem()) case reflect.Slice: return isPrimitive(mtype.Elem()) || isOtherSlice(mtype.Elem()) default: return false } } // Check if the given marshall type maps to a TomlTree func isTree(mtype reflect.Type) bool { switch mtype.Kind() { case reflect.Map: return true case reflect.Struct: return !isPrimitive(mtype) default: return false } } func isCustomMarshaler(mtype reflect.Type) bool { return mtype.Implements(marshalerType) } func callCustomMarshaler(mval reflect.Value) ([]byte, error) { return mval.Interface().(Marshaler).MarshalTOML() } // Marshaler is the interface implemented by types that // can marshal themselves into valid TOML. type Marshaler interface { MarshalTOML() ([]byte, error) } /* Marshal returns the TOML encoding of v. Behavior is similar to the Go json encoder, except that there is no concept of a Marshaler interface or MarshalTOML function for sub-structs, and currently only definite types can be marshaled (i.e. no `interface{}`). Note that pointers are automatically assigned the "omitempty" option, as TOML explicity does not handle null values (saying instead the label should be dropped). */ func Marshal(v interface{}) ([]byte, error) { mtype := reflect.TypeOf(v) if mtype.Kind() != reflect.Struct { return []byte{}, errors.New("Only a struct can be marshaled to TOML") } sval := reflect.ValueOf(v) if isCustomMarshaler(mtype) { return callCustomMarshaler(sval) } t, err := valueToTree(mtype, sval) if err != nil { return []byte{}, err } s, err := t.ToTomlString() return []byte(s), err } // Convert given marshal struct or map value to toml tree func valueToTree(mtype reflect.Type, mval reflect.Value) (*TomlTree, error) { if mtype.Kind() == reflect.Ptr { return valueToTree(mtype.Elem(), mval.Elem()) } tval := newTomlTree() switch mtype.Kind() { case reflect.Struct: for i := 0; i < mtype.NumField(); i++ { mtypef, mvalf := mtype.Field(i), mval.Field(i) opts := tomlOptions(mtypef) if opts.include && (!opts.omitempty || !isZero(mvalf)) { val, err := valueToToml(mtypef.Type, mvalf) if err != nil { return nil, err } tval.Set(opts.name, val) } } case reflect.Map: for _, key := range mval.MapKeys() { mvalf := mval.MapIndex(key) val, err := valueToToml(mtype.Elem(), mvalf) if err != nil { return nil, err } tval.Set(key.String(), val) } } return tval, nil } // Convert given marshal slice to slice of Toml trees func valueToTreeSlice(mtype reflect.Type, mval reflect.Value) ([]*TomlTree, error) { tval := make([]*TomlTree, mval.Len(), mval.Len()) for i := 0; i < mval.Len(); i++ { val, err := valueToTree(mtype.Elem(), mval.Index(i)) if err != nil { return nil, err } tval[i] = val } return tval, nil } // Convert given marshal slice to slice of toml values func valueToOtherSlice(mtype reflect.Type, mval reflect.Value) (interface{}, error) { tval := make([]interface{}, mval.Len(), mval.Len()) for i := 0; i < mval.Len(); i++ { val, err := valueToToml(mtype.Elem(), mval.Index(i)) if err != nil { return nil, err } tval[i] = val } return tval, nil } // Convert given marshal value to toml value func valueToToml(mtype reflect.Type, mval reflect.Value) (interface{}, error) { if mtype.Kind() == reflect.Ptr { return valueToToml(mtype.Elem(), mval.Elem()) } switch { case isCustomMarshaler(mtype): return callCustomMarshaler(mval) case isTree(mtype): return valueToTree(mtype, mval) case isTreeSlice(mtype): return valueToTreeSlice(mtype, mval) case isOtherSlice(mtype): return valueToOtherSlice(mtype, mval) default: switch mtype.Kind() { case reflect.Bool: return mval.Bool(), nil case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return mval.Int(), nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: return mval.Uint(), nil case reflect.Float32, reflect.Float64: return mval.Float(), nil case reflect.String: return mval.String(), nil case reflect.Struct: return mval.Interface().(time.Time), nil default: return nil, fmt.Errorf("Marshal can't handle %v(%v)", mtype, mtype.Kind()) } } } /* Unmarshal parses the TOML-encoded data and stores the result in the value pointed to by v. Behavior is similar to the Go json encoder, except that there is no concept of an Unmarshaler interface or UnmarshalTOML function for sub-structs, and currently only definite types can be unmarshaled to (i.e. no `interface{}`). */ func Unmarshal(data []byte, v interface{}) error { mtype := reflect.TypeOf(v) if mtype.Kind() != reflect.Ptr || mtype.Elem().Kind() != reflect.Struct { return errors.New("Only a pointer to struct can be unmarshaled from TOML") } t, err := Load(string(data)) if err != nil { return err } sval, err := valueFromTree(mtype.Elem(), t) if err != nil { return err } reflect.ValueOf(v).Elem().Set(sval) return nil } // Convert toml tree to marshal struct or map, using marshal type func valueFromTree(mtype reflect.Type, tval *TomlTree) (reflect.Value, error) { if mtype.Kind() == reflect.Ptr { return unwrapPointer(mtype, tval) } var mval reflect.Value switch mtype.Kind() { case reflect.Struct: mval = reflect.New(mtype).Elem() for i := 0; i < mtype.NumField(); i++ { mtypef := mtype.Field(i) opts := tomlOptions(mtypef) if opts.include { key := opts.name exists := tval.Has(key) if exists { val := tval.Get(key) mvalf, err := valueFromToml(mtypef.Type, val) if err != nil { return mval, formatError(err, tval.GetPosition(key)) } mval.Field(i).Set(mvalf) } } } case reflect.Map: mval = reflect.MakeMap(mtype) for _, key := range tval.Keys() { val := tval.Get(key) mvalf, err := valueFromToml(mtype.Elem(), val) if err != nil { return mval, formatError(err, tval.GetPosition(key)) } mval.SetMapIndex(reflect.ValueOf(key), mvalf) } } return mval, nil } // Convert toml value to marshal struct/map slice, using marshal type func valueFromTreeSlice(mtype reflect.Type, tval []*TomlTree) (reflect.Value, error) { mval := reflect.MakeSlice(mtype, len(tval), len(tval)) for i := 0; i < len(tval); i++ { val, err := valueFromTree(mtype.Elem(), tval[i]) if err != nil { return mval, err } mval.Index(i).Set(val) } return mval, nil } // Convert toml value to marshal primitive slice, using marshal type func valueFromOtherSlice(mtype reflect.Type, tval []interface{}) (reflect.Value, error) { mval := reflect.MakeSlice(mtype, len(tval), len(tval)) for i := 0; i < len(tval); i++ { val, err := valueFromToml(mtype.Elem(), tval[i]) if err != nil { return mval, err } mval.Index(i).Set(val) } return mval, nil } // Convert toml value to marshal value, using marshal type func valueFromToml(mtype reflect.Type, tval interface{}) (reflect.Value, error) { if mtype.Kind() == reflect.Ptr { return unwrapPointer(mtype, tval) } switch { case isTree(mtype): return valueFromTree(mtype, tval.(*TomlTree)) case isTreeSlice(mtype): return valueFromTreeSlice(mtype, tval.([]*TomlTree)) case isOtherSlice(mtype): return valueFromOtherSlice(mtype, tval.([]interface{})) default: switch mtype.Kind() { case reflect.Bool: val, ok := tval.(bool) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to bool", tval, tval) } return reflect.ValueOf(val), nil case reflect.Int: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to int", tval, tval) } return reflect.ValueOf(int(val)), nil case reflect.Int8: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to int", tval, tval) } return reflect.ValueOf(int8(val)), nil case reflect.Int16: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to int", tval, tval) } return reflect.ValueOf(int16(val)), nil case reflect.Int32: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to int", tval, tval) } return reflect.ValueOf(int32(val)), nil case reflect.Int64: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to int", tval, tval) } return reflect.ValueOf(val), nil case reflect.Uint: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to uint", tval, tval) } return reflect.ValueOf(uint(val)), nil case reflect.Uint8: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to uint", tval, tval) } return reflect.ValueOf(uint8(val)), nil case reflect.Uint16: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to uint", tval, tval) } return reflect.ValueOf(uint16(val)), nil case reflect.Uint32: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to uint", tval, tval) } return reflect.ValueOf(uint32(val)), nil case reflect.Uint64: val, ok := tval.(int64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to uint", tval, tval) } return reflect.ValueOf(uint64(val)), nil case reflect.Float32: val, ok := tval.(float64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to float", tval, tval) } return reflect.ValueOf(float32(val)), nil case reflect.Float64: val, ok := tval.(float64) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to float", tval, tval) } return reflect.ValueOf(val), nil case reflect.String: val, ok := tval.(string) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to string", tval, tval) } return reflect.ValueOf(val), nil case reflect.Struct: val, ok := tval.(time.Time) if !ok { return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to time", tval, tval) } return reflect.ValueOf(val), nil default: return reflect.ValueOf(nil), fmt.Errorf("Unmarshal can't handle %v(%v)", mtype, mtype.Kind()) } } } func unwrapPointer(mtype reflect.Type, tval interface{}) (reflect.Value, error) { val, err := valueFromToml(mtype.Elem(), tval) if err != nil { return reflect.ValueOf(nil), err } mval := reflect.New(mtype.Elem()) mval.Elem().Set(val) return mval, nil } func tomlOptions(vf reflect.StructField) tomlOpts { tag := vf.Tag.Get("toml") parse := strings.Split(tag, ",") result := tomlOpts{vf.Name, true, false} if parse[0] != "" { if parse[0] == "-" && len(parse) == 1 { result.include = false } else { result.name = strings.Trim(parse[0], " ") } } if vf.PkgPath != "" { result.include = false } if len(parse) > 1 && strings.Trim(parse[1], " ") == "omitempty" { result.omitempty = true } if vf.Type.Kind() == reflect.Ptr { result.omitempty = true } return result } func isZero(val reflect.Value) bool { switch val.Type().Kind() { case reflect.Map: fallthrough case reflect.Array: fallthrough case reflect.Slice: return val.Len() == 0 default: return reflect.DeepEqual(val.Interface(), reflect.Zero(val.Type()).Interface()) } } func formatError(err error, pos Position) error { if err.Error()[0] == '(' { // Error already contains position information return err } return fmt.Errorf("%s: %s", pos, err) } dep-0.3.2/vendor/github.com/pelletier/go-toml/marshal_test.go000066400000000000000000000406771317166637100242310ustar00rootroot00000000000000package toml import ( "bytes" "encoding/json" "fmt" "io/ioutil" "reflect" "testing" "time" ) type basicMarshalTestStruct struct { String string `toml:"string"` StringList []string `toml:"strlist"` Sub basicMarshalTestSubStruct `toml:"subdoc"` SubList []basicMarshalTestSubStruct `toml:"sublist"` } type basicMarshalTestSubStruct struct { String2 string } var basicTestData = basicMarshalTestStruct{ String: "Hello", StringList: []string{"Howdy", "Hey There"}, Sub: basicMarshalTestSubStruct{"One"}, SubList: []basicMarshalTestSubStruct{{"Two"}, {"Three"}}, } var basicTestToml = []byte(`string = "Hello" strlist = ["Howdy","Hey There"] [subdoc] String2 = "One" [[sublist]] String2 = "Two" [[sublist]] String2 = "Three" `) func TestBasicMarshal(t *testing.T) { result, err := Marshal(basicTestData) if err != nil { t.Fatal(err) } expected := basicTestToml if !bytes.Equal(result, expected) { t.Errorf("Bad marshal: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expected, result) } } func TestBasicUnmarshal(t *testing.T) { result := basicMarshalTestStruct{} err := Unmarshal(basicTestToml, &result) expected := basicTestData if err != nil { t.Fatal(err) } if !reflect.DeepEqual(result, expected) { t.Errorf("Bad unmarshal: expected %v, got %v", expected, result) } } type testDoc struct { Title string `toml:"title"` Basics testDocBasics `toml:"basic"` BasicLists testDocBasicLists `toml:"basic_lists"` BasicMap map[string]string `toml:"basic_map"` Subdocs testDocSubs `toml:"subdoc"` SubDocList []testSubDoc `toml:"subdoclist"` SubDocPtrs []*testSubDoc `toml:"subdocptrs"` err int `toml:"shouldntBeHere"` unexported int `toml:"shouldntBeHere"` Unexported2 int `toml:"-"` } type testDocBasics struct { Bool bool `toml:"bool"` Date time.Time `toml:"date"` Float float32 `toml:"float"` Int int `toml:"int"` Uint uint `toml:"uint"` String *string `toml:"string"` unexported int `toml:"shouldntBeHere"` } type testDocBasicLists struct { Bools []bool `toml:"bools"` Dates []time.Time `toml:"dates"` Floats []*float32 `toml:"floats"` Ints []int `toml:"ints"` Strings []string `toml:"strings"` UInts []uint `toml:"uints"` } type testDocSubs struct { First testSubDoc `toml:"first"` Second *testSubDoc `toml:"second"` } type testSubDoc struct { Name string `toml:"name"` unexported int `toml:"shouldntBeHere"` } var biteMe = "Bite me" var float1 float32 = 12.3 var float2 float32 = 45.6 var float3 float32 = 78.9 var subdoc = testSubDoc{"Second", 0} var docData = testDoc{ Title: "TOML Marshal Testing", unexported: 0, Unexported2: 0, Basics: testDocBasics{ Bool: true, Date: time.Date(1979, 5, 27, 7, 32, 0, 0, time.UTC), Float: 123.4, Int: 5000, Uint: 5001, String: &biteMe, unexported: 0, }, BasicLists: testDocBasicLists{ Bools: []bool{true, false, true}, Dates: []time.Time{ time.Date(1979, 5, 27, 7, 32, 0, 0, time.UTC), time.Date(1980, 5, 27, 7, 32, 0, 0, time.UTC), }, Floats: []*float32{&float1, &float2, &float3}, Ints: []int{8001, 8001, 8002}, Strings: []string{"One", "Two", "Three"}, UInts: []uint{5002, 5003}, }, BasicMap: map[string]string{ "one": "one", "two": "two", }, Subdocs: testDocSubs{ First: testSubDoc{"First", 0}, Second: &subdoc, }, SubDocList: []testSubDoc{ testSubDoc{"List.First", 0}, testSubDoc{"List.Second", 0}, }, SubDocPtrs: []*testSubDoc{&subdoc}, } func TestDocMarshal(t *testing.T) { result, err := Marshal(docData) if err != nil { t.Fatal(err) } expected, _ := ioutil.ReadFile("marshal_test.toml") if !bytes.Equal(result, expected) { t.Errorf("Bad marshal: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expected, result) } } func TestDocUnmarshal(t *testing.T) { result := testDoc{} tomlData, _ := ioutil.ReadFile("marshal_test.toml") err := Unmarshal(tomlData, &result) expected := docData if err != nil { t.Fatal(err) } if !reflect.DeepEqual(result, expected) { resStr, _ := json.MarshalIndent(result, "", " ") expStr, _ := json.MarshalIndent(expected, "", " ") t.Errorf("Bad unmarshal: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expStr, resStr) } } type tomlTypeCheckTest struct { name string item interface{} typ int //0=primitive, 1=otherslice, 2=treeslice, 3=tree } func TestTypeChecks(t *testing.T) { tests := []tomlTypeCheckTest{ {"integer", 2, 0}, {"time", time.Date(2015, 1, 1, 0, 0, 0, 0, time.UTC), 0}, {"stringlist", []string{"hello", "hi"}, 1}, {"timelist", []time.Time{time.Date(2015, 1, 1, 0, 0, 0, 0, time.UTC)}, 1}, {"objectlist", []tomlTypeCheckTest{}, 2}, {"object", tomlTypeCheckTest{}, 3}, } for _, test := range tests { expected := []bool{false, false, false, false} expected[test.typ] = true result := []bool{ isPrimitive(reflect.TypeOf(test.item)), isOtherSlice(reflect.TypeOf(test.item)), isTreeSlice(reflect.TypeOf(test.item)), isTree(reflect.TypeOf(test.item)), } if !reflect.DeepEqual(expected, result) { t.Errorf("Bad type check on %q: expected %v, got %v", test.name, expected, result) } } } type unexportedMarshalTestStruct struct { String string `toml:"string"` StringList []string `toml:"strlist"` Sub basicMarshalTestSubStruct `toml:"subdoc"` SubList []basicMarshalTestSubStruct `toml:"sublist"` unexported int `toml:"shouldntBeHere"` Unexported2 int `toml:"-"` } var unexportedTestData = unexportedMarshalTestStruct{ String: "Hello", StringList: []string{"Howdy", "Hey There"}, Sub: basicMarshalTestSubStruct{"One"}, SubList: []basicMarshalTestSubStruct{{"Two"}, {"Three"}}, unexported: 0, Unexported2: 0, } var unexportedTestToml = []byte(`string = "Hello" strlist = ["Howdy","Hey There"] unexported = 1 shouldntBeHere = 2 [subdoc] String2 = "One" [[sublist]] String2 = "Two" [[sublist]] String2 = "Three" `) func TestUnexportedUnmarshal(t *testing.T) { result := unexportedMarshalTestStruct{} err := Unmarshal(unexportedTestToml, &result) expected := unexportedTestData if err != nil { t.Fatal(err) } if !reflect.DeepEqual(result, expected) { t.Errorf("Bad unexported unmarshal: expected %v, got %v", expected, result) } } type errStruct struct { Bool bool `toml:"bool"` Date time.Time `toml:"date"` Float float64 `toml:"float"` Int int16 `toml:"int"` String *string `toml:"string"` } var errTomls = []string{ "bool = truly\ndate = 1979-05-27T07:32:00Z\nfloat = 123.4\nint = 5000\nstring = \"Bite me\"", "bool = true\ndate = 1979-05-27T07:3200Z\nfloat = 123.4\nint = 5000\nstring = \"Bite me\"", "bool = true\ndate = 1979-05-27T07:32:00Z\nfloat = 123a4\nint = 5000\nstring = \"Bite me\"", "bool = true\ndate = 1979-05-27T07:32:00Z\nfloat = 123.4\nint = j000\nstring = \"Bite me\"", "bool = true\ndate = 1979-05-27T07:32:00Z\nfloat = 123.4\nint = 5000\nstring = Bite me", "bool = true\ndate = 1979-05-27T07:32:00Z\nfloat = 123.4\nint = 5000\nstring = Bite me", "bool = 1\ndate = 1979-05-27T07:32:00Z\nfloat = 123.4\nint = 5000\nstring = \"Bite me\"", "bool = true\ndate = 1\nfloat = 123.4\nint = 5000\nstring = \"Bite me\"", "bool = true\ndate = 1979-05-27T07:32:00Z\n\"sorry\"\nint = 5000\nstring = \"Bite me\"", "bool = true\ndate = 1979-05-27T07:32:00Z\nfloat = 123.4\nint = \"sorry\"\nstring = \"Bite me\"", "bool = true\ndate = 1979-05-27T07:32:00Z\nfloat = 123.4\nint = 5000\nstring = 1", } type mapErr struct { Vals map[string]float64 } type intErr struct { Int1 int Int2 int8 Int3 int16 Int4 int32 Int5 int64 UInt1 uint UInt2 uint8 UInt3 uint16 UInt4 uint32 UInt5 uint64 Flt1 float32 Flt2 float64 } var intErrTomls = []string{ "Int1 = []\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = []\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = []\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = []\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = []\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = []\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = []\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = []\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = []\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = []\nFlt1 = 1.0\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = []\nFlt2 = 2.0", "Int1 = 1\nInt2 = 2\nInt3 = 3\nInt4 = 4\nInt5 = 5\nUInt1 = 1\nUInt2 = 2\nUInt3 = 3\nUInt4 = 4\nUInt5 = 5\nFlt1 = 1.0\nFlt2 = []", } func TestErrUnmarshal(t *testing.T) { for ind, toml := range errTomls { result := errStruct{} err := Unmarshal([]byte(toml), &result) if err == nil { t.Errorf("Expected err from case %d\n", ind) } } result2 := mapErr{} err := Unmarshal([]byte("[Vals]\nfred=\"1.2\""), &result2) if err == nil { t.Errorf("Expected err from map") } for ind, toml := range intErrTomls { result3 := intErr{} err := Unmarshal([]byte(toml), &result3) if err == nil { t.Errorf("Expected int err from case %d\n", ind) } } } type emptyMarshalTestStruct struct { Title string `toml:"title"` Bool bool `toml:"bool"` Int int `toml:"int"` String string `toml:"string"` StringList []string `toml:"stringlist"` Ptr *basicMarshalTestStruct `toml:"ptr"` Map map[string]string `toml:"map"` } var emptyTestData = emptyMarshalTestStruct{ Title: "Placeholder", Bool: false, Int: 0, String: "", StringList: []string{}, Ptr: nil, Map: map[string]string{}, } var emptyTestToml = []byte(`bool = false int = 0 string = "" stringlist = [] title = "Placeholder" [map] `) type emptyMarshalTestStruct2 struct { Title string `toml:"title"` Bool bool `toml:"bool,omitempty"` Int int `toml:"int, omitempty"` String string `toml:"string,omitempty "` StringList []string `toml:"stringlist,omitempty"` Ptr *basicMarshalTestStruct `toml:"ptr,omitempty"` Map map[string]string `toml:"map,omitempty"` } var emptyTestData2 = emptyMarshalTestStruct2{ Title: "Placeholder", Bool: false, Int: 0, String: "", StringList: []string{}, Ptr: nil, Map: map[string]string{}, } var emptyTestToml2 = []byte(`title = "Placeholder" `) func TestEmptyMarshal(t *testing.T) { result, err := Marshal(emptyTestData) if err != nil { t.Fatal(err) } expected := emptyTestToml if !bytes.Equal(result, expected) { t.Errorf("Bad empty marshal: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expected, result) } } func TestEmptyMarshalOmit(t *testing.T) { result, err := Marshal(emptyTestData2) if err != nil { t.Fatal(err) } expected := emptyTestToml2 if !bytes.Equal(result, expected) { t.Errorf("Bad empty omit marshal: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expected, result) } } func TestEmptyUnmarshal(t *testing.T) { result := emptyMarshalTestStruct{} err := Unmarshal(emptyTestToml, &result) expected := emptyTestData if err != nil { t.Fatal(err) } if !reflect.DeepEqual(result, expected) { t.Errorf("Bad empty unmarshal: expected %v, got %v", expected, result) } } func TestEmptyUnmarshalOmit(t *testing.T) { result := emptyMarshalTestStruct2{} err := Unmarshal(emptyTestToml, &result) expected := emptyTestData2 if err != nil { t.Fatal(err) } if !reflect.DeepEqual(result, expected) { t.Errorf("Bad empty omit unmarshal: expected %v, got %v", expected, result) } } type pointerMarshalTestStruct struct { Str *string List *[]string ListPtr *[]*string Map *map[string]string MapPtr *map[string]*string EmptyStr *string EmptyList *[]string EmptyMap *map[string]string DblPtr *[]*[]*string } var pointerStr = "Hello" var pointerList = []string{"Hello back"} var pointerListPtr = []*string{&pointerStr} var pointerMap = map[string]string{"response": "Goodbye"} var pointerMapPtr = map[string]*string{"alternate": &pointerStr} var pointerTestData = pointerMarshalTestStruct{ Str: &pointerStr, List: &pointerList, ListPtr: &pointerListPtr, Map: &pointerMap, MapPtr: &pointerMapPtr, EmptyStr: nil, EmptyList: nil, EmptyMap: nil, } var pointerTestToml = []byte(`List = ["Hello back"] ListPtr = ["Hello"] Str = "Hello" [Map] response = "Goodbye" [MapPtr] alternate = "Hello" `) func TestPointerMarshal(t *testing.T) { result, err := Marshal(pointerTestData) if err != nil { t.Fatal(err) } expected := pointerTestToml if !bytes.Equal(result, expected) { t.Errorf("Bad pointer marshal: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expected, result) } } func TestPointerUnmarshal(t *testing.T) { result := pointerMarshalTestStruct{} err := Unmarshal(pointerTestToml, &result) expected := pointerTestData if err != nil { t.Fatal(err) } if !reflect.DeepEqual(result, expected) { t.Errorf("Bad pointer unmarshal: expected %v, got %v", expected, result) } } type nestedMarshalTestStruct struct { String [][]string //Struct [][]basicMarshalTestSubStruct StringPtr *[]*[]*string // StructPtr *[]*[]*basicMarshalTestSubStruct } var str1 = "Three" var str2 = "Four" var strPtr = []*string{&str1, &str2} var strPtr2 = []*[]*string{&strPtr} var nestedTestData = nestedMarshalTestStruct{ String: [][]string{[]string{"Five", "Six"}, []string{"One", "Two"}}, StringPtr: &strPtr2, } var nestedTestToml = []byte(`String = [["Five","Six"],["One","Two"]] StringPtr = [["Three","Four"]] `) func TestNestedMarshal(t *testing.T) { result, err := Marshal(nestedTestData) if err != nil { t.Fatal(err) } expected := nestedTestToml if !bytes.Equal(result, expected) { t.Errorf("Bad nested marshal: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expected, result) } } func TestNestedUnmarshal(t *testing.T) { result := nestedMarshalTestStruct{} err := Unmarshal(nestedTestToml, &result) expected := nestedTestData if err != nil { t.Fatal(err) } if !reflect.DeepEqual(result, expected) { t.Errorf("Bad nested unmarshal: expected %v, got %v", expected, result) } } type customMarshalerParent struct { Self customMarshaler `toml:"me"` Friends []customMarshaler `toml:"friends"` } type customMarshaler struct { FirsName string LastName string } func (c customMarshaler) MarshalTOML() ([]byte, error) { fullName := fmt.Sprintf("%s %s", c.FirsName, c.LastName) return []byte(fullName), nil } var customMarshalerData = customMarshaler{FirsName: "Sally", LastName: "Fields"} var customMarshalerToml = []byte(`Sally Fields`) var nestedCustomMarshalerData = customMarshalerParent{ Self: customMarshaler{FirsName: "Maiku", LastName: "Suteda"}, Friends: []customMarshaler{customMarshalerData}, } var nestedCustomMarshalerToml = []byte(`friends = ["Sally Fields"] me = "Maiku Suteda" `) func TestCustomMarshaler(t *testing.T) { result, err := Marshal(customMarshalerData) if err != nil { t.Fatal(err) } expected := customMarshalerToml if !bytes.Equal(result, expected) { t.Errorf("Bad custom marshaler: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expected, result) } } func TestNestedCustomMarshaler(t *testing.T) { result, err := Marshal(nestedCustomMarshalerData) if err != nil { t.Fatal(err) } expected := nestedCustomMarshalerToml if !bytes.Equal(result, expected) { t.Errorf("Bad nested custom marshaler: expected\n-----\n%s\n-----\ngot\n-----\n%s\n-----\n", expected, result) } } dep-0.3.2/vendor/github.com/pelletier/go-toml/marshal_test.toml000066400000000000000000000011211317166637100245540ustar00rootroot00000000000000title = "TOML Marshal Testing" [basic] bool = true date = 1979-05-27T07:32:00Z float = 123.4 int = 5000 string = "Bite me" uint = 5001 [basic_lists] bools = [true,false,true] dates = [1979-05-27T07:32:00Z,1980-05-27T07:32:00Z] floats = [12.3,45.6,78.9] ints = [8001,8001,8002] strings = ["One","Two","Three"] uints = [5002,5003] [basic_map] one = "one" two = "two" [subdoc] [subdoc.first] name = "First" [subdoc.second] name = "Second" [[subdoclist]] name = "List.First" [[subdoclist]] name = "List.Second" [[subdocptrs]] name = "Second" dep-0.3.2/vendor/github.com/pelletier/go-toml/match.go000066400000000000000000000113411317166637100226210ustar00rootroot00000000000000package toml import ( "fmt" ) // support function to set positions for tomlValues // NOTE: this is done to allow ctx.lastPosition to indicate the start of any // values returned by the query engines func tomlValueCheck(node interface{}, ctx *queryContext) interface{} { switch castNode := node.(type) { case *tomlValue: ctx.lastPosition = castNode.position return castNode.value case []*TomlTree: if len(castNode) > 0 { ctx.lastPosition = castNode[0].position } return node default: return node } } // base match type matchBase struct { next pathFn } func (f *matchBase) setNext(next pathFn) { f.next = next } // terminating functor - gathers results type terminatingFn struct { // empty } func newTerminatingFn() *terminatingFn { return &terminatingFn{} } func (f *terminatingFn) setNext(next pathFn) { // do nothing } func (f *terminatingFn) call(node interface{}, ctx *queryContext) { switch castNode := node.(type) { case *TomlTree: ctx.result.appendResult(node, castNode.position) case *tomlValue: ctx.result.appendResult(node, castNode.position) default: // use last position for scalars ctx.result.appendResult(node, ctx.lastPosition) } } // match single key type matchKeyFn struct { matchBase Name string } func newMatchKeyFn(name string) *matchKeyFn { return &matchKeyFn{Name: name} } func (f *matchKeyFn) call(node interface{}, ctx *queryContext) { if array, ok := node.([]*TomlTree); ok { for _, tree := range array { item := tree.values[f.Name] if item != nil { f.next.call(item, ctx) } } } else if tree, ok := node.(*TomlTree); ok { item := tree.values[f.Name] if item != nil { f.next.call(item, ctx) } } } // match single index type matchIndexFn struct { matchBase Idx int } func newMatchIndexFn(idx int) *matchIndexFn { return &matchIndexFn{Idx: idx} } func (f *matchIndexFn) call(node interface{}, ctx *queryContext) { if arr, ok := tomlValueCheck(node, ctx).([]interface{}); ok { if f.Idx < len(arr) && f.Idx >= 0 { f.next.call(arr[f.Idx], ctx) } } } // filter by slicing type matchSliceFn struct { matchBase Start, End, Step int } func newMatchSliceFn(start, end, step int) *matchSliceFn { return &matchSliceFn{Start: start, End: end, Step: step} } func (f *matchSliceFn) call(node interface{}, ctx *queryContext) { if arr, ok := tomlValueCheck(node, ctx).([]interface{}); ok { // adjust indexes for negative values, reverse ordering realStart, realEnd := f.Start, f.End if realStart < 0 { realStart = len(arr) + realStart } if realEnd < 0 { realEnd = len(arr) + realEnd } if realEnd < realStart { realEnd, realStart = realStart, realEnd // swap } // loop and gather for idx := realStart; idx < realEnd; idx += f.Step { f.next.call(arr[idx], ctx) } } } // match anything type matchAnyFn struct { matchBase } func newMatchAnyFn() *matchAnyFn { return &matchAnyFn{} } func (f *matchAnyFn) call(node interface{}, ctx *queryContext) { if tree, ok := node.(*TomlTree); ok { for _, v := range tree.values { f.next.call(v, ctx) } } } // filter through union type matchUnionFn struct { Union []pathFn } func (f *matchUnionFn) setNext(next pathFn) { for _, fn := range f.Union { fn.setNext(next) } } func (f *matchUnionFn) call(node interface{}, ctx *queryContext) { for _, fn := range f.Union { fn.call(node, ctx) } } // match every single last node in the tree type matchRecursiveFn struct { matchBase } func newMatchRecursiveFn() *matchRecursiveFn { return &matchRecursiveFn{} } func (f *matchRecursiveFn) call(node interface{}, ctx *queryContext) { if tree, ok := node.(*TomlTree); ok { var visit func(tree *TomlTree) visit = func(tree *TomlTree) { for _, v := range tree.values { f.next.call(v, ctx) switch node := v.(type) { case *TomlTree: visit(node) case []*TomlTree: for _, subtree := range node { visit(subtree) } } } } f.next.call(tree, ctx) visit(tree) } } // match based on an externally provided functional filter type matchFilterFn struct { matchBase Pos Position Name string } func newMatchFilterFn(name string, pos Position) *matchFilterFn { return &matchFilterFn{Name: name, Pos: pos} } func (f *matchFilterFn) call(node interface{}, ctx *queryContext) { fn, ok := (*ctx.filters)[f.Name] if !ok { panic(fmt.Sprintf("%s: query context does not have filter '%s'", f.Pos.String(), f.Name)) } switch castNode := tomlValueCheck(node, ctx).(type) { case *TomlTree: for _, v := range castNode.values { if tv, ok := v.(*tomlValue); ok { if fn(tv.value) { f.next.call(v, ctx) } } else { if fn(v) { f.next.call(v, ctx) } } } case []interface{}: for _, v := range castNode { if fn(v) { f.next.call(v, ctx) } } } } dep-0.3.2/vendor/github.com/pelletier/go-toml/match_test.go000066400000000000000000000066341317166637100236710ustar00rootroot00000000000000package toml import ( "fmt" "testing" ) // dump path tree to a string func pathString(root pathFn) string { result := fmt.Sprintf("%T:", root) switch fn := root.(type) { case *terminatingFn: result += "{}" case *matchKeyFn: result += fmt.Sprintf("{%s}", fn.Name) result += pathString(fn.next) case *matchIndexFn: result += fmt.Sprintf("{%d}", fn.Idx) result += pathString(fn.next) case *matchSliceFn: result += fmt.Sprintf("{%d:%d:%d}", fn.Start, fn.End, fn.Step) result += pathString(fn.next) case *matchAnyFn: result += "{}" result += pathString(fn.next) case *matchUnionFn: result += "{[" for _, v := range fn.Union { result += pathString(v) + ", " } result += "]}" case *matchRecursiveFn: result += "{}" result += pathString(fn.next) case *matchFilterFn: result += fmt.Sprintf("{%s}", fn.Name) result += pathString(fn.next) } return result } func assertPathMatch(t *testing.T, path, ref *Query) bool { pathStr := pathString(path.root) refStr := pathString(ref.root) if pathStr != refStr { t.Errorf("paths do not match") t.Log("test:", pathStr) t.Log("ref: ", refStr) return false } return true } func assertPath(t *testing.T, query string, ref *Query) { path, _ := parseQuery(lexQuery(query)) assertPathMatch(t, path, ref) } func buildPath(parts ...pathFn) *Query { query := newQuery() for _, v := range parts { query.appendPath(v) } return query } func TestPathRoot(t *testing.T) { assertPath(t, "$", buildPath( // empty )) } func TestPathKey(t *testing.T) { assertPath(t, "$.foo", buildPath( newMatchKeyFn("foo"), )) } func TestPathBracketKey(t *testing.T) { assertPath(t, "$[foo]", buildPath( newMatchKeyFn("foo"), )) } func TestPathBracketStringKey(t *testing.T) { assertPath(t, "$['foo']", buildPath( newMatchKeyFn("foo"), )) } func TestPathIndex(t *testing.T) { assertPath(t, "$[123]", buildPath( newMatchIndexFn(123), )) } func TestPathSliceStart(t *testing.T) { assertPath(t, "$[123:]", buildPath( newMatchSliceFn(123, maxInt, 1), )) } func TestPathSliceStartEnd(t *testing.T) { assertPath(t, "$[123:456]", buildPath( newMatchSliceFn(123, 456, 1), )) } func TestPathSliceStartEndColon(t *testing.T) { assertPath(t, "$[123:456:]", buildPath( newMatchSliceFn(123, 456, 1), )) } func TestPathSliceStartStep(t *testing.T) { assertPath(t, "$[123::7]", buildPath( newMatchSliceFn(123, maxInt, 7), )) } func TestPathSliceEndStep(t *testing.T) { assertPath(t, "$[:456:7]", buildPath( newMatchSliceFn(0, 456, 7), )) } func TestPathSliceStep(t *testing.T) { assertPath(t, "$[::7]", buildPath( newMatchSliceFn(0, maxInt, 7), )) } func TestPathSliceAll(t *testing.T) { assertPath(t, "$[123:456:7]", buildPath( newMatchSliceFn(123, 456, 7), )) } func TestPathAny(t *testing.T) { assertPath(t, "$.*", buildPath( newMatchAnyFn(), )) } func TestPathUnion(t *testing.T) { assertPath(t, "$[foo, bar, baz]", buildPath( &matchUnionFn{[]pathFn{ newMatchKeyFn("foo"), newMatchKeyFn("bar"), newMatchKeyFn("baz"), }}, )) } func TestPathRecurse(t *testing.T) { assertPath(t, "$..*", buildPath( newMatchRecursiveFn(), )) } func TestPathFilterExpr(t *testing.T) { assertPath(t, "$[?('foo'),?(bar)]", buildPath( &matchUnionFn{[]pathFn{ newMatchFilterFn("foo", Position{}), newMatchFilterFn("bar", Position{}), }}, )) } dep-0.3.2/vendor/github.com/pelletier/go-toml/parser.go000066400000000000000000000223731317166637100230300ustar00rootroot00000000000000// TOML Parser. package toml import ( "errors" "fmt" "reflect" "regexp" "strconv" "strings" "time" ) type tomlParser struct { flow chan token tree *TomlTree tokensBuffer []token currentTable []string seenTableKeys []string } type tomlParserStateFn func() tomlParserStateFn // Formats and panics an error message based on a token func (p *tomlParser) raiseError(tok *token, msg string, args ...interface{}) { panic(tok.Position.String() + ": " + fmt.Sprintf(msg, args...)) } func (p *tomlParser) run() { for state := p.parseStart; state != nil; { state = state() } } func (p *tomlParser) peek() *token { if len(p.tokensBuffer) != 0 { return &(p.tokensBuffer[0]) } tok, ok := <-p.flow if !ok { return nil } p.tokensBuffer = append(p.tokensBuffer, tok) return &tok } func (p *tomlParser) assume(typ tokenType) { tok := p.getToken() if tok == nil { p.raiseError(tok, "was expecting token %s, but token stream is empty", tok) } if tok.typ != typ { p.raiseError(tok, "was expecting token %s, but got %s instead", typ, tok) } } func (p *tomlParser) getToken() *token { if len(p.tokensBuffer) != 0 { tok := p.tokensBuffer[0] p.tokensBuffer = p.tokensBuffer[1:] return &tok } tok, ok := <-p.flow if !ok { return nil } return &tok } func (p *tomlParser) parseStart() tomlParserStateFn { tok := p.peek() // end of stream, parsing is finished if tok == nil { return nil } switch tok.typ { case tokenDoubleLeftBracket: return p.parseGroupArray case tokenLeftBracket: return p.parseGroup case tokenKey: return p.parseAssign case tokenEOF: return nil default: p.raiseError(tok, "unexpected token") } return nil } func (p *tomlParser) parseGroupArray() tomlParserStateFn { startToken := p.getToken() // discard the [[ key := p.getToken() if key.typ != tokenKeyGroupArray { p.raiseError(key, "unexpected token %s, was expecting a table array key", key) } // get or create table array element at the indicated part in the path keys, err := parseKey(key.val) if err != nil { p.raiseError(key, "invalid table array key: %s", err) } p.tree.createSubTree(keys[:len(keys)-1], startToken.Position) // create parent entries destTree := p.tree.GetPath(keys) var array []*TomlTree if destTree == nil { array = make([]*TomlTree, 0) } else if target, ok := destTree.([]*TomlTree); ok && target != nil { array = destTree.([]*TomlTree) } else { p.raiseError(key, "key %s is already assigned and not of type table array", key) } p.currentTable = keys // add a new tree to the end of the table array newTree := newTomlTree() newTree.position = startToken.Position array = append(array, newTree) p.tree.SetPath(p.currentTable, array) // remove all keys that were children of this table array prefix := key.val + "." found := false for ii := 0; ii < len(p.seenTableKeys); { tableKey := p.seenTableKeys[ii] if strings.HasPrefix(tableKey, prefix) { p.seenTableKeys = append(p.seenTableKeys[:ii], p.seenTableKeys[ii+1:]...) } else { found = (tableKey == key.val) ii++ } } // keep this key name from use by other kinds of assignments if !found { p.seenTableKeys = append(p.seenTableKeys, key.val) } // move to next parser state p.assume(tokenDoubleRightBracket) return p.parseStart } func (p *tomlParser) parseGroup() tomlParserStateFn { startToken := p.getToken() // discard the [ key := p.getToken() if key.typ != tokenKeyGroup { p.raiseError(key, "unexpected token %s, was expecting a table key", key) } for _, item := range p.seenTableKeys { if item == key.val { p.raiseError(key, "duplicated tables") } } p.seenTableKeys = append(p.seenTableKeys, key.val) keys, err := parseKey(key.val) if err != nil { p.raiseError(key, "invalid table array key: %s", err) } if err := p.tree.createSubTree(keys, startToken.Position); err != nil { p.raiseError(key, "%s", err) } p.assume(tokenRightBracket) p.currentTable = keys return p.parseStart } func (p *tomlParser) parseAssign() tomlParserStateFn { key := p.getToken() p.assume(tokenEqual) value := p.parseRvalue() var tableKey []string if len(p.currentTable) > 0 { tableKey = p.currentTable } else { tableKey = []string{} } // find the table to assign, looking out for arrays of tables var targetNode *TomlTree switch node := p.tree.GetPath(tableKey).(type) { case []*TomlTree: targetNode = node[len(node)-1] case *TomlTree: targetNode = node default: p.raiseError(key, "Unknown table type for path: %s", strings.Join(tableKey, ".")) } // assign value to the found table keyVals, err := parseKey(key.val) if err != nil { p.raiseError(key, "%s", err) } if len(keyVals) != 1 { p.raiseError(key, "Invalid key") } keyVal := keyVals[0] localKey := []string{keyVal} finalKey := append(tableKey, keyVal) if targetNode.GetPath(localKey) != nil { p.raiseError(key, "The following key was defined twice: %s", strings.Join(finalKey, ".")) } var toInsert interface{} switch value.(type) { case *TomlTree, []*TomlTree: toInsert = value default: toInsert = &tomlValue{value, key.Position} } targetNode.values[keyVal] = toInsert return p.parseStart } var numberUnderscoreInvalidRegexp *regexp.Regexp func cleanupNumberToken(value string) (string, error) { if numberUnderscoreInvalidRegexp.MatchString(value) { return "", errors.New("invalid use of _ in number") } cleanedVal := strings.Replace(value, "_", "", -1) return cleanedVal, nil } func (p *tomlParser) parseRvalue() interface{} { tok := p.getToken() if tok == nil || tok.typ == tokenEOF { p.raiseError(tok, "expecting a value") } switch tok.typ { case tokenString: return tok.val case tokenTrue: return true case tokenFalse: return false case tokenInteger: cleanedVal, err := cleanupNumberToken(tok.val) if err != nil { p.raiseError(tok, "%s", err) } val, err := strconv.ParseInt(cleanedVal, 10, 64) if err != nil { p.raiseError(tok, "%s", err) } return val case tokenFloat: cleanedVal, err := cleanupNumberToken(tok.val) if err != nil { p.raiseError(tok, "%s", err) } val, err := strconv.ParseFloat(cleanedVal, 64) if err != nil { p.raiseError(tok, "%s", err) } return val case tokenDate: val, err := time.ParseInLocation(time.RFC3339Nano, tok.val, time.UTC) if err != nil { p.raiseError(tok, "%s", err) } return val case tokenLeftBracket: return p.parseArray() case tokenLeftCurlyBrace: return p.parseInlineTable() case tokenEqual: p.raiseError(tok, "cannot have multiple equals for the same key") case tokenError: p.raiseError(tok, "%s", tok) } p.raiseError(tok, "never reached") return nil } func tokenIsComma(t *token) bool { return t != nil && t.typ == tokenComma } func (p *tomlParser) parseInlineTable() *TomlTree { tree := newTomlTree() var previous *token Loop: for { follow := p.peek() if follow == nil || follow.typ == tokenEOF { p.raiseError(follow, "unterminated inline table") } switch follow.typ { case tokenRightCurlyBrace: p.getToken() break Loop case tokenKey: if !tokenIsComma(previous) && previous != nil { p.raiseError(follow, "comma expected between fields in inline table") } key := p.getToken() p.assume(tokenEqual) value := p.parseRvalue() tree.Set(key.val, value) case tokenComma: if previous == nil { p.raiseError(follow, "inline table cannot start with a comma") } if tokenIsComma(previous) { p.raiseError(follow, "need field between two commas in inline table") } p.getToken() default: p.raiseError(follow, "unexpected token type in inline table: %s", follow.typ.String()) } previous = follow } if tokenIsComma(previous) { p.raiseError(previous, "trailing comma at the end of inline table") } return tree } func (p *tomlParser) parseArray() interface{} { var array []interface{} arrayType := reflect.TypeOf(nil) for { follow := p.peek() if follow == nil || follow.typ == tokenEOF { p.raiseError(follow, "unterminated array") } if follow.typ == tokenRightBracket { p.getToken() break } val := p.parseRvalue() if arrayType == nil { arrayType = reflect.TypeOf(val) } if reflect.TypeOf(val) != arrayType { p.raiseError(follow, "mixed types in array") } array = append(array, val) follow = p.peek() if follow == nil || follow.typ == tokenEOF { p.raiseError(follow, "unterminated array") } if follow.typ != tokenRightBracket && follow.typ != tokenComma { p.raiseError(follow, "missing comma") } if follow.typ == tokenComma { p.getToken() } } // An array of TomlTrees is actually an array of inline // tables, which is a shorthand for a table array. If the // array was not converted from []interface{} to []*TomlTree, // the two notations would not be equivalent. if arrayType == reflect.TypeOf(newTomlTree()) { tomlArray := make([]*TomlTree, len(array)) for i, v := range array { tomlArray[i] = v.(*TomlTree) } return tomlArray } return array } func parseToml(flow chan token) *TomlTree { result := newTomlTree() result.position = Position{1, 1} parser := &tomlParser{ flow: flow, tree: result, tokensBuffer: make([]token, 0), currentTable: make([]string, 0), seenTableKeys: make([]string, 0), } parser.run() return result } func init() { numberUnderscoreInvalidRegexp = regexp.MustCompile(`([^\d]_|_[^\d]|_$|^_)`) } dep-0.3.2/vendor/github.com/pelletier/go-toml/parser_test.go000066400000000000000000000470531317166637100240710ustar00rootroot00000000000000package toml import ( "fmt" "reflect" "testing" "time" "github.com/davecgh/go-spew/spew" ) func assertSubTree(t *testing.T, path []string, tree *TomlTree, err error, ref map[string]interface{}) { if err != nil { t.Error("Non-nil error:", err.Error()) return } for k, v := range ref { nextPath := append(path, k) t.Log("asserting path", nextPath) // NOTE: directly access key instead of resolve by path // NOTE: see TestSpecialKV switch node := tree.GetPath([]string{k}).(type) { case []*TomlTree: t.Log("\tcomparing key", nextPath, "by array iteration") for idx, item := range node { assertSubTree(t, nextPath, item, err, v.([]map[string]interface{})[idx]) } case *TomlTree: t.Log("\tcomparing key", nextPath, "by subtree assestion") assertSubTree(t, nextPath, node, err, v.(map[string]interface{})) default: t.Log("\tcomparing key", nextPath, "by string representation because it's of type", reflect.TypeOf(node)) if fmt.Sprintf("%v", node) != fmt.Sprintf("%v", v) { t.Errorf("was expecting %v at %v but got %v", v, k, node) } } } } func assertTree(t *testing.T, tree *TomlTree, err error, ref map[string]interface{}) { t.Log("Asserting tree:\n", spew.Sdump(tree)) assertSubTree(t, []string{}, tree, err, ref) t.Log("Finished tree assertion.") } func TestCreateSubTree(t *testing.T) { tree := newTomlTree() tree.createSubTree([]string{"a", "b", "c"}, Position{}) tree.Set("a.b.c", 42) if tree.Get("a.b.c") != 42 { t.Fail() } } func TestSimpleKV(t *testing.T) { tree, err := Load("a = 42") assertTree(t, tree, err, map[string]interface{}{ "a": int64(42), }) tree, _ = Load("a = 42\nb = 21") assertTree(t, tree, err, map[string]interface{}{ "a": int64(42), "b": int64(21), }) } func TestNumberInKey(t *testing.T) { tree, err := Load("hello2 = 42") assertTree(t, tree, err, map[string]interface{}{ "hello2": int64(42), }) } func TestSimpleNumbers(t *testing.T) { tree, err := Load("a = +42\nb = -21\nc = +4.2\nd = -2.1") assertTree(t, tree, err, map[string]interface{}{ "a": int64(42), "b": int64(-21), "c": float64(4.2), "d": float64(-2.1), }) } func TestNumbersWithUnderscores(t *testing.T) { tree, err := Load("a = 1_000") assertTree(t, tree, err, map[string]interface{}{ "a": int64(1000), }) tree, err = Load("a = 5_349_221") assertTree(t, tree, err, map[string]interface{}{ "a": int64(5349221), }) tree, err = Load("a = 1_2_3_4_5") assertTree(t, tree, err, map[string]interface{}{ "a": int64(12345), }) tree, err = Load("flt8 = 9_224_617.445_991_228_313") assertTree(t, tree, err, map[string]interface{}{ "flt8": float64(9224617.445991228313), }) tree, err = Load("flt9 = 1e1_00") assertTree(t, tree, err, map[string]interface{}{ "flt9": float64(1e100), }) } func TestFloatsWithExponents(t *testing.T) { tree, err := Load("a = 5e+22\nb = 5E+22\nc = -5e+22\nd = -5e-22\ne = 6.626e-34") assertTree(t, tree, err, map[string]interface{}{ "a": float64(5e+22), "b": float64(5E+22), "c": float64(-5e+22), "d": float64(-5e-22), "e": float64(6.626e-34), }) } func TestSimpleDate(t *testing.T) { tree, err := Load("a = 1979-05-27T07:32:00Z") assertTree(t, tree, err, map[string]interface{}{ "a": time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC), }) } func TestDateOffset(t *testing.T) { tree, err := Load("a = 1979-05-27T00:32:00-07:00") assertTree(t, tree, err, map[string]interface{}{ "a": time.Date(1979, time.May, 27, 0, 32, 0, 0, time.FixedZone("", -7*60*60)), }) } func TestDateNano(t *testing.T) { tree, err := Load("a = 1979-05-27T00:32:00.999999999-07:00") assertTree(t, tree, err, map[string]interface{}{ "a": time.Date(1979, time.May, 27, 0, 32, 0, 999999999, time.FixedZone("", -7*60*60)), }) } func TestSimpleString(t *testing.T) { tree, err := Load("a = \"hello world\"") assertTree(t, tree, err, map[string]interface{}{ "a": "hello world", }) } func TestSpaceKey(t *testing.T) { tree, err := Load("\"a b\" = \"hello world\"") assertTree(t, tree, err, map[string]interface{}{ "a b": "hello world", }) } func TestStringEscapables(t *testing.T) { tree, err := Load("a = \"a \\n b\"") assertTree(t, tree, err, map[string]interface{}{ "a": "a \n b", }) tree, err = Load("a = \"a \\t b\"") assertTree(t, tree, err, map[string]interface{}{ "a": "a \t b", }) tree, err = Load("a = \"a \\r b\"") assertTree(t, tree, err, map[string]interface{}{ "a": "a \r b", }) tree, err = Load("a = \"a \\\\ b\"") assertTree(t, tree, err, map[string]interface{}{ "a": "a \\ b", }) } func TestEmptyQuotedString(t *testing.T) { tree, err := Load(`[""] "" = 1`) assertTree(t, tree, err, map[string]interface{}{ "": map[string]interface{}{ "": int64(1), }, }) } func TestBools(t *testing.T) { tree, err := Load("a = true\nb = false") assertTree(t, tree, err, map[string]interface{}{ "a": true, "b": false, }) } func TestNestedKeys(t *testing.T) { tree, err := Load("[a.b.c]\nd = 42") assertTree(t, tree, err, map[string]interface{}{ "a": map[string]interface{}{ "b": map[string]interface{}{ "c": map[string]interface{}{ "d": int64(42), }, }, }, }) } func TestNestedQuotedUnicodeKeys(t *testing.T) { tree, err := Load("[ j . \"ʞ\" . l ]\nd = 42") assertTree(t, tree, err, map[string]interface{}{ "j": map[string]interface{}{ "ʞ": map[string]interface{}{ "l": map[string]interface{}{ "d": int64(42), }, }, }, }) tree, err = Load("[ g . h . i ]\nd = 42") assertTree(t, tree, err, map[string]interface{}{ "g": map[string]interface{}{ "h": map[string]interface{}{ "i": map[string]interface{}{ "d": int64(42), }, }, }, }) tree, err = Load("[ d.e.f ]\nk = 42") assertTree(t, tree, err, map[string]interface{}{ "d": map[string]interface{}{ "e": map[string]interface{}{ "f": map[string]interface{}{ "k": int64(42), }, }, }, }) } func TestArrayOne(t *testing.T) { tree, err := Load("a = [1]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(1)}, }) } func TestArrayZero(t *testing.T) { tree, err := Load("a = []") assertTree(t, tree, err, map[string]interface{}{ "a": []interface{}{}, }) } func TestArraySimple(t *testing.T) { tree, err := Load("a = [42, 21, 10]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(42), int64(21), int64(10)}, }) tree, _ = Load("a = [42, 21, 10,]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(42), int64(21), int64(10)}, }) } func TestArrayMultiline(t *testing.T) { tree, err := Load("a = [42,\n21, 10,]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(42), int64(21), int64(10)}, }) } func TestArrayNested(t *testing.T) { tree, err := Load("a = [[42, 21], [10]]") assertTree(t, tree, err, map[string]interface{}{ "a": [][]int64{{int64(42), int64(21)}, {int64(10)}}, }) } func TestNestedArrayComment(t *testing.T) { tree, err := Load(` someArray = [ # does not work ["entry1"] ]`) assertTree(t, tree, err, map[string]interface{}{ "someArray": [][]string{{"entry1"}}, }) } func TestNestedEmptyArrays(t *testing.T) { tree, err := Load("a = [[[]]]") assertTree(t, tree, err, map[string]interface{}{ "a": [][][]interface{}{{{}}}, }) } func TestArrayMixedTypes(t *testing.T) { _, err := Load("a = [42, 16.0]") if err.Error() != "(1, 10): mixed types in array" { t.Error("Bad error message:", err.Error()) } _, err = Load("a = [42, \"hello\"]") if err.Error() != "(1, 11): mixed types in array" { t.Error("Bad error message:", err.Error()) } } func TestArrayNestedStrings(t *testing.T) { tree, err := Load("data = [ [\"gamma\", \"delta\"], [\"Foo\"] ]") assertTree(t, tree, err, map[string]interface{}{ "data": [][]string{{"gamma", "delta"}, {"Foo"}}, }) } func TestParseUnknownRvalue(t *testing.T) { _, err := Load("a = !bssss") if err == nil { t.Error("Expecting a parse error") } _, err = Load("a = /b") if err == nil { t.Error("Expecting a parse error") } } func TestMissingValue(t *testing.T) { _, err := Load("a = ") if err.Error() != "(1, 5): expecting a value" { t.Error("Bad error message:", err.Error()) } } func TestUnterminatedArray(t *testing.T) { _, err := Load("a = [1,") if err.Error() != "(1, 8): unterminated array" { t.Error("Bad error message:", err.Error()) } _, err = Load("a = [1") if err.Error() != "(1, 7): unterminated array" { t.Error("Bad error message:", err.Error()) } _, err = Load("a = [1 2") if err.Error() != "(1, 8): missing comma" { t.Error("Bad error message:", err.Error()) } } func TestNewlinesInArrays(t *testing.T) { tree, err := Load("a = [1,\n2,\n3]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(1), int64(2), int64(3)}, }) } func TestArrayWithExtraComma(t *testing.T) { tree, err := Load("a = [1,\n2,\n3,\n]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(1), int64(2), int64(3)}, }) } func TestArrayWithExtraCommaComment(t *testing.T) { tree, err := Load("a = [1, # wow\n2, # such items\n3, # so array\n]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(1), int64(2), int64(3)}, }) } func TestSimpleInlineGroup(t *testing.T) { tree, err := Load("key = {a = 42}") assertTree(t, tree, err, map[string]interface{}{ "key": map[string]interface{}{ "a": int64(42), }, }) } func TestDoubleInlineGroup(t *testing.T) { tree, err := Load("key = {a = 42, b = \"foo\"}") assertTree(t, tree, err, map[string]interface{}{ "key": map[string]interface{}{ "a": int64(42), "b": "foo", }, }) } func TestExampleInlineGroup(t *testing.T) { tree, err := Load(`name = { first = "Tom", last = "Preston-Werner" } point = { x = 1, y = 2 }`) assertTree(t, tree, err, map[string]interface{}{ "name": map[string]interface{}{ "first": "Tom", "last": "Preston-Werner", }, "point": map[string]interface{}{ "x": int64(1), "y": int64(2), }, }) } func TestExampleInlineGroupInArray(t *testing.T) { tree, err := Load(`points = [{ x = 1, y = 2 }]`) assertTree(t, tree, err, map[string]interface{}{ "points": []map[string]interface{}{ { "x": int64(1), "y": int64(2), }, }, }) } func TestInlineTableUnterminated(t *testing.T) { _, err := Load("foo = {") if err.Error() != "(1, 8): unterminated inline table" { t.Error("Bad error message:", err.Error()) } } func TestInlineTableCommaExpected(t *testing.T) { _, err := Load("foo = {hello = 53 test = foo}") if err.Error() != "(1, 19): comma expected between fields in inline table" { t.Error("Bad error message:", err.Error()) } } func TestInlineTableCommaStart(t *testing.T) { _, err := Load("foo = {, hello = 53}") if err.Error() != "(1, 8): inline table cannot start with a comma" { t.Error("Bad error message:", err.Error()) } } func TestInlineTableDoubleComma(t *testing.T) { _, err := Load("foo = {hello = 53,, foo = 17}") if err.Error() != "(1, 19): need field between two commas in inline table" { t.Error("Bad error message:", err.Error()) } } func TestDuplicateGroups(t *testing.T) { _, err := Load("[foo]\na=2\n[foo]b=3") if err.Error() != "(3, 2): duplicated tables" { t.Error("Bad error message:", err.Error()) } } func TestDuplicateKeys(t *testing.T) { _, err := Load("foo = 2\nfoo = 3") if err.Error() != "(2, 1): The following key was defined twice: foo" { t.Error("Bad error message:", err.Error()) } } func TestEmptyIntermediateTable(t *testing.T) { _, err := Load("[foo..bar]") if err.Error() != "(1, 2): invalid table array key: empty table key" { t.Error("Bad error message:", err.Error()) } } func TestImplicitDeclarationBefore(t *testing.T) { tree, err := Load("[a.b.c]\nanswer = 42\n[a]\nbetter = 43") assertTree(t, tree, err, map[string]interface{}{ "a": map[string]interface{}{ "b": map[string]interface{}{ "c": map[string]interface{}{ "answer": int64(42), }, }, "better": int64(43), }, }) } func TestFloatsWithoutLeadingZeros(t *testing.T) { _, err := Load("a = .42") if err.Error() != "(1, 5): cannot start float with a dot" { t.Error("Bad error message:", err.Error()) } _, err = Load("a = -.42") if err.Error() != "(1, 5): cannot start float with a dot" { t.Error("Bad error message:", err.Error()) } } func TestMissingFile(t *testing.T) { _, err := LoadFile("foo.toml") if err.Error() != "open foo.toml: no such file or directory" && err.Error() != "open foo.toml: The system cannot find the file specified." { t.Error("Bad error message:", err.Error()) } } func TestParseFile(t *testing.T) { tree, err := LoadFile("example.toml") assertTree(t, tree, err, map[string]interface{}{ "title": "TOML Example", "owner": map[string]interface{}{ "name": "Tom Preston-Werner", "organization": "GitHub", "bio": "GitHub Cofounder & CEO\nLikes tater tots and beer.", "dob": time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC), }, "database": map[string]interface{}{ "server": "192.168.1.1", "ports": []int64{8001, 8001, 8002}, "connection_max": 5000, "enabled": true, }, "servers": map[string]interface{}{ "alpha": map[string]interface{}{ "ip": "10.0.0.1", "dc": "eqdc10", }, "beta": map[string]interface{}{ "ip": "10.0.0.2", "dc": "eqdc10", }, }, "clients": map[string]interface{}{ "data": []interface{}{ []string{"gamma", "delta"}, []int64{1, 2}, }, }, }) } func TestParseFileCRLF(t *testing.T) { tree, err := LoadFile("example-crlf.toml") assertTree(t, tree, err, map[string]interface{}{ "title": "TOML Example", "owner": map[string]interface{}{ "name": "Tom Preston-Werner", "organization": "GitHub", "bio": "GitHub Cofounder & CEO\nLikes tater tots and beer.", "dob": time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC), }, "database": map[string]interface{}{ "server": "192.168.1.1", "ports": []int64{8001, 8001, 8002}, "connection_max": 5000, "enabled": true, }, "servers": map[string]interface{}{ "alpha": map[string]interface{}{ "ip": "10.0.0.1", "dc": "eqdc10", }, "beta": map[string]interface{}{ "ip": "10.0.0.2", "dc": "eqdc10", }, }, "clients": map[string]interface{}{ "data": []interface{}{ []string{"gamma", "delta"}, []int64{1, 2}, }, }, }) } func TestParseKeyGroupArray(t *testing.T) { tree, err := Load("[[foo.bar]] a = 42\n[[foo.bar]] a = 69") assertTree(t, tree, err, map[string]interface{}{ "foo": map[string]interface{}{ "bar": []map[string]interface{}{ {"a": int64(42)}, {"a": int64(69)}, }, }, }) } func TestParseKeyGroupArrayUnfinished(t *testing.T) { _, err := Load("[[foo.bar]\na = 42") if err.Error() != "(1, 10): was expecting token [[, but got unclosed table array key instead" { t.Error("Bad error message:", err.Error()) } _, err = Load("[[foo.[bar]\na = 42") if err.Error() != "(1, 3): unexpected token table array key cannot contain ']', was expecting a table array key" { t.Error("Bad error message:", err.Error()) } } func TestParseKeyGroupArrayQueryExample(t *testing.T) { tree, err := Load(` [[book]] title = "The Stand" author = "Stephen King" [[book]] title = "For Whom the Bell Tolls" author = "Ernest Hemmingway" [[book]] title = "Neuromancer" author = "William Gibson" `) assertTree(t, tree, err, map[string]interface{}{ "book": []map[string]interface{}{ {"title": "The Stand", "author": "Stephen King"}, {"title": "For Whom the Bell Tolls", "author": "Ernest Hemmingway"}, {"title": "Neuromancer", "author": "William Gibson"}, }, }) } func TestParseKeyGroupArraySpec(t *testing.T) { tree, err := Load("[[fruit]]\n name=\"apple\"\n [fruit.physical]\n color=\"red\"\n shape=\"round\"\n [[fruit]]\n name=\"banana\"") assertTree(t, tree, err, map[string]interface{}{ "fruit": []map[string]interface{}{ {"name": "apple", "physical": map[string]interface{}{"color": "red", "shape": "round"}}, {"name": "banana"}, }, }) } func TestTomlValueStringRepresentation(t *testing.T) { for idx, item := range []struct { Value interface{} Expect string }{ {int64(12345), "12345"}, {uint64(50), "50"}, {float64(123.45), "123.45"}, {bool(true), "true"}, {"hello world", "\"hello world\""}, {"\b\t\n\f\r\"\\", "\"\\b\\t\\n\\f\\r\\\"\\\\\""}, {"\x05", "\"\\u0005\""}, {time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC), "1979-05-27T07:32:00Z"}, {[]interface{}{"gamma", "delta"}, "[\"gamma\",\"delta\"]"}, {nil, ""}, } { result, err := tomlValueStringRepresentation(item.Value) if err != nil { t.Errorf("Test %d - unexpected error: %s", idx, err) } if result != item.Expect { t.Errorf("Test %d - got '%s', expected '%s'", idx, result, item.Expect) } } } func TestToStringMapStringString(t *testing.T) { tree, err := TreeFromMap(map[string]interface{}{"m": map[string]interface{}{"v": "abc"}}) if err != nil { t.Fatalf("unexpected error: %s", err) } want := "\n[m]\n v = \"abc\"\n" got := tree.String() if got != want { t.Errorf("want:\n%q\ngot:\n%q", want, got) } } func assertPosition(t *testing.T, text string, ref map[string]Position) { tree, err := Load(text) if err != nil { t.Errorf("Error loading document text: `%v`", text) t.Errorf("Error: %v", err) } for path, pos := range ref { testPos := tree.GetPosition(path) if testPos.Invalid() { t.Errorf("Failed to query tree path or path has invalid position: %s", path) } else if pos != testPos { t.Errorf("Expected position %v, got %v instead", pos, testPos) } } } func TestDocumentPositions(t *testing.T) { assertPosition(t, "[foo]\nbar=42\nbaz=69", map[string]Position{ "": {1, 1}, "foo": {1, 1}, "foo.bar": {2, 1}, "foo.baz": {3, 1}, }) } func TestDocumentPositionsWithSpaces(t *testing.T) { assertPosition(t, " [foo]\n bar=42\n baz=69", map[string]Position{ "": {1, 1}, "foo": {1, 3}, "foo.bar": {2, 3}, "foo.baz": {3, 3}, }) } func TestDocumentPositionsWithGroupArray(t *testing.T) { assertPosition(t, "[[foo]]\nbar=42\nbaz=69", map[string]Position{ "": {1, 1}, "foo": {1, 1}, "foo.bar": {2, 1}, "foo.baz": {3, 1}, }) } func TestNestedTreePosition(t *testing.T) { assertPosition(t, "[foo.bar]\na=42\nb=69", map[string]Position{ "": {1, 1}, "foo": {1, 1}, "foo.bar": {1, 1}, "foo.bar.a": {2, 1}, "foo.bar.b": {3, 1}, }) } func TestInvalidGroupArray(t *testing.T) { _, err := Load("[table#key]\nanswer = 42") if err == nil { t.Error("Should error") } _, err = Load("[foo.[bar]\na = 42") if err.Error() != "(1, 2): unexpected token table key cannot contain ']', was expecting a table key" { t.Error("Bad error message:", err.Error()) } } func TestDoubleEqual(t *testing.T) { _, err := Load("foo= = 2") if err.Error() != "(1, 6): cannot have multiple equals for the same key" { t.Error("Bad error message:", err.Error()) } } func TestGroupArrayReassign(t *testing.T) { _, err := Load("[hello]\n[[hello]]") if err.Error() != "(2, 3): key \"hello\" is already assigned and not of type table array" { t.Error("Bad error message:", err.Error()) } } func TestInvalidFloatParsing(t *testing.T) { _, err := Load("a=1e_2") if err.Error() != "(1, 3): invalid use of _ in number" { t.Error("Bad error message:", err.Error()) } _, err = Load("a=1e2_") if err.Error() != "(1, 3): invalid use of _ in number" { t.Error("Bad error message:", err.Error()) } _, err = Load("a=1__2") if err.Error() != "(1, 3): invalid use of _ in number" { t.Error("Bad error message:", err.Error()) } _, err = Load("a=_1_2") if err.Error() != "(1, 3): cannot start number with underscore" { t.Error("Bad error message:", err.Error()) } } dep-0.3.2/vendor/github.com/pelletier/go-toml/position.go000066400000000000000000000013501317166637100233700ustar00rootroot00000000000000// Position support for go-toml package toml import ( "fmt" ) // Position of a document element within a TOML document. // // Line and Col are both 1-indexed positions for the element's line number and // column number, respectively. Values of zero or less will cause Invalid(), // to return true. type Position struct { Line int // line within the document Col int // column within the line } // String representation of the position. // Displays 1-indexed line and column numbers. func (p Position) String() string { return fmt.Sprintf("(%d, %d)", p.Line, p.Col) } // Invalid returns whether or not the position is valid (i.e. with negative or // null values) func (p Position) Invalid() bool { return p.Line <= 0 || p.Col <= 0 } dep-0.3.2/vendor/github.com/pelletier/go-toml/position_test.go000066400000000000000000000007061317166637100244330ustar00rootroot00000000000000// Testing support for go-toml package toml import ( "testing" ) func TestPositionString(t *testing.T) { p := Position{123, 456} expected := "(123, 456)" value := p.String() if value != expected { t.Errorf("Expected %v, got %v instead", expected, value) } } func TestInvalid(t *testing.T) { for i, v := range []Position{ {0, 1234}, {1234, 0}, {0, 0}, } { if !v.Invalid() { t.Errorf("Position at %v is valid: %v", i, v) } } } dep-0.3.2/vendor/github.com/pelletier/go-toml/query.go000066400000000000000000000074311317166637100226770ustar00rootroot00000000000000package toml import ( "time" ) // NodeFilterFn represents a user-defined filter function, for use with // Query.SetFilter(). // // The return value of the function must indicate if 'node' is to be included // at this stage of the TOML path. Returning true will include the node, and // returning false will exclude it. // // NOTE: Care should be taken to write script callbacks such that they are safe // to use from multiple goroutines. type NodeFilterFn func(node interface{}) bool // QueryResult is the result of Executing a Query. type QueryResult struct { items []interface{} positions []Position } // appends a value/position pair to the result set. func (r *QueryResult) appendResult(node interface{}, pos Position) { r.items = append(r.items, node) r.positions = append(r.positions, pos) } // Values is a set of values within a QueryResult. The order of values is not // guaranteed to be in document order, and may be different each time a query is // executed. func (r QueryResult) Values() []interface{} { values := make([]interface{}, len(r.items)) for i, v := range r.items { o, ok := v.(*tomlValue) if ok { values[i] = o.value } else { values[i] = v } } return values } // Positions is a set of positions for values within a QueryResult. Each index // in Positions() corresponds to the entry in Value() of the same index. func (r QueryResult) Positions() []Position { return r.positions } // runtime context for executing query paths type queryContext struct { result *QueryResult filters *map[string]NodeFilterFn lastPosition Position } // generic path functor interface type pathFn interface { setNext(next pathFn) call(node interface{}, ctx *queryContext) } // A Query is the representation of a compiled TOML path. A Query is safe // for concurrent use by multiple goroutines. type Query struct { root pathFn tail pathFn filters *map[string]NodeFilterFn } func newQuery() *Query { return &Query{ root: nil, tail: nil, filters: &defaultFilterFunctions, } } func (q *Query) appendPath(next pathFn) { if q.root == nil { q.root = next } else { q.tail.setNext(next) } q.tail = next next.setNext(newTerminatingFn()) // init the next functor } // CompileQuery compiles a TOML path expression. The returned Query can be used // to match elements within a TomlTree and its descendants. func CompileQuery(path string) (*Query, error) { return parseQuery(lexQuery(path)) } // Execute executes a query against a TomlTree, and returns the result of the query. func (q *Query) Execute(tree *TomlTree) *QueryResult { result := &QueryResult{ items: []interface{}{}, positions: []Position{}, } if q.root == nil { result.appendResult(tree, tree.GetPosition("")) } else { ctx := &queryContext{ result: result, filters: q.filters, } q.root.call(tree, ctx) } return result } // SetFilter sets a user-defined filter function. These may be used inside // "?(..)" query expressions to filter TOML document elements within a query. func (q *Query) SetFilter(name string, fn NodeFilterFn) { if q.filters == &defaultFilterFunctions { // clone the static table q.filters = &map[string]NodeFilterFn{} for k, v := range defaultFilterFunctions { (*q.filters)[k] = v } } (*q.filters)[name] = fn } var defaultFilterFunctions = map[string]NodeFilterFn{ "tree": func(node interface{}) bool { _, ok := node.(*TomlTree) return ok }, "int": func(node interface{}) bool { _, ok := node.(int64) return ok }, "float": func(node interface{}) bool { _, ok := node.(float64) return ok }, "string": func(node interface{}) bool { _, ok := node.(string) return ok }, "time": func(node interface{}) bool { _, ok := node.(time.Time) return ok }, "bool": func(node interface{}) bool { _, ok := node.(bool) return ok }, } dep-0.3.2/vendor/github.com/pelletier/go-toml/query_test.go000066400000000000000000000032421317166637100237320ustar00rootroot00000000000000package toml import ( "testing" ) func assertArrayContainsInAnyOrder(t *testing.T, array []interface{}, objects ...interface{}) { if len(array) != len(objects) { t.Fatalf("array contains %d objects but %d are expected", len(array), len(objects)) } for _, o := range objects { found := false for _, a := range array { if a == o { found = true break } } if !found { t.Fatal(o, "not found in array", array) } } } func TestQueryExample(t *testing.T) { config, _ := Load(` [[book]] title = "The Stand" author = "Stephen King" [[book]] title = "For Whom the Bell Tolls" author = "Ernest Hemmingway" [[book]] title = "Neuromancer" author = "William Gibson" `) authors, _ := config.Query("$.book.author") names := authors.Values() if len(names) != 3 { t.Fatalf("query should return 3 names but returned %d", len(names)) } assertArrayContainsInAnyOrder(t, names, "Stephen King", "Ernest Hemmingway", "William Gibson") } func TestQueryReadmeExample(t *testing.T) { config, _ := Load(` [postgres] user = "pelletier" password = "mypassword" `) results, _ := config.Query("$..[user,password]") values := results.Values() if len(values) != 2 { t.Fatalf("query should return 2 values but returned %d", len(values)) } assertArrayContainsInAnyOrder(t, values, "pelletier", "mypassword") } func TestQueryPathNotPresent(t *testing.T) { config, _ := Load(`a = "hello"`) results, err := config.Query("$.foo.bar") if err != nil { t.Fatalf("err should be nil. got %s instead", err) } if len(results.items) != 0 { t.Fatalf("no items should be matched. %d matched instead", len(results.items)) } } dep-0.3.2/vendor/github.com/pelletier/go-toml/querylexer.go000066400000000000000000000143221317166637100237340ustar00rootroot00000000000000// TOML JSONPath lexer. // // Written using the principles developed by Rob Pike in // http://www.youtube.com/watch?v=HxaD_trXwRE package toml import ( "fmt" "strconv" "strings" "unicode/utf8" ) // Lexer state function type queryLexStateFn func() queryLexStateFn // Lexer definition type queryLexer struct { input string start int pos int width int tokens chan token depth int line int col int stringTerm string } func (l *queryLexer) run() { for state := l.lexVoid; state != nil; { state = state() } close(l.tokens) } func (l *queryLexer) nextStart() { // iterate by runes (utf8 characters) // search for newlines and advance line/col counts for i := l.start; i < l.pos; { r, width := utf8.DecodeRuneInString(l.input[i:]) if r == '\n' { l.line++ l.col = 1 } else { l.col++ } i += width } // advance start position to next token l.start = l.pos } func (l *queryLexer) emit(t tokenType) { l.tokens <- token{ Position: Position{l.line, l.col}, typ: t, val: l.input[l.start:l.pos], } l.nextStart() } func (l *queryLexer) emitWithValue(t tokenType, value string) { l.tokens <- token{ Position: Position{l.line, l.col}, typ: t, val: value, } l.nextStart() } func (l *queryLexer) next() rune { if l.pos >= len(l.input) { l.width = 0 return eof } var r rune r, l.width = utf8.DecodeRuneInString(l.input[l.pos:]) l.pos += l.width return r } func (l *queryLexer) ignore() { l.nextStart() } func (l *queryLexer) backup() { l.pos -= l.width } func (l *queryLexer) errorf(format string, args ...interface{}) queryLexStateFn { l.tokens <- token{ Position: Position{l.line, l.col}, typ: tokenError, val: fmt.Sprintf(format, args...), } return nil } func (l *queryLexer) peek() rune { r := l.next() l.backup() return r } func (l *queryLexer) accept(valid string) bool { if strings.ContainsRune(valid, l.next()) { return true } l.backup() return false } func (l *queryLexer) follow(next string) bool { return strings.HasPrefix(l.input[l.pos:], next) } func (l *queryLexer) lexVoid() queryLexStateFn { for { next := l.peek() switch next { case '$': l.pos++ l.emit(tokenDollar) continue case '.': if l.follow("..") { l.pos += 2 l.emit(tokenDotDot) } else { l.pos++ l.emit(tokenDot) } continue case '[': l.pos++ l.emit(tokenLeftBracket) continue case ']': l.pos++ l.emit(tokenRightBracket) continue case ',': l.pos++ l.emit(tokenComma) continue case '*': l.pos++ l.emit(tokenStar) continue case '(': l.pos++ l.emit(tokenLeftParen) continue case ')': l.pos++ l.emit(tokenRightParen) continue case '?': l.pos++ l.emit(tokenQuestion) continue case ':': l.pos++ l.emit(tokenColon) continue case '\'': l.ignore() l.stringTerm = string(next) return l.lexString case '"': l.ignore() l.stringTerm = string(next) return l.lexString } if isSpace(next) { l.next() l.ignore() continue } if isAlphanumeric(next) { return l.lexKey } if next == '+' || next == '-' || isDigit(next) { return l.lexNumber } if l.next() == eof { break } return l.errorf("unexpected char: '%v'", next) } l.emit(tokenEOF) return nil } func (l *queryLexer) lexKey() queryLexStateFn { for { next := l.peek() if !isAlphanumeric(next) { l.emit(tokenKey) return l.lexVoid } if l.next() == eof { break } } l.emit(tokenEOF) return nil } func (l *queryLexer) lexString() queryLexStateFn { l.pos++ l.ignore() growingString := "" for { if l.follow(l.stringTerm) { l.emitWithValue(tokenString, growingString) l.pos++ l.ignore() return l.lexVoid } if l.follow("\\\"") { l.pos++ growingString += "\"" } else if l.follow("\\'") { l.pos++ growingString += "'" } else if l.follow("\\n") { l.pos++ growingString += "\n" } else if l.follow("\\b") { l.pos++ growingString += "\b" } else if l.follow("\\f") { l.pos++ growingString += "\f" } else if l.follow("\\/") { l.pos++ growingString += "/" } else if l.follow("\\t") { l.pos++ growingString += "\t" } else if l.follow("\\r") { l.pos++ growingString += "\r" } else if l.follow("\\\\") { l.pos++ growingString += "\\" } else if l.follow("\\u") { l.pos += 2 code := "" for i := 0; i < 4; i++ { c := l.peek() l.pos++ if !isHexDigit(c) { return l.errorf("unfinished unicode escape") } code = code + string(c) } l.pos-- intcode, err := strconv.ParseInt(code, 16, 32) if err != nil { return l.errorf("invalid unicode escape: \\u" + code) } growingString += string(rune(intcode)) } else if l.follow("\\U") { l.pos += 2 code := "" for i := 0; i < 8; i++ { c := l.peek() l.pos++ if !isHexDigit(c) { return l.errorf("unfinished unicode escape") } code = code + string(c) } l.pos-- intcode, err := strconv.ParseInt(code, 16, 32) if err != nil { return l.errorf("invalid unicode escape: \\u" + code) } growingString += string(rune(intcode)) } else if l.follow("\\") { l.pos++ return l.errorf("invalid escape sequence: \\" + string(l.peek())) } else { growingString += string(l.peek()) } if l.next() == eof { break } } return l.errorf("unclosed string") } func (l *queryLexer) lexNumber() queryLexStateFn { l.ignore() if !l.accept("+") { l.accept("-") } pointSeen := false digitSeen := false for { next := l.next() if next == '.' { if pointSeen { return l.errorf("cannot have two dots in one float") } if !isDigit(l.peek()) { return l.errorf("float cannot end with a dot") } pointSeen = true } else if isDigit(next) { digitSeen = true } else { l.backup() break } if pointSeen && !digitSeen { return l.errorf("cannot start float with a dot") } } if !digitSeen { return l.errorf("no digit in that number") } if pointSeen { l.emit(tokenFloat) } else { l.emit(tokenInteger) } return l.lexVoid } // Entry point func lexQuery(input string) chan token { l := &queryLexer{ input: input, tokens: make(chan token), line: 1, col: 1, } go l.run() return l.tokens } dep-0.3.2/vendor/github.com/pelletier/go-toml/querylexer_test.go000066400000000000000000000110201317166637100247630ustar00rootroot00000000000000package toml import ( "testing" ) func testQLFlow(t *testing.T, input string, expectedFlow []token) { ch := lexQuery(input) for idx, expected := range expectedFlow { token := <-ch if token != expected { t.Log("While testing #", idx, ":", input) t.Log("compared (got)", token, "to (expected)", expected) t.Log("\tvalue:", token.val, "<->", expected.val) t.Log("\tvalue as bytes:", []byte(token.val), "<->", []byte(expected.val)) t.Log("\ttype:", token.typ.String(), "<->", expected.typ.String()) t.Log("\tline:", token.Line, "<->", expected.Line) t.Log("\tcolumn:", token.Col, "<->", expected.Col) t.Log("compared", token, "to", expected) t.FailNow() } } tok, ok := <-ch if ok { t.Log("channel is not closed!") t.Log(len(ch)+1, "tokens remaining:") t.Log("token ->", tok) for token := range ch { t.Log("token ->", token) } t.FailNow() } } func TestLexSpecialChars(t *testing.T) { testQLFlow(t, " .$[]..()?*", []token{ {Position{1, 2}, tokenDot, "."}, {Position{1, 3}, tokenDollar, "$"}, {Position{1, 4}, tokenLeftBracket, "["}, {Position{1, 5}, tokenRightBracket, "]"}, {Position{1, 6}, tokenDotDot, ".."}, {Position{1, 8}, tokenLeftParen, "("}, {Position{1, 9}, tokenRightParen, ")"}, {Position{1, 10}, tokenQuestion, "?"}, {Position{1, 11}, tokenStar, "*"}, {Position{1, 12}, tokenEOF, ""}, }) } func TestLexString(t *testing.T) { testQLFlow(t, "'foo\n'", []token{ {Position{1, 2}, tokenString, "foo\n"}, {Position{2, 2}, tokenEOF, ""}, }) } func TestLexDoubleString(t *testing.T) { testQLFlow(t, `"bar"`, []token{ {Position{1, 2}, tokenString, "bar"}, {Position{1, 6}, tokenEOF, ""}, }) } func TestLexStringEscapes(t *testing.T) { testQLFlow(t, `"foo \" \' \b \f \/ \t \r \\ \u03A9 \U00012345 \n bar"`, []token{ {Position{1, 2}, tokenString, "foo \" ' \b \f / \t \r \\ \u03A9 \U00012345 \n bar"}, {Position{1, 55}, tokenEOF, ""}, }) } func TestLexStringUnfinishedUnicode4(t *testing.T) { testQLFlow(t, `"\u000"`, []token{ {Position{1, 2}, tokenError, "unfinished unicode escape"}, }) } func TestLexStringUnfinishedUnicode8(t *testing.T) { testQLFlow(t, `"\U0000"`, []token{ {Position{1, 2}, tokenError, "unfinished unicode escape"}, }) } func TestLexStringInvalidEscape(t *testing.T) { testQLFlow(t, `"\x"`, []token{ {Position{1, 2}, tokenError, "invalid escape sequence: \\x"}, }) } func TestLexStringUnfinished(t *testing.T) { testQLFlow(t, `"bar`, []token{ {Position{1, 2}, tokenError, "unclosed string"}, }) } func TestLexKey(t *testing.T) { testQLFlow(t, "foo", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 4}, tokenEOF, ""}, }) } func TestLexRecurse(t *testing.T) { testQLFlow(t, "$..*", []token{ {Position{1, 1}, tokenDollar, "$"}, {Position{1, 2}, tokenDotDot, ".."}, {Position{1, 4}, tokenStar, "*"}, {Position{1, 5}, tokenEOF, ""}, }) } func TestLexBracketKey(t *testing.T) { testQLFlow(t, "$[foo]", []token{ {Position{1, 1}, tokenDollar, "$"}, {Position{1, 2}, tokenLeftBracket, "["}, {Position{1, 3}, tokenKey, "foo"}, {Position{1, 6}, tokenRightBracket, "]"}, {Position{1, 7}, tokenEOF, ""}, }) } func TestLexSpace(t *testing.T) { testQLFlow(t, "foo bar baz", []token{ {Position{1, 1}, tokenKey, "foo"}, {Position{1, 5}, tokenKey, "bar"}, {Position{1, 9}, tokenKey, "baz"}, {Position{1, 12}, tokenEOF, ""}, }) } func TestLexInteger(t *testing.T) { testQLFlow(t, "100 +200 -300", []token{ {Position{1, 1}, tokenInteger, "100"}, {Position{1, 5}, tokenInteger, "+200"}, {Position{1, 10}, tokenInteger, "-300"}, {Position{1, 14}, tokenEOF, ""}, }) } func TestLexFloat(t *testing.T) { testQLFlow(t, "100.0 +200.0 -300.0", []token{ {Position{1, 1}, tokenFloat, "100.0"}, {Position{1, 7}, tokenFloat, "+200.0"}, {Position{1, 14}, tokenFloat, "-300.0"}, {Position{1, 20}, tokenEOF, ""}, }) } func TestLexFloatWithMultipleDots(t *testing.T) { testQLFlow(t, "4.2.", []token{ {Position{1, 1}, tokenError, "cannot have two dots in one float"}, }) } func TestLexFloatLeadingDot(t *testing.T) { testQLFlow(t, "+.1", []token{ {Position{1, 1}, tokenError, "cannot start float with a dot"}, }) } func TestLexFloatWithTrailingDot(t *testing.T) { testQLFlow(t, "42.", []token{ {Position{1, 1}, tokenError, "float cannot end with a dot"}, }) } func TestLexNumberWithoutDigit(t *testing.T) { testQLFlow(t, "+", []token{ {Position{1, 1}, tokenError, "no digit in that number"}, }) } func TestLexUnknown(t *testing.T) { testQLFlow(t, "^", []token{ {Position{1, 1}, tokenError, "unexpected char: '94'"}, }) } dep-0.3.2/vendor/github.com/pelletier/go-toml/queryparser.go000066400000000000000000000137511317166637100241160ustar00rootroot00000000000000/* Based on the "jsonpath" spec/concept. http://goessner.net/articles/JsonPath/ https://code.google.com/p/json-path/ */ package toml import ( "fmt" ) const maxInt = int(^uint(0) >> 1) type queryParser struct { flow chan token tokensBuffer []token query *Query union []pathFn err error } type queryParserStateFn func() queryParserStateFn // Formats and panics an error message based on a token func (p *queryParser) parseError(tok *token, msg string, args ...interface{}) queryParserStateFn { p.err = fmt.Errorf(tok.Position.String()+": "+msg, args...) return nil // trigger parse to end } func (p *queryParser) run() { for state := p.parseStart; state != nil; { state = state() } } func (p *queryParser) backup(tok *token) { p.tokensBuffer = append(p.tokensBuffer, *tok) } func (p *queryParser) peek() *token { if len(p.tokensBuffer) != 0 { return &(p.tokensBuffer[0]) } tok, ok := <-p.flow if !ok { return nil } p.backup(&tok) return &tok } func (p *queryParser) lookahead(types ...tokenType) bool { result := true buffer := []token{} for _, typ := range types { tok := p.getToken() if tok == nil { result = false break } buffer = append(buffer, *tok) if tok.typ != typ { result = false break } } // add the tokens back to the buffer, and return p.tokensBuffer = append(p.tokensBuffer, buffer...) return result } func (p *queryParser) getToken() *token { if len(p.tokensBuffer) != 0 { tok := p.tokensBuffer[0] p.tokensBuffer = p.tokensBuffer[1:] return &tok } tok, ok := <-p.flow if !ok { return nil } return &tok } func (p *queryParser) parseStart() queryParserStateFn { tok := p.getToken() if tok == nil || tok.typ == tokenEOF { return nil } if tok.typ != tokenDollar { return p.parseError(tok, "Expected '$' at start of expression") } return p.parseMatchExpr } // handle '.' prefix, '[]', and '..' func (p *queryParser) parseMatchExpr() queryParserStateFn { tok := p.getToken() switch tok.typ { case tokenDotDot: p.query.appendPath(&matchRecursiveFn{}) // nested parse for '..' tok := p.getToken() switch tok.typ { case tokenKey: p.query.appendPath(newMatchKeyFn(tok.val)) return p.parseMatchExpr case tokenLeftBracket: return p.parseBracketExpr case tokenStar: // do nothing - the recursive predicate is enough return p.parseMatchExpr } case tokenDot: // nested parse for '.' tok := p.getToken() switch tok.typ { case tokenKey: p.query.appendPath(newMatchKeyFn(tok.val)) return p.parseMatchExpr case tokenStar: p.query.appendPath(&matchAnyFn{}) return p.parseMatchExpr } case tokenLeftBracket: return p.parseBracketExpr case tokenEOF: return nil // allow EOF at this stage } return p.parseError(tok, "expected match expression") } func (p *queryParser) parseBracketExpr() queryParserStateFn { if p.lookahead(tokenInteger, tokenColon) { return p.parseSliceExpr } if p.peek().typ == tokenColon { return p.parseSliceExpr } return p.parseUnionExpr } func (p *queryParser) parseUnionExpr() queryParserStateFn { var tok *token // this state can be traversed after some sub-expressions // so be careful when setting up state in the parser if p.union == nil { p.union = []pathFn{} } loop: // labeled loop for easy breaking for { if len(p.union) > 0 { // parse delimiter or terminator tok = p.getToken() switch tok.typ { case tokenComma: // do nothing case tokenRightBracket: break loop default: return p.parseError(tok, "expected ',' or ']', not '%s'", tok.val) } } // parse sub expression tok = p.getToken() switch tok.typ { case tokenInteger: p.union = append(p.union, newMatchIndexFn(tok.Int())) case tokenKey: p.union = append(p.union, newMatchKeyFn(tok.val)) case tokenString: p.union = append(p.union, newMatchKeyFn(tok.val)) case tokenQuestion: return p.parseFilterExpr default: return p.parseError(tok, "expected union sub expression, not '%s', %d", tok.val, len(p.union)) } } // if there is only one sub-expression, use that instead if len(p.union) == 1 { p.query.appendPath(p.union[0]) } else { p.query.appendPath(&matchUnionFn{p.union}) } p.union = nil // clear out state return p.parseMatchExpr } func (p *queryParser) parseSliceExpr() queryParserStateFn { // init slice to grab all elements start, end, step := 0, maxInt, 1 // parse optional start tok := p.getToken() if tok.typ == tokenInteger { start = tok.Int() tok = p.getToken() } if tok.typ != tokenColon { return p.parseError(tok, "expected ':'") } // parse optional end tok = p.getToken() if tok.typ == tokenInteger { end = tok.Int() tok = p.getToken() } if tok.typ == tokenRightBracket { p.query.appendPath(newMatchSliceFn(start, end, step)) return p.parseMatchExpr } if tok.typ != tokenColon { return p.parseError(tok, "expected ']' or ':'") } // parse optional step tok = p.getToken() if tok.typ == tokenInteger { step = tok.Int() if step < 0 { return p.parseError(tok, "step must be a positive value") } tok = p.getToken() } if tok.typ != tokenRightBracket { return p.parseError(tok, "expected ']'") } p.query.appendPath(newMatchSliceFn(start, end, step)) return p.parseMatchExpr } func (p *queryParser) parseFilterExpr() queryParserStateFn { tok := p.getToken() if tok.typ != tokenLeftParen { return p.parseError(tok, "expected left-parenthesis for filter expression") } tok = p.getToken() if tok.typ != tokenKey && tok.typ != tokenString { return p.parseError(tok, "expected key or string for filter funciton name") } name := tok.val tok = p.getToken() if tok.typ != tokenRightParen { return p.parseError(tok, "expected right-parenthesis for filter expression") } p.union = append(p.union, newMatchFilterFn(name, tok.Position)) return p.parseUnionExpr } func parseQuery(flow chan token) (*Query, error) { parser := &queryParser{ flow: flow, tokensBuffer: []token{}, query: newQuery(), } parser.run() return parser.query, parser.err } dep-0.3.2/vendor/github.com/pelletier/go-toml/queryparser_test.go000066400000000000000000000232171317166637100251530ustar00rootroot00000000000000package toml import ( "fmt" "io/ioutil" "sort" "strings" "testing" "time" ) type queryTestNode struct { value interface{} position Position } func valueString(root interface{}) string { result := "" //fmt.Sprintf("%T:", root) switch node := root.(type) { case *tomlValue: return valueString(node.value) case *QueryResult: items := []string{} for i, v := range node.Values() { items = append(items, fmt.Sprintf("%s:%s", node.Positions()[i].String(), valueString(v))) } sort.Strings(items) result = "[" + strings.Join(items, ", ") + "]" case queryTestNode: result = fmt.Sprintf("%s:%s", node.position.String(), valueString(node.value)) case []interface{}: items := []string{} for _, v := range node { items = append(items, valueString(v)) } sort.Strings(items) result = "[" + strings.Join(items, ", ") + "]" case *TomlTree: // workaround for unreliable map key ordering items := []string{} for _, k := range node.Keys() { v := node.GetPath([]string{k}) items = append(items, k+":"+valueString(v)) } sort.Strings(items) result = "{" + strings.Join(items, ", ") + "}" case map[string]interface{}: // workaround for unreliable map key ordering items := []string{} for k, v := range node { items = append(items, k+":"+valueString(v)) } sort.Strings(items) result = "{" + strings.Join(items, ", ") + "}" case int64: result += fmt.Sprintf("%d", node) case string: result += "'" + node + "'" case float64: result += fmt.Sprintf("%f", node) case bool: result += fmt.Sprintf("%t", node) case time.Time: result += fmt.Sprintf("'%v'", node) } return result } func assertValue(t *testing.T, result, ref interface{}) { pathStr := valueString(result) refStr := valueString(ref) if pathStr != refStr { t.Errorf("values do not match") t.Log("test:", pathStr) t.Log("ref: ", refStr) } } func assertQueryPositions(t *testing.T, toml, query string, ref []interface{}) { tree, err := Load(toml) if err != nil { t.Errorf("Non-nil toml parse error: %v", err) return } q, err := CompileQuery(query) if err != nil { t.Error(err) return } results := q.Execute(tree) assertValue(t, results, ref) } func TestQueryRoot(t *testing.T) { assertQueryPositions(t, "a = 42", "$", []interface{}{ queryTestNode{ map[string]interface{}{ "a": int64(42), }, Position{1, 1}, }, }) } func TestQueryKey(t *testing.T) { assertQueryPositions(t, "[foo]\na = 42", "$.foo.a", []interface{}{ queryTestNode{ int64(42), Position{2, 1}, }, }) } func TestQueryKeyString(t *testing.T) { assertQueryPositions(t, "[foo]\na = 42", "$.foo['a']", []interface{}{ queryTestNode{ int64(42), Position{2, 1}, }, }) } func TestQueryIndex(t *testing.T) { assertQueryPositions(t, "[foo]\na = [1,2,3,4,5,6,7,8,9,0]", "$.foo.a[5]", []interface{}{ queryTestNode{ int64(6), Position{2, 1}, }, }) } func TestQuerySliceRange(t *testing.T) { assertQueryPositions(t, "[foo]\na = [1,2,3,4,5,6,7,8,9,0]", "$.foo.a[0:5]", []interface{}{ queryTestNode{ int64(1), Position{2, 1}, }, queryTestNode{ int64(2), Position{2, 1}, }, queryTestNode{ int64(3), Position{2, 1}, }, queryTestNode{ int64(4), Position{2, 1}, }, queryTestNode{ int64(5), Position{2, 1}, }, }) } func TestQuerySliceStep(t *testing.T) { assertQueryPositions(t, "[foo]\na = [1,2,3,4,5,6,7,8,9,0]", "$.foo.a[0:5:2]", []interface{}{ queryTestNode{ int64(1), Position{2, 1}, }, queryTestNode{ int64(3), Position{2, 1}, }, queryTestNode{ int64(5), Position{2, 1}, }, }) } func TestQueryAny(t *testing.T) { assertQueryPositions(t, "[foo.bar]\na=1\nb=2\n[foo.baz]\na=3\nb=4", "$.foo.*", []interface{}{ queryTestNode{ map[string]interface{}{ "a": int64(1), "b": int64(2), }, Position{1, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(3), "b": int64(4), }, Position{4, 1}, }, }) } func TestQueryUnionSimple(t *testing.T) { assertQueryPositions(t, "[foo.bar]\na=1\nb=2\n[baz.foo]\na=3\nb=4\n[gorf.foo]\na=5\nb=6", "$.*[bar,foo]", []interface{}{ queryTestNode{ map[string]interface{}{ "a": int64(1), "b": int64(2), }, Position{1, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(3), "b": int64(4), }, Position{4, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(5), "b": int64(6), }, Position{7, 1}, }, }) } func TestQueryRecursionAll(t *testing.T) { assertQueryPositions(t, "[foo.bar]\na=1\nb=2\n[baz.foo]\na=3\nb=4\n[gorf.foo]\na=5\nb=6", "$..*", []interface{}{ queryTestNode{ map[string]interface{}{ "foo": map[string]interface{}{ "bar": map[string]interface{}{ "a": int64(1), "b": int64(2), }, }, "baz": map[string]interface{}{ "foo": map[string]interface{}{ "a": int64(3), "b": int64(4), }, }, "gorf": map[string]interface{}{ "foo": map[string]interface{}{ "a": int64(5), "b": int64(6), }, }, }, Position{1, 1}, }, queryTestNode{ map[string]interface{}{ "bar": map[string]interface{}{ "a": int64(1), "b": int64(2), }, }, Position{1, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(1), "b": int64(2), }, Position{1, 1}, }, queryTestNode{ int64(1), Position{2, 1}, }, queryTestNode{ int64(2), Position{3, 1}, }, queryTestNode{ map[string]interface{}{ "foo": map[string]interface{}{ "a": int64(3), "b": int64(4), }, }, Position{4, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(3), "b": int64(4), }, Position{4, 1}, }, queryTestNode{ int64(3), Position{5, 1}, }, queryTestNode{ int64(4), Position{6, 1}, }, queryTestNode{ map[string]interface{}{ "foo": map[string]interface{}{ "a": int64(5), "b": int64(6), }, }, Position{7, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(5), "b": int64(6), }, Position{7, 1}, }, queryTestNode{ int64(5), Position{8, 1}, }, queryTestNode{ int64(6), Position{9, 1}, }, }) } func TestQueryRecursionUnionSimple(t *testing.T) { assertQueryPositions(t, "[foo.bar]\na=1\nb=2\n[baz.foo]\na=3\nb=4\n[gorf.foo]\na=5\nb=6", "$..['foo','bar']", []interface{}{ queryTestNode{ map[string]interface{}{ "bar": map[string]interface{}{ "a": int64(1), "b": int64(2), }, }, Position{1, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(3), "b": int64(4), }, Position{4, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(1), "b": int64(2), }, Position{1, 1}, }, queryTestNode{ map[string]interface{}{ "a": int64(5), "b": int64(6), }, Position{7, 1}, }, }) } func TestQueryFilterFn(t *testing.T) { buff, err := ioutil.ReadFile("example.toml") if err != nil { t.Error(err) return } assertQueryPositions(t, string(buff), "$..[?(int)]", []interface{}{ queryTestNode{ int64(8001), Position{13, 1}, }, queryTestNode{ int64(8001), Position{13, 1}, }, queryTestNode{ int64(8002), Position{13, 1}, }, queryTestNode{ int64(5000), Position{14, 1}, }, }) assertQueryPositions(t, string(buff), "$..[?(string)]", []interface{}{ queryTestNode{ "TOML Example", Position{3, 1}, }, queryTestNode{ "Tom Preston-Werner", Position{6, 1}, }, queryTestNode{ "GitHub", Position{7, 1}, }, queryTestNode{ "GitHub Cofounder & CEO\nLikes tater tots and beer.", Position{8, 1}, }, queryTestNode{ "192.168.1.1", Position{12, 1}, }, queryTestNode{ "10.0.0.1", Position{21, 3}, }, queryTestNode{ "eqdc10", Position{22, 3}, }, queryTestNode{ "10.0.0.2", Position{25, 3}, }, queryTestNode{ "eqdc10", Position{26, 3}, }, }) assertQueryPositions(t, string(buff), "$..[?(float)]", []interface{}{ // no float values in document }) tv, _ := time.Parse(time.RFC3339, "1979-05-27T07:32:00Z") assertQueryPositions(t, string(buff), "$..[?(tree)]", []interface{}{ queryTestNode{ map[string]interface{}{ "name": "Tom Preston-Werner", "organization": "GitHub", "bio": "GitHub Cofounder & CEO\nLikes tater tots and beer.", "dob": tv, }, Position{5, 1}, }, queryTestNode{ map[string]interface{}{ "server": "192.168.1.1", "ports": []interface{}{int64(8001), int64(8001), int64(8002)}, "connection_max": int64(5000), "enabled": true, }, Position{11, 1}, }, queryTestNode{ map[string]interface{}{ "alpha": map[string]interface{}{ "ip": "10.0.0.1", "dc": "eqdc10", }, "beta": map[string]interface{}{ "ip": "10.0.0.2", "dc": "eqdc10", }, }, Position{17, 1}, }, queryTestNode{ map[string]interface{}{ "ip": "10.0.0.1", "dc": "eqdc10", }, Position{20, 3}, }, queryTestNode{ map[string]interface{}{ "ip": "10.0.0.2", "dc": "eqdc10", }, Position{24, 3}, }, queryTestNode{ map[string]interface{}{ "data": []interface{}{ []interface{}{"gamma", "delta"}, []interface{}{int64(1), int64(2)}, }, }, Position{28, 1}, }, }) assertQueryPositions(t, string(buff), "$..[?(time)]", []interface{}{ queryTestNode{ tv, Position{9, 1}, }, }) assertQueryPositions(t, string(buff), "$..[?(bool)]", []interface{}{ queryTestNode{ true, Position{15, 1}, }, }) } dep-0.3.2/vendor/github.com/pelletier/go-toml/test.sh000077500000000000000000000043141317166637100225160ustar00rootroot00000000000000#!/bin/bash # fail out of the script if anything here fails set -e # set the path to the present working directory export GOPATH=`pwd` function git_clone() { path=$1 branch=$2 version=$3 if [ ! -d "src/$path" ]; then mkdir -p src/$path git clone https://$path.git src/$path fi pushd src/$path git checkout "$branch" git reset --hard "$version" popd } # Run go vet go vet ./... go get github.com/pelletier/go-buffruneio go get github.com/davecgh/go-spew/spew # get code for BurntSushi TOML validation # pinning all to 'HEAD' for version 0.3.x work (TODO: pin to commit hash when tests stabilize) git_clone github.com/BurntSushi/toml master HEAD git_clone github.com/BurntSushi/toml-test master HEAD #was: 0.2.0 HEAD # build the BurntSushi test application go build -o toml-test github.com/BurntSushi/toml-test # vendorize the current lib for testing # NOTE: this basically mocks an install without having to go back out to github for code mkdir -p src/github.com/pelletier/go-toml/cmd cp *.go *.toml src/github.com/pelletier/go-toml cp -R cmd/* src/github.com/pelletier/go-toml/cmd go build -o test_program_bin src/github.com/pelletier/go-toml/cmd/test_program.go # Run basic unit tests go test github.com/pelletier/go-toml -v -covermode=count -coverprofile=coverage.out go test github.com/pelletier/go-toml/cmd/tomljson # run the entire BurntSushi test suite if [[ $# -eq 0 ]] ; then echo "Running all BurntSushi tests" ./toml-test ./test_program_bin | tee test_out else # run a specific test test=$1 test_path='src/github.com/BurntSushi/toml-test/tests' valid_test="$test_path/valid/$test" invalid_test="$test_path/invalid/$test" if [ -e "$valid_test.toml" ]; then echo "Valid Test TOML for $test:" echo "====" cat "$valid_test.toml" echo "Valid Test JSON for $test:" echo "====" cat "$valid_test.json" echo "Go-TOML Output for $test:" echo "====" cat "$valid_test.toml" | ./test_program_bin fi if [ -e "$invalid_test.toml" ]; then echo "Invalid Test TOML for $test:" echo "====" cat "$invalid_test.toml" echo "Go-TOML Output for $test:" echo "====" echo "go-toml Output:" cat "$invalid_test.toml" | ./test_program_bin fi fi dep-0.3.2/vendor/github.com/pelletier/go-toml/token.go000066400000000000000000000037331317166637100226530ustar00rootroot00000000000000package toml import ( "fmt" "strconv" "unicode" ) // Define tokens type tokenType int const ( eof = -(iota + 1) ) const ( tokenError tokenType = iota tokenEOF tokenComment tokenKey tokenString tokenInteger tokenTrue tokenFalse tokenFloat tokenEqual tokenLeftBracket tokenRightBracket tokenLeftCurlyBrace tokenRightCurlyBrace tokenLeftParen tokenRightParen tokenDoubleLeftBracket tokenDoubleRightBracket tokenDate tokenKeyGroup tokenKeyGroupArray tokenComma tokenColon tokenDollar tokenStar tokenQuestion tokenDot tokenDotDot tokenEOL ) var tokenTypeNames = []string{ "Error", "EOF", "Comment", "Key", "String", "Integer", "True", "False", "Float", "=", "[", "]", "{", "}", "(", ")", "]]", "[[", "Date", "KeyGroup", "KeyGroupArray", ",", ":", "$", "*", "?", ".", "..", "EOL", } type token struct { Position typ tokenType val string } func (tt tokenType) String() string { idx := int(tt) if idx < len(tokenTypeNames) { return tokenTypeNames[idx] } return "Unknown" } func (t token) Int() int { if result, err := strconv.Atoi(t.val); err != nil { panic(err) } else { return result } } func (t token) String() string { switch t.typ { case tokenEOF: return "EOF" case tokenError: return t.val } return fmt.Sprintf("%q", t.val) } func isSpace(r rune) bool { return r == ' ' || r == '\t' } func isAlphanumeric(r rune) bool { return unicode.IsLetter(r) || r == '_' } func isKeyChar(r rune) bool { // Keys start with the first character that isn't whitespace or [ and end // with the last non-whitespace character before the equals sign. Keys // cannot contain a # character." return !(r == '\r' || r == '\n' || r == eof || r == '=') } func isKeyStartChar(r rune) bool { return !(isSpace(r) || r == '\r' || r == '\n' || r == eof || r == '[') } func isDigit(r rune) bool { return unicode.IsNumber(r) } func isHexDigit(r rune) bool { return isDigit(r) || (r >= 'a' && r <= 'f') || (r >= 'A' && r <= 'F') } dep-0.3.2/vendor/github.com/pelletier/go-toml/token_test.go000066400000000000000000000031151317166637100237040ustar00rootroot00000000000000package toml import "testing" func TestTokenStringer(t *testing.T) { var tests = []struct { tt tokenType expect string }{ {tokenError, "Error"}, {tokenEOF, "EOF"}, {tokenComment, "Comment"}, {tokenKey, "Key"}, {tokenString, "String"}, {tokenInteger, "Integer"}, {tokenTrue, "True"}, {tokenFalse, "False"}, {tokenFloat, "Float"}, {tokenEqual, "="}, {tokenLeftBracket, "["}, {tokenRightBracket, "]"}, {tokenLeftCurlyBrace, "{"}, {tokenRightCurlyBrace, "}"}, {tokenLeftParen, "("}, {tokenRightParen, ")"}, {tokenDoubleLeftBracket, "]]"}, {tokenDoubleRightBracket, "[["}, {tokenDate, "Date"}, {tokenKeyGroup, "KeyGroup"}, {tokenKeyGroupArray, "KeyGroupArray"}, {tokenComma, ","}, {tokenColon, ":"}, {tokenDollar, "$"}, {tokenStar, "*"}, {tokenQuestion, "?"}, {tokenDot, "."}, {tokenDotDot, ".."}, {tokenEOL, "EOL"}, {tokenEOL + 1, "Unknown"}, } for i, test := range tests { got := test.tt.String() if got != test.expect { t.Errorf("[%d] invalid string of token type; got %q, expected %q", i, got, test.expect) } } } func TestTokenString(t *testing.T) { var tests = []struct { tok token expect string }{ {token{Position{1, 1}, tokenEOF, ""}, "EOF"}, {token{Position{1, 1}, tokenError, "Δt"}, "Δt"}, {token{Position{1, 1}, tokenString, "bar"}, `"bar"`}, {token{Position{1, 1}, tokenString, "123456789012345"}, `"123456789012345"`}, } for i, test := range tests { got := test.tok.String() if got != test.expect { t.Errorf("[%d] invalid of string token; got %q, expected %q", i, got, test.expect) } } } dep-0.3.2/vendor/github.com/pelletier/go-toml/toml.go000066400000000000000000000154201317166637100225020ustar00rootroot00000000000000package toml import ( "errors" "fmt" "io" "os" "runtime" "strings" ) type tomlValue struct { value interface{} // string, int64, uint64, float64, bool, time.Time, [] of any of this list position Position } // TomlTree is the result of the parsing of a TOML file. type TomlTree struct { values map[string]interface{} // string -> *tomlValue, *TomlTree, []*TomlTree position Position } func newTomlTree() *TomlTree { return &TomlTree{ values: make(map[string]interface{}), position: Position{}, } } // TreeFromMap initializes a new TomlTree object using the given map. func TreeFromMap(m map[string]interface{}) (*TomlTree, error) { result, err := toTree(m) if err != nil { return nil, err } return result.(*TomlTree), nil } // Has returns a boolean indicating if the given key exists. func (t *TomlTree) Has(key string) bool { if key == "" { return false } return t.HasPath(strings.Split(key, ".")) } // HasPath returns true if the given path of keys exists, false otherwise. func (t *TomlTree) HasPath(keys []string) bool { return t.GetPath(keys) != nil } // Keys returns the keys of the toplevel tree. // Warning: this is a costly operation. func (t *TomlTree) Keys() []string { var keys []string for k := range t.values { keys = append(keys, k) } return keys } // Get the value at key in the TomlTree. // Key is a dot-separated path (e.g. a.b.c). // Returns nil if the path does not exist in the tree. // If keys is of length zero, the current tree is returned. func (t *TomlTree) Get(key string) interface{} { if key == "" { return t } comps, err := parseKey(key) if err != nil { return nil } return t.GetPath(comps) } // GetPath returns the element in the tree indicated by 'keys'. // If keys is of length zero, the current tree is returned. func (t *TomlTree) GetPath(keys []string) interface{} { if len(keys) == 0 { return t } subtree := t for _, intermediateKey := range keys[:len(keys)-1] { value, exists := subtree.values[intermediateKey] if !exists { return nil } switch node := value.(type) { case *TomlTree: subtree = node case []*TomlTree: // go to most recent element if len(node) == 0 { return nil } subtree = node[len(node)-1] default: return nil // cannot navigate through other node types } } // branch based on final node type switch node := subtree.values[keys[len(keys)-1]].(type) { case *tomlValue: return node.value default: return node } } // GetPosition returns the position of the given key. func (t *TomlTree) GetPosition(key string) Position { if key == "" { return t.position } return t.GetPositionPath(strings.Split(key, ".")) } // GetPositionPath returns the element in the tree indicated by 'keys'. // If keys is of length zero, the current tree is returned. func (t *TomlTree) GetPositionPath(keys []string) Position { if len(keys) == 0 { return t.position } subtree := t for _, intermediateKey := range keys[:len(keys)-1] { value, exists := subtree.values[intermediateKey] if !exists { return Position{0, 0} } switch node := value.(type) { case *TomlTree: subtree = node case []*TomlTree: // go to most recent element if len(node) == 0 { return Position{0, 0} } subtree = node[len(node)-1] default: return Position{0, 0} } } // branch based on final node type switch node := subtree.values[keys[len(keys)-1]].(type) { case *tomlValue: return node.position case *TomlTree: return node.position case []*TomlTree: // go to most recent element if len(node) == 0 { return Position{0, 0} } return node[len(node)-1].position default: return Position{0, 0} } } // GetDefault works like Get but with a default value func (t *TomlTree) GetDefault(key string, def interface{}) interface{} { val := t.Get(key) if val == nil { return def } return val } // Set an element in the tree. // Key is a dot-separated path (e.g. a.b.c). // Creates all necessary intermediates trees, if needed. func (t *TomlTree) Set(key string, value interface{}) { t.SetPath(strings.Split(key, "."), value) } // SetPath sets an element in the tree. // Keys is an array of path elements (e.g. {"a","b","c"}). // Creates all necessary intermediates trees, if needed. func (t *TomlTree) SetPath(keys []string, value interface{}) { subtree := t for _, intermediateKey := range keys[:len(keys)-1] { nextTree, exists := subtree.values[intermediateKey] if !exists { nextTree = newTomlTree() subtree.values[intermediateKey] = nextTree // add new element here } switch node := nextTree.(type) { case *TomlTree: subtree = node case []*TomlTree: // go to most recent element if len(node) == 0 { // create element if it does not exist subtree.values[intermediateKey] = append(node, newTomlTree()) } subtree = node[len(node)-1] } } var toInsert interface{} switch value.(type) { case *TomlTree: toInsert = value case []*TomlTree: toInsert = value case *tomlValue: toInsert = value default: toInsert = &tomlValue{value: value} } subtree.values[keys[len(keys)-1]] = toInsert } // createSubTree takes a tree and a key and create the necessary intermediate // subtrees to create a subtree at that point. In-place. // // e.g. passing a.b.c will create (assuming tree is empty) tree[a], tree[a][b] // and tree[a][b][c] // // Returns nil on success, error object on failure func (t *TomlTree) createSubTree(keys []string, pos Position) error { subtree := t for _, intermediateKey := range keys { nextTree, exists := subtree.values[intermediateKey] if !exists { tree := newTomlTree() tree.position = pos subtree.values[intermediateKey] = tree nextTree = tree } switch node := nextTree.(type) { case []*TomlTree: subtree = node[len(node)-1] case *TomlTree: subtree = node default: return fmt.Errorf("unknown type for path %s (%s): %T (%#v)", strings.Join(keys, "."), intermediateKey, nextTree, nextTree) } } return nil } // Query compiles and executes a query on a tree and returns the query result. func (t *TomlTree) Query(query string) (*QueryResult, error) { q, err := CompileQuery(query) if err != nil { return nil, err } return q.Execute(t), nil } // LoadReader creates a TomlTree from any io.Reader. func LoadReader(reader io.Reader) (tree *TomlTree, err error) { defer func() { if r := recover(); r != nil { if _, ok := r.(runtime.Error); ok { panic(r) } err = errors.New(r.(string)) } }() tree = parseToml(lexToml(reader)) return } // Load creates a TomlTree from a string. func Load(content string) (tree *TomlTree, err error) { return LoadReader(strings.NewReader(content)) } // LoadFile creates a TomlTree from a file. func LoadFile(path string) (tree *TomlTree, err error) { file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() return LoadReader(file) } dep-0.3.2/vendor/github.com/pelletier/go-toml/toml_test.go000066400000000000000000000055031317166637100235420ustar00rootroot00000000000000// Testing support for go-toml package toml import ( "testing" ) func TestTomlHas(t *testing.T) { tree, _ := Load(` [test] key = "value" `) if !tree.Has("test.key") { t.Errorf("Has - expected test.key to exists") } if tree.Has("") { t.Errorf("Should return false if the key is not provided") } } func TestTomlGet(t *testing.T) { tree, _ := Load(` [test] key = "value" `) if tree.Get("") != tree { t.Errorf("Get should return the tree itself when given an empty path") } if tree.Get("test.key") != "value" { t.Errorf("Get should return the value") } if tree.Get(`\`) != nil { t.Errorf("should return nil when the key is malformed") } } func TestTomlGetDefault(t *testing.T) { tree, _ := Load(` [test] key = "value" `) if tree.GetDefault("", "hello") != tree { t.Error("GetDefault should return the tree itself when given an empty path") } if tree.GetDefault("test.key", "hello") != "value" { t.Error("Get should return the value") } if tree.GetDefault("whatever", "hello") != "hello" { t.Error("GetDefault should return the default value if the key does not exist") } } func TestTomlHasPath(t *testing.T) { tree, _ := Load(` [test] key = "value" `) if !tree.HasPath([]string{"test", "key"}) { t.Errorf("HasPath - expected test.key to exists") } } func TestTomlGetPath(t *testing.T) { node := newTomlTree() //TODO: set other node data for idx, item := range []struct { Path []string Expected *TomlTree }{ { // empty path test []string{}, node, }, } { result := node.GetPath(item.Path) if result != item.Expected { t.Errorf("GetPath[%d] %v - expected %v, got %v instead.", idx, item.Path, item.Expected, result) } } tree, _ := Load("[foo.bar]\na=1\nb=2\n[baz.foo]\na=3\nb=4\n[gorf.foo]\na=5\nb=6") if tree.GetPath([]string{"whatever"}) != nil { t.Error("GetPath should return nil when the key does not exist") } } func TestTomlQuery(t *testing.T) { tree, err := Load("[foo.bar]\na=1\nb=2\n[baz.foo]\na=3\nb=4\n[gorf.foo]\na=5\nb=6") if err != nil { t.Error(err) return } result, err := tree.Query("$.foo.bar") if err != nil { t.Error(err) return } values := result.Values() if len(values) != 1 { t.Errorf("Expected resultset of 1, got %d instead: %v", len(values), values) } if tt, ok := values[0].(*TomlTree); !ok { t.Errorf("Expected type of TomlTree: %T", values[0]) } else if tt.Get("a") != int64(1) { t.Errorf("Expected 'a' with a value 1: %v", tt.Get("a")) } else if tt.Get("b") != int64(2) { t.Errorf("Expected 'b' with a value 2: %v", tt.Get("b")) } } func TestTomlFromMap(t *testing.T) { simpleMap := map[string]interface{}{"hello": 42} tree, err := TreeFromMap(simpleMap) if err != nil { t.Fatal("unexpected error:", err) } if tree.Get("hello") != int64(42) { t.Fatal("hello should be 42, not", tree.Get("hello")) } } dep-0.3.2/vendor/github.com/pelletier/go-toml/tomltree_create.go000066400000000000000000000073631317166637100247140ustar00rootroot00000000000000package toml import ( "fmt" "reflect" "time" ) // supported values: // string, bool, int64, uint64, float64, time.Time, int, int8, int16, int32, uint, uint8, uint16, uint32, float32 var kindToTypeMapping = map[reflect.Kind]reflect.Type{ reflect.Bool: reflect.TypeOf(true), reflect.String: reflect.TypeOf(""), reflect.Float32: reflect.TypeOf(float64(1)), reflect.Float64: reflect.TypeOf(float64(1)), reflect.Int: reflect.TypeOf(int64(1)), reflect.Int8: reflect.TypeOf(int64(1)), reflect.Int16: reflect.TypeOf(int64(1)), reflect.Int32: reflect.TypeOf(int64(1)), reflect.Int64: reflect.TypeOf(int64(1)), reflect.Uint: reflect.TypeOf(uint64(1)), reflect.Uint8: reflect.TypeOf(uint64(1)), reflect.Uint16: reflect.TypeOf(uint64(1)), reflect.Uint32: reflect.TypeOf(uint64(1)), reflect.Uint64: reflect.TypeOf(uint64(1)), } func simpleValueCoercion(object interface{}) (interface{}, error) { switch original := object.(type) { case string, bool, int64, uint64, float64, time.Time: return original, nil case int: return int64(original), nil case int8: return int64(original), nil case int16: return int64(original), nil case int32: return int64(original), nil case uint: return uint64(original), nil case uint8: return uint64(original), nil case uint16: return uint64(original), nil case uint32: return uint64(original), nil case float32: return float64(original), nil case fmt.Stringer: return original.String(), nil default: return nil, fmt.Errorf("cannot convert type %T to TomlTree", object) } } func sliceToTree(object interface{}) (interface{}, error) { // arrays are a bit tricky, since they can represent either a // collection of simple values, which is represented by one // *tomlValue, or an array of tables, which is represented by an // array of *TomlTree. // holding the assumption that this function is called from toTree only when value.Kind() is Array or Slice value := reflect.ValueOf(object) insideType := value.Type().Elem() length := value.Len() if length > 0 { insideType = reflect.ValueOf(value.Index(0).Interface()).Type() } if insideType.Kind() == reflect.Map { // this is considered as an array of tables tablesArray := make([]*TomlTree, 0, length) for i := 0; i < length; i++ { table := value.Index(i) tree, err := toTree(table.Interface()) if err != nil { return nil, err } tablesArray = append(tablesArray, tree.(*TomlTree)) } return tablesArray, nil } sliceType := kindToTypeMapping[insideType.Kind()] if sliceType == nil { sliceType = insideType } arrayValue := reflect.MakeSlice(reflect.SliceOf(sliceType), 0, length) for i := 0; i < length; i++ { val := value.Index(i).Interface() simpleValue, err := simpleValueCoercion(val) if err != nil { return nil, err } arrayValue = reflect.Append(arrayValue, reflect.ValueOf(simpleValue)) } return &tomlValue{arrayValue.Interface(), Position{}}, nil } func toTree(object interface{}) (interface{}, error) { value := reflect.ValueOf(object) if value.Kind() == reflect.Map { values := map[string]interface{}{} keys := value.MapKeys() for _, key := range keys { if key.Kind() != reflect.String { if _, ok := key.Interface().(string); !ok { return nil, fmt.Errorf("map key needs to be a string, not %T (%v)", key.Interface(), key.Kind()) } } v := value.MapIndex(key) newValue, err := toTree(v.Interface()) if err != nil { return nil, err } values[key.String()] = newValue } return &TomlTree{values, Position{}}, nil } if value.Kind() == reflect.Array || value.Kind() == reflect.Slice { return sliceToTree(object) } simpleValue, err := simpleValueCoercion(object) if err != nil { return nil, err } return &tomlValue{simpleValue, Position{}}, nil } dep-0.3.2/vendor/github.com/pelletier/go-toml/tomltree_create_test.go000066400000000000000000000066611317166637100257530ustar00rootroot00000000000000package toml import ( "testing" "time" "strconv" ) type customString string type stringer struct{} func (s stringer) String() string { return "stringer" } func validate(t *testing.T, path string, object interface{}) { switch o := object.(type) { case *TomlTree: for key, tree := range o.values { validate(t, path+"."+key, tree) } case []*TomlTree: for index, tree := range o { validate(t, path+"."+strconv.Itoa(index), tree) } case *tomlValue: switch o.value.(type) { case int64, uint64, bool, string, float64, time.Time, []int64, []uint64, []bool, []string, []float64, []time.Time: default: t.Fatalf("tomlValue at key %s containing incorrect type %T", path, o.value) } default: t.Fatalf("value at key %s is of incorrect type %T", path, object) } t.Logf("validation ok %s as %T", path, object) } func validateTree(t *testing.T, tree *TomlTree) { validate(t, "", tree) } func TestTomlTreeCreateToTree(t *testing.T) { data := map[string]interface{}{ "a_string": "bar", "an_int": 42, "time": time.Now(), "int8": int8(2), "int16": int16(2), "int32": int32(2), "uint8": uint8(2), "uint16": uint16(2), "uint32": uint32(2), "float32": float32(2), "a_bool": false, "stringer": stringer{}, "nested": map[string]interface{}{ "foo": "bar", }, "array": []string{"a", "b", "c"}, "array_uint": []uint{uint(1), uint(2)}, "array_table": []map[string]interface{}{map[string]interface{}{"sub_map": 52}}, "array_times": []time.Time{time.Now(), time.Now()}, "map_times": map[string]time.Time{"now": time.Now()}, "custom_string_map_key": map[customString]interface{}{customString("custom"): "custom"}, } tree, err := TreeFromMap(data) if err != nil { t.Fatal("unexpected error:", err) } validateTree(t, tree) } func TestTomlTreeCreateToTreeInvalidLeafType(t *testing.T) { _, err := TreeFromMap(map[string]interface{}{"foo": t}) expected := "cannot convert type *testing.T to TomlTree" if err.Error() != expected { t.Fatalf("expected error %s, got %s", expected, err.Error()) } } func TestTomlTreeCreateToTreeInvalidMapKeyType(t *testing.T) { _, err := TreeFromMap(map[string]interface{}{"foo": map[int]interface{}{2: 1}}) expected := "map key needs to be a string, not int (int)" if err.Error() != expected { t.Fatalf("expected error %s, got %s", expected, err.Error()) } } func TestTomlTreeCreateToTreeInvalidArrayMemberType(t *testing.T) { _, err := TreeFromMap(map[string]interface{}{"foo": []*testing.T{t}}) expected := "cannot convert type *testing.T to TomlTree" if err.Error() != expected { t.Fatalf("expected error %s, got %s", expected, err.Error()) } } func TestTomlTreeCreateToTreeInvalidTableGroupType(t *testing.T) { _, err := TreeFromMap(map[string]interface{}{"foo": []map[string]interface{}{map[string]interface{}{"hello": t}}}) expected := "cannot convert type *testing.T to TomlTree" if err.Error() != expected { t.Fatalf("expected error %s, got %s", expected, err.Error()) } } func TestRoundTripArrayOfTables(t *testing.T) { orig := "\n[[stuff]]\n name = \"foo\"\n things = [\"a\",\"b\"]\n" tree, err := Load(orig) if err != nil { t.Fatalf("unexpected error: %s", err) } m := tree.ToMap() tree, err = TreeFromMap(m) if err != nil { t.Fatalf("unexpected error: %s", err) } want := orig got := tree.String() if got != want { t.Errorf("want:\n%s\ngot:\n%s", want, got) } } dep-0.3.2/vendor/github.com/pelletier/go-toml/tomltree_write.go000066400000000000000000000122661317166637100246010ustar00rootroot00000000000000package toml import ( "bytes" "fmt" "io" "sort" "strconv" "strings" "time" "reflect" ) // encodes a string to a TOML-compliant string value func encodeTomlString(value string) string { result := "" for _, rr := range value { switch rr { case '\b': result += "\\b" case '\t': result += "\\t" case '\n': result += "\\n" case '\f': result += "\\f" case '\r': result += "\\r" case '"': result += "\\\"" case '\\': result += "\\\\" default: intRr := uint16(rr) if intRr < 0x001F { result += fmt.Sprintf("\\u%0.4X", intRr) } else { result += string(rr) } } } return result } func tomlValueStringRepresentation(v interface{}) (string, error) { switch value := v.(type) { case uint64: return strconv.FormatUint(value, 10), nil case int64: return strconv.FormatInt(value, 10), nil case float64: return strconv.FormatFloat(value, 'f', -1, 32), nil case string: return "\"" + encodeTomlString(value) + "\"", nil case []byte: b, _ := v.([]byte) return tomlValueStringRepresentation(string(b)) case bool: if value { return "true", nil } return "false", nil case time.Time: return value.Format(time.RFC3339), nil case nil: return "", nil } rv := reflect.ValueOf(v) if rv.Kind() == reflect.Slice { values := []string{} for i := 0; i < rv.Len(); i++ { item := rv.Index(i).Interface() itemRepr, err := tomlValueStringRepresentation(item) if err != nil { return "", err } values = append(values, itemRepr) } return "[" + strings.Join(values, ",") + "]", nil } return "", fmt.Errorf("unsupported value type %T: %v", v, v) } func (t *TomlTree) writeTo(w io.Writer, indent, keyspace string, bytesCount int64) (int64, error) { simpleValuesKeys := make([]string, 0) complexValuesKeys := make([]string, 0) for k := range t.values { v := t.values[k] switch v.(type) { case *TomlTree, []*TomlTree: complexValuesKeys = append(complexValuesKeys, k) default: simpleValuesKeys = append(simpleValuesKeys, k) } } sort.Strings(simpleValuesKeys) sort.Strings(complexValuesKeys) for _, k := range simpleValuesKeys { v, ok := t.values[k].(*tomlValue) if !ok { return bytesCount, fmt.Errorf("invalid value type at %s: %T", k, t.values[k]) } repr, err := tomlValueStringRepresentation(v.value) if err != nil { return bytesCount, err } kvRepr := fmt.Sprintf("%s%s = %s\n", indent, k, repr) writtenBytesCount, err := w.Write([]byte(kvRepr)) bytesCount += int64(writtenBytesCount) if err != nil { return bytesCount, err } } for _, k := range complexValuesKeys { v := t.values[k] combinedKey := k if keyspace != "" { combinedKey = keyspace + "." + combinedKey } switch node := v.(type) { // node has to be of those two types given how keys are sorted above case *TomlTree: tableName := fmt.Sprintf("\n%s[%s]\n", indent, combinedKey) writtenBytesCount, err := w.Write([]byte(tableName)) bytesCount += int64(writtenBytesCount) if err != nil { return bytesCount, err } bytesCount, err = node.writeTo(w, indent+" ", combinedKey, bytesCount) if err != nil { return bytesCount, err } case []*TomlTree: for _, subTree := range node { if len(subTree.values) > 0 { tableArrayName := fmt.Sprintf("\n%s[[%s]]\n", indent, combinedKey) writtenBytesCount, err := w.Write([]byte(tableArrayName)) bytesCount += int64(writtenBytesCount) if err != nil { return bytesCount, err } bytesCount, err = subTree.writeTo(w, indent+" ", combinedKey, bytesCount) if err != nil { return bytesCount, err } } } } } return bytesCount, nil } // WriteTo encode the TomlTree as Toml and writes it to the writer w. // Returns the number of bytes written in case of success, or an error if anything happened. func (t *TomlTree) WriteTo(w io.Writer) (int64, error) { return t.writeTo(w, "", "", 0) } // ToTomlString generates a human-readable representation of the current tree. // Output spans multiple lines, and is suitable for ingest by a TOML parser. // If the conversion cannot be performed, ToString returns a non-nil error. func (t *TomlTree) ToTomlString() (string, error) { var buf bytes.Buffer _, err := t.WriteTo(&buf) if err != nil { return "", err } return buf.String(), nil } // String generates a human-readable representation of the current tree. // Alias of ToString. Present to implement the fmt.Stringer interface. func (t *TomlTree) String() string { result, _ := t.ToTomlString() return result } // ToMap recursively generates a representation of the tree using Go built-in structures. // The following types are used: // * uint64 // * int64 // * bool // * string // * time.Time // * map[string]interface{} (where interface{} is any of this list) // * []interface{} (where interface{} is any of this list) func (t *TomlTree) ToMap() map[string]interface{} { result := map[string]interface{}{} for k, v := range t.values { switch node := v.(type) { case []*TomlTree: var array []interface{} for _, item := range node { array = append(array, item.ToMap()) } result[k] = array case *TomlTree: result[k] = node.ToMap() case *tomlValue: result[k] = node.value } } return result } dep-0.3.2/vendor/github.com/pelletier/go-toml/tomltree_write_test.go000066400000000000000000000152321317166637100256340ustar00rootroot00000000000000package toml import ( "bytes" "errors" "fmt" "reflect" "strings" "testing" "time" ) type failingWriter struct { failAt int written int buffer bytes.Buffer } func (f failingWriter) Write(p []byte) (n int, err error) { count := len(p) toWrite := f.failAt - count + f.written if toWrite < 0 { toWrite = 0 } if toWrite > count { f.written += count f.buffer.WriteString(string(p)) return count, nil } f.buffer.WriteString(string(p[:toWrite])) f.written = f.failAt return f.written, fmt.Errorf("failingWriter failed after writting %d bytes", f.written) } func assertErrorString(t *testing.T, expected string, err error) { expectedErr := errors.New(expected) if err.Error() != expectedErr.Error() { t.Errorf("expecting error %s, but got %s instead", expected, err) } } func TestTomlTreeWriteToTomlString(t *testing.T) { toml, err := Load(`name = { first = "Tom", last = "Preston-Werner" } points = { x = 1, y = 2 }`) if err != nil { t.Fatal("Unexpected error:", err) } tomlString, _ := toml.ToTomlString() reparsedTree, err := Load(tomlString) assertTree(t, reparsedTree, err, map[string]interface{}{ "name": map[string]interface{}{ "first": "Tom", "last": "Preston-Werner", }, "points": map[string]interface{}{ "x": int64(1), "y": int64(2), }, }) } func TestTomlTreeWriteToTomlStringSimple(t *testing.T) { tree, err := Load("[foo]\n\n[[foo.bar]]\na = 42\n\n[[foo.bar]]\na = 69\n") if err != nil { t.Errorf("Test failed to parse: %v", err) return } result, err := tree.ToTomlString() if err != nil { t.Errorf("Unexpected error: %s", err) } expected := "\n[foo]\n\n [[foo.bar]]\n a = 42\n\n [[foo.bar]]\n a = 69\n" if result != expected { t.Errorf("Expected got '%s', expected '%s'", result, expected) } } func TestTomlTreeWriteToTomlStringKeysOrders(t *testing.T) { for i := 0; i < 100; i++ { tree, _ := Load(` foobar = true bar = "baz" foo = 1 [qux] foo = 1 bar = "baz2"`) stringRepr, _ := tree.ToTomlString() t.Log("Intermediate string representation:") t.Log(stringRepr) r := strings.NewReader(stringRepr) toml, err := LoadReader(r) if err != nil { t.Fatal("Unexpected error:", err) } assertTree(t, toml, err, map[string]interface{}{ "foobar": true, "bar": "baz", "foo": 1, "qux": map[string]interface{}{ "foo": 1, "bar": "baz2", }, }) } } func testMaps(t *testing.T, actual, expected map[string]interface{}) { if !reflect.DeepEqual(actual, expected) { t.Fatal("trees aren't equal.\n", "Expected:\n", expected, "\nActual:\n", actual) } } func TestTomlTreeWriteToMapSimple(t *testing.T) { tree, _ := Load("a = 42\nb = 17") expected := map[string]interface{}{ "a": int64(42), "b": int64(17), } testMaps(t, tree.ToMap(), expected) } func TestTomlTreeWriteToInvalidTreeSimpleValue(t *testing.T) { tree := TomlTree{values: map[string]interface{}{"foo": int8(1)}} _, err := tree.ToTomlString() assertErrorString(t, "invalid value type at foo: int8", err) } func TestTomlTreeWriteToInvalidTreeTomlValue(t *testing.T) { tree := TomlTree{values: map[string]interface{}{"foo": &tomlValue{int8(1), Position{}}}} _, err := tree.ToTomlString() assertErrorString(t, "unsupported value type int8: 1", err) } func TestTomlTreeWriteToInvalidTreeTomlValueArray(t *testing.T) { tree := TomlTree{values: map[string]interface{}{"foo": &tomlValue{[]interface{}{int8(1)}, Position{}}}} _, err := tree.ToTomlString() assertErrorString(t, "unsupported value type int8: 1", err) } func TestTomlTreeWriteToFailingWriterInSimpleValue(t *testing.T) { toml, _ := Load(`a = 2`) writer := failingWriter{failAt: 0, written: 0} _, err := toml.WriteTo(writer) assertErrorString(t, "failingWriter failed after writting 0 bytes", err) } func TestTomlTreeWriteToFailingWriterInTable(t *testing.T) { toml, _ := Load(` [b] a = 2`) writer := failingWriter{failAt: 2, written: 0} _, err := toml.WriteTo(writer) assertErrorString(t, "failingWriter failed after writting 2 bytes", err) writer = failingWriter{failAt: 13, written: 0} _, err = toml.WriteTo(writer) assertErrorString(t, "failingWriter failed after writting 13 bytes", err) } func TestTomlTreeWriteToFailingWriterInArray(t *testing.T) { toml, _ := Load(` [[b]] a = 2`) writer := failingWriter{failAt: 2, written: 0} _, err := toml.WriteTo(writer) assertErrorString(t, "failingWriter failed after writting 2 bytes", err) writer = failingWriter{failAt: 15, written: 0} _, err = toml.WriteTo(writer) assertErrorString(t, "failingWriter failed after writting 15 bytes", err) } func TestTomlTreeWriteToMapExampleFile(t *testing.T) { tree, _ := LoadFile("example.toml") expected := map[string]interface{}{ "title": "TOML Example", "owner": map[string]interface{}{ "name": "Tom Preston-Werner", "organization": "GitHub", "bio": "GitHub Cofounder & CEO\nLikes tater tots and beer.", "dob": time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC), }, "database": map[string]interface{}{ "server": "192.168.1.1", "ports": []interface{}{int64(8001), int64(8001), int64(8002)}, "connection_max": int64(5000), "enabled": true, }, "servers": map[string]interface{}{ "alpha": map[string]interface{}{ "ip": "10.0.0.1", "dc": "eqdc10", }, "beta": map[string]interface{}{ "ip": "10.0.0.2", "dc": "eqdc10", }, }, "clients": map[string]interface{}{ "data": []interface{}{ []interface{}{"gamma", "delta"}, []interface{}{int64(1), int64(2)}, }, }, } testMaps(t, tree.ToMap(), expected) } func TestTomlTreeWriteToMapWithTablesInMultipleChunks(t *testing.T) { tree, _ := Load(` [[menu.main]] a = "menu 1" b = "menu 2" [[menu.main]] c = "menu 3" d = "menu 4"`) expected := map[string]interface{}{ "menu": map[string]interface{}{ "main": []interface{}{ map[string]interface{}{"a": "menu 1", "b": "menu 2"}, map[string]interface{}{"c": "menu 3", "d": "menu 4"}, }, }, } treeMap := tree.ToMap() testMaps(t, treeMap, expected) } func TestTomlTreeWriteToMapWithArrayOfInlineTables(t *testing.T) { tree, _ := Load(` [params] language_tabs = [ { key = "shell", name = "Shell" }, { key = "ruby", name = "Ruby" }, { key = "python", name = "Python" } ]`) expected := map[string]interface{}{ "params": map[string]interface{}{ "language_tabs": []interface{}{ map[string]interface{}{ "key": "shell", "name": "Shell", }, map[string]interface{}{ "key": "ruby", "name": "Ruby", }, map[string]interface{}{ "key": "python", "name": "Python", }, }, }, } treeMap := tree.ToMap() testMaps(t, treeMap, expected) } dep-0.3.2/vendor/github.com/pkg/000077500000000000000000000000001317166637100164145ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/pkg/errors/000077500000000000000000000000001317166637100177305ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/pkg/errors/.gitignore000066400000000000000000000004121317166637100217150ustar00rootroot00000000000000# 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 dep-0.3.2/vendor/github.com/pkg/errors/.travis.yml000066400000000000000000000002051317166637100220360ustar00rootroot00000000000000language: go go_import_path: github.com/pkg/errors go: - 1.4.3 - 1.5.4 - 1.6.2 - 1.7.1 - tip script: - go test -v ./... dep-0.3.2/vendor/github.com/pkg/errors/LICENSE000066400000000000000000000024401317166637100207350ustar00rootroot00000000000000Copyright (c) 2015, Dave Cheney All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. dep-0.3.2/vendor/github.com/pkg/errors/README.md000066400000000000000000000043021317166637100212060ustar00rootroot00000000000000# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) Package errors provides simple error handling primitives. `go get github.com/pkg/errors` The traditional error handling idiom in Go is roughly akin to ```go if err != nil { return err } ``` which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error. ## Adding context to an error The errors.Wrap function returns a new error that adds context to the original error. For example ```go _, err := ioutil.ReadAll(r) if err != nil { return errors.Wrap(err, "read failed") } ``` ## Retrieving the cause of an error Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`. ```go type causer interface { Cause() error } ``` `errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example: ```go switch err := errors.Cause(err).(type) { case *MyError: // handle specifically default: // unknown error } ``` [Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). ## Contributing We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high. Before proposing a change, please discuss your change by raising an issue. ## Licence BSD-2-Clause dep-0.3.2/vendor/github.com/pkg/errors/appveyor.yml000066400000000000000000000011771317166637100223260ustar00rootroot00000000000000version: build-{build}.{branch} clone_folder: C:\gopath\src\github.com\pkg\errors shallow_clone: true # for startup speed environment: GOPATH: C:\gopath platform: - x64 # http://www.appveyor.com/docs/installed-software install: # some helpful output for debugging builds - go version - go env # pre-installed MinGW at C:\MinGW is 32bit only # but MSYS2 at C:\msys64 has mingw64 - set PATH=C:\msys64\mingw64\bin;%PATH% - gcc --version - g++ --version build_script: - go install -v ./... test_script: - set PATH=C:\gopath\bin;%PATH% - go test -v ./... #artifacts: # - path: '%GOPATH%\bin\*.exe' deploy: off dep-0.3.2/vendor/github.com/pkg/errors/bench_test.go000066400000000000000000000016121317166637100223750ustar00rootroot00000000000000// +build go1.7 package errors import ( "fmt" "testing" stderrors "errors" ) func noErrors(at, depth int) error { if at >= depth { return stderrors.New("no error") } return noErrors(at+1, depth) } func yesErrors(at, depth int) error { if at >= depth { return New("ye error") } return yesErrors(at+1, depth) } func BenchmarkErrors(b *testing.B) { var toperr error type run struct { stack int std bool } runs := []run{ {10, false}, {10, true}, {100, false}, {100, true}, {1000, false}, {1000, true}, } for _, r := range runs { part := "pkg/errors" if r.std { part = "errors" } name := fmt.Sprintf("%s-stack-%d", part, r.stack) b.Run(name, func(b *testing.B) { var err error f := yesErrors if r.std { f = noErrors } b.ReportAllocs() for i := 0; i < b.N; i++ { err = f(0, r.stack) } b.StopTimer() toperr = err }) } } dep-0.3.2/vendor/github.com/pkg/errors/errors.go000066400000000000000000000152661317166637100216050ustar00rootroot00000000000000// Package errors provides simple error handling primitives. // // The traditional error handling idiom in Go is roughly akin to // // if err != nil { // return err // } // // which applied recursively up the call stack results in error reports // without context or debugging information. The errors package allows // programmers to add context to the failure path in their code in a way // that does not destroy the original value of the error. // // Adding context to an error // // The errors.Wrap function returns a new error that adds context to the // original error by recording a stack trace at the point Wrap is called, // and the supplied message. For example // // _, err := ioutil.ReadAll(r) // if err != nil { // return errors.Wrap(err, "read failed") // } // // If additional control is required the errors.WithStack and errors.WithMessage // functions destructure errors.Wrap into its component operations of annotating // an error with a stack trace and an a message, respectively. // // Retrieving the cause of an error // // Using errors.Wrap constructs a stack of errors, adding context to the // preceding error. Depending on the nature of the error it may be necessary // to reverse the operation of errors.Wrap to retrieve the original error // for inspection. Any error value which implements this interface // // type causer interface { // Cause() error // } // // can be inspected by errors.Cause. errors.Cause will recursively retrieve // the topmost error which does not implement causer, which is assumed to be // the original cause. For example: // // switch err := errors.Cause(err).(type) { // case *MyError: // // handle specifically // default: // // unknown error // } // // causer interface is not exported by this package, but is considered a part // of stable public API. // // Formatted printing of errors // // All error values returned from this package implement fmt.Formatter and can // be formatted by the fmt package. The following verbs are supported // // %s print the error. If the error has a Cause it will be // printed recursively // %v see %s // %+v extended format. Each Frame of the error's StackTrace will // be printed in detail. // // Retrieving the stack trace of an error or wrapper // // New, Errorf, Wrap, and Wrapf record a stack trace at the point they are // invoked. This information can be retrieved with the following interface. // // type stackTracer interface { // StackTrace() errors.StackTrace // } // // Where errors.StackTrace is defined as // // type StackTrace []Frame // // The Frame type represents a call site in the stack trace. Frame supports // the fmt.Formatter interface that can be used for printing information about // the stack trace of this error. For example: // // if err, ok := err.(stackTracer); ok { // for _, f := range err.StackTrace() { // fmt.Printf("%+s:%d", f) // } // } // // stackTracer interface is not exported by this package, but is considered a part // of stable public API. // // See the documentation for Frame.Format for more details. package errors import ( "fmt" "io" ) // New returns an error with the supplied message. // New also records the stack trace at the point it was called. func New(message string) error { return &fundamental{ msg: message, stack: callers(), } } // Errorf formats according to a format specifier and returns the string // as a value that satisfies error. // Errorf also records the stack trace at the point it was called. func Errorf(format string, args ...interface{}) error { return &fundamental{ msg: fmt.Sprintf(format, args...), stack: callers(), } } // fundamental is an error that has a message and a stack, but no caller. type fundamental struct { msg string *stack } func (f *fundamental) Error() string { return f.msg } func (f *fundamental) Format(s fmt.State, verb rune) { switch verb { case 'v': if s.Flag('+') { io.WriteString(s, f.msg) f.stack.Format(s, verb) return } fallthrough case 's': io.WriteString(s, f.msg) case 'q': fmt.Fprintf(s, "%q", f.msg) } } // WithStack annotates err with a stack trace at the point WithStack was called. // If err is nil, WithStack returns nil. func WithStack(err error) error { if err == nil { return nil } return &withStack{ err, callers(), } } type withStack struct { error *stack } func (w *withStack) Cause() error { return w.error } func (w *withStack) Format(s fmt.State, verb rune) { switch verb { case 'v': if s.Flag('+') { fmt.Fprintf(s, "%+v", w.Cause()) w.stack.Format(s, verb) return } fallthrough case 's': io.WriteString(s, w.Error()) case 'q': fmt.Fprintf(s, "%q", w.Error()) } } // Wrap returns an error annotating err with a stack trace // at the point Wrap is called, and the supplied message. // If err is nil, Wrap returns nil. func Wrap(err error, message string) error { if err == nil { return nil } err = &withMessage{ cause: err, msg: message, } return &withStack{ err, callers(), } } // Wrapf returns an error annotating err with a stack trace // at the point Wrapf is call, and the format specifier. // If err is nil, Wrapf returns nil. func Wrapf(err error, format string, args ...interface{}) error { if err == nil { return nil } err = &withMessage{ cause: err, msg: fmt.Sprintf(format, args...), } return &withStack{ err, callers(), } } // WithMessage annotates err with a new message. // If err is nil, WithMessage returns nil. func WithMessage(err error, message string) error { if err == nil { return nil } return &withMessage{ cause: err, msg: message, } } type withMessage struct { cause error msg string } func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } func (w *withMessage) Cause() error { return w.cause } func (w *withMessage) Format(s fmt.State, verb rune) { switch verb { case 'v': if s.Flag('+') { fmt.Fprintf(s, "%+v\n", w.Cause()) io.WriteString(s, w.msg) return } fallthrough case 's', 'q': io.WriteString(s, w.Error()) } } // Cause returns the underlying cause of the error, if possible. // An error value has a cause if it implements the following // interface: // // type causer interface { // Cause() error // } // // If the error does not implement Cause, the original error will // be returned. If the error is nil, nil will be returned without further // investigation. func Cause(err error) error { type causer interface { Cause() error } for err != nil { cause, ok := err.(causer) if !ok { break } err = cause.Cause() } return err } dep-0.3.2/vendor/github.com/pkg/errors/errors_test.go000066400000000000000000000113701317166637100226340ustar00rootroot00000000000000package errors import ( "errors" "fmt" "io" "reflect" "testing" ) func TestNew(t *testing.T) { tests := []struct { err string want error }{ {"", fmt.Errorf("")}, {"foo", fmt.Errorf("foo")}, {"foo", New("foo")}, {"string with format specifiers: %v", errors.New("string with format specifiers: %v")}, } for _, tt := range tests { got := New(tt.err) if got.Error() != tt.want.Error() { t.Errorf("New.Error(): got: %q, want %q", got, tt.want) } } } func TestWrapNil(t *testing.T) { got := Wrap(nil, "no error") if got != nil { t.Errorf("Wrap(nil, \"no error\"): got %#v, expected nil", got) } } func TestWrap(t *testing.T) { tests := []struct { err error message string want string }{ {io.EOF, "read error", "read error: EOF"}, {Wrap(io.EOF, "read error"), "client error", "client error: read error: EOF"}, } for _, tt := range tests { got := Wrap(tt.err, tt.message).Error() if got != tt.want { t.Errorf("Wrap(%v, %q): got: %v, want %v", tt.err, tt.message, got, tt.want) } } } type nilError struct{} func (nilError) Error() string { return "nil error" } func TestCause(t *testing.T) { x := New("error") tests := []struct { err error want error }{{ // nil error is nil err: nil, want: nil, }, { // explicit nil error is nil err: (error)(nil), want: nil, }, { // typed nil is nil err: (*nilError)(nil), want: (*nilError)(nil), }, { // uncaused error is unaffected err: io.EOF, want: io.EOF, }, { // caused error returns cause err: Wrap(io.EOF, "ignored"), want: io.EOF, }, { err: x, // return from errors.New want: x, }, { WithMessage(nil, "whoops"), nil, }, { WithMessage(io.EOF, "whoops"), io.EOF, }, { WithStack(nil), nil, }, { WithStack(io.EOF), io.EOF, }} for i, tt := range tests { got := Cause(tt.err) if !reflect.DeepEqual(got, tt.want) { t.Errorf("test %d: got %#v, want %#v", i+1, got, tt.want) } } } func TestWrapfNil(t *testing.T) { got := Wrapf(nil, "no error") if got != nil { t.Errorf("Wrapf(nil, \"no error\"): got %#v, expected nil", got) } } func TestWrapf(t *testing.T) { tests := []struct { err error message string want string }{ {io.EOF, "read error", "read error: EOF"}, {Wrapf(io.EOF, "read error without format specifiers"), "client error", "client error: read error without format specifiers: EOF"}, {Wrapf(io.EOF, "read error with %d format specifier", 1), "client error", "client error: read error with 1 format specifier: EOF"}, } for _, tt := range tests { got := Wrapf(tt.err, tt.message).Error() if got != tt.want { t.Errorf("Wrapf(%v, %q): got: %v, want %v", tt.err, tt.message, got, tt.want) } } } func TestErrorf(t *testing.T) { tests := []struct { err error want string }{ {Errorf("read error without format specifiers"), "read error without format specifiers"}, {Errorf("read error with %d format specifier", 1), "read error with 1 format specifier"}, } for _, tt := range tests { got := tt.err.Error() if got != tt.want { t.Errorf("Errorf(%v): got: %q, want %q", tt.err, got, tt.want) } } } func TestWithStackNil(t *testing.T) { got := WithStack(nil) if got != nil { t.Errorf("WithStack(nil): got %#v, expected nil", got) } } func TestWithStack(t *testing.T) { tests := []struct { err error want string }{ {io.EOF, "EOF"}, {WithStack(io.EOF), "EOF"}, } for _, tt := range tests { got := WithStack(tt.err).Error() if got != tt.want { t.Errorf("WithStack(%v): got: %v, want %v", tt.err, got, tt.want) } } } func TestWithMessageNil(t *testing.T) { got := WithMessage(nil, "no error") if got != nil { t.Errorf("WithMessage(nil, \"no error\"): got %#v, expected nil", got) } } func TestWithMessage(t *testing.T) { tests := []struct { err error message string want string }{ {io.EOF, "read error", "read error: EOF"}, {WithMessage(io.EOF, "read error"), "client error", "client error: read error: EOF"}, } for _, tt := range tests { got := WithMessage(tt.err, tt.message).Error() if got != tt.want { t.Errorf("WithMessage(%v, %q): got: %q, want %q", tt.err, tt.message, got, tt.want) } } } // errors.New, etc values are not expected to be compared by value // but the change in errors#27 made them incomparable. Assert that // various kinds of errors have a functional equality operator, even // if the result of that equality is always false. func TestErrorEquality(t *testing.T) { vals := []error{ nil, io.EOF, errors.New("EOF"), New("EOF"), Errorf("EOF"), Wrap(io.EOF, "EOF"), Wrapf(io.EOF, "EOF%d", 2), WithMessage(nil, "whoops"), WithMessage(io.EOF, "whoops"), WithStack(io.EOF), WithStack(nil), } for i := range vals { for j := range vals { _ = vals[i] == vals[j] // mustn't panic } } } dep-0.3.2/vendor/github.com/pkg/errors/example_test.go000066400000000000000000000124751317166637100227620ustar00rootroot00000000000000package errors_test import ( "fmt" "github.com/pkg/errors" ) func ExampleNew() { err := errors.New("whoops") fmt.Println(err) // Output: whoops } func ExampleNew_printf() { err := errors.New("whoops") fmt.Printf("%+v", err) // Example output: // whoops // github.com/pkg/errors_test.ExampleNew_printf // /home/dfc/src/github.com/pkg/errors/example_test.go:17 // testing.runExample // /home/dfc/go/src/testing/example.go:114 // testing.RunExamples // /home/dfc/go/src/testing/example.go:38 // testing.(*M).Run // /home/dfc/go/src/testing/testing.go:744 // main.main // /github.com/pkg/errors/_test/_testmain.go:106 // runtime.main // /home/dfc/go/src/runtime/proc.go:183 // runtime.goexit // /home/dfc/go/src/runtime/asm_amd64.s:2059 } func ExampleWithMessage() { cause := errors.New("whoops") err := errors.WithMessage(cause, "oh noes") fmt.Println(err) // Output: oh noes: whoops } func ExampleWithStack() { cause := errors.New("whoops") err := errors.WithStack(cause) fmt.Println(err) // Output: whoops } func ExampleWithStack_printf() { cause := errors.New("whoops") err := errors.WithStack(cause) fmt.Printf("%+v", err) // Example Output: // whoops // github.com/pkg/errors_test.ExampleWithStack_printf // /home/fabstu/go/src/github.com/pkg/errors/example_test.go:55 // testing.runExample // /usr/lib/go/src/testing/example.go:114 // testing.RunExamples // /usr/lib/go/src/testing/example.go:38 // testing.(*M).Run // /usr/lib/go/src/testing/testing.go:744 // main.main // github.com/pkg/errors/_test/_testmain.go:106 // runtime.main // /usr/lib/go/src/runtime/proc.go:183 // runtime.goexit // /usr/lib/go/src/runtime/asm_amd64.s:2086 // github.com/pkg/errors_test.ExampleWithStack_printf // /home/fabstu/go/src/github.com/pkg/errors/example_test.go:56 // testing.runExample // /usr/lib/go/src/testing/example.go:114 // testing.RunExamples // /usr/lib/go/src/testing/example.go:38 // testing.(*M).Run // /usr/lib/go/src/testing/testing.go:744 // main.main // github.com/pkg/errors/_test/_testmain.go:106 // runtime.main // /usr/lib/go/src/runtime/proc.go:183 // runtime.goexit // /usr/lib/go/src/runtime/asm_amd64.s:2086 } func ExampleWrap() { cause := errors.New("whoops") err := errors.Wrap(cause, "oh noes") fmt.Println(err) // Output: oh noes: whoops } func fn() error { e1 := errors.New("error") e2 := errors.Wrap(e1, "inner") e3 := errors.Wrap(e2, "middle") return errors.Wrap(e3, "outer") } func ExampleCause() { err := fn() fmt.Println(err) fmt.Println(errors.Cause(err)) // Output: outer: middle: inner: error // error } func ExampleWrap_extended() { err := fn() fmt.Printf("%+v\n", err) // Example output: // error // github.com/pkg/errors_test.fn // /home/dfc/src/github.com/pkg/errors/example_test.go:47 // github.com/pkg/errors_test.ExampleCause_printf // /home/dfc/src/github.com/pkg/errors/example_test.go:63 // testing.runExample // /home/dfc/go/src/testing/example.go:114 // testing.RunExamples // /home/dfc/go/src/testing/example.go:38 // testing.(*M).Run // /home/dfc/go/src/testing/testing.go:744 // main.main // /github.com/pkg/errors/_test/_testmain.go:104 // runtime.main // /home/dfc/go/src/runtime/proc.go:183 // runtime.goexit // /home/dfc/go/src/runtime/asm_amd64.s:2059 // github.com/pkg/errors_test.fn // /home/dfc/src/github.com/pkg/errors/example_test.go:48: inner // github.com/pkg/errors_test.fn // /home/dfc/src/github.com/pkg/errors/example_test.go:49: middle // github.com/pkg/errors_test.fn // /home/dfc/src/github.com/pkg/errors/example_test.go:50: outer } func ExampleWrapf() { cause := errors.New("whoops") err := errors.Wrapf(cause, "oh noes #%d", 2) fmt.Println(err) // Output: oh noes #2: whoops } func ExampleErrorf_extended() { err := errors.Errorf("whoops: %s", "foo") fmt.Printf("%+v", err) // Example output: // whoops: foo // github.com/pkg/errors_test.ExampleErrorf // /home/dfc/src/github.com/pkg/errors/example_test.go:101 // testing.runExample // /home/dfc/go/src/testing/example.go:114 // testing.RunExamples // /home/dfc/go/src/testing/example.go:38 // testing.(*M).Run // /home/dfc/go/src/testing/testing.go:744 // main.main // /github.com/pkg/errors/_test/_testmain.go:102 // runtime.main // /home/dfc/go/src/runtime/proc.go:183 // runtime.goexit // /home/dfc/go/src/runtime/asm_amd64.s:2059 } func Example_stackTrace() { type stackTracer interface { StackTrace() errors.StackTrace } err, ok := errors.Cause(fn()).(stackTracer) if !ok { panic("oops, err does not implement stackTracer") } st := err.StackTrace() fmt.Printf("%+v", st[0:2]) // top two frames // Example output: // github.com/pkg/errors_test.fn // /home/dfc/src/github.com/pkg/errors/example_test.go:47 // github.com/pkg/errors_test.Example_stackTrace // /home/dfc/src/github.com/pkg/errors/example_test.go:127 } func ExampleCause_printf() { err := errors.Wrap(func() error { return func() error { return errors.Errorf("hello %s", fmt.Sprintf("world")) }() }(), "failed") fmt.Printf("%v", err) // Output: failed: hello world } dep-0.3.2/vendor/github.com/pkg/errors/format_test.go000066400000000000000000000310021317166637100226020ustar00rootroot00000000000000package errors import ( "errors" "fmt" "io" "regexp" "strings" "testing" ) func TestFormatNew(t *testing.T) { tests := []struct { error format string want string }{{ New("error"), "%s", "error", }, { New("error"), "%v", "error", }, { New("error"), "%+v", "error\n" + "github.com/pkg/errors.TestFormatNew\n" + "\t.+/github.com/pkg/errors/format_test.go:26", }, { New("error"), "%q", `"error"`, }} for i, tt := range tests { testFormatRegexp(t, i, tt.error, tt.format, tt.want) } } func TestFormatErrorf(t *testing.T) { tests := []struct { error format string want string }{{ Errorf("%s", "error"), "%s", "error", }, { Errorf("%s", "error"), "%v", "error", }, { Errorf("%s", "error"), "%+v", "error\n" + "github.com/pkg/errors.TestFormatErrorf\n" + "\t.+/github.com/pkg/errors/format_test.go:56", }} for i, tt := range tests { testFormatRegexp(t, i, tt.error, tt.format, tt.want) } } func TestFormatWrap(t *testing.T) { tests := []struct { error format string want string }{{ Wrap(New("error"), "error2"), "%s", "error2: error", }, { Wrap(New("error"), "error2"), "%v", "error2: error", }, { Wrap(New("error"), "error2"), "%+v", "error\n" + "github.com/pkg/errors.TestFormatWrap\n" + "\t.+/github.com/pkg/errors/format_test.go:82", }, { Wrap(io.EOF, "error"), "%s", "error: EOF", }, { Wrap(io.EOF, "error"), "%v", "error: EOF", }, { Wrap(io.EOF, "error"), "%+v", "EOF\n" + "error\n" + "github.com/pkg/errors.TestFormatWrap\n" + "\t.+/github.com/pkg/errors/format_test.go:96", }, { Wrap(Wrap(io.EOF, "error1"), "error2"), "%+v", "EOF\n" + "error1\n" + "github.com/pkg/errors.TestFormatWrap\n" + "\t.+/github.com/pkg/errors/format_test.go:103\n", }, { Wrap(New("error with space"), "context"), "%q", `"context: error with space"`, }} for i, tt := range tests { testFormatRegexp(t, i, tt.error, tt.format, tt.want) } } func TestFormatWrapf(t *testing.T) { tests := []struct { error format string want string }{{ Wrapf(io.EOF, "error%d", 2), "%s", "error2: EOF", }, { Wrapf(io.EOF, "error%d", 2), "%v", "error2: EOF", }, { Wrapf(io.EOF, "error%d", 2), "%+v", "EOF\n" + "error2\n" + "github.com/pkg/errors.TestFormatWrapf\n" + "\t.+/github.com/pkg/errors/format_test.go:134", }, { Wrapf(New("error"), "error%d", 2), "%s", "error2: error", }, { Wrapf(New("error"), "error%d", 2), "%v", "error2: error", }, { Wrapf(New("error"), "error%d", 2), "%+v", "error\n" + "github.com/pkg/errors.TestFormatWrapf\n" + "\t.+/github.com/pkg/errors/format_test.go:149", }} for i, tt := range tests { testFormatRegexp(t, i, tt.error, tt.format, tt.want) } } func TestFormatWithStack(t *testing.T) { tests := []struct { error format string want []string }{{ WithStack(io.EOF), "%s", []string{"EOF"}, }, { WithStack(io.EOF), "%v", []string{"EOF"}, }, { WithStack(io.EOF), "%+v", []string{"EOF", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:175"}, }, { WithStack(New("error")), "%s", []string{"error"}, }, { WithStack(New("error")), "%v", []string{"error"}, }, { WithStack(New("error")), "%+v", []string{"error", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:189", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:189"}, }, { WithStack(WithStack(io.EOF)), "%+v", []string{"EOF", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:197", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:197"}, }, { WithStack(WithStack(Wrapf(io.EOF, "message"))), "%+v", []string{"EOF", "message", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:205", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:205", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:205"}, }, { WithStack(Errorf("error%d", 1)), "%+v", []string{"error1", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:216", "github.com/pkg/errors.TestFormatWithStack\n" + "\t.+/github.com/pkg/errors/format_test.go:216"}, }} for i, tt := range tests { testFormatCompleteCompare(t, i, tt.error, tt.format, tt.want, true) } } func TestFormatWithMessage(t *testing.T) { tests := []struct { error format string want []string }{{ WithMessage(New("error"), "error2"), "%s", []string{"error2: error"}, }, { WithMessage(New("error"), "error2"), "%v", []string{"error2: error"}, }, { WithMessage(New("error"), "error2"), "%+v", []string{ "error", "github.com/pkg/errors.TestFormatWithMessage\n" + "\t.+/github.com/pkg/errors/format_test.go:244", "error2"}, }, { WithMessage(io.EOF, "addition1"), "%s", []string{"addition1: EOF"}, }, { WithMessage(io.EOF, "addition1"), "%v", []string{"addition1: EOF"}, }, { WithMessage(io.EOF, "addition1"), "%+v", []string{"EOF", "addition1"}, }, { WithMessage(WithMessage(io.EOF, "addition1"), "addition2"), "%v", []string{"addition2: addition1: EOF"}, }, { WithMessage(WithMessage(io.EOF, "addition1"), "addition2"), "%+v", []string{"EOF", "addition1", "addition2"}, }, { Wrap(WithMessage(io.EOF, "error1"), "error2"), "%+v", []string{"EOF", "error1", "error2", "github.com/pkg/errors.TestFormatWithMessage\n" + "\t.+/github.com/pkg/errors/format_test.go:272"}, }, { WithMessage(Errorf("error%d", 1), "error2"), "%+v", []string{"error1", "github.com/pkg/errors.TestFormatWithMessage\n" + "\t.+/github.com/pkg/errors/format_test.go:278", "error2"}, }, { WithMessage(WithStack(io.EOF), "error"), "%+v", []string{ "EOF", "github.com/pkg/errors.TestFormatWithMessage\n" + "\t.+/github.com/pkg/errors/format_test.go:285", "error"}, }, { WithMessage(Wrap(WithStack(io.EOF), "inside-error"), "outside-error"), "%+v", []string{ "EOF", "github.com/pkg/errors.TestFormatWithMessage\n" + "\t.+/github.com/pkg/errors/format_test.go:293", "inside-error", "github.com/pkg/errors.TestFormatWithMessage\n" + "\t.+/github.com/pkg/errors/format_test.go:293", "outside-error"}, }} for i, tt := range tests { testFormatCompleteCompare(t, i, tt.error, tt.format, tt.want, true) } } func TestFormatGeneric(t *testing.T) { starts := []struct { err error want []string }{ {New("new-error"), []string{ "new-error", "github.com/pkg/errors.TestFormatGeneric\n" + "\t.+/github.com/pkg/errors/format_test.go:315"}, }, {Errorf("errorf-error"), []string{ "errorf-error", "github.com/pkg/errors.TestFormatGeneric\n" + "\t.+/github.com/pkg/errors/format_test.go:319"}, }, {errors.New("errors-new-error"), []string{ "errors-new-error"}, }, } wrappers := []wrapper{ { func(err error) error { return WithMessage(err, "with-message") }, []string{"with-message"}, }, { func(err error) error { return WithStack(err) }, []string{ "github.com/pkg/errors.(func·002|TestFormatGeneric.func2)\n\t" + ".+/github.com/pkg/errors/format_test.go:333", }, }, { func(err error) error { return Wrap(err, "wrap-error") }, []string{ "wrap-error", "github.com/pkg/errors.(func·003|TestFormatGeneric.func3)\n\t" + ".+/github.com/pkg/errors/format_test.go:339", }, }, { func(err error) error { return Wrapf(err, "wrapf-error%d", 1) }, []string{ "wrapf-error1", "github.com/pkg/errors.(func·004|TestFormatGeneric.func4)\n\t" + ".+/github.com/pkg/errors/format_test.go:346", }, }, } for s := range starts { err := starts[s].err want := starts[s].want testFormatCompleteCompare(t, s, err, "%+v", want, false) testGenericRecursive(t, err, want, wrappers, 3) } } func testFormatRegexp(t *testing.T, n int, arg interface{}, format, want string) { got := fmt.Sprintf(format, arg) gotLines := strings.SplitN(got, "\n", -1) wantLines := strings.SplitN(want, "\n", -1) if len(wantLines) > len(gotLines) { t.Errorf("test %d: wantLines(%d) > gotLines(%d):\n got: %q\nwant: %q", n+1, len(wantLines), len(gotLines), got, want) return } for i, w := range wantLines { match, err := regexp.MatchString(w, gotLines[i]) if err != nil { t.Fatal(err) } if !match { t.Errorf("test %d: line %d: fmt.Sprintf(%q, err):\n got: %q\nwant: %q", n+1, i+1, format, got, want) } } } var stackLineR = regexp.MustCompile(`\.`) // parseBlocks parses input into a slice, where: // - incase entry contains a newline, its a stacktrace // - incase entry contains no newline, its a solo line. // // Detecting stack boundaries only works incase the WithStack-calls are // to be found on the same line, thats why it is optionally here. // // Example use: // // for _, e := range blocks { // if strings.ContainsAny(e, "\n") { // // Match as stack // } else { // // Match as line // } // } // func parseBlocks(input string, detectStackboundaries bool) ([]string, error) { var blocks []string stack := "" wasStack := false lines := map[string]bool{} // already found lines for _, l := range strings.Split(input, "\n") { isStackLine := stackLineR.MatchString(l) switch { case !isStackLine && wasStack: blocks = append(blocks, stack, l) stack = "" lines = map[string]bool{} case isStackLine: if wasStack { // Detecting two stacks after another, possible cause lines match in // our tests due to WithStack(WithStack(io.EOF)) on same line. if detectStackboundaries { if lines[l] { if len(stack) == 0 { return nil, errors.New("len of block must not be zero here") } blocks = append(blocks, stack) stack = l lines = map[string]bool{l: true} continue } } stack = stack + "\n" + l } else { stack = l } lines[l] = true case !isStackLine && !wasStack: blocks = append(blocks, l) default: return nil, errors.New("must not happen") } wasStack = isStackLine } // Use up stack if stack != "" { blocks = append(blocks, stack) } return blocks, nil } func testFormatCompleteCompare(t *testing.T, n int, arg interface{}, format string, want []string, detectStackBoundaries bool) { gotStr := fmt.Sprintf(format, arg) got, err := parseBlocks(gotStr, detectStackBoundaries) if err != nil { t.Fatal(err) } if len(got) != len(want) { t.Fatalf("test %d: fmt.Sprintf(%s, err) -> wrong number of blocks: got(%d) want(%d)\n got: %s\nwant: %s\ngotStr: %q", n+1, format, len(got), len(want), prettyBlocks(got), prettyBlocks(want), gotStr) } for i := range got { if strings.ContainsAny(want[i], "\n") { // Match as stack match, err := regexp.MatchString(want[i], got[i]) if err != nil { t.Fatal(err) } if !match { t.Fatalf("test %d: block %d: fmt.Sprintf(%q, err):\ngot:\n%q\nwant:\n%q\nall-got:\n%s\nall-want:\n%s\n", n+1, i+1, format, got[i], want[i], prettyBlocks(got), prettyBlocks(want)) } } else { // Match as message if got[i] != want[i] { t.Fatalf("test %d: fmt.Sprintf(%s, err) at block %d got != want:\n got: %q\nwant: %q", n+1, format, i+1, got[i], want[i]) } } } } type wrapper struct { wrap func(err error) error want []string } func prettyBlocks(blocks []string, prefix ...string) string { var out []string for _, b := range blocks { out = append(out, fmt.Sprintf("%v", b)) } return " " + strings.Join(out, "\n ") } func testGenericRecursive(t *testing.T, beforeErr error, beforeWant []string, list []wrapper, maxDepth int) { if len(beforeWant) == 0 { panic("beforeWant must not be empty") } for _, w := range list { if len(w.want) == 0 { panic("want must not be empty") } err := w.wrap(beforeErr) // Copy required cause append(beforeWant, ..) modified beforeWant subtly. beforeCopy := make([]string, len(beforeWant)) copy(beforeCopy, beforeWant) beforeWant := beforeCopy last := len(beforeWant) - 1 var want []string // Merge two stacks behind each other. if strings.ContainsAny(beforeWant[last], "\n") && strings.ContainsAny(w.want[0], "\n") { want = append(beforeWant[:last], append([]string{beforeWant[last] + "((?s).*)" + w.want[0]}, w.want[1:]...)...) } else { want = append(beforeWant, w.want...) } testFormatCompleteCompare(t, maxDepth, err, "%+v", want, false) if maxDepth > 0 { testGenericRecursive(t, err, want, list, maxDepth-1) } } } dep-0.3.2/vendor/github.com/pkg/errors/stack.go000066400000000000000000000104741317166637100213720ustar00rootroot00000000000000package errors import ( "fmt" "io" "path" "runtime" "strings" ) // Frame represents a program counter inside a stack frame. type Frame uintptr // pc returns the program counter for this frame; // multiple frames may have the same PC value. func (f Frame) pc() uintptr { return uintptr(f) - 1 } // file returns the full path to the file that contains the // function for this Frame's pc. func (f Frame) file() string { fn := runtime.FuncForPC(f.pc()) if fn == nil { return "unknown" } file, _ := fn.FileLine(f.pc()) return file } // line returns the line number of source code of the // function for this Frame's pc. func (f Frame) line() int { fn := runtime.FuncForPC(f.pc()) if fn == nil { return 0 } _, line := fn.FileLine(f.pc()) return line } // Format formats the frame according to the fmt.Formatter interface. // // %s source file // %d source line // %n function name // %v equivalent to %s:%d // // Format accepts flags that alter the printing of some verbs, as follows: // // %+s path of source file relative to the compile time GOPATH // %+v equivalent to %+s:%d func (f Frame) Format(s fmt.State, verb rune) { switch verb { case 's': switch { case s.Flag('+'): pc := f.pc() fn := runtime.FuncForPC(pc) if fn == nil { io.WriteString(s, "unknown") } else { file, _ := fn.FileLine(pc) fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file) } default: io.WriteString(s, path.Base(f.file())) } case 'd': fmt.Fprintf(s, "%d", f.line()) case 'n': name := runtime.FuncForPC(f.pc()).Name() io.WriteString(s, funcname(name)) case 'v': f.Format(s, 's') io.WriteString(s, ":") f.Format(s, 'd') } } // StackTrace is stack of Frames from innermost (newest) to outermost (oldest). type StackTrace []Frame func (st StackTrace) Format(s fmt.State, verb rune) { switch verb { case 'v': switch { case s.Flag('+'): for _, f := range st { fmt.Fprintf(s, "\n%+v", f) } case s.Flag('#'): fmt.Fprintf(s, "%#v", []Frame(st)) default: fmt.Fprintf(s, "%v", []Frame(st)) } case 's': fmt.Fprintf(s, "%s", []Frame(st)) } } // stack represents a stack of program counters. type stack []uintptr func (s *stack) Format(st fmt.State, verb rune) { switch verb { case 'v': switch { case st.Flag('+'): for _, pc := range *s { f := Frame(pc) fmt.Fprintf(st, "\n%+v", f) } } } } func (s *stack) StackTrace() StackTrace { f := make([]Frame, len(*s)) for i := 0; i < len(f); i++ { f[i] = Frame((*s)[i]) } return f } func callers() *stack { const depth = 32 var pcs [depth]uintptr n := runtime.Callers(3, pcs[:]) var st stack = pcs[0:n] return &st } // funcname removes the path prefix component of a function's name reported by func.Name(). func funcname(name string) string { i := strings.LastIndex(name, "/") name = name[i+1:] i = strings.Index(name, ".") return name[i+1:] } func trimGOPATH(name, file string) string { // Here we want to get the source file path relative to the compile time // GOPATH. As of Go 1.6.x there is no direct way to know the compiled // GOPATH at runtime, but we can infer the number of path segments in the // GOPATH. We note that fn.Name() returns the function name qualified by // the import path, which does not include the GOPATH. Thus we can trim // segments from the beginning of the file path until the number of path // separators remaining is one more than the number of path separators in // the function name. For example, given: // // GOPATH /home/user // file /home/user/src/pkg/sub/file.go // fn.Name() pkg/sub.Type.Method // // We want to produce: // // pkg/sub/file.go // // From this we can easily see that fn.Name() has one less path separator // than our desired output. We count separators from the end of the file // path until it finds two more than in the function name and then move // one character forward to preserve the initial path segment without a // leading separator. const sep = "/" goal := strings.Count(name, sep) + 2 i := len(file) for n := 0; n < goal; n++ { i = strings.LastIndex(file[:i], sep) if i == -1 { // not enough separators found, set i so that the slice expression // below leaves file unmodified i = -len(sep) break } } // get back to 0 or trim the leading separator file = file[i+len(sep):] return file } dep-0.3.2/vendor/github.com/pkg/errors/stack_test.go000066400000000000000000000126461317166637100224340ustar00rootroot00000000000000package errors import ( "fmt" "runtime" "testing" ) var initpc, _, _, _ = runtime.Caller(0) func TestFrameLine(t *testing.T) { var tests = []struct { Frame want int }{{ Frame(initpc), 9, }, { func() Frame { var pc, _, _, _ = runtime.Caller(0) return Frame(pc) }(), 20, }, { func() Frame { var pc, _, _, _ = runtime.Caller(1) return Frame(pc) }(), 28, }, { Frame(0), // invalid PC 0, }} for _, tt := range tests { got := tt.Frame.line() want := tt.want if want != got { t.Errorf("Frame(%v): want: %v, got: %v", uintptr(tt.Frame), want, got) } } } type X struct{} func (x X) val() Frame { var pc, _, _, _ = runtime.Caller(0) return Frame(pc) } func (x *X) ptr() Frame { var pc, _, _, _ = runtime.Caller(0) return Frame(pc) } func TestFrameFormat(t *testing.T) { var tests = []struct { Frame format string want string }{{ Frame(initpc), "%s", "stack_test.go", }, { Frame(initpc), "%+s", "github.com/pkg/errors.init\n" + "\t.+/github.com/pkg/errors/stack_test.go", }, { Frame(0), "%s", "unknown", }, { Frame(0), "%+s", "unknown", }, { Frame(initpc), "%d", "9", }, { Frame(0), "%d", "0", }, { Frame(initpc), "%n", "init", }, { func() Frame { var x X return x.ptr() }(), "%n", `\(\*X\).ptr`, }, { func() Frame { var x X return x.val() }(), "%n", "X.val", }, { Frame(0), "%n", "", }, { Frame(initpc), "%v", "stack_test.go:9", }, { Frame(initpc), "%+v", "github.com/pkg/errors.init\n" + "\t.+/github.com/pkg/errors/stack_test.go:9", }, { Frame(0), "%v", "unknown:0", }} for i, tt := range tests { testFormatRegexp(t, i, tt.Frame, tt.format, tt.want) } } func TestFuncname(t *testing.T) { tests := []struct { name, want string }{ {"", ""}, {"runtime.main", "main"}, {"github.com/pkg/errors.funcname", "funcname"}, {"funcname", "funcname"}, {"io.copyBuffer", "copyBuffer"}, {"main.(*R).Write", "(*R).Write"}, } for _, tt := range tests { got := funcname(tt.name) want := tt.want if got != want { t.Errorf("funcname(%q): want: %q, got %q", tt.name, want, got) } } } func TestTrimGOPATH(t *testing.T) { var tests = []struct { Frame want string }{{ Frame(initpc), "github.com/pkg/errors/stack_test.go", }} for i, tt := range tests { pc := tt.Frame.pc() fn := runtime.FuncForPC(pc) file, _ := fn.FileLine(pc) got := trimGOPATH(fn.Name(), file) testFormatRegexp(t, i, got, "%s", tt.want) } } func TestStackTrace(t *testing.T) { tests := []struct { err error want []string }{{ New("ooh"), []string{ "github.com/pkg/errors.TestStackTrace\n" + "\t.+/github.com/pkg/errors/stack_test.go:172", }, }, { Wrap(New("ooh"), "ahh"), []string{ "github.com/pkg/errors.TestStackTrace\n" + "\t.+/github.com/pkg/errors/stack_test.go:177", // this is the stack of Wrap, not New }, }, { Cause(Wrap(New("ooh"), "ahh")), []string{ "github.com/pkg/errors.TestStackTrace\n" + "\t.+/github.com/pkg/errors/stack_test.go:182", // this is the stack of New }, }, { func() error { return New("ooh") }(), []string{ `github.com/pkg/errors.(func·009|TestStackTrace.func1)` + "\n\t.+/github.com/pkg/errors/stack_test.go:187", // this is the stack of New "github.com/pkg/errors.TestStackTrace\n" + "\t.+/github.com/pkg/errors/stack_test.go:187", // this is the stack of New's caller }, }, { Cause(func() error { return func() error { return Errorf("hello %s", fmt.Sprintf("world")) }() }()), []string{ `github.com/pkg/errors.(func·010|TestStackTrace.func2.1)` + "\n\t.+/github.com/pkg/errors/stack_test.go:196", // this is the stack of Errorf `github.com/pkg/errors.(func·011|TestStackTrace.func2)` + "\n\t.+/github.com/pkg/errors/stack_test.go:197", // this is the stack of Errorf's caller "github.com/pkg/errors.TestStackTrace\n" + "\t.+/github.com/pkg/errors/stack_test.go:198", // this is the stack of Errorf's caller's caller }, }} for i, tt := range tests { x, ok := tt.err.(interface { StackTrace() StackTrace }) if !ok { t.Errorf("expected %#v to implement StackTrace() StackTrace", tt.err) continue } st := x.StackTrace() for j, want := range tt.want { testFormatRegexp(t, i, st[j], "%+v", want) } } } func stackTrace() StackTrace { const depth = 8 var pcs [depth]uintptr n := runtime.Callers(1, pcs[:]) var st stack = pcs[0:n] return st.StackTrace() } func TestStackTraceFormat(t *testing.T) { tests := []struct { StackTrace format string want string }{{ nil, "%s", `\[\]`, }, { nil, "%v", `\[\]`, }, { nil, "%+v", "", }, { nil, "%#v", `\[\]errors.Frame\(nil\)`, }, { make(StackTrace, 0), "%s", `\[\]`, }, { make(StackTrace, 0), "%v", `\[\]`, }, { make(StackTrace, 0), "%+v", "", }, { make(StackTrace, 0), "%#v", `\[\]errors.Frame{}`, }, { stackTrace()[:2], "%s", `\[stack_test.go stack_test.go\]`, }, { stackTrace()[:2], "%v", `\[stack_test.go:225 stack_test.go:272\]`, }, { stackTrace()[:2], "%+v", "\n" + "github.com/pkg/errors.stackTrace\n" + "\t.+/github.com/pkg/errors/stack_test.go:225\n" + "github.com/pkg/errors.TestStackTraceFormat\n" + "\t.+/github.com/pkg/errors/stack_test.go:276", }, { stackTrace()[:2], "%#v", `\[\]errors.Frame{stack_test.go:225, stack_test.go:284}`, }} for i, tt := range tests { testFormatRegexp(t, i, tt.StackTrace, tt.format, tt.want) } } dep-0.3.2/vendor/github.com/sdboyer/000077500000000000000000000000001317166637100173025ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/sdboyer/constext/000077500000000000000000000000001317166637100211515ustar00rootroot00000000000000dep-0.3.2/vendor/github.com/sdboyer/constext/LICENSE000066400000000000000000000020641317166637100221600ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2017 Sam Boyer 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. dep-0.3.2/vendor/github.com/sdboyer/constext/README.md000066400000000000000000000066221317166637100224360ustar00rootroot00000000000000# constext [![Doc Status](https://godoc.org/github.com/sdboyer/constext?status.png)](https://godoc.org/github.com/sdboyer/constext) constext allows you to [`cons`](https://en.wikipedia.org/wiki/Cons) `Context`s together as a pair, conjoining them for the purpose of all `Context` behaviors: 1. If either parent context is canceled, the constext is canceled. The err is set to whatever the err of the parent that was canceled. 2. If either parent has a deadline, the constext uses that same deadline. If both have a deadline, it uses the sooner/lesser one. 3. Values from both parents are unioned together. When a key is present in both parent trees, the left (first) context supercedes the right (second). Paired contexts can be recombined using the standard `context.With*()` functions. ## Usage Use is simple, and patterned after the `context` package. The `constext.Cons()` function takes two `context.Context` arguments and returns a single, unified one, along with a `context.CancelFunc`. ```go cctx, cancelFunc := constext.Cons(context.Background(), context.Background()) ``` True to the spirit of `cons`, recursive trees can be formed through nesting: ```go bg := context.Background() cctx := constext.Cons(bg, constext.Cons(bg, constext.Cons(bg, bg))) ``` This probably isn't a good idea, but it's possible. ## Rationale While the unary model of context works well for the original vision - an object operating within an [HTTP] request's scope - there are times when we need a little more. For example: in [dep](https://github.com/golang/dep), the subsystem that manages interaction with source repositories is called a [`SourceManager`](https://godoc.org/github.com/sdboyer/gps#SourceManager). It is a long-lived object; generally, only one is created over the course of any single `dep` invocation. The `SourceManager` has a number of methods on it that may initiate network and/or disk interaction. As such, these methods need to take a `context.Context`, so that the caller can cancel them if needed. However, this is not sufficient. The `SourceManager` itself may need to be terminated (e.g., if the process received a signal). In such a case, in-flight method calls also need to be canceled, to avoid leaving disk in inconsistent state. As a result, each in-flight request serves two parents - the initator of the request, and the `SourceManager` itself. We can abstract away this complexity by having a `Context` for each, and `Cons`ing them together on a per-call basis. ## Caveats _tl;dr: GC doesn't work right, so explicitly cancel constexts when done with them._ The stdlib context packages uses internal tree-walking trickery to avoid spawning goroutines unless it actually has to. We can't rely on that same trickery, in part because we can't access the tree internals, but also because it's not so straightforward when multiple parents are involved. Consequently, `Cons()` almost always must spawn a goroutine to ensure correct cancellation behavior, whereas e.g. `context.WithCancel()` rarely has to. If, as in the use case above, your constext has one short-lived and one long-lived parent, and the short-lived parent is not explicitly canceled (which is typical), then until the long-lived parent is canceled, neither the constext, nor any otherwise-unreachable members of the short-lived context tree will be GCed. So, for now, explicitly cancel your constexts before they go out of scope, otherwise you'll leak memory. dep-0.3.2/vendor/github.com/sdboyer/constext/constext.go000066400000000000000000000056461317166637100233620ustar00rootroot00000000000000// Package constext provides facilities for pairing contexts together so that // they behave as one. package constext import ( "context" "sync" "time" ) type constext struct { car, cdr context.Context done chan struct{} // chan closed on cancelFunc() call, or parent done once sync.Once // protects cancel func mu sync.Mutex // protects timer and err err error // err set on cancel or timeout } // Cons takes two Contexts and combines them into a pair, conjoining their // behavior: // // - If either parent context is canceled, the constext is canceled. The err is // set to whatever the err of the parent that was canceled. // - If either parent has a deadline, the constext uses that same deadline. If // both have a deadline, it uses the sooner/lesser one. // - Values from both parents are unioned together. When a key is present in // both parent trees, the left (first) context supercedes the right (second). // // All the normal context.With*() funcs should incorporate constexts correctly. // // If the two parent contexts both return a nil channel from Done() (which can // occur if both parents are Background, or were created only through // context.WithValue()), then the returned cancelFunc() is a no-op; calling it // will NOT result in the termination of any sub-contexts later created. func Cons(l, r context.Context) (context.Context, context.CancelFunc) { cc := &constext{ car: l, cdr: r, done: make(chan struct{}), } if cc.car.Done() == nil && cc.cdr.Done() == nil { // Both parents are un-cancelable, so it's more technically correct to // return a no-op func here. return cc, func() {} } if cc.car.Err() != nil { cc.cancel(cc.car.Err()) return cc, func() {} } if cc.cdr.Err() != nil { cc.cancel(cc.cdr.Err()) return cc, func() {} } go func() { select { case <-cc.car.Done(): cc.cancel(cc.car.Err()) case <-cc.cdr.Done(): cc.cancel(cc.cdr.Err()) case <-cc.done: // Ensure the goroutine dies when canceled } }() return cc, func() { cc.cancel(context.Canceled) } } func (cc *constext) cancel(err error) { cc.once.Do(func() { if err == nil { panic("constext: internal error: missing cancel error") } cc.mu.Lock() if cc.err == nil { cc.err = err close(cc.done) } cc.mu.Unlock() }) } func (cc *constext) Deadline() (time.Time, bool) { hdeadline, hok := cc.car.Deadline() tdeadline, tok := cc.cdr.Deadline() if !hok && !tok { return time.Time{}, false } if hok && !tok { return hdeadline, true } if !hok && tok { return tdeadline, true } if hdeadline.Before(tdeadline) { return hdeadline, true } return tdeadline, true } func (cc *constext) Done() <-chan struct{} { return cc.done } func (cc *constext) Err() error { cc.mu.Lock() defer cc.mu.Unlock() return cc.err } func (cc *constext) Value(key interface{}) interface{} { v := cc.car.Value(key) if v != nil { return v } return cc.cdr.Value(key) } dep-0.3.2/vendor/github.com/sdboyer/constext/constext_test.go000066400000000000000000000067321317166637100244160ustar00rootroot00000000000000package constext import ( "context" "runtime" "testing" "time" ) var bgc = context.Background() func TestConsCancel(t *testing.T) { c1, cancel1 := context.WithCancel(bgc) c2, cancel2 := context.WithCancel(bgc) cc, _ := Cons(c1, c2) if _, has := cc.Deadline(); has { t.Fatal("constext should not have a deadline if parents do not") } cancel1() select { case <-cc.Done(): case <-time.After(1 * time.Second): buf := make([]byte, 10<<10) n := runtime.Stack(buf, true) t.Fatalf("timed out waiting for parent to quit; stacks:\n%s", buf[:n]) } cc, _ = Cons(c1, c2) if cc.Err() == nil { t.Fatal("pre-canceled car constext did not begin canceled") } cc, _ = Cons(c2, c1) if cc.Err() == nil { t.Fatal("pre-canceled cdr constext did not begin canceled") } c3, _ := context.WithCancel(bgc) cc, _ = Cons(c3, c2) cancel2() select { case <-cc.Done(): case <-time.After(1 * time.Second): buf := make([]byte, 10<<10) n := runtime.Stack(buf, true) t.Fatalf("timed out waiting for cdr to quit; stacks:\n%s", buf[:n]) } } func TestCancelPassdown(t *testing.T) { c1, cancel1 := context.WithCancel(bgc) c2, _ := context.WithCancel(bgc) cc, _ := Cons(c1, c2) c3, _ := context.WithCancel(cc) cancel1() select { case <-c3.Done(): case <-time.After(1 * time.Second): buf := make([]byte, 10<<10) n := runtime.Stack(buf, true) t.Fatalf("timed out waiting for parent to quit; stacks:\n%s", buf[:n]) } c1, cancel1 = context.WithCancel(bgc) cc, _ = Cons(c1, c2) c3 = context.WithValue(cc, "foo", "bar") cancel1() select { case <-c3.Done(): case <-time.After(1 * time.Second): buf := make([]byte, 10<<10) n := runtime.Stack(buf, true) t.Fatalf("timed out waiting for parent to quit; stacks:\n%s", buf[:n]) } } func TestValueUnion(t *testing.T) { c1 := context.WithValue(bgc, "foo", "bar") c2 := context.WithValue(bgc, "foo", "baz") cc, _ := Cons(c1, c2) v := cc.Value("foo") if v != "bar" { t.Fatalf("wanted value of \"foo\" from car, \"bar\", got %q", v) } c3 := context.WithValue(bgc, "bar", "quux") cc2, _ := Cons(c1, c3) v = cc2.Value("bar") if v != "quux" { t.Fatalf("wanted value from cdr, \"quux\", got %q", v) } cc, _ = Cons(cc, c3) v = cc.Value("bar") if v != "quux" { t.Fatalf("wanted value from nested cdr, \"quux\", got %q", v) } } func TestDeadline(t *testing.T) { t1 := time.Now().Add(1 * time.Second) c1, _ := context.WithDeadline(bgc, t1) cc, _ := Cons(c1, bgc) cct, ok := cc.Deadline() if !ok { t.Fatal("constext claimed to not have any deadline, but car did") } if cct != t1 { t.Fatal("constext did not have correct deadline") } cc, _ = Cons(bgc, c1) cct, ok = cc.Deadline() if !ok { t.Fatal("constext claimed to not have any deadline, but cdr did") } if cct != t1 { t.Fatal("constext did not have correct deadline") } t2 := time.Now().Add(1 * time.Second) c2, _ := context.WithDeadline(bgc, t2) cc, _ = Cons(c1, c2) cct, ok = cc.Deadline() if !ok { t.Fatal("constext claimed to not have any deadline, but both parents did") } if cct != t1 { t.Fatal("got wrong deadline time back") } cc, _ = Cons(c2, c1) cct, ok = cc.Deadline() if !ok { t.Fatal("constext claimed to not have any deadline, but both parents did") } if cct != t1 { t.Fatal("got wrong deadline time back") } select { case <-cc.Done(): case <-time.After(t1.Sub(time.Now()) + 5*time.Millisecond): buf := make([]byte, 10<<10) n := runtime.Stack(buf, true) t.Fatalf("car did not quit after deadline; stacks:\n%s", buf[:n]) } } dep-0.3.2/vendor/golang.org/000077500000000000000000000000001317166637100156315ustar00rootroot00000000000000dep-0.3.2/vendor/golang.org/x/000077500000000000000000000000001317166637100161005ustar00rootroot00000000000000dep-0.3.2/vendor/golang.org/x/net/000077500000000000000000000000001317166637100166665ustar00rootroot00000000000000dep-0.3.2/vendor/golang.org/x/net/.gitattributes000066400000000000000000000005311317166637100215600ustar00rootroot00000000000000# Treat all files in this repo as binary, with no git magic updating # line endings. Windows users contributing to Go will need to use a # modern version of git and editors capable of LF line endings. # # We'll prevent accidental CRLF line endings from entering the repo # via the git-review gofmt checks. # # See golang.org/issue/9281 * -text dep-0.3.2/vendor/golang.org/x/net/.gitignore000066400000000000000000000001241317166637100206530ustar00rootroot00000000000000# Add no patterns to .hgignore except for files generated by the build. last-change dep-0.3.2/vendor/golang.org/x/net/AUTHORS000066400000000000000000000002551317166637100177400ustar00rootroot00000000000000# This source code refers to The Go Authors for copyright purposes. # The master list of authors is in the main Go distribution, # visible at http://tip.golang.org/AUTHORS. dep-0.3.2/vendor/golang.org/x/net/CONTRIBUTING.md000066400000000000000000000020071317166637100211160ustar00rootroot00000000000000# Contributing to Go Go is an open source project. It is the work of hundreds of contributors. We appreciate your help! ## Filing issues When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: 1. What version of Go are you using (`go version`)? 2. What operating system and processor architecture are you using? 3. What did you do? 4. What did you expect to see? 5. What did you see instead? General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. ## Contributing code Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. **We do not accept GitHub pull requests** (we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. dep-0.3.2/vendor/golang.org/x/net/CONTRIBUTORS000066400000000000000000000002521317166637100205450ustar00rootroot00000000000000# This source code was written by the Go contributors. # The master list of contributors is in the main Go distribution, # visible at http://tip.golang.org/CONTRIBUTORS. dep-0.3.2/vendor/golang.org/x/net/LICENSE000066400000000000000000000027071317166637100177010ustar00rootroot00000000000000Copyright (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. dep-0.3.2/vendor/golang.org/x/net/PATENTS000066400000000000000000000024271317166637100177340ustar00rootroot00000000000000Additional 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. dep-0.3.2/vendor/golang.org/x/net/README000066400000000000000000000002171317166637100175460ustar00rootroot00000000000000This repository holds supplementary Go networking libraries. To submit changes to this repository, see http://golang.org/doc/contribute.html. dep-0.3.2/vendor/golang.org/x/net/codereview.cfg000066400000000000000000000000251317166637100215000ustar00rootroot00000000000000issuerepo: golang/go dep-0.3.2/vendor/golang.org/x/net/context/000077500000000000000000000000001317166637100203525ustar00rootroot00000000000000dep-0.3.2/vendor/golang.org/x/net/context/context.go000066400000000000000000000044421317166637100223710ustar00rootroot00000000000000// 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 context defines the Context type, which carries deadlines, // cancelation signals, and other request-scoped values across API boundaries // and between processes. // // Incoming requests to a server should create a Context, and outgoing calls to // servers should accept a Context. The chain of function calls between must // propagate the Context, optionally replacing it with a modified copy created // using WithDeadline, WithTimeout, WithCancel, or WithValue. // // Programs that use Contexts should follow these rules to keep interfaces // consistent across packages and enable static analysis tools to check context // propagation: // // Do not store Contexts inside a struct type; instead, pass a Context // explicitly to each function that needs it. The Context should be the first // parameter, typically named ctx: // // func DoSomething(ctx context.Context, arg Arg) error { // // ... use ctx ... // } // // Do not pass a nil Context, even if a function permits it. Pass context.TODO // if you are unsure about which Context to use. // // Use context Values only for request-scoped data that transits processes and // APIs, not for passing optional parameters to functions. // // The same Context may be passed to functions running in different goroutines; // Contexts are safe for simultaneous use by multiple goroutines. // // See http://blog.golang.org/context for example code for a server that uses // Contexts. package context // import "golang.org/x/net/context" // Background returns a non-nil, empty Context. It is never canceled, has no // values, and has no deadline. It is typically used by the main function, // initialization, and tests, and as the top-level Context for incoming // requests. func Background() Context { return background } // TODO returns a non-nil, empty Context. Code should use context.TODO when // it's unclear which Context to use or it is not yet available (because the // surrounding function has not yet been extended to accept a Context // parameter). TODO is recognized by static analysis tools that determine // whether Contexts are propagated correctly in a program. func TODO() Context { return todo } dep-0.3.2/vendor/golang.org/x/net/context/context_test.go000066400000000000000000000351531317166637100234330ustar00rootroot00000000000000// 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.7 package context import ( "fmt" "math/rand" "runtime" "strings" "sync" "testing" "time" ) // otherContext is a Context that's not one of the types defined in context.go. // This lets us test code paths that differ based on the underlying type of the // Context. type otherContext struct { Context } func TestBackground(t *testing.T) { c := Background() if c == nil { t.Fatalf("Background returned nil") } select { case x := <-c.Done(): t.Errorf("<-c.Done() == %v want nothing (it should block)", x) default: } if got, want := fmt.Sprint(c), "context.Background"; got != want { t.Errorf("Background().String() = %q want %q", got, want) } } func TestTODO(t *testing.T) { c := TODO() if c == nil { t.Fatalf("TODO returned nil") } select { case x := <-c.Done(): t.Errorf("<-c.Done() == %v want nothing (it should block)", x) default: } if got, want := fmt.Sprint(c), "context.TODO"; got != want { t.Errorf("TODO().String() = %q want %q", got, want) } } func TestWithCancel(t *testing.T) { c1, cancel := WithCancel(Background()) if got, want := fmt.Sprint(c1), "context.Background.WithCancel"; got != want { t.Errorf("c1.String() = %q want %q", got, want) } o := otherContext{c1} c2, _ := WithCancel(o) contexts := []Context{c1, o, c2} for i, c := range contexts { if d := c.Done(); d == nil { t.Errorf("c[%d].Done() == %v want non-nil", i, d) } if e := c.Err(); e != nil { t.Errorf("c[%d].Err() == %v want nil", i, e) } select { case x := <-c.Done(): t.Errorf("<-c.Done() == %v want nothing (it should block)", x) default: } } cancel() time.Sleep(100 * time.Millisecond) // let cancelation propagate for i, c := range contexts { select { case <-c.Done(): default: t.Errorf("<-c[%d].Done() blocked, but shouldn't have", i) } if e := c.Err(); e != Canceled { t.Errorf("c[%d].Err() == %v want %v", i, e, Canceled) } } } func TestParentFinishesChild(t *testing.T) { // Context tree: // parent -> cancelChild // parent -> valueChild -> timerChild parent, cancel := WithCancel(Background()) cancelChild, stop := WithCancel(parent) defer stop() valueChild := WithValue(parent, "key", "value") timerChild, stop := WithTimeout(valueChild, 10000*time.Hour) defer stop() select { case x := <-parent.Done(): t.Errorf("<-parent.Done() == %v want nothing (it should block)", x) case x := <-cancelChild.Done(): t.Errorf("<-cancelChild.Done() == %v want nothing (it should block)", x) case x := <-timerChild.Done(): t.Errorf("<-timerChild.Done() == %v want nothing (it should block)", x) case x := <-valueChild.Done(): t.Errorf("<-valueChild.Done() == %v want nothing (it should block)", x) default: } // The parent's children should contain the two cancelable children. pc := parent.(*cancelCtx) cc := cancelChild.(*cancelCtx) tc := timerChild.(*timerCtx) pc.mu.Lock() if len(pc.children) != 2 || !pc.children[cc] || !pc.children[tc] { t.Errorf("bad linkage: pc.children = %v, want %v and %v", pc.children, cc, tc) } pc.mu.Unlock() if p, ok := parentCancelCtx(cc.Context); !ok || p != pc { t.Errorf("bad linkage: parentCancelCtx(cancelChild.Context) = %v, %v want %v, true", p, ok, pc) } if p, ok := parentCancelCtx(tc.Context); !ok || p != pc { t.Errorf("bad linkage: parentCancelCtx(timerChild.Context) = %v, %v want %v, true", p, ok, pc) } cancel() pc.mu.Lock() if len(pc.children) != 0 { t.Errorf("pc.cancel didn't clear pc.children = %v", pc.children) } pc.mu.Unlock() // parent and children should all be finished. check := func(ctx Context, name string) { select { case <-ctx.Done(): default: t.Errorf("<-%s.Done() blocked, but shouldn't have", name) } if e := ctx.Err(); e != Canceled { t.Errorf("%s.Err() == %v want %v", name, e, Canceled) } } check(parent, "parent") check(cancelChild, "cancelChild") check(valueChild, "valueChild") check(timerChild, "timerChild") // WithCancel should return a canceled context on a canceled parent. precanceledChild := WithValue(parent, "key", "value") select { case <-precanceledChild.Done(): default: t.Errorf("<-precanceledChild.Done() blocked, but shouldn't have") } if e := precanceledChild.Err(); e != Canceled { t.Errorf("precanceledChild.Err() == %v want %v", e, Canceled) } } func TestChildFinishesFirst(t *testing.T) { cancelable, stop := WithCancel(Background()) defer stop() for _, parent := range []Context{Background(), cancelable} { child, cancel := WithCancel(parent) select { case x := <-parent.Done(): t.Errorf("<-parent.Done() == %v want nothing (it should block)", x) case x := <-child.Done(): t.Errorf("<-child.Done() == %v want nothing (it should block)", x) default: } cc := child.(*cancelCtx) pc, pcok := parent.(*cancelCtx) // pcok == false when parent == Background() if p, ok := parentCancelCtx(cc.Context); ok != pcok || (ok && pc != p) { t.Errorf("bad linkage: parentCancelCtx(cc.Context) = %v, %v want %v, %v", p, ok, pc, pcok) } if pcok { pc.mu.Lock() if len(pc.children) != 1 || !pc.children[cc] { t.Errorf("bad linkage: pc.children = %v, cc = %v", pc.children, cc) } pc.mu.Unlock() } cancel() if pcok { pc.mu.Lock() if len(pc.children) != 0 { t.Errorf("child's cancel didn't remove self from pc.children = %v", pc.children) } pc.mu.Unlock() } // child should be finished. select { case <-child.Done(): default: t.Errorf("<-child.Done() blocked, but shouldn't have") } if e := child.Err(); e != Canceled { t.Errorf("child.Err() == %v want %v", e, Canceled) } // parent should not be finished. select { case x := <-parent.Done(): t.Errorf("<-parent.Done() == %v want nothing (it should block)", x) default: } if e := parent.Err(); e != nil { t.Errorf("parent.Err() == %v want nil", e) } } } func testDeadline(c Context, wait time.Duration, t *testing.T) { select { case <-time.After(wait): t.Fatalf("context should have timed out") case <-c.Done(): } if e := c.Err(); e != DeadlineExceeded { t.Errorf("c.Err() == %v want %v", e, DeadlineExceeded) } } func TestDeadline(t *testing.T) { t.Parallel() const timeUnit = 500 * time.Millisecond c, _ := WithDeadline(Background(), time.Now().Add(1*timeUnit)) if got, prefix := fmt.Sprint(c), "context.Background.WithDeadline("; !strings.HasPrefix(got, prefix) { t.Errorf("c.String() = %q want prefix %q", got, prefix) } testDeadline(c, 2*timeUnit, t) c, _ = WithDeadline(Background(), time.Now().Add(1*timeUnit)) o := otherContext{c} testDeadline(o, 2*timeUnit, t) c, _ = WithDeadline(Background(), time.Now().Add(1*timeUnit)) o = otherContext{c} c, _ = WithDeadline(o, time.Now().Add(3*timeUnit)) testDeadline(c, 2*timeUnit, t) } func TestTimeout(t *testing.T) { t.Parallel() const timeUnit = 500 * time.Millisecond c, _ := WithTimeout(Background(), 1*timeUnit) if got, prefix := fmt.Sprint(c), "context.Background.WithDeadline("; !strings.HasPrefix(got, prefix) { t.Errorf("c.String() = %q want prefix %q", got, prefix) } testDeadline(c, 2*timeUnit, t) c, _ = WithTimeout(Background(), 1*timeUnit) o := otherContext{c} testDeadline(o, 2*timeUnit, t) c, _ = WithTimeout(Background(), 1*timeUnit) o = otherContext{c} c, _ = WithTimeout(o, 3*timeUnit) testDeadline(c, 2*timeUnit, t) } func TestCanceledTimeout(t *testing.T) { t.Parallel() const timeUnit = 500 * time.Millisecond c, _ := WithTimeout(Background(), 2*timeUnit) o := otherContext{c} c, cancel := WithTimeout(o, 4*timeUnit) cancel() time.Sleep(1 * timeUnit) // let cancelation propagate select { case <-c.Done(): default: t.Errorf("<-c.Done() blocked, but shouldn't have") } if e := c.Err(); e != Canceled { t.Errorf("c.Err() == %v want %v", e, Canceled) } } type key1 int type key2 int var k1 = key1(1) var k2 = key2(1) // same int as k1, different type var k3 = key2(3) // same type as k2, different int func TestValues(t *testing.T) { check := func(c Context, nm, v1, v2, v3 string) { if v, ok := c.Value(k1).(string); ok == (len(v1) == 0) || v != v1 { t.Errorf(`%s.Value(k1).(string) = %q, %t want %q, %t`, nm, v, ok, v1, len(v1) != 0) } if v, ok := c.Value(k2).(string); ok == (len(v2) == 0) || v != v2 { t.Errorf(`%s.Value(k2).(string) = %q, %t want %q, %t`, nm, v, ok, v2, len(v2) != 0) } if v, ok := c.Value(k3).(string); ok == (len(v3) == 0) || v != v3 { t.Errorf(`%s.Value(k3).(string) = %q, %t want %q, %t`, nm, v, ok, v3, len(v3) != 0) } } c0 := Background() check(c0, "c0", "", "", "") c1 := WithValue(Background(), k1, "c1k1") check(c1, "c1", "c1k1", "", "") if got, want := fmt.Sprint(c1), `context.Background.WithValue(1, "c1k1")`; got != want { t.Errorf("c.String() = %q want %q", got, want) } c2 := WithValue(c1, k2, "c2k2") check(c2, "c2", "c1k1", "c2k2", "") c3 := WithValue(c2, k3, "c3k3") check(c3, "c2", "c1k1", "c2k2", "c3k3") c4 := WithValue(c3, k1, nil) check(c4, "c4", "", "c2k2", "c3k3") o0 := otherContext{Background()} check(o0, "o0", "", "", "") o1 := otherContext{WithValue(Background(), k1, "c1k1")} check(o1, "o1", "c1k1", "", "") o2 := WithValue(o1, k2, "o2k2") check(o2, "o2", "c1k1", "o2k2", "") o3 := otherContext{c4} check(o3, "o3", "", "c2k2", "c3k3") o4 := WithValue(o3, k3, nil) check(o4, "o4", "", "c2k2", "") } func TestAllocs(t *testing.T) { bg := Background() for _, test := range []struct { desc string f func() limit float64 gccgoLimit float64 }{ { desc: "Background()", f: func() { Background() }, limit: 0, gccgoLimit: 0, }, { desc: fmt.Sprintf("WithValue(bg, %v, nil)", k1), f: func() { c := WithValue(bg, k1, nil) c.Value(k1) }, limit: 3, gccgoLimit: 3, }, { desc: "WithTimeout(bg, 15*time.Millisecond)", f: func() { c, _ := WithTimeout(bg, 15*time.Millisecond) <-c.Done() }, limit: 8, gccgoLimit: 16, }, { desc: "WithCancel(bg)", f: func() { c, cancel := WithCancel(bg) cancel() <-c.Done() }, limit: 5, gccgoLimit: 8, }, { desc: "WithTimeout(bg, 100*time.Millisecond)", f: func() { c, cancel := WithTimeout(bg, 100*time.Millisecond) cancel() <-c.Done() }, limit: 8, gccgoLimit: 25, }, } { limit := test.limit if runtime.Compiler == "gccgo" { // gccgo does not yet do escape analysis. // TODO(iant): Remove this when gccgo does do escape analysis. limit = test.gccgoLimit } if n := testing.AllocsPerRun(100, test.f); n > limit { t.Errorf("%s allocs = %f want %d", test.desc, n, int(limit)) } } } func TestSimultaneousCancels(t *testing.T) { root, cancel := WithCancel(Background()) m := map[Context]CancelFunc{root: cancel} q := []Context{root} // Create a tree of contexts. for len(q) != 0 && len(m) < 100 { parent := q[0] q = q[1:] for i := 0; i < 4; i++ { ctx, cancel := WithCancel(parent) m[ctx] = cancel q = append(q, ctx) } } // Start all the cancels in a random order. var wg sync.WaitGroup wg.Add(len(m)) for _, cancel := range m { go func(cancel CancelFunc) { cancel() wg.Done() }(cancel) } // Wait on all the contexts in a random order. for ctx := range m { select { case <-ctx.Done(): case <-time.After(1 * time.Second): buf := make([]byte, 10<<10) n := runtime.Stack(buf, true) t.Fatalf("timed out waiting for <-ctx.Done(); stacks:\n%s", buf[:n]) } } // Wait for all the cancel functions to return. done := make(chan struct{}) go func() { wg.Wait() close(done) }() select { case <-done: case <-time.After(1 * time.Second): buf := make([]byte, 10<<10) n := runtime.Stack(buf, true) t.Fatalf("timed out waiting for cancel functions; stacks:\n%s", buf[:n]) } } func TestInterlockedCancels(t *testing.T) { parent, cancelParent := WithCancel(Background()) child, cancelChild := WithCancel(parent) go func() { parent.Done() cancelChild() }() cancelParent() select { case <-child.Done(): case <-time.After(1 * time.Second): buf := make([]byte, 10<<10) n := runtime.Stack(buf, true) t.Fatalf("timed out waiting for child.Done(); stacks:\n%s", buf[:n]) } } func TestLayersCancel(t *testing.T) { testLayers(t, time.Now().UnixNano(), false) } func TestLayersTimeout(t *testing.T) { testLayers(t, time.Now().UnixNano(), true) } func testLayers(t *testing.T, seed int64, testTimeout bool) { rand.Seed(seed) errorf := func(format string, a ...interface{}) { t.Errorf(fmt.Sprintf("seed=%d: %s", seed, format), a...) } const ( timeout = 200 * time.Millisecond minLayers = 30 ) type value int var ( vals []*value cancels []CancelFunc numTimers int ctx = Background() ) for i := 0; i < minLayers || numTimers == 0 || len(cancels) == 0 || len(vals) == 0; i++ { switch rand.Intn(3) { case 0: v := new(value) ctx = WithValue(ctx, v, v) vals = append(vals, v) case 1: var cancel CancelFunc ctx, cancel = WithCancel(ctx) cancels = append(cancels, cancel) case 2: var cancel CancelFunc ctx, cancel = WithTimeout(ctx, timeout) cancels = append(cancels, cancel) numTimers++ } } checkValues := func(when string) { for _, key := range vals { if val := ctx.Value(key).(*value); key != val { errorf("%s: ctx.Value(%p) = %p want %p", when, key, val, key) } } } select { case <-ctx.Done(): errorf("ctx should not be canceled yet") default: } if s, prefix := fmt.Sprint(ctx), "context.Background."; !strings.HasPrefix(s, prefix) { t.Errorf("ctx.String() = %q want prefix %q", s, prefix) } t.Log(ctx) checkValues("before cancel") if testTimeout { select { case <-ctx.Done(): case <-time.After(timeout + 100*time.Millisecond): errorf("ctx should have timed out") } checkValues("after timeout") } else { cancel := cancels[rand.Intn(len(cancels))] cancel() select { case <-ctx.Done(): default: errorf("ctx should be canceled") } checkValues("after cancel") } } func TestCancelRemoves(t *testing.T) { checkChildren := func(when string, ctx Context, want int) { if got := len(ctx.(*cancelCtx).children); got != want { t.Errorf("%s: context has %d children, want %d", when, got, want) } } ctx, _ := WithCancel(Background()) checkChildren("after creation", ctx, 0) _, cancel := WithCancel(ctx) checkChildren("with WithCancel child ", ctx, 1) cancel() checkChildren("after cancelling WithCancel child", ctx, 0) ctx, _ = WithCancel(Background()) checkChildren("after creation", ctx, 0) _, cancel = WithTimeout(ctx, 60*time.Minute) checkChildren("with WithTimeout child ", ctx, 1) cancel() checkChildren("after cancelling WithTimeout child", ctx, 0) } dep-0.3.2/vendor/golang.org/x/net/context/go17.go000066400000000000000000000054561317166637100214700ustar00rootroot00000000000000// 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 go1.7 package context import ( "context" // standard library's context, as of Go 1.7 "time" ) var ( todo = context.TODO() background = context.Background() ) // Canceled is the error returned by Context.Err when the context is canceled. var Canceled = context.Canceled // DeadlineExceeded is the error returned by Context.Err when the context's // deadline passes. var DeadlineExceeded = context.DeadlineExceeded // WithCancel returns a copy of parent with a new Done channel. The returned // context's Done channel is closed when the returned cancel function is called // or when the parent context's Done channel is closed, whichever happens first. // // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete. func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { ctx, f := context.WithCancel(parent) return ctx, CancelFunc(f) } // WithDeadline returns a copy of the parent context with the deadline adjusted // to be no later than d. If the parent's deadline is already earlier than d, // WithDeadline(parent, d) is semantically equivalent to parent. The returned // context's Done channel is closed when the deadline expires, when the returned // cancel function is called, or when the parent context's Done channel is // closed, whichever happens first. // // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete. func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { ctx, f := context.WithDeadline(parent, deadline) return ctx, CancelFunc(f) } // WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). // // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete: // // func slowOperationWithTimeout(ctx context.Context) (Result, error) { // ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) // defer cancel() // releases resources if slowOperation completes before timeout elapses // return slowOperation(ctx) // } func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { return WithDeadline(parent, time.Now().Add(timeout)) } // WithValue returns a copy of parent in which the value associated with key is // val. // // Use context Values only for request-scoped data that transits processes and // APIs, not for passing optional parameters to functions. func WithValue(parent Context, key interface{}, val interface{}) Context { return context.WithValue(parent, key, val) } dep-0.3.2/vendor/golang.org/x/net/context/go19.go000066400000000000000000000012461317166637100214630ustar00rootroot00000000000000// Copyright 2017 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.9 package context import "context" // standard library's context, as of Go 1.7 // A Context carries a deadline, a cancelation signal, and other values across // API boundaries. // // Context's methods may be called by multiple goroutines simultaneously. type Context = context.Context // A CancelFunc tells an operation to abandon its work. // A CancelFunc does not wait for the work to stop. // After the first call, subsequent calls to a CancelFunc do nothing. type CancelFunc = context.CancelFunc dep-0.3.2/vendor/golang.org/x/net/context/pre_go17.go000066400000000000000000000176731317166637100223420ustar00rootroot00000000000000// 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.7 package context import ( "errors" "fmt" "sync" "time" ) // An emptyCtx is never canceled, has no values, and has no deadline. It is not // struct{}, since vars of this type must have distinct addresses. type emptyCtx int func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { return } func (*emptyCtx) Done() <-chan struct{} { return nil } func (*emptyCtx) Err() error { return nil } func (*emptyCtx) Value(key interface{}) interface{} { return nil } func (e *emptyCtx) String() string { switch e { case background: return "context.Background" case todo: return "context.TODO" } return "unknown empty Context" } var ( background = new(emptyCtx) todo = new(emptyCtx) ) // Canceled is the error returned by Context.Err when the context is canceled. var Canceled = errors.New("context canceled") // DeadlineExceeded is the error returned by Context.Err when the context's // deadline passes. var DeadlineExceeded = errors.New("context deadline exceeded") // WithCancel returns a copy of parent with a new Done channel. The returned // context's Done channel is closed when the returned cancel function is called // or when the parent context's Done channel is closed, whichever happens first. // // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete. func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { c := newCancelCtx(parent) propagateCancel(parent, c) return c, func() { c.cancel(true, Canceled) } } // newCancelCtx returns an initialized cancelCtx. func newCancelCtx(parent Context) *cancelCtx { return &cancelCtx{ Context: parent, done: make(chan struct{}), } } // propagateCancel arranges for child to be canceled when parent is. func propagateCancel(parent Context, child canceler) { if parent.Done() == nil { return // parent is never canceled } if p, ok := parentCancelCtx(parent); ok { p.mu.Lock() if p.err != nil { // parent has already been canceled child.cancel(false, p.err) } else { if p.children == nil { p.children = make(map[canceler]bool) } p.children[child] = true } p.mu.Unlock() } else { go func() { select { case <-parent.Done(): child.cancel(false, parent.Err()) case <-child.Done(): } }() } } // parentCancelCtx follows a chain of parent references until it finds a // *cancelCtx. This function understands how each of the concrete types in this // package represents its parent. func parentCancelCtx(parent Context) (*cancelCtx, bool) { for { switch c := parent.(type) { case *cancelCtx: return c, true case *timerCtx: return c.cancelCtx, true case *valueCtx: parent = c.Context default: return nil, false } } } // removeChild removes a context from its parent. func removeChild(parent Context, child canceler) { p, ok := parentCancelCtx(parent) if !ok { return } p.mu.Lock() if p.children != nil { delete(p.children, child) } p.mu.Unlock() } // A canceler is a context type that can be canceled directly. The // implementations are *cancelCtx and *timerCtx. type canceler interface { cancel(removeFromParent bool, err error) Done() <-chan struct{} } // A cancelCtx can be canceled. When canceled, it also cancels any children // that implement canceler. type cancelCtx struct { Context done chan struct{} // closed by the first cancel call. mu sync.Mutex children map[canceler]bool // set to nil by the first cancel call err error // set to non-nil by the first cancel call } func (c *cancelCtx) Done() <-chan struct{} { return c.done } func (c *cancelCtx) Err() error { c.mu.Lock() defer c.mu.Unlock() return c.err } func (c *cancelCtx) String() string { return fmt.Sprintf("%v.WithCancel", c.Context) } // cancel closes c.done, cancels each of c's children, and, if // removeFromParent is true, removes c from its parent's children. func (c *cancelCtx) cancel(removeFromParent bool, err error) { if err == nil { panic("context: internal error: missing cancel error") } c.mu.Lock() if c.err != nil { c.mu.Unlock() return // already canceled } c.err = err close(c.done) for child := range c.children { // NOTE: acquiring the child's lock while holding parent's lock. child.cancel(false, err) } c.children = nil c.mu.Unlock() if removeFromParent { removeChild(c.Context, c) } } // WithDeadline returns a copy of the parent context with the deadline adjusted // to be no later than d. If the parent's deadline is already earlier than d, // WithDeadline(parent, d) is semantically equivalent to parent. The returned // context's Done channel is closed when the deadline expires, when the returned // cancel function is called, or when the parent context's Done channel is // closed, whichever happens first. // // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete. func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { if cur, ok := parent.Deadline(); ok && cur.Before(deadline) { // The current deadline is already sooner than the new one. return WithCancel(parent) } c := &timerCtx{ cancelCtx: newCancelCtx(parent), deadline: deadline, } propagateCancel(parent, c) d := deadline.Sub(time.Now()) if d <= 0 { c.cancel(true, DeadlineExceeded) // deadline has already passed return c, func() { c.cancel(true, Canceled) } } c.mu.Lock() defer c.mu.Unlock() if c.err == nil { c.timer = time.AfterFunc(d, func() { c.cancel(true, DeadlineExceeded) }) } return c, func() { c.cancel(true, Canceled) } } // A timerCtx carries a timer and a deadline. It embeds a cancelCtx to // implement Done and Err. It implements cancel by stopping its timer then // delegating to cancelCtx.cancel. type timerCtx struct { *cancelCtx timer *time.Timer // Under cancelCtx.mu. deadline time.Time } func (c *timerCtx) Deadline() (deadline time.Time, ok bool) { return c.deadline, true } func (c *timerCtx) String() string { return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now())) } func (c *timerCtx) cancel(removeFromParent bool, err error) { c.cancelCtx.cancel(false, err) if removeFromParent { // Remove this timerCtx from its parent cancelCtx's children. removeChild(c.cancelCtx.Context, c) } c.mu.Lock() if c.timer != nil { c.timer.Stop() c.timer = nil } c.mu.Unlock() } // WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). // // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete: // // func slowOperationWithTimeout(ctx context.Context) (Result, error) { // ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) // defer cancel() // releases resources if slowOperation completes before timeout elapses // return slowOperation(ctx) // } func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { return WithDeadline(parent, time.Now().Add(timeout)) } // WithValue returns a copy of parent in which the value associated with key is // val. // // Use context Values only for request-scoped data that transits processes and // APIs, not for passing optional parameters to functions. func WithValue(parent Context, key interface{}, val interface{}) Context { return &valueCtx{parent, key, val} } // A valueCtx carries a key-value pair. It implements Value for that key and // delegates all other calls to the embedded Context. type valueCtx struct { Context key, val interface{} } func (c *valueCtx) String() string { return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val) } func (c *valueCtx) Value(key interface{}) interface{} { if c.key == key { return c.val } return c.Context.Value(key) } dep-0.3.2/vendor/golang.org/x/net/context/pre_go19.go000066400000000000000000000077171317166637100223420ustar00rootroot00000000000000// 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.9 package context import "time" // A Context carries a deadline, a cancelation signal, and other values across // API boundaries. // // Context's methods may be called by multiple goroutines simultaneously. type Context interface { // Deadline returns the time when work done on behalf of this context // should be canceled. Deadline returns ok==false when no deadline is // set. Successive calls to Deadline return the same results. Deadline() (deadline time.Time, ok bool) // Done returns a channel that's closed when work done on behalf of this // context should be canceled. Done may return nil if this context can // never be canceled. Successive calls to Done return the same value. // // WithCancel arranges for Done to be closed when cancel is called; // WithDeadline arranges for Done to be closed when the deadline // expires; WithTimeout arranges for Done to be closed when the timeout // elapses. // // Done is provided for use in select statements: // // // Stream generates values with DoSomething and sends them to out // // until DoSomething returns an error or ctx.Done is closed. // func Stream(ctx context.Context, out chan<- Value) error { // for { // v, err := DoSomething(ctx) // if err != nil { // return err // } // select { // case <-ctx.Done(): // return ctx.Err() // case out <- v: // } // } // } // // See http://blog.golang.org/pipelines for more examples of how to use // a Done channel for cancelation. Done() <-chan struct{} // Err returns a non-nil error value after Done is closed. Err returns // Canceled if the context was canceled or DeadlineExceeded if the // context's deadline passed. No other values for Err are defined. // After Done is closed, successive calls to Err return the same value. Err() error // Value returns the value associated with this context for key, or nil // if no value is associated with key. Successive calls to Value with // the same key returns the same result. // // Use context values only for request-scoped data that transits // processes and API boundaries, not for passing optional parameters to // functions. // // A key identifies a specific value in a Context. Functions that wish // to store values in Context typically allocate a key in a global // variable then use that key as the argument to context.WithValue and // Context.Value. A key can be any type that supports equality; // packages should define keys as an unexported type to avoid // collisions. // // Packages that define a Context key should provide type-safe accessors // for the values stores using that key: // // // Package user defines a User type that's stored in Contexts. // package user // // import "golang.org/x/net/context" // // // User is the type of value stored in the Contexts. // type User struct {...} // // // key is an unexported type for keys defined in this package. // // This prevents collisions with keys defined in other packages. // type key int // // // userKey is the key for user.User values in Contexts. It is // // unexported; clients use user.NewContext and user.FromContext // // instead of using this key directly. // var userKey key = 0 // // // NewContext returns a new Context that carries value u. // func NewContext(ctx context.Context, u *User) context.Context { // return context.WithValue(ctx, userKey, u) // } // // // FromContext returns the User value stored in ctx, if any. // func FromContext(ctx context.Context) (*User, bool) { // u, ok := ctx.Value(userKey).(*User) // return u, ok // } Value(key interface{}) interface{} } // A CancelFunc tells an operation to abandon its work. // A CancelFunc does not wait for the work to stop. // After the first call, subsequent calls to a CancelFunc do nothing. type CancelFunc func() dep-0.3.2/vendor/golang.org/x/net/context/withtimeout_test.go000066400000000000000000000014761317166637100243320ustar00rootroot00000000000000// 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 context_test import ( "fmt" "time" "golang.org/x/net/context" ) // This example passes a context with a timeout to tell a blocking function that // it should abandon its work after the timeout elapses. func ExampleWithTimeout() { // Pass a context with a timeout to tell a blocking function that it // should abandon its work after the timeout elapses. ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() select { case <-time.After(1 * time.Second): fmt.Println("overslept") case <-ctx.Done(): fmt.Println(ctx.Err()) // prints "context deadline exceeded" } // Output: // context deadline exceeded } dep-0.3.2/vendor/golang.org/x/sync/000077500000000000000000000000001317166637100170545ustar00rootroot00000000000000dep-0.3.2/vendor/golang.org/x/sync/AUTHORS000066400000000000000000000002551317166637100201260ustar00rootroot00000000000000# This source code refers to The Go Authors for copyright purposes. # The master list of authors is in the main Go distribution, # visible at http://tip.golang.org/AUTHORS. dep-0.3.2/vendor/golang.org/x/sync/CONTRIBUTING.md000066400000000000000000000020071317166637100213040ustar00rootroot00000000000000# Contributing to Go Go is an open source project. It is the work of hundreds of contributors. We appreciate your help! ## Filing issues When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: 1. What version of Go are you using (`go version`)? 2. What operating system and processor architecture are you using? 3. What did you do? 4. What did you expect to see? 5. What did you see instead? General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. ## Contributing code Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. **We do not accept GitHub pull requests** (we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. dep-0.3.2/vendor/golang.org/x/sync/CONTRIBUTORS000066400000000000000000000002521317166637100207330ustar00rootroot00000000000000# This source code was written by the Go contributors. # The master list of contributors is in the main Go distribution, # visible at http://tip.golang.org/CONTRIBUTORS. dep-0.3.2/vendor/golang.org/x/sync/LICENSE000066400000000000000000000027071317166637100200670ustar00rootroot00000000000000Copyright (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. dep-0.3.2/vendor/golang.org/x/sync/PATENTS000066400000000000000000000024271317166637100201220ustar00rootroot00000000000000Additional 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. dep-0.3.2/vendor/golang.org/x/sync/README000066400000000000000000000002131317166637100177300ustar00rootroot00000000000000This repository provides Go concurrency primitives in addition to the ones provided by the language and "sync" and "sync/atomic" packages. dep-0.3.2/vendor/golang.org/x/sync/codereview.cfg000066400000000000000000000000251317166637100216660ustar00rootroot00000000000000issuerepo: golang/go dep-0.3.2/vendor/golang.org/x/sync/errgroup/000077500000000000000000000000001317166637100207215ustar00rootroot00000000000000dep-0.3.2/vendor/golang.org/x/sync/errgroup/errgroup.go000066400000000000000000000031411317166637100231140ustar00rootroot00000000000000// 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 errgroup provides synchronization, error propagation, and Context // cancelation for groups of goroutines working on subtasks of a common task. package errgroup import ( "sync" "golang.org/x/net/context" ) // A Group is a collection of goroutines working on subtasks that are part of // the same overall task. // // A zero Group is valid and does not cancel on error. type Group struct { cancel func() wg sync.WaitGroup errOnce sync.Once err error } // WithContext returns a new Group and an associated Context derived from ctx. // // The derived Context is canceled the first time a function passed to Go // returns a non-nil error or the first time Wait returns, whichever occurs // first. func WithContext(ctx context.Context) (*Group, context.Context) { ctx, cancel := context.WithCancel(ctx) return &Group{cancel: cancel}, ctx } // Wait blocks until all function calls from the Go method have returned, then // returns the first non-nil error (if any) from them. func (g *Group) Wait() error { g.wg.Wait() if g.cancel != nil { g.cancel() } return g.err } // Go calls the given function in a new goroutine. // // The first call to return a non-nil error cancels the group; its error will be // returned by Wait. func (g *Group) Go(f func() error) { g.wg.Add(1) go func() { defer g.wg.Done() if err := f(); err != nil { g.errOnce.Do(func() { g.err = err if g.cancel != nil { g.cancel() } }) } }() } dep-0.3.2/vendor/golang.org/x/sync/errgroup/errgroup_example_md5all_test.go000066400000000000000000000046251317166637100271340ustar00rootroot00000000000000// 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 errgroup_test import ( "crypto/md5" "fmt" "io/ioutil" "log" "os" "path/filepath" "golang.org/x/net/context" "golang.org/x/sync/errgroup" ) // Pipeline demonstrates the use of a Group to implement a multi-stage // pipeline: a version of the MD5All function with bounded parallelism from // https://blog.golang.org/pipelines. func ExampleGroup_pipeline() { m, err := MD5All(context.Background(), ".") if err != nil { log.Fatal(err) } for k, sum := range m { fmt.Printf("%s:\t%x\n", k, sum) } } type result struct { path string sum [md5.Size]byte } // MD5All reads all the files in the file tree rooted at root and returns a map // from file path to the MD5 sum of the file's contents. If the directory walk // fails or any read operation fails, MD5All returns an error. func MD5All(ctx context.Context, root string) (map[string][md5.Size]byte, error) { // ctx is canceled when g.Wait() returns. When this version of MD5All returns // - even in case of error! - we know that all of the goroutines have finished // and the memory they were using can be garbage-collected. g, ctx := errgroup.WithContext(ctx) paths := make(chan string) g.Go(func() error { defer close(paths) return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if !info.Mode().IsRegular() { return nil } select { case paths <- path: case <-ctx.Done(): return ctx.Err() } return nil }) }) // Start a fixed number of goroutines to read and digest files. c := make(chan result) const numDigesters = 20 for i := 0; i < numDigesters; i++ { g.Go(func() error { for path := range paths { data, err := ioutil.ReadFile(path) if err != nil { return err } select { case c <- result{path, md5.Sum(data)}: case <-ctx.Done(): return ctx.Err() } } return nil }) } go func() { g.Wait() close(c) }() m := make(map[string][md5.Size]byte) for r := range c { m[r.path] = r.sum } // Check whether any of the goroutines failed. Since g is accumulating the // errors, we don't need to send them (or check for them) in the individual // results sent on the channel. if err := g.Wait(); err != nil { return nil, err } return m, nil } dep-0.3.2/vendor/golang.org/x/sync/errgroup/errgroup_test.go000066400000000000000000000100351317166637100241530ustar00rootroot00000000000000// 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 errgroup_test import ( "errors" "fmt" "net/http" "os" "testing" "golang.org/x/net/context" "golang.org/x/sync/errgroup" ) var ( Web = fakeSearch("web") Image = fakeSearch("image") Video = fakeSearch("video") ) type Result string type Search func(ctx context.Context, query string) (Result, error) func fakeSearch(kind string) Search { return func(_ context.Context, query string) (Result, error) { return Result(fmt.Sprintf("%s result for %q", kind, query)), nil } } // JustErrors illustrates the use of a Group in place of a sync.WaitGroup to // simplify goroutine counting and error handling. This example is derived from // the sync.WaitGroup example at https://golang.org/pkg/sync/#example_WaitGroup. func ExampleGroup_justErrors() { var g errgroup.Group var urls = []string{ "http://www.golang.org/", "http://www.google.com/", "http://www.somestupidname.com/", } for _, url := range urls { // Launch a goroutine to fetch the URL. url := url // https://golang.org/doc/faq#closures_and_goroutines g.Go(func() error { // Fetch the URL. resp, err := http.Get(url) if err == nil { resp.Body.Close() } return err }) } // Wait for all HTTP fetches to complete. if err := g.Wait(); err == nil { fmt.Println("Successfully fetched all URLs.") } } // Parallel illustrates the use of a Group for synchronizing a simple parallel // task: the "Google Search 2.0" function from // https://talks.golang.org/2012/concurrency.slide#46, augmented with a Context // and error-handling. func ExampleGroup_parallel() { Google := func(ctx context.Context, query string) ([]Result, error) { g, ctx := errgroup.WithContext(ctx) searches := []Search{Web, Image, Video} results := make([]Result, len(searches)) for i, search := range searches { i, search := i, search // https://golang.org/doc/faq#closures_and_goroutines g.Go(func() error { result, err := search(ctx, query) if err == nil { results[i] = result } return err }) } if err := g.Wait(); err != nil { return nil, err } return results, nil } results, err := Google(context.Background(), "golang") if err != nil { fmt.Fprintln(os.Stderr, err) return } for _, result := range results { fmt.Println(result) } // Output: // web result for "golang" // image result for "golang" // video result for "golang" } func TestZeroGroup(t *testing.T) { err1 := errors.New("errgroup_test: 1") err2 := errors.New("errgroup_test: 2") cases := []struct { errs []error }{ {errs: []error{}}, {errs: []error{nil}}, {errs: []error{err1}}, {errs: []error{err1, nil}}, {errs: []error{err1, nil, err2}}, } for _, tc := range cases { var g errgroup.Group var firstErr error for i, err := range tc.errs { err := err g.Go(func() error { return err }) if firstErr == nil && err != nil { firstErr = err } if gErr := g.Wait(); gErr != firstErr { t.Errorf("after %T.Go(func() error { return err }) for err in %v\n"+ "g.Wait() = %v; want %v", g, tc.errs[:i+1], err, firstErr) } } } } func TestWithContext(t *testing.T) { errDoom := errors.New("group_test: doomed") cases := []struct { errs []error want error }{ {want: nil}, {errs: []error{nil}, want: nil}, {errs: []error{errDoom}, want: errDoom}, {errs: []error{errDoom, nil}, want: errDoom}, } for _, tc := range cases { g, ctx := errgroup.WithContext(context.Background()) for _, err := range tc.errs { err := err g.Go(func() error { return err }) } if err := g.Wait(); err != tc.want { t.Errorf("after %T.Go(func() error { return err }) for err in %v\n"+ "g.Wait() = %v; want %v", g, tc.errs, err, tc.want) } canceled := false select { case <-ctx.Done(): canceled = true default: } if !canceled { t.Errorf("after %T.Go(func() error { return err }) for err in %v\n"+ "ctx.Done() was not closed", g, tc.errs) } } } dep-0.3.2/vendor/golang.org/x/sys/000077500000000000000000000000001317166637100167165ustar00rootroot00000000000000dep-0.3.2/vendor/golang.org/x/sys/.gitattributes000066400000000000000000000005311317166637100216100ustar00rootroot00000000000000# Treat all files in this repo as binary, with no git magic updating # line endings. Windows users contributing to Go will need to use a # modern version of git and editors capable of LF line endings. # # We'll prevent accidental CRLF line endings from entering the repo # via the git-review gofmt checks. # # See golang.org/issue/9281 * -text dep-0.3.2/vendor/golang.org/x/sys/.gitignore000066400000000000000000000001241317166637100207030ustar00rootroot00000000000000# Add no patterns to .hgignore except for files generated by the build. last-change dep-0.3.2/vendor/golang.org/x/sys/AUTHORS000066400000000000000000000002551317166637100177700ustar00rootroot00000000000000# This source code refers to The Go Authors for copyright purposes. # The master list of authors is in the main Go distribution, # visible at http://tip.golang.org/AUTHORS. dep-0.3.2/vendor/golang.org/x/sys/CONTRIBUTING.md000066400000000000000000000020071317166637100211460ustar00rootroot00000000000000# Contributing to Go Go is an open source project. It is the work of hundreds of contributors. We appreciate your help! ## Filing issues When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: 1. What version of Go are you using (`go version`)? 2. What operating system and processor architecture are you using? 3. What did you do? 4. What did you expect to see? 5. What did you see instead? General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. ## Contributing code Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. **We do not accept GitHub pull requests** (we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. dep-0.3.2/vendor/golang.org/x/sys/CONTRIBUTORS000066400000000000000000000002521317166637100205750ustar00rootroot00000000000000# This source code was written by the Go contributors. # The master list of contributors is in the main Go distribution, # visible at http://tip.golang.org/CONTRIBUTORS. dep-0.3.2/vendor/golang.org/x/sys/LICENSE000066400000000000000000000027071317166637100177310ustar00rootroot00000000000000Copyright (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. dep-0.3.2/vendor/golang.org/x/sys/PATENTS000066400000000000000000000024271317166637100177640ustar00rootroot00000000000000Additional 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. dep-0.3.2/vendor/golang.org/x/sys/README000066400000000000000000000002671317166637100176030ustar00rootroot00000000000000This repository holds supplemental Go packages for low-level interactions with the operating system. To submit changes to this repository, see http://golang.org/doc/contribute.html. dep-0.3.2/vendor/golang.org/x/sys/codereview.cfg000066400000000000000000000000251317166637100215300ustar00rootroot00000000000000issuerepo: golang/go dep-0.3.2/vendor/golang.org/x/sys/unix/000077500000000000000000000000001317166637100177015ustar00rootroot00000000000000dep-0.3.2/vendor/golang.org/x/sys/unix/.gitignore000066400000000000000000000000061317166637100216650ustar00rootroot00000000000000_obj/ dep-0.3.2/vendor/golang.org/x/sys/unix/README.md000066400000000000000000000201171317166637100211610ustar00rootroot00000000000000# Building `sys/unix` The sys/unix package provides access to the raw system call interface of the underlying operating system. See: https://godoc.org/golang.org/x/sys/unix Porting Go to a new architecture/OS combination or adding syscalls, types, or constants to an existing architecture/OS pair requires some manual effort; however, there are tools that automate much of the process. ## Build Systems There are currently two ways we generate the necessary files. We are currently migrating the build system to use containers so the builds are reproducible. This is being done on an OS-by-OS basis. Please update this documentation as components of the build system change. ### Old Build System (currently for `GOOS != "Linux" || GOARCH == "sparc64"`) The old build system generates the Go files based on the C header files present on your system. This means that files for a given GOOS/GOARCH pair must be generated on a system with that OS and architecture. This also means that the generated code can differ from system to system, based on differences in the header files. To avoid this, if you are using the old build system, only generate the Go files on an installation with unmodified header files. It is also important to keep track of which version of the OS the files were generated from (ex. Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes and have each OS upgrade correspond to a single change. To build the files for your current OS and architecture, make sure GOOS and GOARCH are set correctly and run `mkall.sh`. This will generate the files for your specific system. Running `mkall.sh -n` shows the commands that will be run. Requirements: bash, perl, go ### New Build System (currently for `GOOS == "Linux" && GOARCH != "sparc64"`) The new build system uses a Docker container to generate the go files directly from source checkouts of the kernel and various system libraries. This means that on any platform that supports Docker, all the files using the new build system can be generated at once, and generated files will not change based on what the person running the scripts has installed on their computer. The OS specific files for the new build system are located in the `${GOOS}` directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When the kernel or system library updates, modify the Dockerfile at `${GOOS}/Dockerfile` to checkout the new release of the source. To build all the files under the new build system, you must be on an amd64/Linux system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will then generate all of the files for all of the GOOS/GOARCH pairs in the new build system. Running `mkall.sh -n` shows the commands that will be run. Requirements: bash, perl, go, docker ## Component files This section describes the various files used in the code generation process. It also contains instructions on how to modify these files to add a new architecture/OS or to add additional syscalls, types, or constants. Note that if you are using the new build system, the scripts cannot be called normally. They must be called from within the docker container. ### asm files The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` 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. When porting Go to an new architecture/OS, this file must be implemented for each GOOS/GOARCH pair. ### mksysnum Mksysnum is a script located at `${GOOS}/mksysnum.pl` (or `mksysnum_${GOOS}.pl` for the old system). This script takes in a list of header files containing the syscall number declarations and parses them to produce the corresponding list of Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated constants. Adding new syscall numbers is mostly done by running the build on a sufficiently new installation of the target OS (or updating the source checkouts for the new build system). However, depending on the OS, you make need to update the parsing in mksysnum. ### mksyscall.pl The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are hand-written Go files which implement system calls (for unix, the specific OS, or the specific OS/Architecture pair respectively) that need special handling and list `//sys` comments giving prototypes for ones that can be generated. The mksyscall.pl script takes the `//sys` and `//sysnb` comments and converts them into syscalls. This requires the name of the prototype in the comment to match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function prototype can be exported (capitalized) or not. Adding a new syscall often just requires adding a new `//sys` function prototype with the desired arguments and a capitalized name so it is exported. However, if you want the interface to the syscall to be different, often one will make an unexported `//sys` prototype, an then write a custom wrapper in `syscall_${GOOS}.go`. ### types files For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or `types_${GOOS}.go` on the old system). This file includes standard C headers and creates Go type aliases to the corresponding C types. The file is then fed through godef to get the Go compatible definitions. Finally, the generated code is fed though mkpost.go to format the code correctly and remove any hidden or private identifiers. This cleaned-up code is written to `ztypes_${GOOS}_${GOARCH}.go`. The hardest part about preparing this file is figuring out which headers to include and which symbols need to be `#define`d to get the actual data structures that pass through to the kernel system calls. Some C libraries preset 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.go` and `linux/types.go` for examples. To add a new type, add in the necessary include statement at the top of the file (if it is not already there) and add in a type alias line. Note that if your type is significantly different on different architectures, you may need some `#if/#elif` macros in your include statements. ### mkerrors.sh This script is used to generate the system's various constants. This doesn't just include the error numbers and error strings, but also the signal numbers an a wide variety of miscellaneous constants. The constants come from the list of include files in the `includes_${uname}` variable. A regex then picks out the desired `#define` statements, and generates the corresponding Go constants. The error numbers and strings are generated from `#include `, and the signal numbers and strings are generated from `#include `. All of these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program, `_errors.c`, which prints out all the constants. To add a constant, add the header that includes it to the appropriate variable. Then, edit the regex (if necessary) to match the desired constant. Avoid making the regex too broad to avoid matching unintended constants. ## Generated files ### `zerror_${GOOS}_${GOARCH}.go` A file containing all of the system's generated error numbers, error strings, signal numbers, and constants. Generated by `mkerrors.sh` (see above). ### `zsyscall_${GOOS}_${GOARCH}.go` A file containing all the generated syscalls for a specific GOOS and GOARCH. Generated by `mksyscall.pl` (see above). ### `zsysnum_${GOOS}_${GOARCH}.go` A list of numeric constants for all the syscall number of the specific GOOS and GOARCH. Generated by mksysnum (see above). ### `ztypes_${GOOS}_${GOARCH}.go` A file containing Go types for passing into (or returning from) syscalls. Generated by godefs and the types file (see above). dep-0.3.2/vendor/golang.org/x/sys/unix/asm_darwin_386.s000066400000000000000000000012431317166637100226110ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s000066400000000000000000000012461317166637100232070ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_darwin_arm.s000066400000000000000000000012561317166637100230540ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s000066400000000000000000000012631317166637100232240ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s000066400000000000000000000012511317166637100237040ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_freebsd_386.s000066400000000000000000000012441317166637100227400ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s000066400000000000000000000012471317166637100233360ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s000066400000000000000000000012321317166637100231740ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_linux_386.s000066400000000000000000000014351317166637100224670ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_linux_amd64.s000066400000000000000000000012451317166637100230610ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_linux_arm.s000066400000000000000000000012111317166637100227160ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_linux_arm64.s000066400000000000000000000011171317166637100230750ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s000066400000000000000000000012121317166637100234520ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s000066400000000000000000000013021317166637100233000ustar00rootroot00000000000000// 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 linux // +build mips mipsle // +build !gccgo #include "textflag.h" // // System calls for mips, 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 ·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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s000066400000000000000000000012031317166637100232640ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_linux_s390x.s000066400000000000000000000011731317166637100230340ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_netbsd_386.s000066400000000000000000000012431317166637100226040ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s000066400000000000000000000012461317166637100232020ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s000066400000000000000000000012311317166637100230400ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_openbsd_386.s000066400000000000000000000012441317166637100227600ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s000066400000000000000000000012471317166637100233560ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s000066400000000000000000000012321317166637100232140ustar00rootroot00000000000000// Copyright 2017 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, OpenBSD // // 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) dep-0.3.2/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s000066400000000000000000000006521317166637100233770ustar00rootroot00000000000000// 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-88 JMP syscall·sysvicall6(SB) TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 JMP syscall·rawSysvicall6(SB) dep-0.3.2/vendor/golang.org/x/sys/unix/bluetooth_linux.go000066400000000000000000000012171317166637100234550ustar00rootroot00000000000000// 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 ) dep-0.3.2/vendor/golang.org/x/sys/unix/cap_freebsd.go000066400000000000000000000120761317166637100224730ustar00rootroot00000000000000// Copyright 2017 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 freebsd package unix import ( errorspkg "errors" "fmt" ) // Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c const ( // This is the version of CapRights this package understands. See C implementation for parallels. capRightsGoVersion = CAP_RIGHTS_VERSION_00 capArSizeMin = CAP_RIGHTS_VERSION_00 + 2 capArSizeMax = capRightsGoVersion + 2 ) var ( bit2idx = []int{ -1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, } ) func capidxbit(right uint64) int { return int((right >> 57) & 0x1f) } func rightToIndex(right uint64) (int, error) { idx := capidxbit(right) if idx < 0 || idx >= len(bit2idx) { return -2, fmt.Errorf("index for right 0x%x out of range", right) } return bit2idx[idx], nil } func caprver(right uint64) int { return int(right >> 62) } func capver(rights *CapRights) int { return caprver(rights.Rights[0]) } func caparsize(rights *CapRights) int { return capver(rights) + 2 } // CapRightsSet sets the permissions in setrights in rights. func CapRightsSet(rights *CapRights, setrights []uint64) error { // This is essentially a copy of cap_rights_vset() if capver(rights) != CAP_RIGHTS_VERSION_00 { return fmt.Errorf("bad rights version %d", capver(rights)) } n := caparsize(rights) if n < capArSizeMin || n > capArSizeMax { return errorspkg.New("bad rights size") } for _, right := range setrights { if caprver(right) != CAP_RIGHTS_VERSION_00 { return errorspkg.New("bad right version") } i, err := rightToIndex(right) if err != nil { return err } if i >= n { return errorspkg.New("index overflow") } if capidxbit(rights.Rights[i]) != capidxbit(right) { return errorspkg.New("index mismatch") } rights.Rights[i] |= right if capidxbit(rights.Rights[i]) != capidxbit(right) { return errorspkg.New("index mismatch (after assign)") } } return nil } // CapRightsClear clears the permissions in clearrights from rights. func CapRightsClear(rights *CapRights, clearrights []uint64) error { // This is essentially a copy of cap_rights_vclear() if capver(rights) != CAP_RIGHTS_VERSION_00 { return fmt.Errorf("bad rights version %d", capver(rights)) } n := caparsize(rights) if n < capArSizeMin || n > capArSizeMax { return errorspkg.New("bad rights size") } for _, right := range clearrights { if caprver(right) != CAP_RIGHTS_VERSION_00 { return errorspkg.New("bad right version") } i, err := rightToIndex(right) if err != nil { return err } if i >= n { return errorspkg.New("index overflow") } if capidxbit(rights.Rights[i]) != capidxbit(right) { return errorspkg.New("index mismatch") } rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF) if capidxbit(rights.Rights[i]) != capidxbit(right) { return errorspkg.New("index mismatch (after assign)") } } return nil } // CapRightsIsSet checks whether all the permissions in setrights are present in rights. func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) { // This is essentially a copy of cap_rights_is_vset() if capver(rights) != CAP_RIGHTS_VERSION_00 { return false, fmt.Errorf("bad rights version %d", capver(rights)) } n := caparsize(rights) if n < capArSizeMin || n > capArSizeMax { return false, errorspkg.New("bad rights size") } for _, right := range setrights { if caprver(right) != CAP_RIGHTS_VERSION_00 { return false, errorspkg.New("bad right version") } i, err := rightToIndex(right) if err != nil { return false, err } if i >= n { return false, errorspkg.New("index overflow") } if capidxbit(rights.Rights[i]) != capidxbit(right) { return false, errorspkg.New("index mismatch") } if (rights.Rights[i] & right) != right { return false, nil } } return true, nil } func capright(idx uint64, bit uint64) uint64 { return ((1 << (57 + idx)) | bit) } // CapRightsInit returns a pointer to an initialised CapRights structure filled with rights. // See man cap_rights_init(3) and rights(4). func CapRightsInit(rights []uint64) (*CapRights, error) { var r CapRights r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0) r.Rights[1] = capright(1, 0) err := CapRightsSet(&r, rights) if err != nil { return nil, err } return &r, nil } // CapRightsLimit reduces the operations permitted on fd to at most those contained in rights. // The capability rights on fd can never be increased by CapRightsLimit. // See man cap_rights_limit(2) and rights(4). func CapRightsLimit(fd uintptr, rights *CapRights) error { return capRightsLimit(int(fd), rights) } // CapRightsGet returns a CapRights structure containing the operations permitted on fd. // See man cap_rights_get(3) and rights(4). func CapRightsGet(fd uintptr) (*CapRights, error) { r, err := CapRightsInit(nil) if err != nil { return nil, err } err = capRightsGet(capRightsGoVersion, int(fd), r) if err != nil { return nil, err } return r, nil } dep-0.3.2/vendor/golang.org/x/sys/unix/constants.go000066400000000000000000000004351317166637100222460ustar00rootroot00000000000000// 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 ) dep-0.3.2/vendor/golang.org/x/sys/unix/creds_test.go000066400000000000000000000063711317166637100223760ustar00rootroot00000000000000// 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 linux package unix_test import ( "bytes" "net" "os" "syscall" "testing" "golang.org/x/sys/unix" ) // TestSCMCredentials tests the sending and receiving of credentials // (PID, UID, GID) in an ancillary message between two UNIX // sockets. The SO_PASSCRED socket option is enabled on the sending // socket for this to work. func TestSCMCredentials(t *testing.T) { socketTypeTests := []struct { socketType int dataLen int }{ { unix.SOCK_STREAM, 1, }, { unix.SOCK_DGRAM, 0, }, } for _, tt := range socketTypeTests { fds, err := unix.Socketpair(unix.AF_LOCAL, tt.socketType, 0) if err != nil { t.Fatalf("Socketpair: %v", err) } defer unix.Close(fds[0]) defer unix.Close(fds[1]) err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1) if err != nil { t.Fatalf("SetsockoptInt: %v", err) } srvFile := os.NewFile(uintptr(fds[0]), "server") defer srvFile.Close() srv, err := net.FileConn(srvFile) if err != nil { t.Errorf("FileConn: %v", err) return } defer srv.Close() cliFile := os.NewFile(uintptr(fds[1]), "client") defer cliFile.Close() cli, err := net.FileConn(cliFile) if err != nil { t.Errorf("FileConn: %v", err) return } defer cli.Close() var ucred unix.Ucred if os.Getuid() != 0 { ucred.Pid = int32(os.Getpid()) ucred.Uid = 0 ucred.Gid = 0 oob := unix.UnixCredentials(&ucred) _, _, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) if op, ok := err.(*net.OpError); ok { err = op.Err } if sys, ok := err.(*os.SyscallError); ok { err = sys.Err } if err != syscall.EPERM { t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err) } } ucred.Pid = int32(os.Getpid()) ucred.Uid = uint32(os.Getuid()) ucred.Gid = uint32(os.Getgid()) oob := unix.UnixCredentials(&ucred) // On SOCK_STREAM, this is internally going to send a dummy byte n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) if err != nil { t.Fatalf("WriteMsgUnix: %v", err) } if n != 0 { t.Fatalf("WriteMsgUnix n = %d, want 0", n) } if oobn != len(oob) { t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob)) } oob2 := make([]byte, 10*len(oob)) n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2) if err != nil { t.Fatalf("ReadMsgUnix: %v", err) } if flags != 0 { t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags) } if n != tt.dataLen { t.Fatalf("ReadMsgUnix n = %d, want %d", n, tt.dataLen) } if oobn2 != oobn { // without SO_PASSCRED set on the socket, ReadMsgUnix will // return zero oob bytes t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn) } oob2 = oob2[:oobn2] if !bytes.Equal(oob, oob2) { t.Fatal("ReadMsgUnix oob bytes don't match") } scm, err := unix.ParseSocketControlMessage(oob2) if err != nil { t.Fatalf("ParseSocketControlMessage: %v", err) } newUcred, err := unix.ParseUnixCredentials(&scm[0]) if err != nil { t.Fatalf("ParseUnixCredentials: %v", err) } if *newUcred != ucred { t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred) } } } dep-0.3.2/vendor/golang.org/x/sys/unix/dev_linux.go000066400000000000000000000030531317166637100222260ustar00rootroot00000000000000// Copyright 2017 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. // Functions to access/create device major and minor numbers matching the // encoding used by the Linux kernel and glibc. // // The information below is extracted and adapted from bits/sysmacros.h in the // glibc sources: // // dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's // default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major // number and m is a hex digit of the minor number. This is backward compatible // with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also // backward compatible with the Linux kernel, which for some architectures uses // 32-bit dev_t, encoded as mmmM MMmm. package unix // Major returns the major component of a Linux device number. func Major(dev uint64) uint32 { major := uint32((dev & 0x00000000000fff00) >> 8) major |= uint32((dev & 0xfffff00000000000) >> 32) return major } // Minor returns the minor component of a Linux device number. func Minor(dev uint64) uint32 { minor := uint32((dev & 0x00000000000000ff) >> 0) minor |= uint32((dev & 0x00000ffffff00000) >> 12) return minor } // Mkdev returns a Linux device number generated from the given major and minor // components. func Mkdev(major, minor uint32) uint64 { dev := uint64((major & 0x00000fff) << 8) dev |= uint64((major & 0xfffff000) << 32) dev |= uint64((minor & 0x000000ff) << 0) dev |= uint64((minor & 0xffffff00) << 12) return dev } dep-0.3.2/vendor/golang.org/x/sys/unix/dev_linux_test.go000066400000000000000000000025451317166637100232720ustar00rootroot00000000000000// Copyright 2017 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_test import ( "fmt" "testing" "golang.org/x/sys/unix" ) func TestDevices(t *testing.T) { testCases := []struct { path string major uint32 minor uint32 }{ // well known major/minor numbers according to // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/devices.txt {"/dev/null", 1, 3}, {"/dev/zero", 1, 5}, {"/dev/random", 1, 8}, {"/dev/full", 1, 7}, {"/dev/urandom", 1, 9}, {"/dev/tty", 5, 0}, } for _, tc := range testCases { t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { var stat unix.Stat_t err := unix.Stat(tc.path, &stat) if err != nil { t.Errorf("failed to stat device: %v", err) return } dev := uint64(stat.Rdev) if unix.Major(dev) != tc.major { t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) } if unix.Minor(dev) != tc.minor { t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) } if unix.Mkdev(tc.major, tc.minor) != dev { t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) } }) } } dep-0.3.2/vendor/golang.org/x/sys/unix/dirent.go000066400000000000000000000057611317166637100215260ustar00rootroot00000000000000// 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 nacl netbsd openbsd solaris package unix import "unsafe" // readInt returns the size-bytes unsigned integer in native byte order at offset off. func readInt(b []byte, off, size uintptr) (u uint64, ok bool) { if len(b) < int(off+size) { return 0, false } if isBigEndian { return readIntBE(b[off:], size), true } return readIntLE(b[off:], size), true } func readIntBE(b []byte, size uintptr) uint64 { switch size { case 1: return uint64(b[0]) case 2: _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 return uint64(b[1]) | uint64(b[0])<<8 case 4: _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24 case 8: _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 default: panic("syscall: readInt with unsupported size") } } func readIntLE(b []byte, size uintptr) uint64 { switch size { case 1: return uint64(b[0]) case 2: _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 return uint64(b[0]) | uint64(b[1])<<8 case 4: _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 case 8: _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 default: panic("syscall: readInt with unsupported size") } } // ParseDirent parses up to max directory entries in buf, // appending the names to names. It returns the number of // 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) count = 0 for max != 0 && len(buf) > 0 { reclen, ok := direntReclen(buf) if !ok || reclen > uint64(len(buf)) { return origlen, count, names } rec := buf[:reclen] buf = buf[reclen:] ino, ok := direntIno(rec) if !ok { break } if ino == 0 { // File absent in directory. continue } const namoff = uint64(unsafe.Offsetof(Dirent{}.Name)) namlen, ok := direntNamlen(rec) if !ok || namoff+namlen > uint64(len(rec)) { break } name := rec[namoff : namoff+namlen] for i, c := range name { if c == 0 { name = name[:i] break } } // Check for useless names before allocating a string. if string(name) == "." || string(name) == ".." { continue } max-- count++ names = append(names, string(name)) } return origlen - len(buf), count, names } dep-0.3.2/vendor/golang.org/x/sys/unix/endian_big.go000066400000000000000000000003541317166637100223110ustar00rootroot00000000000000// 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 ppc64 s390x mips mips64 package unix const isBigEndian = true dep-0.3.2/vendor/golang.org/x/sys/unix/endian_little.go000066400000000000000000000004121317166637100230400ustar00rootroot00000000000000// 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 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le package unix const isBigEndian = false dep-0.3.2/vendor/golang.org/x/sys/unix/env_unix.go000066400000000000000000000010421317166637100220600ustar00rootroot00000000000000// 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() } dep-0.3.2/vendor/golang.org/x/sys/unix/env_unset.go000066400000000000000000000004621317166637100222400ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/errors_freebsd_386.go000066400000000000000000000222771317166637100236500ustar00rootroot00000000000000// Copyright 2017 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. // Constants that were deprecated or moved to enums in the FreeBSD headers. Keep // them here for backwards compatibility. package unix const ( IFF_SMART = 0x20 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_BSC = 0x53 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_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_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_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_PPPMULTILINKBUNDLE = 0x6c IFT_PROPBWAP2MP = 0xb8 IFT_PROPCNLS = 0x59 IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 IFT_PROPMUX = 0x36 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 IPPROTO_MAXID = 0x34 IPV6_FAITH = 0x1d IP_FAITH = 0x16 MAP_NORESERVE = 0x40 MAP_RENAME = 0x20 NET_RT_MAXID = 0x6 RTF_PRCLONING = 0x10000 RTM_OLDADD = 0x9 RTM_OLDDEL = 0xa SIOCADDRT = 0x8030720a SIOCALIFADDR = 0x8118691b SIOCDELRT = 0x8030720b SIOCDLIFADDR = 0x8118691d SIOCGLIFADDR = 0xc118691c SIOCGLIFPHYADDR = 0xc118694b SIOCSLIFPHYADDR = 0x8118694a ) dep-0.3.2/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go000066400000000000000000000222771317166637100242430ustar00rootroot00000000000000// Copyright 2017 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. // Constants that were deprecated or moved to enums in the FreeBSD headers. Keep // them here for backwards compatibility. package unix const ( IFF_SMART = 0x20 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_BSC = 0x53 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_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_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_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_PPPMULTILINKBUNDLE = 0x6c IFT_PROPBWAP2MP = 0xb8 IFT_PROPCNLS = 0x59 IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 IFT_PROPMUX = 0x36 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 IPPROTO_MAXID = 0x34 IPV6_FAITH = 0x1d IP_FAITH = 0x16 MAP_NORESERVE = 0x40 MAP_RENAME = 0x20 NET_RT_MAXID = 0x6 RTF_PRCLONING = 0x10000 RTM_OLDADD = 0x9 RTM_OLDDEL = 0xa SIOCADDRT = 0x8040720a SIOCALIFADDR = 0x8118691b SIOCDELRT = 0x8040720b SIOCDLIFADDR = 0x8118691d SIOCGLIFADDR = 0xc118691c SIOCGLIFPHYADDR = 0xc118694b SIOCSLIFPHYADDR = 0x8118694a ) dep-0.3.2/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go000066400000000000000000000215151317166637100241010ustar00rootroot00000000000000// Copyright 2017 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 const ( 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_BSC = 0x53 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_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_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_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_PPPMULTILINKBUNDLE = 0x6c IFT_PROPBWAP2MP = 0xb8 IFT_PROPCNLS = 0x59 IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 IFT_PROPMUX = 0x36 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 // missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go IFF_SMART = 0x20 IFT_FAITH = 0xf2 IFT_IPXIP = 0xf9 IPPROTO_MAXID = 0x34 IPV6_FAITH = 0x1d IP_FAITH = 0x16 MAP_NORESERVE = 0x40 MAP_RENAME = 0x20 NET_RT_MAXID = 0x6 RTF_PRCLONING = 0x10000 RTM_OLDADD = 0x9 RTM_OLDDEL = 0xa SIOCADDRT = 0x8030720a SIOCALIFADDR = 0x8118691b SIOCDELRT = 0x8030720b SIOCDLIFADDR = 0x8118691d SIOCGLIFADDR = 0xc118691c SIOCGLIFPHYADDR = 0xc118694b SIOCSLIFPHYADDR = 0x8118694a ) dep-0.3.2/vendor/golang.org/x/sys/unix/export_test.go000066400000000000000000000004001317166637100226020ustar00rootroot00000000000000// 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 var Itoa = itoa dep-0.3.2/vendor/golang.org/x/sys/unix/file_unix.go000066400000000000000000000011461317166637100222140ustar00rootroot00000000000000// Copyright 2017 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 ( "os" "syscall" ) // FIXME: unexported function from os // syscallMode returns the syscall-specific mode bits from Go's portable mode bits. func syscallMode(i os.FileMode) (o uint32) { o |= uint32(i.Perm()) if i&os.ModeSetuid != 0 { o |= syscall.S_ISUID } if i&os.ModeSetgid != 0 { o |= syscall.S_ISGID } if i&os.ModeSticky != 0 { o |= syscall.S_ISVTX } // No mapping for Go's ModeTemporary (plan9 only). return } dep-0.3.2/vendor/golang.org/x/sys/unix/flock.go000066400000000000000000000012671317166637100213340ustar00rootroot00000000000000// 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/flock_linux_32bit.go000066400000000000000000000006041317166637100235500ustar00rootroot00000000000000// +build linux,386 linux,arm linux,mips linux,mipsle // 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/gccgo.go000066400000000000000000000030051317166637100213100ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/gccgo_c.c000066400000000000000000000017661317166637100214430ustar00rootroot00000000000000// 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))) { } dep-0.3.2/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go000066400000000000000000000006561317166637100235330ustar00rootroot00000000000000// 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go000066400000000000000000000006361317166637100241000ustar00rootroot00000000000000// 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 gccgo,linux,sparc64 package unix import "syscall" //extern sysconf func realSysconf(name int) int64 func sysconf(name int) (n int64, err syscall.Errno) { r := realSysconf(name) if r < 0 { return 0, syscall.GetErrno() } return r, 0 } dep-0.3.2/vendor/golang.org/x/sys/unix/mkall.sh000077500000000000000000000146441317166637100213510ustar00rootroot00000000000000#!/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. # This script runs or (given -n) prints suggested commands to generate files for # the Architecture/OS specified by the GOARCH and GOOS environment variables. # See README.md for more information about how the build system works. GOOSARCH="${GOOS}_${GOARCH}" # defaults mksyscall="./mksyscall.pl" mkerrors="./mkerrors.sh" zerrors="zerrors_$GOOSARCH.go" mksysctl="" zsysctl="zsysctl_$GOOSARCH.go" mksysnum= mktypes= run="sh" cmd="" case "$1" in -syscalls) for i in zsyscall*go do # Run the command line that appears in the first line # of the generated file to regenerate it. sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i rm _$i done exit 0 ;; -n) run="cat" cmd="echo" shift esac case "$#" in 0) ;; *) echo 'usage: mkall.sh [-n]' 1>&2 exit 2 esac if [[ "$GOOS" = "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then # Use then new build system # Files generated through docker (use $cmd so you can Ctl-C the build or run) $cmd docker build --tag generate:$GOOS $GOOS $cmd docker run --interactive --tty --volume $(dirname "$(readlink -f "$0")"):/build generate:$GOOS exit fi 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 $(xcrun --show-sdk-path --sdk iphoneos)/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 platforms. mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" ;; linux_sparc64) GOOSARCH_in=syscall_linux_sparc64.go unistd_h=/usr/include/sparc64-linux-gnu/asm/unistd.h mkerrors="$mkerrors -m64" mksysnum="./mksysnum_linux.pl $unistd_h" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; 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" ;; netbsd_arm) mkerrors="$mkerrors" mksyscall="./mksyscall.pl -l32 -netbsd -arm" mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" # Let the type of C char be signed for making the bare syscall # API consistent across platforms. mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" ;; 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" ;; openbsd_arm) mkerrors="$mkerrors" mksyscall="./mksyscall.pl -l32 -openbsd -arm" 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" # Let the type of C char be signed for making the bare syscall # API consistent across platforms. mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" ;; 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 -tags $GOOS,$GOARCH $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 "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi ) | $run dep-0.3.2/vendor/golang.org/x/sys/unix/mkerrors.sh000077500000000000000000000327031317166637100221110ustar00rootroot00000000000000#!/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 # Check that we are using the new build system if we should if [[ "$GOOS" -eq "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then if [[ "$GOLANG_SYS_BUILD" -ne "docker" ]]; then echo 1>&2 "In the new build system, mkerrors should not be called directly." echo 1>&2 "See README.md" exit 1 fi 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 #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 #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 // is broken on powerpc64, as it fails to include definitions of // these structures. We just include them copied from . #if defined(__powerpc__) struct sgttyb { char sg_ispeed; char sg_ospeed; char sg_erase; char sg_kill; short sg_flags; }; struct tchars { char t_intrc; char t_quitc; char t_startc; char t_stopc; char t_eofc; char t_brkc; }; struct ltchars { char t_suspc; char t_dsuspc; char t_rprntc; char t_flushc; char t_werasc; char t_lnextc; }; #endif #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 #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 #ifndef SOL_NETLINK #define SOL_NETLINK 270 #endif #ifdef SOL_BLUETOOTH // SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h // but it is already in bluetooth_linux.go #undef SOL_BLUETOOTH #endif // Certain constants are missing from the fs/crypto UAPI #define FS_KEY_DESC_PREFIX "fscrypt:" #define FS_KEY_DESC_PREFIX_SIZE 8 #define FS_MAX_KEY_SIZE 64 ' 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 ~ /^FALLOC_/ || $2 == "ICMPV6_FILTER" || $2 == "SOMAXCONN" || $2 == "NAME_MAX" || $2 == "IFNAMSIZ" || $2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ || $2 ~ /^SYSCTL_VERS/ || $2 ~ /^(MS|MNT|UMOUNT)_/ || $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || $2 ~ /^(O|F|E?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|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || $2 ~ /^CLONE_[A-Z_]+/ || $2 !~ /^(BPF_TIMEVAL)$/ && $2 ~ /^(BPF|DLT)_/ || $2 ~ /^CLOCK_/ || $2 ~ /^CAN_/ || $2 ~ /^CAP_/ || $2 ~ /^ALG_/ || $2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE|IOC_(GET|SET)_ENCRYPTION)/ || $2 ~ /^GRND_/ || $2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ || $2 ~ /^KEYCTL_/ || $2 ~ /^PERF_EVENT_IOC_/ || $2 ~ /^SECCOMP_MODE_/ || $2 ~ /^SPLICE_/ || $2 ~ /^(VM|VMADDR)_/ || $2 ~ /^(TASKSTATS|TS)_/ || $2 ~ /^GENL_/ || $2 ~ /^XATTR_(CREATE|REPLACE)/ || $2 !~ "WMESGLEN" && $2 ~ /^W[A-Z0-9]+$/ || $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {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 '// Code generated by the command above; see README.md. 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, 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 dep-0.3.2/vendor/golang.org/x/sys/unix/mkpost.go000066400000000000000000000051071317166637100215500ustar00rootroot00000000000000// 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; see README.md. package main import ( "bytes" "fmt" "go/format" "io/ioutil" "log" "os" "regexp" ) func main() { // Get the OS and architecture (using GOARCH_TARGET if it exists) goos := os.Getenv("GOOS") goarch := os.Getenv("GOARCH_TARGET") if goarch == "" { goarch = os.Getenv("GOARCH") } // Check that we are using the new build system if we should be. if goos == "linux" && goarch != "sparc64" { if os.Getenv("GOLANG_SYS_BUILD") != "docker" { os.Stderr.WriteString("In the new build system, mkpost should not be called directly.\n") os.Stderr.WriteString("See README.md\n") os.Exit(1) } } b, err := ioutil.ReadAll(os.Stdin) if err != nil { log.Fatal(err) } // If we have empty Ptrace structs, we should delete them. Only s390x emits // nonempty Ptrace structs. ptraceRexexp := regexp.MustCompile(`type Ptrace((Psw|Fpregs|Per) struct {\s*})`) b = ptraceRexexp.ReplaceAll(b, nil) // Replace the control_regs union with a blank identifier for now. controlRegsRegex := regexp.MustCompile(`(Control_regs)\s+\[0\]uint64`) b = controlRegsRegex.ReplaceAll(b, []byte("_ [0]uint64")) // Remove fields that are added by glibc // Note that this is unstable as the identifers are private. removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`) b = removeFieldsRegex.ReplaceAll(b, []byte("_")) // We refuse to export private fields on s390x if goarch == "s390x" && goos == "linux" { // Remove cgo padding fields removeFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`) b = removeFieldsRegex.ReplaceAll(b, []byte("_")) // Remove padding, hidden, or unused fields removeFieldsRegex = regexp.MustCompile(`X_\S+`) b = removeFieldsRegex.ReplaceAll(b, []byte("_")) } // Remove the first line of warning from cgo b = b[bytes.IndexByte(b, '\n')+1:] // Modify the command in the header to include: // mkpost, our own warning, and a build tag. replacement := fmt.Sprintf(`$1 | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build %s,%s`, goarch, goos) cgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`) b = cgoCommandRegex.ReplaceAll(b, []byte(replacement)) // gofmt b, err = format.Source(b) if err != nil { log.Fatal(err) } os.Stdout.Write(b) } dep-0.3.2/vendor/golang.org/x/sys/unix/mksyscall.pl000077500000000000000000000200561317166637100222460ustar00rootroot00000000000000#!/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 my $tags = ""; # build tags 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] eq "-tags") { shift; $tags = $ARGV[0]; shift; } if($ARGV[0] =~ /^-/) { print STDERR "usage: mksyscall.pl [-b32 | -l32] [-tags x,y] [file ...]\n"; exit 1; } # Check that we are using the new build system if we should if($ENV{'GOOS'} eq "linux" && $ENV{'GOARCH'} ne "sparc64") { if($ENV{'GOLANG_SYS_BUILD'} ne "docker") { print STDERR "In the new build system, mksyscall should not be called directly.\n"; print STDERR "See README.md\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 $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))"; $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))"; $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"; } $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 $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))"; $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))"; $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"; } $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'; } print " $name = $num; // $proto\n"; } } 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 '13' || $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 } dep-0.3.2/vendor/golang.org/x/sys/unix/str.go000066400000000000000000000011431317166637100210370ustar00rootroot00000000000000// 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:]) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall.go000066400000000000000000000046511317166637100217100ustar00rootroot00000000000000// 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 "golang.org/x/sys/unix" // 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_bsd.go000066400000000000000000000400341317166637100225330ustar00rootroot00000000000000// 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) { buf, err := SysctlRaw(name, args...) if err != nil { return "", err } n := len(buf) // 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 { 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 } // 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]))) } 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 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) // 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) } //sys Madvise(b []byte, behav int) (err error) //sys Mlock(b []byte) (err error) //sys Mlockall(flags int) (err error) //sys Mprotect(b []byte, prot int) (err error) //sys Msync(b []byte, flags int) (err error) //sys Munlock(b []byte) (err error) //sys Munlockall() (err error) dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_bsd_test.go000066400000000000000000000024271317166637100235760ustar00rootroot00000000000000// 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 openbsd package unix_test import ( "os/exec" "runtime" "testing" "golang.org/x/sys/unix" ) const MNT_WAIT = 1 const MNT_NOWAIT = 2 func TestGetfsstat(t *testing.T) { const flags = MNT_NOWAIT // see golang.org/issue/16937 n, err := unix.Getfsstat(nil, flags) if err != nil { t.Fatal(err) } data := make([]unix.Statfs_t, n) n2, err := unix.Getfsstat(data, flags) if err != nil { t.Fatal(err) } if n != n2 { t.Errorf("Getfsstat(nil) = %d, but subsequent Getfsstat(slice) = %d", n, n2) } for i, stat := range data { if stat == (unix.Statfs_t{}) { t.Errorf("index %v is an empty Statfs_t struct", i) } } if t.Failed() { for i, stat := range data[:n2] { t.Logf("data[%v] = %+v", i, stat) } mount, err := exec.Command("mount").CombinedOutput() if err != nil { t.Logf("mount: %v\n%s", err, mount) } else { t.Logf("mount: %s", mount) } } } func TestSysctlRaw(t *testing.T) { if runtime.GOOS == "openbsd" { t.Skip("kern.proc.pid does not exist on OpenBSD") } _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid()) if err != nil { t.Fatal(err) } } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_darwin.go000066400000000000000000000341021317166637100232460ustar00rootroot00000000000000// 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 } func direntIno(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) } func direntReclen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) } func direntNamlen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) } //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 } func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error { // Darwin doesn't support SYS_UTIMENSAT return ENOSYS } /* * 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) } //sys ioctl(fd int, req uint, arg uintptr) (err error) // ioctl itself should not be exposed directly, but additional get/set // functions for specific types are permissible. // IoctlSetInt performs an ioctl operation which sets an integer value // on fd, using the specified request number. func IoctlSetInt(fd int, req uint, value int) error { return ioctl(fd, req, uintptr(value)) } func IoctlSetWinsize(fd int, req uint, value *Winsize) error { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } func IoctlSetTermios(fd int, req uint, value *Termios) error { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } // IoctlGetInt performs an ioctl operation which gets an integer value // from fd, using the specified request number. func IoctlGetInt(fd int, req uint) (int, error) { var value int err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return value, err } func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { var value Winsize err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return &value, err } func IoctlGetTermios(fd int, req uint) (*Termios, error) { var value Termios 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 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 Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchdir(fd int) (err error) //sys Fchflags(fd int, flags 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 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 Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 Mkdirat(dirfd int, 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 Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, 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 Readlinkat(dirfd int, path string, buf []byte) (n int, err error) //sys Rename(from string, to string) (err error) //sys Renameat(fromfd int, from string, tofd int, 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 Symlinkat(oldpath string, newdirfd int, newpath 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 Unlinkat(dirfd int, path string, flags int) (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 // 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 // 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 // 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 dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_darwin_386.go000066400000000000000000000036161317166637100236540ustar00rootroot00000000000000// 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 dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go000066400000000000000000000035321317166637100242440ustar00rootroot00000000000000// 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" ) 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 dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go000066400000000000000000000033141317166637100241060ustar00rootroot00000000000000// 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 dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go000066400000000000000000000035421317166637100242630ustar00rootroot00000000000000// 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 dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_dragonfly.go000066400000000000000000000246451317166637100237620ustar00rootroot00000000000000// 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. // DragonFly BSD 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 } func direntIno(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) } func direntReclen(buf []byte) (uint64, bool) { namlen, ok := direntNamlen(buf) if !ok { return 0, false } return (16 + namlen + 1 + 7) &^ 7, true } func direntNamlen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) } //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 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 } /* * 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 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 //sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) /* * 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 // 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 // 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 dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go000066400000000000000000000025721317166637100247500ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_freebsd.go000066400000000000000000000450501317166637100234000ustar00rootroot00000000000000// 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 } func direntIno(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) } func direntReclen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) } func direntNamlen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) } //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 } //sys ioctl(fd int, req uint, arg uintptr) (err error) // ioctl itself should not be exposed directly, but additional get/set // functions for specific types are permissible. // IoctlSetInt performs an ioctl operation which sets an integer value // on fd, using the specified request number. func IoctlSetInt(fd int, req uint, value int) error { return ioctl(fd, req, uintptr(value)) } func IoctlSetWinsize(fd int, req uint, value *Winsize) error { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } func IoctlSetTermios(fd int, req uint, value *Termios) error { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } // IoctlGetInt performs an ioctl operation which gets an integer value // from fd, using the specified request number. func IoctlGetInt(fd int, req uint) (int, error) { var value int err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return value, err } func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { var value Winsize err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return &value, err } func IoctlGetTermios(fd int, req uint) (*Termios, error) { var value Termios 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 CapEnter() (err error) //sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET //sys capRightsLimit(fd int, rightsp *CapRights) (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 Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchdir(fd int) (err error) //sys Fchflags(fd int, flags 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 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 Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 Mkdirat(dirfd int, 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 Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(fdat int, 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 Readlinkat(dirfd int, path string, buf []byte) (n int, err error) //sys Rename(from string, to string) (err error) //sys Renameat(fromfd int, from string, tofd int, 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 Symlinkat(oldpath string, newdirfd int, newpath 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 Unlinkat(dirfd int, path string, flags int) (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) //sys utimensat(dirfd int, path string, times *[2]Timespec, flags 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 // 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 // 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 dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go000066400000000000000000000026401317166637100237760ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go000066400000000000000000000025701317166637100243730ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go000066400000000000000000000026131317166637100242350ustar00rootroot00000000000000// 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) dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go000066400000000000000000000156371317166637100244470ustar00rootroot00000000000000// 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 freebsd package unix_test import ( "flag" "fmt" "io/ioutil" "os" "os/exec" "path" "path/filepath" "runtime" "testing" "golang.org/x/sys/unix" ) func TestSysctlUint64(t *testing.T) { _, err := unix.SysctlUint64("vm.swap_total") if err != nil { t.Fatal(err) } } // FIXME: Infrastructure for launching tests in subprocesses stolen from openbsd_test.go - refactor? // testCmd generates a proper command that, when executed, runs the test // corresponding to the given key. type testProc struct { fn func() // should always exit instead of returning arg func(t *testing.T) string // generate argument for test cleanup func(arg string) error // for instance, delete coredumps from testing pledge success bool // whether zero-exit means success or failure } var ( testProcs = map[string]testProc{} procName = "" procArg = "" ) const ( optName = "sys-unix-internal-procname" optArg = "sys-unix-internal-arg" ) func init() { flag.StringVar(&procName, optName, "", "internal use only") flag.StringVar(&procArg, optArg, "", "internal use only") } func testCmd(procName string, procArg string) (*exec.Cmd, error) { exe, err := filepath.Abs(os.Args[0]) if err != nil { return nil, err } cmd := exec.Command(exe, "-"+optName+"="+procName, "-"+optArg+"="+procArg) cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr return cmd, nil } // ExitsCorrectly is a comprehensive, one-line-of-use wrapper for testing // a testProc with a key. func ExitsCorrectly(t *testing.T, procName string) { s := testProcs[procName] arg := "-" if s.arg != nil { arg = s.arg(t) } c, err := testCmd(procName, arg) defer func(arg string) { if err := s.cleanup(arg); err != nil { t.Fatalf("Failed to run cleanup for %s %s %#v", procName, err, err) } }(arg) if err != nil { t.Fatalf("Failed to construct command for %s", procName) } if (c.Run() == nil) != s.success { result := "succeed" if !s.success { result = "fail" } t.Fatalf("Process did not %s when it was supposed to", result) } } func TestMain(m *testing.M) { flag.Parse() if procName != "" { t := testProcs[procName] t.fn() os.Stderr.WriteString("test function did not exit\n") if t.success { os.Exit(1) } else { os.Exit(0) } } os.Exit(m.Run()) } // end of infrastructure const testfile = "gocapmodetest" const testfile2 = testfile + "2" func CapEnterTest() { _, err := os.OpenFile(path.Join(procArg, testfile), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) if err != nil { panic(fmt.Sprintf("OpenFile: %s", err)) } err = unix.CapEnter() if err != nil { panic(fmt.Sprintf("CapEnter: %s", err)) } _, err = os.OpenFile(path.Join(procArg, testfile2), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) if err == nil { panic("OpenFile works!") } if err.(*os.PathError).Err != unix.ECAPMODE { panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) } os.Exit(0) } func makeTempDir(t *testing.T) string { d, err := ioutil.TempDir("", "go_openat_test") if err != nil { t.Fatalf("TempDir failed: %s", err) } return d } func removeTempDir(arg string) error { err := os.RemoveAll(arg) if err != nil && err.(*os.PathError).Err == unix.ENOENT { return nil } return err } func init() { testProcs["cap_enter"] = testProc{ CapEnterTest, makeTempDir, removeTempDir, true, } } func TestCapEnter(t *testing.T) { if runtime.GOARCH != "amd64" { t.Skipf("skipping test on %s", runtime.GOARCH) } ExitsCorrectly(t, "cap_enter") } func OpenatTest() { f, err := os.Open(procArg) if err != nil { panic(err) } err = unix.CapEnter() if err != nil { panic(fmt.Sprintf("CapEnter: %s", err)) } fxx, err := unix.Openat(int(f.Fd()), "xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) if err != nil { panic(err) } unix.Close(fxx) // The right to open BASE/xx is not ambient _, err = os.OpenFile(procArg+"/xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) if err == nil { panic("OpenFile succeeded") } if err.(*os.PathError).Err != unix.ECAPMODE { panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) } // Can't make a new directory either err = os.Mkdir(procArg+"2", 0777) if err == nil { panic("MKdir succeeded") } if err.(*os.PathError).Err != unix.ECAPMODE { panic(fmt.Sprintf("Mkdir failed wrong: %s %#v", err, err)) } // Remove all caps except read and lookup. r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_LOOKUP}) if err != nil { panic(fmt.Sprintf("CapRightsInit failed: %s %#v", err, err)) } err = unix.CapRightsLimit(f.Fd(), r) if err != nil { panic(fmt.Sprintf("CapRightsLimit failed: %s %#v", err, err)) } // Check we can get the rights back again r, err = unix.CapRightsGet(f.Fd()) if err != nil { panic(fmt.Sprintf("CapRightsGet failed: %s %#v", err, err)) } b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP}) if err != nil { panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) } if !b { panic(fmt.Sprintf("Unexpected rights")) } b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP, unix.CAP_WRITE}) if err != nil { panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) } if b { panic(fmt.Sprintf("Unexpected rights (2)")) } // Can no longer create a file _, err = unix.Openat(int(f.Fd()), "xx2", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) if err == nil { panic("Openat succeeded") } if err != unix.ENOTCAPABLE { panic(fmt.Sprintf("OpenFileAt failed wrong: %s %#v", err, err)) } // But can read an existing one _, err = unix.Openat(int(f.Fd()), "xx", os.O_RDONLY, 0666) if err != nil { panic(fmt.Sprintf("Openat failed: %s %#v", err, err)) } os.Exit(0) } func init() { testProcs["openat"] = testProc{ OpenatTest, makeTempDir, removeTempDir, true, } } func TestOpenat(t *testing.T) { if runtime.GOARCH != "amd64" { t.Skipf("skipping test on %s", runtime.GOARCH) } ExitsCorrectly(t, "openat") } func TestCapRightsSetAndClear(t *testing.T) { r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT}) if err != nil { t.Fatalf("CapRightsInit failed: %s", err) } err = unix.CapRightsSet(r, []uint64{unix.CAP_EVENT, unix.CAP_LISTEN}) if err != nil { t.Fatalf("CapRightsSet failed: %s", err) } b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT, unix.CAP_EVENT, unix.CAP_LISTEN}) if err != nil { t.Fatalf("CapRightsIsSet failed: %s", err) } if !b { t.Fatalf("Wrong rights set") } err = unix.CapRightsClear(r, []uint64{unix.CAP_READ, unix.CAP_PDWAIT}) if err != nil { t.Fatalf("CapRightsClear failed: %s", err) } b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_WRITE, unix.CAP_EVENT, unix.CAP_LISTEN}) if err != nil { t.Fatalf("CapRightsIsSet failed: %s", err) } if !b { t.Fatalf("Wrong rights set") } } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux.go000066400000000000000000001223441317166637100231270ustar00rootroot00000000000000// 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 fchmodat(dirfd int, path string, mode uint32) (err error) func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior // and check the flags. Otherwise the mode would be applied to the symlink // destination which is not what the user expects. if flags&^AT_SYMLINK_NOFOLLOW != 0 { return EINVAL } else if flags&AT_SYMLINK_NOFOLLOW != 0 { return EOPNOTSUPP } return fchmodat(dirfd, path, mode) } //sys ioctl(fd int, req uint, arg uintptr) (err error) // ioctl itself should not be exposed directly, but additional get/set // functions for specific types are permissible. // IoctlSetInt performs an ioctl operation which sets an integer value // on fd, using the specified request number. func IoctlSetInt(fd int, req uint, value int) error { return ioctl(fd, req, uintptr(value)) } func IoctlSetWinsize(fd int, req uint, value *Winsize) error { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } func IoctlSetTermios(fd int, req uint, value *Termios) error { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } // IoctlGetInt performs an ioctl operation which gets an integer value // from fd, using the specified request number. func IoctlGetInt(fd int, req uint) (int, error) { var value int err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return value, err } func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { var value Winsize err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return &value, err } func IoctlGetTermios(fd int, req uint) (*Termios, error) { var value Termios err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return &value, err } //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) //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] = NsecToTimeval(TimespecToNsec(ts[i])) } 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) error { return Mknod(path, mode|S_IFIFO, 0) } func Mkfifoat(dirfd int, path string, mode uint32) error { return Mknodat(dirfd, 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 } // SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets. // The RxID and TxID fields are used for transport protocol addressing in // (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with // zero values for CAN_RAW and CAN_BCM sockets as they have no meaning. // // The SockaddrCAN struct must be bound to the socket file descriptor // using Bind before the CAN socket can be used. // // // Read one raw CAN frame // fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) // addr := &SockaddrCAN{Ifindex: index} // Bind(fd, addr) // frame := make([]byte, 16) // Read(fd, frame) // // The full SocketCAN documentation can be found in the linux kernel // archives at: https://www.kernel.org/doc/Documentation/networking/can.txt type SockaddrCAN struct { Ifindex int RxID uint32 TxID uint32 raw RawSockaddrCAN } func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { return nil, 0, EINVAL } sa.raw.Family = AF_CAN sa.raw.Ifindex = int32(sa.Ifindex) rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) for i := 0; i < 4; i++ { sa.raw.Addr[i] = rx[i] } tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) for i := 0; i < 4; i++ { sa.raw.Addr[i+4] = tx[i] } return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil } // SockaddrALG implements the Sockaddr interface for AF_ALG type sockets. // SockaddrALG enables userspace access to the Linux kernel's cryptography // subsystem. The Type and Name fields specify which type of hash or cipher // should be used with a given socket. // // To create a file descriptor that provides access to a hash or cipher, both // Bind and Accept must be used. Once the setup process is complete, input // data can be written to the socket, processed by the kernel, and then read // back as hash output or ciphertext. // // Here is an example of using an AF_ALG socket with SHA1 hashing. // The initial socket setup process is as follows: // // // Open a socket to perform SHA1 hashing. // fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) // addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} // unix.Bind(fd, addr) // // Note: unix.Accept does not work at this time; must invoke accept() // // manually using unix.Syscall. // hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) // // Once a file descriptor has been returned from Accept, it may be used to // perform SHA1 hashing. The descriptor is not safe for concurrent use, but // may be re-used repeatedly with subsequent Write and Read operations. // // When hashing a small byte slice or string, a single Write and Read may // be used: // // // Assume hashfd is already configured using the setup process. // hash := os.NewFile(hashfd, "sha1") // // Hash an input string and read the results. Each Write discards // // previous hash state. Read always reads the current state. // b := make([]byte, 20) // for i := 0; i < 2; i++ { // io.WriteString(hash, "Hello, world.") // hash.Read(b) // fmt.Println(hex.EncodeToString(b)) // } // // Output: // // 2ae01472317d1935a84797ec1983ae243fc6aa28 // // 2ae01472317d1935a84797ec1983ae243fc6aa28 // // For hashing larger byte slices, or byte streams such as those read from // a file or socket, use Sendto with MSG_MORE to instruct the kernel to update // the hash digest instead of creating a new one for a given chunk and finalizing it. // // // Assume hashfd and addr are already configured using the setup process. // hash := os.NewFile(hashfd, "sha1") // // Hash the contents of a file. // f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") // b := make([]byte, 4096) // for { // n, err := f.Read(b) // if err == io.EOF { // break // } // unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) // } // hash.Read(b) // fmt.Println(hex.EncodeToString(b)) // // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 // // For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. type SockaddrALG struct { Type string Name string Feature uint32 Mask uint32 raw RawSockaddrALG } func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { // Leave room for NUL byte terminator. if len(sa.Type) > 13 { return nil, 0, EINVAL } if len(sa.Name) > 63 { return nil, 0, EINVAL } sa.raw.Family = AF_ALG sa.raw.Feat = sa.Feature sa.raw.Mask = sa.Mask typ, err := ByteSliceFromString(sa.Type) if err != nil { return nil, 0, err } name, err := ByteSliceFromString(sa.Name) if err != nil { return nil, 0, err } copy(sa.raw.Type[:], typ) copy(sa.raw.Name[:], name) return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil } // SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. // SockaddrVM provides access to Linux VM sockets: a mechanism that enables // bidirectional communication between a hypervisor and its guest virtual // machines. type SockaddrVM struct { // CID and Port specify a context ID and port address for a VM socket. // Guests have a unique CID, and hosts may have a well-known CID of: // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. // - VMADDR_CID_HOST: refers to other processes on the host. CID uint32 Port uint32 raw RawSockaddrVM } func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_VSOCK sa.raw.Port = sa.Port sa.raw.Cid = sa.CID return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, 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 case AF_VSOCK: pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) sa := &SockaddrVM{ CID: pp.Cid, Port: pp.Port, } 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 GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { var value TCPInfo vallen := _Socklen(SizeofTCPInfo) 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)) } // Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) // KeyctlInt calls keyctl commands in which each argument is an int. // These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK, // KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT, // KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT, // KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT. //sys KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL // KeyctlBuffer calls keyctl commands in which the third and fourth // arguments are a buffer and its length, respectively. // These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE. //sys KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL // KeyctlString calls keyctl commands which return a string. // These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY. func KeyctlString(cmd int, id int) (string, error) { // We must loop as the string data may change in between the syscalls. // We could allocate a large buffer here to reduce the chance that the // syscall needs to be called twice; however, this is unnecessary as // the performance loss is negligible. var buffer []byte for { // Try to fill the buffer with data length, err := KeyctlBuffer(cmd, id, buffer, 0) if err != nil { return "", err } // Check if the data was written if length <= len(buffer) { // Exclude the null terminator return string(buffer[:length-1]), nil } // Make a bigger buffer if needed buffer = make([]byte, length) } } // Keyctl commands with special signatures. // KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command. // See the full documentation at: // http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) { createInt := 0 if create { createInt = 1 } return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0) } // KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the // key handle permission mask as described in the "keyctl setperm" section of // http://man7.org/linux/man-pages/man1/keyctl.1.html. // See the full documentation at: // http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html func KeyctlSetperm(id int, perm uint32) error { _, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0) return err } //sys keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL // KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command. // See the full documentation at: // http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html func KeyctlJoinSessionKeyring(name string) (ringid int, err error) { return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name) } //sys keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL // KeyctlSearch implements the KEYCTL_SEARCH command. // See the full documentation at: // http://man7.org/linux/man-pages/man3/keyctl_search.3.html func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) { return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid) } //sys keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL // KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This // command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice // of Iovec (each of which represents a buffer) instead of a single buffer. // See the full documentation at: // http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error { return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid) } //sys keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL // KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command // computes a Diffie-Hellman shared secret based on the provide params. The // secret is written to the provided buffer and the returned size is the number // of bytes written (returning an error if there is insufficient space in the // buffer). If a nil buffer is passed in, this function returns the minimum // buffer length needed to store the appropriate data. Note that this differs // from KEYCTL_READ's behavior which always returns the requested payload size. // See the full documentation at: // http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) { return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer) } 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 { var sockType int sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) if err != nil { return } // receive at least one normal byte if sockType != SOCK_DGRAM && 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 { var sockType int sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) if err != nil { return 0, err } // send at least one normal byte if sockType != SOCK_DGRAM && 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 PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { return ptracePeek(PTRACE_PEEKUSR, 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 ReadDirent(fd int, buf []byte) (n int, err error) { return Getdents(fd, buf) } func direntIno(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) } func direntReclen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) } func direntNamlen(buf []byte) (uint64, bool) { reclen, ok := direntReclen(buf) if !ok { return 0, false } return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true } //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 AddKey(keyType string, description string, payload []byte, ringid int) (id int, 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n 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 Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 //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 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) //sys Getrandom(buf []byte, flags int) (n int, err error) //sysnb Getrusage(who int, rusage *Rusage) (err error) //sysnb Getsid(pid int) (sid int, 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 Lgetxattr(path string, attr string, dest []byte) (sz int, err error) //sys Listxattr(path string, dest []byte) (sz int, err error) //sys Llistxattr(path string, dest []byte) (sz int, err error) //sys Lremovexattr(path string, attr string) (err error) //sys Lsetxattr(path string, attr string, data []byte, flags 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, newlimit *Rlimit, old *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 RequestKey(keyType string, description string, callback string, destRingid int) (id int, 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() //sys Syncfs(fd int) (err error) //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 Mlockall(flags int) (err error) //sys Msync(b []byte, flags int) (err error) //sys Munlock(b []byte) (err error) //sys Munlockall() (err error) // Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, // using the specified flags. func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { n, _, errno := Syscall6( SYS_VMSPLICE, uintptr(fd), uintptr(unsafe.Pointer(&iovs[0])), uintptr(len(iovs)), uintptr(flags), 0, 0, ) if errno != 0 { return 0, syscall.Errno(errno) } return int(n), nil } /* * Unimplemented */ // AfsSyscall // Alarm // ArchPrctl // Brk // Capget // Capset // ClockGetres // ClockNanosleep // ClockSettime // Clone // CreateModule // DeleteModule // EpollCtlOld // EpollPwait // EpollWaitOld // Execve // Fgetxattr // Flistxattr // Fork // Fremovexattr // Fsetxattr // Futex // GetKernelSyms // GetMempolicy // GetRobustList // GetThreadArea // Getitimer // Getpmsg // IoCancel // IoDestroy // IoGetevents // IoSetup // IoSubmit // IoprioGet // IoprioSet // KexecLoad // LookupDcookie // Mbind // MigratePages // Mincore // ModifyLdt // Mount // MovePages // MqGetsetattr // MqNotify // MqOpen // MqTimedreceive // MqTimedsend // MqUnlink // Mremap // Msgctl // Msgget // Msgrcv // Msgsnd // Newfstatat // Nfsservctl // Personality // Pselect6 // Ptrace // Putpmsg // QueryModule // Quotactl // Readahead // Readv // RemapFilePages // 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 // Vserver // Waitid // _Sysctl dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_386.go000066400000000000000000000254721317166637100235330ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go000066400000000000000000000122361317166637100241200ustar00rootroot00000000000000// 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 //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) 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go000066400000000000000000000004511317166637100245650ustar00rootroot00000000000000// 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 amd64,linux // +build !gccgo package unix import "syscall" //go:noescape func gettimeofday(tv *Timeval) (err syscall.Errno) dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_arm.go000066400000000000000000000171541317166637100237700ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go000066400000000000000000000135241317166637100241370ustar00rootroot00000000000000// 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 //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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go000066400000000000000000000141351317166637100245170ustar00rootroot00000000000000// 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 //sys Dup2(oldfd int, newfd int) (err error) //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.Epc } func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go000066400000000000000000000156261317166637100243530ustar00rootroot00000000000000// 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 linux // +build mips mipsle package unix import ( "syscall" "unsafe" ) func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) //sys Dup2(oldfd int, newfd int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 //sysnb Getegid() (egid int) //sysnb Geteuid() (euid int) //sysnb Getgid() (gid int) //sysnb Getuid() (uid int) //sys Lchown(path string, uid int, gid int) (err error) //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 Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 //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 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 SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 //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) //sysnb InotifyInit() (fd int, err error) //sys Ioperm(from int, num int, on int) (err error) //sys Iopl(level int) (err error) //sysnb Gettimeofday(tv *Timeval) (err error) //sysnb Time(t *Time_t) (tt Time_t, err error) //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Utime(path string, buf *Utimbuf) (err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Pause() (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 = errnoErr(e) } return } func Statfs(path string, buf *Statfs_t) (err error) { p, err := BytePtrFromString(path) if err != nil { return err } _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) if e != 0 { err = errnoErr(e) } return } func Seek(fd int, offset int64, whence int) (off int64, err error) { _, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0) if e != 0 { err = errnoErr(e) } return } 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 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 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 } //sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, 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) } const rlimInf32 = ^uint32(0) const rlimInf64 = ^uint64(0) type rlimit32 struct { Cur uint32 Max uint32 } //sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT 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 r.Epc } func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = 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) } func Getpagesize() int { return 4096 } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go000066400000000000000000000116341317166637100243320ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go000066400000000000000000000234071317166637100240750ustar00rootroot00000000000000// 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) 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go000066400000000000000000000126001317166637100244620ustar00rootroot00000000000000// 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 sparc64,linux package unix import ( "sync/atomic" "syscall" ) //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) //sysnb Getuid() (uid int) //sysnb InotifyInit() (fd 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) func sysconf(name int) (n int64, err syscall.Errno) // 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) } func Ioperm(from int, num int, on int) (err error) { return ENOSYS } func Iopl(level int) (err error) { return ENOSYS } //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 = int32(nsec % 1e9 / 1e3) return } func (r *PtraceRegs) PC() uint64 { return r.Tpc } func (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_linux_test.go000066400000000000000000000110571317166637100241640ustar00rootroot00000000000000// 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 linux package unix_test import ( "io/ioutil" "os" "testing" "time" "golang.org/x/sys/unix" ) func TestFchmodat(t *testing.T) { defer chtmpdir(t)() touch(t, "file1") os.Symlink("file1", "symlink1") err := unix.Fchmodat(unix.AT_FDCWD, "symlink1", 0444, 0) if err != nil { t.Fatalf("Fchmodat: unexpected error: %v", err) } fi, err := os.Stat("file1") if err != nil { t.Fatal(err) } if fi.Mode() != 0444 { t.Errorf("Fchmodat: failed to change mode: expected %v, got %v", 0444, fi.Mode()) } err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", 0444, unix.AT_SYMLINK_NOFOLLOW) if err != unix.EOPNOTSUPP { t.Fatalf("Fchmodat: unexpected error: %v, expected EOPNOTSUPP", err) } } func TestIoctlGetInt(t *testing.T) { f, err := os.Open("/dev/random") if err != nil { t.Fatalf("failed to open device: %v", err) } defer f.Close() v, err := unix.IoctlGetInt(int(f.Fd()), unix.RNDGETENTCNT) if err != nil { t.Fatalf("failed to perform ioctl: %v", err) } t.Logf("%d bits of entropy available", v) } func TestPoll(t *testing.T) { f, cleanup := mktmpfifo(t) defer cleanup() const timeout = 100 ok := make(chan bool, 1) go func() { select { case <-time.After(10 * timeout * time.Millisecond): t.Errorf("Poll: failed to timeout after %d milliseconds", 10*timeout) case <-ok: } }() fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} n, err := unix.Poll(fds, timeout) ok <- true if err != nil { t.Errorf("Poll: unexpected error: %v", err) return } if n != 0 { t.Errorf("Poll: wrong number of events: got %v, expected %v", n, 0) return } } func TestPpoll(t *testing.T) { f, cleanup := mktmpfifo(t) defer cleanup() const timeout = 100 * time.Millisecond ok := make(chan bool, 1) go func() { select { case <-time.After(10 * timeout): t.Errorf("Ppoll: failed to timeout after %d", 10*timeout) case <-ok: } }() fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} timeoutTs := unix.NsecToTimespec(int64(timeout)) n, err := unix.Ppoll(fds, &timeoutTs, nil) ok <- true if err != nil { t.Errorf("Ppoll: unexpected error: %v", err) return } if n != 0 { t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) return } } // mktmpfifo creates a temporary FIFO and provides a cleanup function. func mktmpfifo(t *testing.T) (*os.File, func()) { err := unix.Mkfifo("fifo", 0666) if err != nil { t.Fatalf("mktmpfifo: failed to create FIFO: %v", err) } f, err := os.OpenFile("fifo", os.O_RDWR, 0666) if err != nil { os.Remove("fifo") t.Fatalf("mktmpfifo: failed to open FIFO: %v", err) } return f, func() { f.Close() os.Remove("fifo") } } func TestTime(t *testing.T) { var ut unix.Time_t ut2, err := unix.Time(&ut) if err != nil { t.Fatalf("Time: %v", err) } if ut != ut2 { t.Errorf("Time: return value %v should be equal to argument %v", ut2, ut) } var now time.Time for i := 0; i < 10; i++ { ut, err = unix.Time(nil) if err != nil { t.Fatalf("Time: %v", err) } now = time.Now() if int64(ut) == now.Unix() { return } } t.Errorf("Time: return value %v should be nearly equal to time.Now().Unix() %v", ut, now.Unix()) } func TestUtime(t *testing.T) { defer chtmpdir(t)() touch(t, "file1") buf := &unix.Utimbuf{ Modtime: 12345, } err := unix.Utime("file1", buf) if err != nil { t.Fatalf("Utime: %v", err) } fi, err := os.Stat("file1") if err != nil { t.Fatal(err) } if fi.ModTime().Unix() != 12345 { t.Errorf("Utime: failed to change modtime: expected %v, got %v", 12345, fi.ModTime().Unix()) } } func TestGetrlimit(t *testing.T) { var rlim unix.Rlimit err := unix.Getrlimit(unix.RLIMIT_AS, &rlim) if err != nil { t.Fatalf("Getrlimit: %v", err) } } // utilities taken from os/os_test.go func touch(t *testing.T, name string) { f, err := os.Create(name) if err != nil { t.Fatal(err) } if err := f.Close(); err != nil { t.Fatal(err) } } // chtmpdir changes the working directory to a new temporary directory and // provides a cleanup function. Used when PWD is read-only. func chtmpdir(t *testing.T) func() { oldwd, err := os.Getwd() if err != nil { t.Fatalf("chtmpdir: %v", err) } d, err := ioutil.TempDir("", "test") if err != nil { t.Fatalf("chtmpdir: %v", err) } if err := os.Chdir(d); err != nil { t.Fatalf("chtmpdir: %v", err) } return func() { if err := os.Chdir(oldwd); err != nil { t.Fatalf("chtmpdir: %v", err) } os.RemoveAll(d) } } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_netbsd.go000066400000000000000000000257511317166637100232530ustar00rootroot00000000000000// 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 } func direntIno(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) } func direntReclen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) } func direntNamlen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) } //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 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 //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) /* * 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 dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go000066400000000000000000000016701317166637100236450ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go000066400000000000000000000016721317166637100242420ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go000066400000000000000000000016701317166637100241040ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_no_getwd.go000066400000000000000000000004551317166637100235740ustar00rootroot00000000000000// 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_openbsd.go000066400000000000000000000166651317166637100234320ustar00rootroot00000000000000// 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 } func direntIno(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) } func direntReclen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) } func direntNamlen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) } //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 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 //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) /* * 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 // vfork // writev dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go000066400000000000000000000016701317166637100240200ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go000066400000000000000000000016361317166637100244150ustar00rootroot00000000000000// 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go000066400000000000000000000017331317166637100242570ustar00rootroot00000000000000// Copyright 2017 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,openbsd package unix import "syscall" func Getpagesize() int { return syscall.Getpagesize() } 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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_solaris.go000066400000000000000000000474621317166637100234530ustar00rootroot00000000000000// 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) } func direntIno(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) } func direntReclen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) } func direntNamlen(buf []byte) (uint64, bool) { reclen, ok := direntReclen(buf) if !ok { return 0, false } return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true } //sysnb pipe(p *[2]_C_int) (n int, err error) func Pipe(p []int) (err error) { if len(p) != 2 { return EINVAL } var pp [2]_C_int n, err := pipe(&pp) if n != 0 { return err } p[0] = int(pp[0]) p[1] = int(pp[1]) return nil } 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 } //sys wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) { var status _C_int rpid, err := wait4(int32(pid), &status, options, rusage) wpid := int(rpid) if wpid == -1 { return wpid, err } if wstatus != nil { *wstatus = WaitStatus(status) } return wpid, nil } //sys gethostname(buf []byte) (n int, err error) func Gethostname() (name string, err error) { var buf [MaxHostNameLen]byte n, err := gethostname(buf[:]) if n != 0 { return "", err } n = clen(buf[:]) if n < 1 { return "", EFAULT } return string(buf[:n]), nil } //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.__xnet_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.Accrightslen = int32(len(oob)) } 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.__xnet_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.Accrightslen = int32(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 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 uint, arg uintptr) (err error) func IoctlSetInt(fd int, req uint, value int) (err error) { return ioctl(fd, req, uintptr(value)) } func IoctlSetWinsize(fd int, req uint, value *Winsize) (err error) { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } func IoctlSetTermios(fd int, req uint, value *Termios) (err error) { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } func IoctlSetTermio(fd int, req uint, value *Termio) (err error) { return ioctl(fd, req, uintptr(unsafe.Pointer(value))) } func IoctlGetInt(fd int, req uint) (int, error) { var value int err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return value, err } func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { var value Winsize err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return &value, err } func IoctlGetTermios(fd int, req uint) (*Termios, error) { var value Termios err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) return &value, err } func IoctlGetTermio(fd int, req uint) (*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 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 Fstatvfs(fd int, vfsstat *Statvfs_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.__xnet_llisten //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 Statvfs(path string, vfsstat *Statvfs_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.__xnet_bind //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_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.__xnet_sendto //sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket //sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_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.__xnet_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) } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go000066400000000000000000000015121317166637100244300ustar00rootroot00000000000000// 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") } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_solaris_test.go000066400000000000000000000012641317166637100245000ustar00rootroot00000000000000// Copyright 2017 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 unix_test import ( "os/exec" "testing" "golang.org/x/sys/unix" ) func TestStatvfs(t *testing.T) { if err := unix.Statvfs("", nil); err == nil { t.Fatal(`Statvfs("") expected failure`) } statvfs := unix.Statvfs_t{} if err := unix.Statvfs("/", &statvfs); err != nil { t.Errorf(`Statvfs("/") failed: %v`, err) } if t.Failed() { mount, err := exec.Command("mount").CombinedOutput() if err != nil { t.Logf("mount: %v\n%s", err, mount) } else { t.Logf("mount: %s", mount) } } } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_test.go000066400000000000000000000020751317166637100227450ustar00rootroot00000000000000// 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 darwin dragonfly freebsd linux netbsd openbsd solaris package unix_test import ( "fmt" "testing" "golang.org/x/sys/unix" ) func testSetGetenv(t *testing.T, key, value string) { err := unix.Setenv(key, value) if err != nil { t.Fatalf("Setenv failed to set %q: %v", value, err) } newvalue, found := unix.Getenv(key) if !found { t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) } if newvalue != value { t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) } } func TestEnv(t *testing.T) { testSetGetenv(t, "TESTENV", "AVALUE") // make sure TESTENV gets set to "", not deleted testSetGetenv(t, "TESTENV", "") } func TestItoa(t *testing.T) { // Make most negative integer: 0x8000... i := 1 for i<<1 != 0 { i <<= 1 } if i >= 0 { t.Fatal("bad math") } s := unix.Itoa(i) f := fmt.Sprint(i) if s != f { t.Fatalf("itoa(%d) = %s, want %s", i, s, f) } } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_unix.go000066400000000000000000000151231317166637100227470ustar00rootroot00000000000000// 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 solaris64Bit = runtime.GOOS == "solaris" && sizeofPtr == 8 ) // 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 } // 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_unix_gc.go000066400000000000000000000011361317166637100234170ustar00rootroot00000000000000// 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 darwin dragonfly freebsd linux netbsd openbsd solaris // +build !gccgo package unix import "syscall" 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) dep-0.3.2/vendor/golang.org/x/sys/unix/syscall_unix_test.go000066400000000000000000000206121317166637100240050ustar00rootroot00000000000000// 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 darwin dragonfly freebsd linux netbsd openbsd solaris package unix_test import ( "flag" "fmt" "io/ioutil" "net" "os" "os/exec" "path/filepath" "runtime" "testing" "time" "golang.org/x/sys/unix" ) // Tests that below functions, structures and constants are consistent // on all Unix-like systems. func _() { // program scheduling priority functions and constants var ( _ func(int, int, int) error = unix.Setpriority _ func(int, int) (int, error) = unix.Getpriority ) const ( _ int = unix.PRIO_USER _ int = unix.PRIO_PROCESS _ int = unix.PRIO_PGRP ) // termios constants const ( _ int = unix.TCIFLUSH _ int = unix.TCIOFLUSH _ int = unix.TCOFLUSH ) // fcntl file locking structure and constants var ( _ = unix.Flock_t{ Type: int16(0), Whence: int16(0), Start: int64(0), Len: int64(0), Pid: int32(0), } ) const ( _ = unix.F_GETLK _ = unix.F_SETLK _ = unix.F_SETLKW ) } // TestFcntlFlock tests whether the file locking structure matches // the calling convention of each kernel. func TestFcntlFlock(t *testing.T) { name := filepath.Join(os.TempDir(), "TestFcntlFlock") fd, err := unix.Open(name, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0) if err != nil { t.Fatalf("Open failed: %v", err) } defer unix.Unlink(name) defer unix.Close(fd) flock := unix.Flock_t{ Type: unix.F_RDLCK, Start: 0, Len: 0, Whence: 1, } if err := unix.FcntlFlock(uintptr(fd), unix.F_GETLK, &flock); err != nil { t.Fatalf("FcntlFlock failed: %v", err) } } // TestPassFD tests passing a file descriptor over a Unix socket. // // This test involved both a parent and child process. The parent // process is invoked as a normal test, with "go test", which then // runs the child process by running the current test binary with args // "-test.run=^TestPassFD$" and an environment variable used to signal // that the test should become the child process instead. func TestPassFD(t *testing.T) { if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { passFDChild() return } tempDir, err := ioutil.TempDir("", "TestPassFD") if err != nil { t.Fatal(err) } defer os.RemoveAll(tempDir) fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) if err != nil { t.Fatalf("Socketpair: %v", err) } defer unix.Close(fds[0]) defer unix.Close(fds[1]) writeFile := os.NewFile(uintptr(fds[0]), "child-writes") readFile := os.NewFile(uintptr(fds[1]), "parent-reads") defer writeFile.Close() defer readFile.Close() cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir) cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"} if lp := os.Getenv("LD_LIBRARY_PATH"); lp != "" { cmd.Env = append(cmd.Env, "LD_LIBRARY_PATH="+lp) } cmd.ExtraFiles = []*os.File{writeFile} out, err := cmd.CombinedOutput() if len(out) > 0 || err != nil { t.Fatalf("child process: %q, %v", out, err) } c, err := net.FileConn(readFile) if err != nil { t.Fatalf("FileConn: %v", err) } defer c.Close() uc, ok := c.(*net.UnixConn) if !ok { t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c) } buf := make([]byte, 32) // expect 1 byte oob := make([]byte, 32) // expect 24 bytes closeUnix := time.AfterFunc(5*time.Second, func() { t.Logf("timeout reading from unix socket") uc.Close() }) _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) closeUnix.Stop() scms, err := unix.ParseSocketControlMessage(oob[:oobn]) if err != nil { t.Fatalf("ParseSocketControlMessage: %v", err) } if len(scms) != 1 { t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms) } scm := scms[0] gotFds, err := unix.ParseUnixRights(&scm) if err != nil { t.Fatalf("unix.ParseUnixRights: %v", err) } if len(gotFds) != 1 { t.Fatalf("wanted 1 fd; got %#v", gotFds) } f := os.NewFile(uintptr(gotFds[0]), "fd-from-child") defer f.Close() got, err := ioutil.ReadAll(f) want := "Hello from child process!\n" if string(got) != want { t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want) } } // passFDChild is the child process used by TestPassFD. func passFDChild() { defer os.Exit(0) // Look for our fd. It should be fd 3, but we work around an fd leak // bug here (http://golang.org/issue/2603) to let it be elsewhere. var uc *net.UnixConn for fd := uintptr(3); fd <= 10; fd++ { f := os.NewFile(fd, "unix-conn") var ok bool netc, _ := net.FileConn(f) uc, ok = netc.(*net.UnixConn) if ok { break } } if uc == nil { fmt.Println("failed to find unix fd") return } // Make a file f to send to our parent process on uc. // We make it in tempDir, which our parent will clean up. flag.Parse() tempDir := flag.Arg(0) f, err := ioutil.TempFile(tempDir, "") if err != nil { fmt.Printf("TempFile: %v", err) return } f.Write([]byte("Hello from child process!\n")) f.Seek(0, 0) rights := unix.UnixRights(int(f.Fd())) dummyByte := []byte("x") n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil) if err != nil { fmt.Printf("WriteMsgUnix: %v", err) return } if n != 1 || oobn != len(rights) { fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights)) return } } // TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage, // and ParseUnixRights are able to successfully round-trip lists of file descriptors. func TestUnixRightsRoundtrip(t *testing.T) { testCases := [...][][]int{ {{42}}, {{1, 2}}, {{3, 4, 5}}, {{}}, {{1, 2}, {3, 4, 5}, {}, {7}}, } for _, testCase := range testCases { b := []byte{} var n int for _, fds := range testCase { // Last assignment to n wins n = len(b) + unix.CmsgLen(4*len(fds)) b = append(b, unix.UnixRights(fds...)...) } // Truncate b b = b[:n] scms, err := unix.ParseSocketControlMessage(b) if err != nil { t.Fatalf("ParseSocketControlMessage: %v", err) } if len(scms) != len(testCase) { t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms) } for i, scm := range scms { gotFds, err := unix.ParseUnixRights(&scm) if err != nil { t.Fatalf("ParseUnixRights: %v", err) } wantFds := testCase[i] if len(gotFds) != len(wantFds) { t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds) } for j, fd := range gotFds { if fd != wantFds[j] { t.Fatalf("expected fd %v, got %v", wantFds[j], fd) } } } } } func TestRlimit(t *testing.T) { var rlimit, zero unix.Rlimit err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit) if err != nil { t.Fatalf("Getrlimit: save failed: %v", err) } if zero == rlimit { t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit) } set := rlimit set.Cur = set.Max - 1 err = unix.Setrlimit(unix.RLIMIT_NOFILE, &set) if err != nil { t.Fatalf("Setrlimit: set failed: %#v %v", set, err) } var get unix.Rlimit err = unix.Getrlimit(unix.RLIMIT_NOFILE, &get) if err != nil { t.Fatalf("Getrlimit: get failed: %v", err) } set = rlimit set.Cur = set.Max - 1 if set != get { // Seems like Darwin requires some privilege to // increase the soft limit of rlimit sandbox, though // Setrlimit never reports an error. switch runtime.GOOS { case "darwin": default: t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get) } } err = unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit) if err != nil { t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err) } } func TestSeekFailure(t *testing.T) { _, err := unix.Seek(-1, 0, 0) if err == nil { t.Fatalf("Seek(-1, 0, 0) did not fail") } str := err.Error() // used to crash on Linux t.Logf("Seek: %v", str) if str == "" { t.Fatalf("Seek(-1, 0, 0) return error with empty message") } } func TestDup(t *testing.T) { file, err := ioutil.TempFile("", "TestDup") if err != nil { t.Fatalf("Tempfile failed: %v", err) } defer os.Remove(file.Name()) defer file.Close() f := int(file.Fd()) newFd, err := unix.Dup(f) if err != nil { t.Fatalf("Dup: %v", err) } err = unix.Dup2(newFd, newFd+1) if err != nil { t.Fatalf("Dup2: %v", err) } b1 := []byte("Test123") b2 := make([]byte, 7) _, err = unix.Write(newFd+1, b1) if err != nil { t.Fatalf("Write to dup2 fd failed: %v", err) } _, err = unix.Seek(f, 0, 0) _, err = unix.Read(f, b2) if err != nil { t.Fatalf("Read back failed: %v", err) } if string(b1) != string(b2) { t.Errorf("Dup: stdout write not in file, expected %v, got %v", string(b1), string(b2)) } } dep-0.3.2/vendor/golang.org/x/sys/unix/types_darwin.go000066400000000000000000000122141317166637100227400ustar00rootroot00000000000000// 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 README.md */ // +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 type Winsize C.struct_winsize // fchmodat-like syscalls. 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 ) dep-0.3.2/vendor/golang.org/x/sys/unix/types_dragonfly.go000066400000000000000000000117751317166637100234540ustar00rootroot00000000000000// 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 README.md */ // +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 // fchmodat-like syscalls. const ( AT_FDCWD = C.AT_FDCWD AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ) dep-0.3.2/vendor/golang.org/x/sys/unix/types_freebsd.go000066400000000000000000000200551317166637100230700ustar00rootroot00000000000000// 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 README.md */ // +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)]; }; // 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; // FIXME: these are now unions, so maybe need to change definitions? #undef ifi_epoch time_t ifi_epoch; #undef ifi_lastchange 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 type Winsize C.struct_winsize // fchmodat-like syscalls. 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 ) // Capabilities type CapRights C.struct_cap_rights dep-0.3.2/vendor/golang.org/x/sys/unix/types_netbsd.go000066400000000000000000000113501317166637100227330ustar00rootroot00000000000000// 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 README.md */ // +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 // fchmodat-like syscalls. const ( AT_FDCWD = C.AT_FDCWD AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ) // Sysctl type Sysctlnode C.struct_sysctlnode dep-0.3.2/vendor/golang.org/x/sys/unix/types_openbsd.go000066400000000000000000000117661317166637100231210ustar00rootroot00000000000000// 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 README.md */ // +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 // fchmodat-like syscalls. const ( AT_FDCWD = C.AT_FDCWD AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ) dep-0.3.2/vendor/golang.org/x/sys/unix/types_solaris.go000066400000000000000000000127131317166637100231340ustar00rootroot00000000000000// 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 README.md */ // +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 #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 MaxHostNameLen = C.MAXHOSTNAMELEN ) // 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 // Filesystems type _Fsblkcnt_t C.fsblkcnt_t type Statvfs_t C.struct_statvfs // 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 dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go000066400000000000000000002052071317166637100237100ustar00rootroot00000000000000// mkerrors.sh -m32 // Code generated by the command above; see README.md. 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 ALTWERASE = 0x200 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 BS0 = 0x0 BS1 = 0x8000 BSDLY = 0x8000 CFLUSH = 0xf CLOCAL = 0x8000 CLOCK_MONOTONIC = 0x6 CLOCK_MONOTONIC_RAW = 0x4 CLOCK_MONOTONIC_RAW_APPROX = 0x5 CLOCK_PROCESS_CPUTIME_ID = 0xc CLOCK_REALTIME = 0x0 CLOCK_THREAD_CPUTIME_ID = 0x10 CLOCK_UPTIME_RAW = 0x8 CLOCK_UPTIME_RAW_APPROX = 0x9 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 CR3 = 0x3000 CRDLY = 0x3000 CREAD = 0x800 CRTSCTS = 0x30000 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_EXCEPT = -0xf EVFILT_FS = -0x9 EVFILT_MACHPORT = -0x8 EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 EVFILT_SYSCOUNT = 0xf EVFILT_THREADMARKER = 0xf 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_DISPATCH2 = 0x180 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 EV_UDATA_SPECIFIC = 0x100 EV_VANISHED = 0x200 EXTA = 0x4b00 EXTB = 0x9600 EXTPROC = 0x800 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 F_ADDFILESIGS = 0x3d F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 F_ADDFILESIGS_RETURN = 0x61 F_ADDSIGS = 0x3b F_ALLOCATEALL = 0x4 F_ALLOCATECONTIG = 0x2 F_BARRIERFSYNC = 0x55 F_CHECK_LV = 0x62 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_PAGEOUT = 0xa MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MADV_ZERO_WIRED_PAGES = 0x6 MAP_ANON = 0x1000 MAP_ANONYMOUS = 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_RESILIENT_CODESIGN = 0x2000 MAP_RESILIENT_MEDIA = 0x4000 MAP_SHARED = 0x1 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 MNT_ASYNC = 0x40 MNT_AUTOMOUNTED = 0x400000 MNT_CMDFLAGS = 0xf0000 MNT_CPROTECT = 0x80 MNT_DEFWRITE = 0x2000000 MNT_DONTBROWSE = 0x100000 MNT_DOVOLFS = 0x8000 MNT_DWAIT = 0x4 MNT_EXPORTED = 0x100 MNT_FORCE = 0x80000 MNT_IGNORE_OWNERSHIP = 0x200000 MNT_JOURNALED = 0x800000 MNT_LOCAL = 0x1000 MNT_MULTILABEL = 0x4000000 MNT_NOATIME = 0x10000000 MNT_NOBLOCK = 0x20000 MNT_NODEV = 0x10 MNT_NOEXEC = 0x4 MNT_NOSUID = 0x8 MNT_NOUSERXATTR = 0x1000000 MNT_NOWAIT = 0x2 MNT_QUARANTINE = 0x400 MNT_QUOTA = 0x2000 MNT_RDONLY = 0x1 MNT_RELOAD = 0x40000 MNT_ROOTFS = 0x4000 MNT_SYNCHRONOUS = 0x2 MNT_UNION = 0x20 MNT_UNKNOWNPERMISSIONS = 0x200000 MNT_UPDATE = 0x10000 MNT_VISFLAGMASK = 0x17f0f5ff MNT_WAIT = 0x1 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 NL0 = 0x0 NL1 = 0x100 NL2 = 0x200 NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 NOKERNINFO = 0x2000000 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_FUNLOCK = 0x100 NOTE_LEEWAY = 0x10 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 NOTE_MACH_CONTINUOUS_TIME = 0x80 NOTE_NONE = 0x80 NOTE_NSECONDS = 0x4 NOTE_OOB = 0x2 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 OXTABS = 0x4 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_DP_GETRAWUNENCRYPTED = 0x2 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_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 RLIMIT_NPROC = 0x7 RLIMIT_RSS = 0x5 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_NETSVC_MARKING_LEVEL = 0x1119 SO_NET_SERVICE_TYPE = 0x1116 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 TAB0 = 0x0 TAB1 = 0x400 TAB2 = 0x800 TAB3 = 0x4 TABDLY = 0xc04 TCIFLUSH = 0x1 TCIOFF = 0x3 TCIOFLUSH = 0x3 TCION = 0x4 TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 TCP_CONNECTIONTIMEOUT = 0x20 TCP_CONNECTION_INFO = 0x106 TCP_ENABLE_ECN = 0x104 TCP_FASTOPEN = 0x105 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 VM_LOADAVG = 0x2 VM_MACHFACTOR = 0x4 VM_MAXID = 0x6 VM_METER = 0x1 VM_SWAPUSAGE = 0x5 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go000066400000000000000000002052111317166637100242760ustar00rootroot00000000000000// mkerrors.sh -m64 // Code generated by the command above; see README.md. 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 ALTWERASE = 0x200 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 BS0 = 0x0 BS1 = 0x8000 BSDLY = 0x8000 CFLUSH = 0xf CLOCAL = 0x8000 CLOCK_MONOTONIC = 0x6 CLOCK_MONOTONIC_RAW = 0x4 CLOCK_MONOTONIC_RAW_APPROX = 0x5 CLOCK_PROCESS_CPUTIME_ID = 0xc CLOCK_REALTIME = 0x0 CLOCK_THREAD_CPUTIME_ID = 0x10 CLOCK_UPTIME_RAW = 0x8 CLOCK_UPTIME_RAW_APPROX = 0x9 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 CR3 = 0x3000 CRDLY = 0x3000 CREAD = 0x800 CRTSCTS = 0x30000 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_EXCEPT = -0xf EVFILT_FS = -0x9 EVFILT_MACHPORT = -0x8 EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 EVFILT_SYSCOUNT = 0xf EVFILT_THREADMARKER = 0xf 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_DISPATCH2 = 0x180 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 EV_UDATA_SPECIFIC = 0x100 EV_VANISHED = 0x200 EXTA = 0x4b00 EXTB = 0x9600 EXTPROC = 0x800 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 F_ADDFILESIGS = 0x3d F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 F_ADDFILESIGS_RETURN = 0x61 F_ADDSIGS = 0x3b F_ALLOCATEALL = 0x4 F_ALLOCATECONTIG = 0x2 F_BARRIERFSYNC = 0x55 F_CHECK_LV = 0x62 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_PAGEOUT = 0xa MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MADV_ZERO_WIRED_PAGES = 0x6 MAP_ANON = 0x1000 MAP_ANONYMOUS = 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_RESILIENT_CODESIGN = 0x2000 MAP_RESILIENT_MEDIA = 0x4000 MAP_SHARED = 0x1 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 MNT_ASYNC = 0x40 MNT_AUTOMOUNTED = 0x400000 MNT_CMDFLAGS = 0xf0000 MNT_CPROTECT = 0x80 MNT_DEFWRITE = 0x2000000 MNT_DONTBROWSE = 0x100000 MNT_DOVOLFS = 0x8000 MNT_DWAIT = 0x4 MNT_EXPORTED = 0x100 MNT_FORCE = 0x80000 MNT_IGNORE_OWNERSHIP = 0x200000 MNT_JOURNALED = 0x800000 MNT_LOCAL = 0x1000 MNT_MULTILABEL = 0x4000000 MNT_NOATIME = 0x10000000 MNT_NOBLOCK = 0x20000 MNT_NODEV = 0x10 MNT_NOEXEC = 0x4 MNT_NOSUID = 0x8 MNT_NOUSERXATTR = 0x1000000 MNT_NOWAIT = 0x2 MNT_QUARANTINE = 0x400 MNT_QUOTA = 0x2000 MNT_RDONLY = 0x1 MNT_RELOAD = 0x40000 MNT_ROOTFS = 0x4000 MNT_SYNCHRONOUS = 0x2 MNT_UNION = 0x20 MNT_UNKNOWNPERMISSIONS = 0x200000 MNT_UPDATE = 0x10000 MNT_VISFLAGMASK = 0x17f0f5ff MNT_WAIT = 0x1 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 NL0 = 0x0 NL1 = 0x100 NL2 = 0x200 NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 NOKERNINFO = 0x2000000 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_FUNLOCK = 0x100 NOTE_LEEWAY = 0x10 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 NOTE_MACH_CONTINUOUS_TIME = 0x80 NOTE_NONE = 0x80 NOTE_NSECONDS = 0x4 NOTE_OOB = 0x2 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 OXTABS = 0x4 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_DP_GETRAWUNENCRYPTED = 0x2 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_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 RLIMIT_NPROC = 0x7 RLIMIT_RSS = 0x5 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_NETSVC_MARKING_LEVEL = 0x1119 SO_NET_SERVICE_TYPE = 0x1116 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 TAB0 = 0x0 TAB1 = 0x400 TAB2 = 0x800 TAB3 = 0x4 TABDLY = 0xc04 TCIFLUSH = 0x1 TCIOFF = 0x3 TCIOFLUSH = 0x3 TCION = 0x4 TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 TCP_CONNECTIONTIMEOUT = 0x20 TCP_CONNECTION_INFO = 0x106 TCP_ENABLE_ECN = 0x104 TCP_FASTOPEN = 0x105 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 VM_LOADAVG = 0x2 VM_MACHFACTOR = 0x4 VM_MAXID = 0x6 VM_METER = 0x1 VM_SWAPUSAGE = 0x5 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go000066400000000000000000002051751317166637100241530ustar00rootroot00000000000000// mkerrors.sh // Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,darwin // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- _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 ALTWERASE = 0x200 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 BS0 = 0x0 BS1 = 0x8000 BSDLY = 0x8000 CFLUSH = 0xf CLOCAL = 0x8000 CLOCK_MONOTONIC = 0x6 CLOCK_MONOTONIC_RAW = 0x4 CLOCK_MONOTONIC_RAW_APPROX = 0x5 CLOCK_PROCESS_CPUTIME_ID = 0xc CLOCK_REALTIME = 0x0 CLOCK_THREAD_CPUTIME_ID = 0x10 CLOCK_UPTIME_RAW = 0x8 CLOCK_UPTIME_RAW_APPROX = 0x9 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 CR3 = 0x3000 CRDLY = 0x3000 CREAD = 0x800 CRTSCTS = 0x30000 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_EXCEPT = -0xf EVFILT_FS = -0x9 EVFILT_MACHPORT = -0x8 EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 EVFILT_SYSCOUNT = 0xf EVFILT_THREADMARKER = 0xf 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_DISPATCH2 = 0x180 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 EV_UDATA_SPECIFIC = 0x100 EV_VANISHED = 0x200 EXTA = 0x4b00 EXTB = 0x9600 EXTPROC = 0x800 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 F_ADDFILESIGS = 0x3d F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 F_ADDFILESIGS_RETURN = 0x61 F_ADDSIGS = 0x3b F_ALLOCATEALL = 0x4 F_ALLOCATECONTIG = 0x2 F_BARRIERFSYNC = 0x55 F_CHECK_LV = 0x62 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_PAGEOUT = 0xa MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MADV_ZERO_WIRED_PAGES = 0x6 MAP_ANON = 0x1000 MAP_ANONYMOUS = 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_RESILIENT_CODESIGN = 0x2000 MAP_RESILIENT_MEDIA = 0x4000 MAP_SHARED = 0x1 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 MNT_ASYNC = 0x40 MNT_AUTOMOUNTED = 0x400000 MNT_CMDFLAGS = 0xf0000 MNT_CPROTECT = 0x80 MNT_DEFWRITE = 0x2000000 MNT_DONTBROWSE = 0x100000 MNT_DOVOLFS = 0x8000 MNT_DWAIT = 0x4 MNT_EXPORTED = 0x100 MNT_FORCE = 0x80000 MNT_IGNORE_OWNERSHIP = 0x200000 MNT_JOURNALED = 0x800000 MNT_LOCAL = 0x1000 MNT_MULTILABEL = 0x4000000 MNT_NOATIME = 0x10000000 MNT_NOBLOCK = 0x20000 MNT_NODEV = 0x10 MNT_NOEXEC = 0x4 MNT_NOSUID = 0x8 MNT_NOUSERXATTR = 0x1000000 MNT_NOWAIT = 0x2 MNT_QUARANTINE = 0x400 MNT_QUOTA = 0x2000 MNT_RDONLY = 0x1 MNT_RELOAD = 0x40000 MNT_ROOTFS = 0x4000 MNT_SYNCHRONOUS = 0x2 MNT_UNION = 0x20 MNT_UNKNOWNPERMISSIONS = 0x200000 MNT_UPDATE = 0x10000 MNT_VISFLAGMASK = 0x17f0f5ff MNT_WAIT = 0x1 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 NL0 = 0x0 NL1 = 0x100 NL2 = 0x200 NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 NOKERNINFO = 0x2000000 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_FUNLOCK = 0x100 NOTE_LEEWAY = 0x10 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 NOTE_MACH_CONTINUOUS_TIME = 0x80 NOTE_NONE = 0x80 NOTE_NSECONDS = 0x4 NOTE_OOB = 0x2 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 OXTABS = 0x4 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_DP_GETRAWUNENCRYPTED = 0x2 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_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 RLIMIT_NPROC = 0x7 RLIMIT_RSS = 0x5 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_NETSVC_MARKING_LEVEL = 0x1119 SO_NET_SERVICE_TYPE = 0x1116 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 TAB0 = 0x0 TAB1 = 0x400 TAB2 = 0x800 TAB3 = 0x4 TABDLY = 0xc04 TCIFLUSH = 0x1 TCIOFF = 0x3 TCIOFLUSH = 0x3 TCION = 0x4 TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 TCP_CONNECTIONTIMEOUT = 0x20 TCP_CONNECTION_INFO = 0x106 TCP_ENABLE_ECN = 0x104 TCP_FASTOPEN = 0x105 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 VM_LOADAVG = 0x2 VM_MACHFACTOR = 0x4 VM_MAXID = 0x6 VM_METER = 0x1 VM_SWAPUSAGE = 0x5 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go000066400000000000000000002052111317166637100243140ustar00rootroot00000000000000// mkerrors.sh -m64 // Code generated by the command above; see README.md. 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 ALTWERASE = 0x200 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 BS0 = 0x0 BS1 = 0x8000 BSDLY = 0x8000 CFLUSH = 0xf CLOCAL = 0x8000 CLOCK_MONOTONIC = 0x6 CLOCK_MONOTONIC_RAW = 0x4 CLOCK_MONOTONIC_RAW_APPROX = 0x5 CLOCK_PROCESS_CPUTIME_ID = 0xc CLOCK_REALTIME = 0x0 CLOCK_THREAD_CPUTIME_ID = 0x10 CLOCK_UPTIME_RAW = 0x8 CLOCK_UPTIME_RAW_APPROX = 0x9 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 CR3 = 0x3000 CRDLY = 0x3000 CREAD = 0x800 CRTSCTS = 0x30000 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_EXCEPT = -0xf EVFILT_FS = -0x9 EVFILT_MACHPORT = -0x8 EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 EVFILT_SYSCOUNT = 0xf EVFILT_THREADMARKER = 0xf 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_DISPATCH2 = 0x180 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 EV_UDATA_SPECIFIC = 0x100 EV_VANISHED = 0x200 EXTA = 0x4b00 EXTB = 0x9600 EXTPROC = 0x800 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 F_ADDFILESIGS = 0x3d F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 F_ADDFILESIGS_RETURN = 0x61 F_ADDSIGS = 0x3b F_ALLOCATEALL = 0x4 F_ALLOCATECONTIG = 0x2 F_BARRIERFSYNC = 0x55 F_CHECK_LV = 0x62 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_PAGEOUT = 0xa MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MADV_ZERO_WIRED_PAGES = 0x6 MAP_ANON = 0x1000 MAP_ANONYMOUS = 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_RESILIENT_CODESIGN = 0x2000 MAP_RESILIENT_MEDIA = 0x4000 MAP_SHARED = 0x1 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 MNT_ASYNC = 0x40 MNT_AUTOMOUNTED = 0x400000 MNT_CMDFLAGS = 0xf0000 MNT_CPROTECT = 0x80 MNT_DEFWRITE = 0x2000000 MNT_DONTBROWSE = 0x100000 MNT_DOVOLFS = 0x8000 MNT_DWAIT = 0x4 MNT_EXPORTED = 0x100 MNT_FORCE = 0x80000 MNT_IGNORE_OWNERSHIP = 0x200000 MNT_JOURNALED = 0x800000 MNT_LOCAL = 0x1000 MNT_MULTILABEL = 0x4000000 MNT_NOATIME = 0x10000000 MNT_NOBLOCK = 0x20000 MNT_NODEV = 0x10 MNT_NOEXEC = 0x4 MNT_NOSUID = 0x8 MNT_NOUSERXATTR = 0x1000000 MNT_NOWAIT = 0x2 MNT_QUARANTINE = 0x400 MNT_QUOTA = 0x2000 MNT_RDONLY = 0x1 MNT_RELOAD = 0x40000 MNT_ROOTFS = 0x4000 MNT_SYNCHRONOUS = 0x2 MNT_UNION = 0x20 MNT_UNKNOWNPERMISSIONS = 0x200000 MNT_UPDATE = 0x10000 MNT_VISFLAGMASK = 0x17f0f5ff MNT_WAIT = 0x1 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 NL0 = 0x0 NL1 = 0x100 NL2 = 0x200 NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 NOKERNINFO = 0x2000000 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_FUNLOCK = 0x100 NOTE_LEEWAY = 0x10 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 NOTE_MACH_CONTINUOUS_TIME = 0x80 NOTE_NONE = 0x80 NOTE_NSECONDS = 0x4 NOTE_OOB = 0x2 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 OXTABS = 0x4 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_DP_GETRAWUNENCRYPTED = 0x2 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_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 RLIMIT_NPROC = 0x7 RLIMIT_RSS = 0x5 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_NETSVC_MARKING_LEVEL = 0x1119 SO_NET_SERVICE_TYPE = 0x1116 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 TAB0 = 0x0 TAB1 = 0x400 TAB2 = 0x800 TAB3 = 0x4 TABDLY = 0xc04 TCIFLUSH = 0x1 TCIOFF = 0x3 TCIOFLUSH = 0x3 TCION = 0x4 TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 TCP_CONNECTIONTIMEOUT = 0x20 TCP_CONNECTION_INFO = 0x106 TCP_ENABLE_ECN = 0x104 TCP_FASTOPEN = 0x105 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 VM_LOADAVG = 0x2 VM_MACHFACTOR = 0x4 VM_MAXID = 0x6 VM_METER = 0x1 VM_SWAPUSAGE = 0x5 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go000066400000000000000000001741311317166637100250050ustar00rootroot00000000000000// mkerrors.sh -m64 // Code generated by the command above; see README.md. 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_NETBIOS = 0x6 AF_NETGRAPH = 0x20 AF_OSI = 0x7 AF_PUP = 0x4 AF_ROUTE = 0x11 AF_SIP = 0x18 AF_SNA = 0xb AF_UNIX = 0x1 AF_UNSPEC = 0x0 ALTWERASE = 0x200 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 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 CRTSCTS = 0x30000 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_FS = -0xa EVFILT_MARKER = 0xf EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 EVFILT_SYSCOUNT = 0xa EVFILT_TIMER = -0x7 EVFILT_USER = -0x9 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_FLAG1 = 0x2000 EV_NODATA = 0x1000 EV_ONESHOT = 0x10 EV_RECEIPT = 0x40 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_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_MINHLIM = 0x28 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_X = 0x31 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_ANONYMOUS = 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_CMSG_CLOEXEC = 0x1000 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_OOB = 0x1 MSG_PEEK = 0x2 MSG_SYNC = 0x800 MSG_TRUNC = 0x10 MSG_UNUSED09 = 0x200 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 NOKERNINFO = 0x2000000 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_OOB = 0x2 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 OXTABS = 0x4 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_FMASK = 0xfc0000 O_FNONBLOCKING = 0x80000 O_FOFFSET = 0x200000 O_FSYNC = 0x80 O_FSYNCWRITE = 0x400000 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_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_BROADCAST = 0x20 SO_CPUHINT = 0x1030 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 TCIOFF = 0x3 TCIOFLUSH = 0x3 TCION = 0x4 TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 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 VM_BCACHE_SIZE_MAX = 0x0 VM_SWZONE_SIZE_MAX = 0x4000000000 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go000066400000000000000000002016131317166637100240330ustar00rootroot00000000000000// mkerrors.sh -m32 // Code generated by the command above; see README.md. 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 ALTWERASE = 0x200 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_MOD = 0x90 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 BPF_XOR = 0xa0 BRKINT = 0x2 CAP_ACCEPT = 0x200000020000000 CAP_ACL_CHECK = 0x400000000010000 CAP_ACL_DELETE = 0x400000000020000 CAP_ACL_GET = 0x400000000040000 CAP_ACL_SET = 0x400000000080000 CAP_ALL0 = 0x20007ffffffffff CAP_ALL1 = 0x4000000001fffff CAP_BIND = 0x200000040000000 CAP_BINDAT = 0x200008000000400 CAP_CHFLAGSAT = 0x200000000001400 CAP_CONNECT = 0x200000080000000 CAP_CONNECTAT = 0x200010000000400 CAP_CREATE = 0x200000000000040 CAP_EVENT = 0x400000000000020 CAP_EXTATTR_DELETE = 0x400000000001000 CAP_EXTATTR_GET = 0x400000000002000 CAP_EXTATTR_LIST = 0x400000000004000 CAP_EXTATTR_SET = 0x400000000008000 CAP_FCHDIR = 0x200000000000800 CAP_FCHFLAGS = 0x200000000001000 CAP_FCHMOD = 0x200000000002000 CAP_FCHMODAT = 0x200000000002400 CAP_FCHOWN = 0x200000000004000 CAP_FCHOWNAT = 0x200000000004400 CAP_FCNTL = 0x200000000008000 CAP_FCNTL_ALL = 0x78 CAP_FCNTL_GETFL = 0x8 CAP_FCNTL_GETOWN = 0x20 CAP_FCNTL_SETFL = 0x10 CAP_FCNTL_SETOWN = 0x40 CAP_FEXECVE = 0x200000000000080 CAP_FLOCK = 0x200000000010000 CAP_FPATHCONF = 0x200000000020000 CAP_FSCK = 0x200000000040000 CAP_FSTAT = 0x200000000080000 CAP_FSTATAT = 0x200000000080400 CAP_FSTATFS = 0x200000000100000 CAP_FSYNC = 0x200000000000100 CAP_FTRUNCATE = 0x200000000000200 CAP_FUTIMES = 0x200000000200000 CAP_FUTIMESAT = 0x200000000200400 CAP_GETPEERNAME = 0x200000100000000 CAP_GETSOCKNAME = 0x200000200000000 CAP_GETSOCKOPT = 0x200000400000000 CAP_IOCTL = 0x400000000000080 CAP_IOCTLS_ALL = 0x7fffffff CAP_KQUEUE = 0x400000000100040 CAP_KQUEUE_CHANGE = 0x400000000100000 CAP_KQUEUE_EVENT = 0x400000000000040 CAP_LINKAT_SOURCE = 0x200020000000400 CAP_LINKAT_TARGET = 0x200000000400400 CAP_LISTEN = 0x200000800000000 CAP_LOOKUP = 0x200000000000400 CAP_MAC_GET = 0x400000000000001 CAP_MAC_SET = 0x400000000000002 CAP_MKDIRAT = 0x200000000800400 CAP_MKFIFOAT = 0x200000001000400 CAP_MKNODAT = 0x200000002000400 CAP_MMAP = 0x200000000000010 CAP_MMAP_R = 0x20000000000001d CAP_MMAP_RW = 0x20000000000001f CAP_MMAP_RWX = 0x20000000000003f CAP_MMAP_RX = 0x20000000000003d CAP_MMAP_W = 0x20000000000001e CAP_MMAP_WX = 0x20000000000003e CAP_MMAP_X = 0x20000000000003c CAP_PDGETPID = 0x400000000000200 CAP_PDKILL = 0x400000000000800 CAP_PDWAIT = 0x400000000000400 CAP_PEELOFF = 0x200001000000000 CAP_POLL_EVENT = 0x400000000000020 CAP_PREAD = 0x20000000000000d CAP_PWRITE = 0x20000000000000e CAP_READ = 0x200000000000001 CAP_RECV = 0x200000000000001 CAP_RENAMEAT_SOURCE = 0x200000004000400 CAP_RENAMEAT_TARGET = 0x200040000000400 CAP_RIGHTS_VERSION = 0x0 CAP_RIGHTS_VERSION_00 = 0x0 CAP_SEEK = 0x20000000000000c CAP_SEEK_TELL = 0x200000000000004 CAP_SEM_GETVALUE = 0x400000000000004 CAP_SEM_POST = 0x400000000000008 CAP_SEM_WAIT = 0x400000000000010 CAP_SEND = 0x200000000000002 CAP_SETSOCKOPT = 0x200002000000000 CAP_SHUTDOWN = 0x200004000000000 CAP_SOCK_CLIENT = 0x200007780000003 CAP_SOCK_SERVER = 0x200007f60000003 CAP_SYMLINKAT = 0x200000008000400 CAP_TTYHOOK = 0x400000000000100 CAP_UNLINKAT = 0x200000010000400 CAP_UNUSED0_44 = 0x200080000000000 CAP_UNUSED0_57 = 0x300000000000000 CAP_UNUSED1_22 = 0x400000000200000 CAP_UNUSED1_57 = 0x500000000000000 CAP_WRITE = 0x200000000000002 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 CRTSCTS = 0x30000 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_BREDR_BB = 0xff DLT_BLUETOOTH_HCI_H4 = 0xbb DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 DLT_BLUETOOTH_LE_LL = 0xfb DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 DLT_BLUETOOTH_LINUX_MONITOR = 0xfe 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_EPON = 0x103 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_INFINIBAND = 0xf7 DLT_IPFILTER = 0x74 DLT_IPMB = 0xc7 DLT_IPMB_LINUX = 0xd1 DLT_IPMI_HPM_2 = 0x104 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 = 0x104 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_NETLINK = 0xfd DLT_NFC_LLCP = 0xf5 DLT_NFLOG = 0xef DLT_NG40 = 0xf4 DLT_NULL = 0x0 DLT_PCI_EXP = 0x7d DLT_PFLOG = 0x75 DLT_PFSYNC = 0x79 DLT_PKTAP = 0x102 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_PROFIBUS_DL = 0x101 DLT_PRONET = 0x4 DLT_RAIF1 = 0xc6 DLT_RAW = 0xc DLT_RIO = 0x7c DLT_RTAC_SERIAL = 0xfa DLT_SCCP = 0x8e DLT_SCTP = 0xf8 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_USBPCAP = 0xf9 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_WIRESHARK_UPPER_PDU = 0xfc 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_PROCDESC = -0x8 EVFILT_READ = -0x1 EVFILT_SENDFILE = -0xc EVFILT_SIGNAL = -0x6 EVFILT_SYSCOUNT = 0xc 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_FLAG2 = 0x4000 EV_FORCEONESHOT = 0x100 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 = 0x218f52 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_STATICARP = 0x80000 IFF_UP = 0x1 IFNAMSIZ = 0x10 IFT_BRIDGE = 0xd1 IFT_CARP = 0xf8 IFT_IEEE1394 = 0x90 IFT_INFINIBAND = 0xc7 IFT_L2VLAN = 0x87 IFT_L3IPVLAN = 0x88 IFT_PPP = 0x17 IFT_PROPVIRTUAL = 0x35 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_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_BINDMULTI = 0x41 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_FLOWID = 0x43 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 IPV6_FLOWTYPE = 0x44 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_RECVFLOWID = 0x46 IPV6_RECVHOPLIMIT = 0x25 IPV6_RECVHOPOPTS = 0x27 IPV6_RECVPATHMTU = 0x2b IPV6_RECVPKTINFO = 0x24 IPV6_RECVRSSBUCKETID = 0x47 IPV6_RECVRTHDR = 0x26 IPV6_RECVTCLASS = 0x39 IPV6_RSSBUCKETID = 0x45 IPV6_RSS_LISTEN_BUCKET = 0x42 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_BINDMULTI = 0x19 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_FLOWID = 0x5a IP_FLOWTYPE = 0x5b 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_RECVFLOWID = 0x5d IP_RECVIF = 0x14 IP_RECVOPTS = 0x5 IP_RECVRETOPTS = 0x6 IP_RECVRSSBUCKETID = 0x5e IP_RECVTOS = 0x44 IP_RECVTTL = 0x41 IP_RETOPTS = 0x8 IP_RF = 0x8000 IP_RSSBUCKETID = 0x5c IP_RSS_LISTEN_BUCKET = 0x1a 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_NOSYNC = 0x800 MAP_PREFAULT_READ = 0x40000 MAP_PRIVATE = 0x2 MAP_RESERVED0020 = 0x20 MAP_RESERVED0040 = 0x40 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 MSG_WAITFORONE = 0x80000 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 NOFLSH = 0x80000000 NOKERNINFO = 0x2000000 NOTE_ATTRIB = 0x8 NOTE_CHILD = 0x4 NOTE_CLOSE = 0x100 NOTE_CLOSE_WRITE = 0x200 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_FILE_POLL = 0x2 NOTE_FORK = 0x40000000 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 NOTE_MSECONDS = 0x2 NOTE_NSECONDS = 0x8 NOTE_OPEN = 0x80 NOTE_PCTRLMASK = 0xf0000000 NOTE_PDATAMASK = 0xfffff NOTE_READ = 0x400 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 OXTABS = 0x4 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_VERIFY = 0x200000 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_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 RLIMIT_NPROC = 0x7 RLIMIT_RSS = 0x5 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_FIXEDMTU = 0x80000 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_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_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_BLACKHOLE = 0x40 RT_CACHING_CONTEXT = 0x1 RT_DEFAULT_FIB = 0x0 RT_HAS_GW = 0x80 RT_HAS_HEADER = 0x10 RT_HAS_HEADER_BIT = 0x4 RT_L2_ME = 0x4 RT_L2_ME_BIT = 0x2 RT_LLE_CACHE = 0x100 RT_MAY_LOOP = 0x8 RT_MAY_LOOP_BIT = 0x3 RT_NORTREF = 0x2 RT_REJECT = 0x20 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 SIOCAIFADDR = 0x8040691a SIOCAIFGROUP = 0x80246987 SIOCATMARK = 0x40047307 SIOCDELMULTI = 0x80206932 SIOCDIFADDR = 0x80206919 SIOCDIFGROUP = 0x80246989 SIOCDIFPHYADDR = 0x80206949 SIOCGDRVSPEC = 0xc01c697b SIOCGETSGCNT = 0xc0147210 SIOCGETVIFCNT = 0xc014720f SIOCGHIWAT = 0x40047301 SIOCGI2C = 0xc020693d 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 SIOCGIFXMEDIA = 0xc028698b SIOCGLOWAT = 0x40047303 SIOCGPGRP = 0x40047309 SIOCGPRIVATE_0 = 0xc0206950 SIOCGPRIVATE_1 = 0xc0206951 SIOCGTUNFIB = 0xc020695e 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 SIOCSLOWAT = 0x80047302 SIOCSPGRP = 0x80047308 SIOCSTUNFIB = 0x8020695f 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 TAB0 = 0x0 TAB3 = 0x4 TABDLY = 0x4 TCIFLUSH = 0x1 TCIOFF = 0x3 TCIOFLUSH = 0x3 TCION = 0x4 TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 TCP_CA_NAME_MAX = 0x10 TCP_CCALGOOPT = 0x41 TCP_CONGESTION = 0x40 TCP_FASTOPEN = 0x401 TCP_FUNCTION_BLK = 0x2000 TCP_FUNCTION_NAME_LEN_MAX = 0x20 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_PCAP_IN = 0x1000 TCP_PCAP_OUT = 0x800 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go000066400000000000000000002016771317166637100244400ustar00rootroot00000000000000// mkerrors.sh -m64 // Code generated by the command above; see README.md. 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 ALTWERASE = 0x200 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_MOD = 0x90 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 BPF_XOR = 0xa0 BRKINT = 0x2 CAP_ACCEPT = 0x200000020000000 CAP_ACL_CHECK = 0x400000000010000 CAP_ACL_DELETE = 0x400000000020000 CAP_ACL_GET = 0x400000000040000 CAP_ACL_SET = 0x400000000080000 CAP_ALL0 = 0x20007ffffffffff CAP_ALL1 = 0x4000000001fffff CAP_BIND = 0x200000040000000 CAP_BINDAT = 0x200008000000400 CAP_CHFLAGSAT = 0x200000000001400 CAP_CONNECT = 0x200000080000000 CAP_CONNECTAT = 0x200010000000400 CAP_CREATE = 0x200000000000040 CAP_EVENT = 0x400000000000020 CAP_EXTATTR_DELETE = 0x400000000001000 CAP_EXTATTR_GET = 0x400000000002000 CAP_EXTATTR_LIST = 0x400000000004000 CAP_EXTATTR_SET = 0x400000000008000 CAP_FCHDIR = 0x200000000000800 CAP_FCHFLAGS = 0x200000000001000 CAP_FCHMOD = 0x200000000002000 CAP_FCHMODAT = 0x200000000002400 CAP_FCHOWN = 0x200000000004000 CAP_FCHOWNAT = 0x200000000004400 CAP_FCNTL = 0x200000000008000 CAP_FCNTL_ALL = 0x78 CAP_FCNTL_GETFL = 0x8 CAP_FCNTL_GETOWN = 0x20 CAP_FCNTL_SETFL = 0x10 CAP_FCNTL_SETOWN = 0x40 CAP_FEXECVE = 0x200000000000080 CAP_FLOCK = 0x200000000010000 CAP_FPATHCONF = 0x200000000020000 CAP_FSCK = 0x200000000040000 CAP_FSTAT = 0x200000000080000 CAP_FSTATAT = 0x200000000080400 CAP_FSTATFS = 0x200000000100000 CAP_FSYNC = 0x200000000000100 CAP_FTRUNCATE = 0x200000000000200 CAP_FUTIMES = 0x200000000200000 CAP_FUTIMESAT = 0x200000000200400 CAP_GETPEERNAME = 0x200000100000000 CAP_GETSOCKNAME = 0x200000200000000 CAP_GETSOCKOPT = 0x200000400000000 CAP_IOCTL = 0x400000000000080 CAP_IOCTLS_ALL = 0x7fffffffffffffff CAP_KQUEUE = 0x400000000100040 CAP_KQUEUE_CHANGE = 0x400000000100000 CAP_KQUEUE_EVENT = 0x400000000000040 CAP_LINKAT_SOURCE = 0x200020000000400 CAP_LINKAT_TARGET = 0x200000000400400 CAP_LISTEN = 0x200000800000000 CAP_LOOKUP = 0x200000000000400 CAP_MAC_GET = 0x400000000000001 CAP_MAC_SET = 0x400000000000002 CAP_MKDIRAT = 0x200000000800400 CAP_MKFIFOAT = 0x200000001000400 CAP_MKNODAT = 0x200000002000400 CAP_MMAP = 0x200000000000010 CAP_MMAP_R = 0x20000000000001d CAP_MMAP_RW = 0x20000000000001f CAP_MMAP_RWX = 0x20000000000003f CAP_MMAP_RX = 0x20000000000003d CAP_MMAP_W = 0x20000000000001e CAP_MMAP_WX = 0x20000000000003e CAP_MMAP_X = 0x20000000000003c CAP_PDGETPID = 0x400000000000200 CAP_PDKILL = 0x400000000000800 CAP_PDWAIT = 0x400000000000400 CAP_PEELOFF = 0x200001000000000 CAP_POLL_EVENT = 0x400000000000020 CAP_PREAD = 0x20000000000000d CAP_PWRITE = 0x20000000000000e CAP_READ = 0x200000000000001 CAP_RECV = 0x200000000000001 CAP_RENAMEAT_SOURCE = 0x200000004000400 CAP_RENAMEAT_TARGET = 0x200040000000400 CAP_RIGHTS_VERSION = 0x0 CAP_RIGHTS_VERSION_00 = 0x0 CAP_SEEK = 0x20000000000000c CAP_SEEK_TELL = 0x200000000000004 CAP_SEM_GETVALUE = 0x400000000000004 CAP_SEM_POST = 0x400000000000008 CAP_SEM_WAIT = 0x400000000000010 CAP_SEND = 0x200000000000002 CAP_SETSOCKOPT = 0x200002000000000 CAP_SHUTDOWN = 0x200004000000000 CAP_SOCK_CLIENT = 0x200007780000003 CAP_SOCK_SERVER = 0x200007f60000003 CAP_SYMLINKAT = 0x200000008000400 CAP_TTYHOOK = 0x400000000000100 CAP_UNLINKAT = 0x200000010000400 CAP_UNUSED0_44 = 0x200080000000000 CAP_UNUSED0_57 = 0x300000000000000 CAP_UNUSED1_22 = 0x400000000200000 CAP_UNUSED1_57 = 0x500000000000000 CAP_WRITE = 0x200000000000002 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 CRTSCTS = 0x30000 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_BREDR_BB = 0xff DLT_BLUETOOTH_HCI_H4 = 0xbb DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 DLT_BLUETOOTH_LE_LL = 0xfb DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 DLT_BLUETOOTH_LINUX_MONITOR = 0xfe 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_EPON = 0x103 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_INFINIBAND = 0xf7 DLT_IPFILTER = 0x74 DLT_IPMB = 0xc7 DLT_IPMB_LINUX = 0xd1 DLT_IPMI_HPM_2 = 0x104 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 = 0x104 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_NETLINK = 0xfd DLT_NFC_LLCP = 0xf5 DLT_NFLOG = 0xef DLT_NG40 = 0xf4 DLT_NULL = 0x0 DLT_PCI_EXP = 0x7d DLT_PFLOG = 0x75 DLT_PFSYNC = 0x79 DLT_PKTAP = 0x102 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_PROFIBUS_DL = 0x101 DLT_PRONET = 0x4 DLT_RAIF1 = 0xc6 DLT_RAW = 0xc DLT_RIO = 0x7c DLT_RTAC_SERIAL = 0xfa DLT_SCCP = 0x8e DLT_SCTP = 0xf8 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_USBPCAP = 0xf9 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_WIRESHARK_UPPER_PDU = 0xfc 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_PROCDESC = -0x8 EVFILT_READ = -0x1 EVFILT_SENDFILE = -0xc EVFILT_SIGNAL = -0x6 EVFILT_SYSCOUNT = 0xc 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_FLAG2 = 0x4000 EV_FORCEONESHOT = 0x100 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 = 0x218f52 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_STATICARP = 0x80000 IFF_UP = 0x1 IFNAMSIZ = 0x10 IFT_BRIDGE = 0xd1 IFT_CARP = 0xf8 IFT_IEEE1394 = 0x90 IFT_INFINIBAND = 0xc7 IFT_L2VLAN = 0x87 IFT_L3IPVLAN = 0x88 IFT_PPP = 0x17 IFT_PROPVIRTUAL = 0x35 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_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_BINDMULTI = 0x41 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_FLOWID = 0x43 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 IPV6_FLOWTYPE = 0x44 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_RECVFLOWID = 0x46 IPV6_RECVHOPLIMIT = 0x25 IPV6_RECVHOPOPTS = 0x27 IPV6_RECVPATHMTU = 0x2b IPV6_RECVPKTINFO = 0x24 IPV6_RECVRSSBUCKETID = 0x47 IPV6_RECVRTHDR = 0x26 IPV6_RECVTCLASS = 0x39 IPV6_RSSBUCKETID = 0x45 IPV6_RSS_LISTEN_BUCKET = 0x42 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_BINDMULTI = 0x19 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_FLOWID = 0x5a IP_FLOWTYPE = 0x5b 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_RECVFLOWID = 0x5d IP_RECVIF = 0x14 IP_RECVOPTS = 0x5 IP_RECVRETOPTS = 0x6 IP_RECVRSSBUCKETID = 0x5e IP_RECVTOS = 0x44 IP_RECVTTL = 0x41 IP_RETOPTS = 0x8 IP_RF = 0x8000 IP_RSSBUCKETID = 0x5c IP_RSS_LISTEN_BUCKET = 0x1a 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_NOSYNC = 0x800 MAP_PREFAULT_READ = 0x40000 MAP_PRIVATE = 0x2 MAP_RESERVED0020 = 0x20 MAP_RESERVED0040 = 0x40 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 MSG_WAITFORONE = 0x80000 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 NOFLSH = 0x80000000 NOKERNINFO = 0x2000000 NOTE_ATTRIB = 0x8 NOTE_CHILD = 0x4 NOTE_CLOSE = 0x100 NOTE_CLOSE_WRITE = 0x200 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_FILE_POLL = 0x2 NOTE_FORK = 0x40000000 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 NOTE_MSECONDS = 0x2 NOTE_NSECONDS = 0x8 NOTE_OPEN = 0x80 NOTE_PCTRLMASK = 0xf0000000 NOTE_PDATAMASK = 0xfffff NOTE_READ = 0x400 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 OXTABS = 0x4 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_VERIFY = 0x200000 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_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 RLIMIT_NPROC = 0x7 RLIMIT_RSS = 0x5 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_FIXEDMTU = 0x80000 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_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_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_BLACKHOLE = 0x40 RT_CACHING_CONTEXT = 0x1 RT_DEFAULT_FIB = 0x0 RT_HAS_GW = 0x80 RT_HAS_HEADER = 0x10 RT_HAS_HEADER_BIT = 0x4 RT_L2_ME = 0x4 RT_L2_ME_BIT = 0x2 RT_LLE_CACHE = 0x100 RT_MAY_LOOP = 0x8 RT_MAY_LOOP_BIT = 0x3 RT_NORTREF = 0x2 RT_REJECT = 0x20 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 SIOCAIFADDR = 0x8040691a SIOCAIFGROUP = 0x80286987 SIOCATMARK = 0x40047307 SIOCDELMULTI = 0x80206932 SIOCDIFADDR = 0x80206919 SIOCDIFGROUP = 0x80286989 SIOCDIFPHYADDR = 0x80206949 SIOCGDRVSPEC = 0xc028697b SIOCGETSGCNT = 0xc0207210 SIOCGETVIFCNT = 0xc028720f SIOCGHIWAT = 0x40047301 SIOCGI2C = 0xc020693d 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 SIOCGIFXMEDIA = 0xc030698b SIOCGLOWAT = 0x40047303 SIOCGPGRP = 0x40047309 SIOCGPRIVATE_0 = 0xc0206950 SIOCGPRIVATE_1 = 0xc0206951 SIOCGTUNFIB = 0xc020695e 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 SIOCSLOWAT = 0x80047302 SIOCSPGRP = 0x80047308 SIOCSTUNFIB = 0x8020695f 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 TAB0 = 0x0 TAB3 = 0x4 TABDLY = 0x4 TCIFLUSH = 0x1 TCIOFF = 0x3 TCIOFLUSH = 0x3 TCION = 0x4 TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 TCP_CA_NAME_MAX = 0x10 TCP_CCALGOOPT = 0x41 TCP_CONGESTION = 0x40 TCP_FASTOPEN = 0x401 TCP_FUNCTION_BLK = 0x2000 TCP_FUNCTION_NAME_LEN_MAX = 0x20 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_PCAP_IN = 0x1000 TCP_PCAP_OUT = 0x800 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go000066400000000000000000002023611317166637100242730ustar00rootroot00000000000000// mkerrors.sh // Code generated by the command above; see README.md. 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 ALTWERASE = 0x200 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 = 0x4010426e 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 = 0x8010426d 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_MOD = 0x90 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 BPF_XOR = 0xa0 BRKINT = 0x2 CAP_ACCEPT = 0x200000020000000 CAP_ACL_CHECK = 0x400000000010000 CAP_ACL_DELETE = 0x400000000020000 CAP_ACL_GET = 0x400000000040000 CAP_ACL_SET = 0x400000000080000 CAP_ALL0 = 0x20007ffffffffff CAP_ALL1 = 0x4000000001fffff CAP_BIND = 0x200000040000000 CAP_BINDAT = 0x200008000000400 CAP_CHFLAGSAT = 0x200000000001400 CAP_CONNECT = 0x200000080000000 CAP_CONNECTAT = 0x200010000000400 CAP_CREATE = 0x200000000000040 CAP_EVENT = 0x400000000000020 CAP_EXTATTR_DELETE = 0x400000000001000 CAP_EXTATTR_GET = 0x400000000002000 CAP_EXTATTR_LIST = 0x400000000004000 CAP_EXTATTR_SET = 0x400000000008000 CAP_FCHDIR = 0x200000000000800 CAP_FCHFLAGS = 0x200000000001000 CAP_FCHMOD = 0x200000000002000 CAP_FCHMODAT = 0x200000000002400 CAP_FCHOWN = 0x200000000004000 CAP_FCHOWNAT = 0x200000000004400 CAP_FCNTL = 0x200000000008000 CAP_FCNTL_ALL = 0x78 CAP_FCNTL_GETFL = 0x8 CAP_FCNTL_GETOWN = 0x20 CAP_FCNTL_SETFL = 0x10 CAP_FCNTL_SETOWN = 0x40 CAP_FEXECVE = 0x200000000000080 CAP_FLOCK = 0x200000000010000 CAP_FPATHCONF = 0x200000000020000 CAP_FSCK = 0x200000000040000 CAP_FSTAT = 0x200000000080000 CAP_FSTATAT = 0x200000000080400 CAP_FSTATFS = 0x200000000100000 CAP_FSYNC = 0x200000000000100 CAP_FTRUNCATE = 0x200000000000200 CAP_FUTIMES = 0x200000000200000 CAP_FUTIMESAT = 0x200000000200400 CAP_GETPEERNAME = 0x200000100000000 CAP_GETSOCKNAME = 0x200000200000000 CAP_GETSOCKOPT = 0x200000400000000 CAP_IOCTL = 0x400000000000080 CAP_IOCTLS_ALL = 0x7fffffff CAP_KQUEUE = 0x400000000100040 CAP_KQUEUE_CHANGE = 0x400000000100000 CAP_KQUEUE_EVENT = 0x400000000000040 CAP_LINKAT_SOURCE = 0x200020000000400 CAP_LINKAT_TARGET = 0x200000000400400 CAP_LISTEN = 0x200000800000000 CAP_LOOKUP = 0x200000000000400 CAP_MAC_GET = 0x400000000000001 CAP_MAC_SET = 0x400000000000002 CAP_MKDIRAT = 0x200000000800400 CAP_MKFIFOAT = 0x200000001000400 CAP_MKNODAT = 0x200000002000400 CAP_MMAP = 0x200000000000010 CAP_MMAP_R = 0x20000000000001d CAP_MMAP_RW = 0x20000000000001f CAP_MMAP_RWX = 0x20000000000003f CAP_MMAP_RX = 0x20000000000003d CAP_MMAP_W = 0x20000000000001e CAP_MMAP_WX = 0x20000000000003e CAP_MMAP_X = 0x20000000000003c CAP_PDGETPID = 0x400000000000200 CAP_PDKILL = 0x400000000000800 CAP_PDWAIT = 0x400000000000400 CAP_PEELOFF = 0x200001000000000 CAP_POLL_EVENT = 0x400000000000020 CAP_PREAD = 0x20000000000000d CAP_PWRITE = 0x20000000000000e CAP_READ = 0x200000000000001 CAP_RECV = 0x200000000000001 CAP_RENAMEAT_SOURCE = 0x200000004000400 CAP_RENAMEAT_TARGET = 0x200040000000400 CAP_RIGHTS_VERSION = 0x0 CAP_RIGHTS_VERSION_00 = 0x0 CAP_SEEK = 0x20000000000000c CAP_SEEK_TELL = 0x200000000000004 CAP_SEM_GETVALUE = 0x400000000000004 CAP_SEM_POST = 0x400000000000008 CAP_SEM_WAIT = 0x400000000000010 CAP_SEND = 0x200000000000002 CAP_SETSOCKOPT = 0x200002000000000 CAP_SHUTDOWN = 0x200004000000000 CAP_SOCK_CLIENT = 0x200007780000003 CAP_SOCK_SERVER = 0x200007f60000003 CAP_SYMLINKAT = 0x200000008000400 CAP_TTYHOOK = 0x400000000000100 CAP_UNLINKAT = 0x200000010000400 CAP_UNUSED0_44 = 0x200080000000000 CAP_UNUSED0_57 = 0x300000000000000 CAP_UNUSED1_22 = 0x400000000200000 CAP_UNUSED1_57 = 0x500000000000000 CAP_WRITE = 0x200000000000002 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 CRTSCTS = 0x30000 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_BREDR_BB = 0xff DLT_BLUETOOTH_HCI_H4 = 0xbb DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 DLT_BLUETOOTH_LE_LL = 0xfb DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 DLT_BLUETOOTH_LINUX_MONITOR = 0xfe DLT_CAN20B = 0xbe DLT_CAN_SOCKETCAN = 0xe3 DLT_CHAOS = 0x5 DLT_CHDLC = 0x68 DLT_CISCO_IOS = 0x76 DLT_CLASS_NETBSD_RAWAF = 0x2240000 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_EPON = 0x103 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_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_INFINIBAND = 0xf7 DLT_IPFILTER = 0x74 DLT_IPMB = 0xc7 DLT_IPMB_LINUX = 0xd1 DLT_IPMI_HPM_2 = 0x104 DLT_IPNET = 0xe2 DLT_IPOIB = 0xf2 DLT_IPV4 = 0xe4 DLT_IPV6 = 0xe5 DLT_IP_OVER_FC = 0x7a DLT_ISO_14443 = 0x108 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 = 0x109 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_NETLINK = 0xfd DLT_NFC_LLCP = 0xf5 DLT_NFLOG = 0xef DLT_NG40 = 0xf4 DLT_NULL = 0x0 DLT_PCI_EXP = 0x7d DLT_PFLOG = 0x75 DLT_PFSYNC = 0x79 DLT_PKTAP = 0x102 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_PPP_WITH_DIRECTION = 0xa6 DLT_PRISM_HEADER = 0x77 DLT_PROFIBUS_DL = 0x101 DLT_PRONET = 0x4 DLT_RAIF1 = 0xc6 DLT_RAW = 0xc DLT_RDS = 0x109 DLT_REDBACK_SMARTEDGE = 0x20 DLT_RIO = 0x7c DLT_RTAC_SERIAL = 0xfa DLT_SCCP = 0x8e DLT_SCTP = 0xf8 DLT_SITA = 0xc4 DLT_SLIP = 0x8 DLT_SLIP_BSDOS = 0xd DLT_STANAG_5066_D_PDU = 0xed DLT_SUNATM = 0x7b DLT_SYMANTEC_FIREWALL = 0x63 DLT_TZSP = 0x80 DLT_USB = 0xba DLT_USBPCAP = 0xf9 DLT_USB_FREEBSD = 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_WATTSTOPPER_DLM = 0x107 DLT_WIHART = 0xdf DLT_WIRESHARK_UPPER_PDU = 0xfc DLT_X2E_SERIAL = 0xd5 DLT_X2E_XORAYA = 0xd6 DLT_ZWAVE_R1_R2 = 0x105 DLT_ZWAVE_R3 = 0x106 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_PROCDESC = -0x8 EVFILT_READ = -0x1 EVFILT_SENDFILE = -0xc EVFILT_SIGNAL = -0x6 EVFILT_SYSCOUNT = 0xc 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_FLAG2 = 0x4000 EV_FORCEONESHOT = 0x100 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 = 0x218f52 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_STATICARP = 0x80000 IFF_UP = 0x1 IFNAMSIZ = 0x10 IFT_BRIDGE = 0xd1 IFT_CARP = 0xf8 IFT_IEEE1394 = 0x90 IFT_INFINIBAND = 0xc7 IFT_L2VLAN = 0x87 IFT_L3IPVLAN = 0x88 IFT_PPP = 0x17 IFT_PROPVIRTUAL = 0x35 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_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_BINDMULTI = 0x41 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_FLOWID = 0x43 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 IPV6_FLOWTYPE = 0x44 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_RECVFLOWID = 0x46 IPV6_RECVHOPLIMIT = 0x25 IPV6_RECVHOPOPTS = 0x27 IPV6_RECVPATHMTU = 0x2b IPV6_RECVPKTINFO = 0x24 IPV6_RECVRSSBUCKETID = 0x47 IPV6_RECVRTHDR = 0x26 IPV6_RECVTCLASS = 0x39 IPV6_RSSBUCKETID = 0x45 IPV6_RSS_LISTEN_BUCKET = 0x42 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_BINDMULTI = 0x19 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_FLOWID = 0x5a IP_FLOWTYPE = 0x5b 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_RECVFLOWID = 0x5d IP_RECVIF = 0x14 IP_RECVOPTS = 0x5 IP_RECVRETOPTS = 0x6 IP_RECVRSSBUCKETID = 0x5e IP_RECVTOS = 0x44 IP_RECVTTL = 0x41 IP_RETOPTS = 0x8 IP_RF = 0x8000 IP_RSSBUCKETID = 0x5c IP_RSS_LISTEN_BUCKET = 0x1a 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_GUARD = 0x2000 MAP_HASSEMAPHORE = 0x200 MAP_NOCORE = 0x20000 MAP_NOSYNC = 0x800 MAP_PREFAULT_READ = 0x40000 MAP_PRIVATE = 0x2 MAP_RESERVED0020 = 0x20 MAP_RESERVED0040 = 0x40 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 MSG_WAITFORONE = 0x80000 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 NOFLSH = 0x80000000 NOKERNINFO = 0x2000000 NOTE_ATTRIB = 0x8 NOTE_CHILD = 0x4 NOTE_CLOSE = 0x100 NOTE_CLOSE_WRITE = 0x200 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_FILE_POLL = 0x2 NOTE_FORK = 0x40000000 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 NOTE_MSECONDS = 0x2 NOTE_NSECONDS = 0x8 NOTE_OPEN = 0x80 NOTE_PCTRLMASK = 0xf0000000 NOTE_PDATAMASK = 0xfffff NOTE_READ = 0x400 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 OXTABS = 0x4 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_VERIFY = 0x200000 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_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 RLIMIT_NPROC = 0x7 RLIMIT_RSS = 0x5 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_FIXEDMTU = 0x80000 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_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_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_BLACKHOLE = 0x40 RT_CACHING_CONTEXT = 0x1 RT_DEFAULT_FIB = 0x0 RT_HAS_GW = 0x80 RT_HAS_HEADER = 0x10 RT_HAS_HEADER_BIT = 0x4 RT_L2_ME = 0x4 RT_L2_ME_BIT = 0x2 RT_LLE_CACHE = 0x100 RT_MAY_LOOP = 0x8 RT_MAY_LOOP_BIT = 0x3 RT_NORTREF = 0x2 RT_REJECT = 0x20 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 SIOCAIFADDR = 0x8040691a SIOCAIFGROUP = 0x80246987 SIOCATMARK = 0x40047307 SIOCDELMULTI = 0x80206932 SIOCDIFADDR = 0x80206919 SIOCDIFGROUP = 0x80246989 SIOCDIFPHYADDR = 0x80206949 SIOCGDRVSPEC = 0xc01c697b SIOCGETSGCNT = 0xc0147210 SIOCGETVIFCNT = 0xc014720f SIOCGHIWAT = 0x40047301 SIOCGHWADDR = 0xc020693e SIOCGI2C = 0xc020693d 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 SIOCGIFXMEDIA = 0xc028698b SIOCGLOWAT = 0x40047303 SIOCGPGRP = 0x40047309 SIOCGPRIVATE_0 = 0xc0206950 SIOCGPRIVATE_1 = 0xc0206951 SIOCGTUNFIB = 0xc020695e 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 SIOCSLOWAT = 0x80047302 SIOCSPGRP = 0x80047308 SIOCSTUNFIB = 0x8020695f 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 TAB0 = 0x0 TAB3 = 0x4 TABDLY = 0x4 TCIFLUSH = 0x1 TCIOFF = 0x3 TCIOFLUSH = 0x3 TCION = 0x4 TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 TCP_CA_NAME_MAX = 0x10 TCP_CCALGOOPT = 0x41 TCP_CONGESTION = 0x40 TCP_FASTOPEN = 0x401 TCP_FUNCTION_BLK = 0x2000 TCP_FUNCTION_NAME_LEN_MAX = 0x20 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_PCAP_IN = 0x1000 TCP_PCAP_OUT = 0x800 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_386.go000066400000000000000000002725701317166637100235720ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32 // Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include -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_IB = 0x1b AF_IEEE802154 = 0x24 AF_INET = 0x2 AF_INET6 = 0xa AF_IPX = 0x4 AF_IRDA = 0x17 AF_ISDN = 0x22 AF_IUCV = 0x20 AF_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80041272 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d BLKRRPART = 0x125f BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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_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 = 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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_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_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 = 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_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 PERF_EVENT_IOC_DISABLE = 0x2401 PERF_EVENT_IOC_ENABLE = 0x2400 PERF_EVENT_IOC_ID = 0x80042407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 PERF_EVENT_IOC_PERIOD = 0x40082404 PERF_EVENT_IOC_REFRESH = 0x2402 PERF_EVENT_IOC_RESET = 0x2403 PERF_EVENT_IOC_SET_BPF = 0x40042408 PERF_EVENT_IOC_SET_FILTER = 0x40042406 PERF_EVENT_IOC_SET_OUTPUT = 0x2405 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 = 0xffffffff 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_GETFPXREGS = 0x12 PTRACE_GETREGS = 0xc PTRACE_GETREGSET = 0x4204 PTRACE_GETSIGINFO = 0x4202 PTRACE_GETSIGMASK = 0x420a PTRACE_GET_THREAD_AREA = 0x19 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_PEEKSIGINFO = 0x4209 PTRACE_PEEKSIGINFO_SHARED = 0x1 PTRACE_PEEKTEXT = 0x1 PTRACE_PEEKUSR = 0x3 PTRACE_POKEDATA = 0x5 PTRACE_POKETEXT = 0x4 PTRACE_POKEUSR = 0x6 PTRACE_SECCOMP_GET_FILTER = 0x420c PTRACE_SEIZE = 0x4206 PTRACE_SETFPREGS = 0xf PTRACE_SETFPXREGS = 0x13 PTRACE_SETOPTIONS = 0x4200 PTRACE_SETREGS = 0xd PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x8 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 RLIMIT_NPROC = 0x6 RLIMIT_RSS = 0x5 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x541b SIOCOUTQ = 0x5411 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 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_REPAIR_WINDOW = 0x1d 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 TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x400854d5 TUNDETACHFILTER = 0x400854d6 TUNGETFEATURES = 0x800454cf TUNGETFILTER = 0x800854db 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb VEOL2 = 0x10 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x6 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go000066400000000000000000002726361317166637100241700ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64 // Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include -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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d BLKRRPART = 0x125f BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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_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_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 PERF_EVENT_IOC_DISABLE = 0x2401 PERF_EVENT_IOC_ENABLE = 0x2400 PERF_EVENT_IOC_ID = 0x80082407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 PERF_EVENT_IOC_PERIOD = 0x40082404 PERF_EVENT_IOC_REFRESH = 0x2402 PERF_EVENT_IOC_RESET = 0x2403 PERF_EVENT_IOC_SET_BPF = 0x40042408 PERF_EVENT_IOC_SET_FILTER = 0x40082406 PERF_EVENT_IOC_SET_OUTPUT = 0x2405 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_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_GETSIGMASK = 0x420a PTRACE_GET_THREAD_AREA = 0x19 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_PEEKSIGINFO = 0x4209 PTRACE_PEEKSIGINFO_SHARED = 0x1 PTRACE_PEEKTEXT = 0x1 PTRACE_PEEKUSR = 0x3 PTRACE_POKEDATA = 0x5 PTRACE_POKETEXT = 0x4 PTRACE_POKEUSR = 0x6 PTRACE_SECCOMP_GET_FILTER = 0x420c PTRACE_SEIZE = 0x4206 PTRACE_SETFPREGS = 0xf PTRACE_SETFPXREGS = 0x13 PTRACE_SETOPTIONS = 0x4200 PTRACE_SETREGS = 0xd PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x8 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 RLIMIT_NPROC = 0x6 RLIMIT_RSS = 0x5 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x541b SIOCOUTQ = 0x5411 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 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_REPAIR_WINDOW = 0x1d 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 TS_COMM_LEN = 0x20 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb VEOL2 = 0x10 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x6 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go000066400000000000000000002731301317166637100240220ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include // Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80041272 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d BLKRRPART = 0x125f BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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_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 = 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 = 0x10000 O_DIRECTORY = 0x4000 O_DSYNC = 0x1000 O_EXCL = 0x80 O_FSYNC = 0x101000 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 = 0x101000 O_SYNC = 0x101000 O_TMPFILE = 0x404000 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 PERF_EVENT_IOC_DISABLE = 0x2401 PERF_EVENT_IOC_ENABLE = 0x2400 PERF_EVENT_IOC_ID = 0x80042407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 PERF_EVENT_IOC_PERIOD = 0x40082404 PERF_EVENT_IOC_REFRESH = 0x2402 PERF_EVENT_IOC_RESET = 0x2403 PERF_EVENT_IOC_SET_BPF = 0x40042408 PERF_EVENT_IOC_SET_FILTER = 0x40042406 PERF_EVENT_IOC_SET_OUTPUT = 0x2405 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 = 0xffffffff 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_GETCRUNCHREGS = 0x19 PTRACE_GETEVENTMSG = 0x4201 PTRACE_GETFPREGS = 0xe PTRACE_GETHBPREGS = 0x1d PTRACE_GETREGS = 0xc PTRACE_GETREGSET = 0x4204 PTRACE_GETSIGINFO = 0x4202 PTRACE_GETSIGMASK = 0x420a PTRACE_GETVFPREGS = 0x1b PTRACE_GETWMMXREGS = 0x12 PTRACE_GET_THREAD_AREA = 0x16 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_PEEKSIGINFO = 0x4209 PTRACE_PEEKSIGINFO_SHARED = 0x1 PTRACE_PEEKTEXT = 0x1 PTRACE_PEEKUSR = 0x3 PTRACE_POKEDATA = 0x5 PTRACE_POKETEXT = 0x4 PTRACE_POKEUSR = 0x6 PTRACE_SECCOMP_GET_FILTER = 0x420c PTRACE_SEIZE = 0x4206 PTRACE_SETCRUNCHREGS = 0x1a PTRACE_SETFPREGS = 0xf PTRACE_SETHBPREGS = 0x1e PTRACE_SETOPTIONS = 0x4200 PTRACE_SETREGS = 0xd PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x8 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 RLIMIT_NPROC = 0x6 RLIMIT_RSS = 0x5 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x541b SIOCOUTQ = 0x5411 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 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_REPAIR_WINDOW = 0x1d 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 TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x400854d5 TUNDETACHFILTER = 0x400854d6 TUNGETFEATURES = 0x800454cf TUNGETFILTER = 0x800854db 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb VEOL2 = 0x10 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x6 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go000066400000000000000000002717101317166637100241760ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char // Code generated by the command above; see README.md. DO NOT EDIT. // +build arm64,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d BLKRRPART = 0x125f BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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 ESR_MAGIC = 0x45535201 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 = 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 = 0x404000 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 PERF_EVENT_IOC_DISABLE = 0x2401 PERF_EVENT_IOC_ENABLE = 0x2400 PERF_EVENT_IOC_ID = 0x80082407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 PERF_EVENT_IOC_PERIOD = 0x40082404 PERF_EVENT_IOC_REFRESH = 0x2402 PERF_EVENT_IOC_RESET = 0x2403 PERF_EVENT_IOC_SET_BPF = 0x40042408 PERF_EVENT_IOC_SET_FILTER = 0x40082406 PERF_EVENT_IOC_SET_OUTPUT = 0x2405 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_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 = 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_PEEKSIGINFO = 0x4209 PTRACE_PEEKSIGINFO_SHARED = 0x1 PTRACE_PEEKTEXT = 0x1 PTRACE_PEEKUSR = 0x3 PTRACE_POKEDATA = 0x5 PTRACE_POKETEXT = 0x4 PTRACE_POKEUSR = 0x6 PTRACE_SECCOMP_GET_FILTER = 0x420c 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x8 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 RLIMIT_NPROC = 0x6 RLIMIT_RSS = 0x5 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x541b SIOCOUTQ = 0x5411 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 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_REPAIR_WINDOW = 0x1d 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 TS_COMM_LEN = 0x20 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb VEOL2 = 0x10 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x6 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go000066400000000000000000002737731317166637100242300ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d BLKRRPART = 0x2000125f BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 F_GETFD = 0x1 F_GETFL = 0x3 F_GETLEASE = 0x401 F_GETLK = 0x21 F_GETLK64 = 0x21 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 = 0x22 F_SETLK64 = 0x22 F_SETLKW = 0x23 F_SETLKW64 = 0x23 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 IBSHIFT = 0x10 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_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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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 MCL_ONFAULT = 0x4 MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MSG_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 = 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 = 0x2000 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 PERF_EVENT_IOC_DISABLE = 0x20002401 PERF_EVENT_IOC_ENABLE = 0x20002400 PERF_EVENT_IOC_ID = 0x40042407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 PERF_EVENT_IOC_PERIOD = 0x80082404 PERF_EVENT_IOC_REFRESH = 0x20002402 PERF_EVENT_IOC_RESET = 0x20002403 PERF_EVENT_IOC_SET_BPF = 0x80042408 PERF_EVENT_IOC_SET_FILTER = 0x80042406 PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 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 = 0xffffffff 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_SECCOMP_GET_FILTER = 0x420c 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x9 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x5 RLIMIT_NPROC = 0x8 RLIMIT_RSS = 0x7 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x40047307 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x40047309 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x467f SIOCOUTQ = 0x7472 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x80047308 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x1 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x80 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x2 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1009 SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d TCGETS2 = 0x4030542a 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_REPAIR_WINDOW = 0x1d 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 = 0x5410 TCSBRK = 0x5405 TCSBRKP = 0x5486 TCSETA = 0x5402 TCSETAF = 0x5404 TCSETAW = 0x5403 TCSETS = 0x540e TCSETS2 = 0x8030542b TCSETSF = 0x5410 TCSETSF2 = 0x8030542d TCSETSW = 0x540f TCSETSW2 = 0x8030542c 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 TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x800854d5 TUNDETACHFILTER = 0x800854d6 TUNGETFEATURES = 0x400454cf TUNGETFILTER = 0x400854db 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x10 VEOL = 0x11 VEOL2 = 0x6 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x4 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 = 0x20 WSTOPPED = 0x2 WUNTRACED = 0x2 XATTR_CREATE = 0x1 XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) // 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go000066400000000000000000002737561317166637100244030ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips64,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d BLKRRPART = 0x2000125f BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 IBSHIFT = 0x10 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_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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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 MCL_ONFAULT = 0x4 MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MSG_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 = 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 PERF_EVENT_IOC_DISABLE = 0x20002401 PERF_EVENT_IOC_ENABLE = 0x20002400 PERF_EVENT_IOC_ID = 0x40082407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 PERF_EVENT_IOC_PERIOD = 0x80082404 PERF_EVENT_IOC_REFRESH = 0x20002402 PERF_EVENT_IOC_RESET = 0x20002403 PERF_EVENT_IOC_SET_BPF = 0x80042408 PERF_EVENT_IOC_SET_FILTER = 0x80082406 PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 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_SECCOMP_GET_FILTER = 0x420c 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x9 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x5 RLIMIT_NPROC = 0x8 RLIMIT_RSS = 0x7 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x40047307 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x40047309 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x467f SIOCOUTQ = 0x7472 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x80047308 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x1 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x80 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x2 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1009 SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d TCGETS2 = 0x4030542a 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_REPAIR_WINDOW = 0x1d 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 = 0x5410 TCSBRK = 0x5405 TCSBRKP = 0x5486 TCSETA = 0x5402 TCSETAF = 0x5404 TCSETAW = 0x5403 TCSETS = 0x540e TCSETS2 = 0x8030542b TCSETSF = 0x5410 TCSETSF2 = 0x8030542d TCSETSW = 0x540f TCSETSW2 = 0x8030542c 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 TS_COMM_LEN = 0x20 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x10 VEOL = 0x11 VEOL2 = 0x6 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x4 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) // 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go000066400000000000000000002737601317166637100247170ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips64le,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d BLKRRPART = 0x2000125f BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 IBSHIFT = 0x10 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_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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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 MCL_ONFAULT = 0x4 MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MSG_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 = 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 PERF_EVENT_IOC_DISABLE = 0x20002401 PERF_EVENT_IOC_ENABLE = 0x20002400 PERF_EVENT_IOC_ID = 0x40082407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 PERF_EVENT_IOC_PERIOD = 0x80082404 PERF_EVENT_IOC_REFRESH = 0x20002402 PERF_EVENT_IOC_RESET = 0x20002403 PERF_EVENT_IOC_SET_BPF = 0x80042408 PERF_EVENT_IOC_SET_FILTER = 0x80082406 PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 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_SECCOMP_GET_FILTER = 0x420c 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x9 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x5 RLIMIT_NPROC = 0x8 RLIMIT_RSS = 0x7 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x40047307 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x40047309 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x467f SIOCOUTQ = 0x7472 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x80047308 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x1 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x80 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x2 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1009 SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d TCGETS2 = 0x4030542a 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_REPAIR_WINDOW = 0x1d 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 = 0x5410 TCSBRK = 0x5405 TCSBRKP = 0x5486 TCSETA = 0x5402 TCSETAF = 0x5404 TCSETAW = 0x5403 TCSETS = 0x540e TCSETS2 = 0x8030542b TCSETSF = 0x5410 TCSETSF2 = 0x8030542d TCSETSW = 0x540f TCSETSW2 = 0x8030542c 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 TS_COMM_LEN = 0x20 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x10 VEOL = 0x11 VEOL2 = 0x6 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x4 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) // 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go000066400000000000000000002737751317166637100245530ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include // Code generated by the command above; see README.md. DO NOT EDIT. // +build mipsle,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d BLKRRPART = 0x2000125f BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 F_GETFD = 0x1 F_GETFL = 0x3 F_GETLEASE = 0x401 F_GETLK = 0x21 F_GETLK64 = 0x21 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 = 0x22 F_SETLK64 = 0x22 F_SETLKW = 0x23 F_SETLKW64 = 0x23 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 IBSHIFT = 0x10 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_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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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 MCL_ONFAULT = 0x4 MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MSG_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 = 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 = 0x2000 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 PERF_EVENT_IOC_DISABLE = 0x20002401 PERF_EVENT_IOC_ENABLE = 0x20002400 PERF_EVENT_IOC_ID = 0x40042407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 PERF_EVENT_IOC_PERIOD = 0x80082404 PERF_EVENT_IOC_REFRESH = 0x20002402 PERF_EVENT_IOC_RESET = 0x20002403 PERF_EVENT_IOC_SET_BPF = 0x80042408 PERF_EVENT_IOC_SET_FILTER = 0x80042406 PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 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 = 0xffffffff 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_SECCOMP_GET_FILTER = 0x420c 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x9 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x5 RLIMIT_NPROC = 0x8 RLIMIT_RSS = 0x7 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x40047307 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x40047309 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x467f SIOCOUTQ = 0x7472 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x80047308 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x1 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x80 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x2 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1009 SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d TCGETS2 = 0x4030542a 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_REPAIR_WINDOW = 0x1d 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 = 0x5410 TCSBRK = 0x5405 TCSBRKP = 0x5486 TCSETA = 0x5402 TCSETAF = 0x5404 TCSETAW = 0x5403 TCSETS = 0x540e TCSETS2 = 0x8030542b TCSETSF = 0x5410 TCSETSF2 = 0x8030542d TCSETSW = 0x540f TCSETSW2 = 0x8030542c 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 TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x800854d5 TUNDETACHFILTER = 0x800854d6 TUNGETFEATURES = 0x400454cf TUNGETFILTER = 0x400854db 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x10 VEOL = 0x11 VEOL2 = 0x6 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x4 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 = 0x20 WSTOPPED = 0x2 WUNTRACED = 0x2 XATTR_CREATE = 0x1 XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) // 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go000066400000000000000000003004171317166637100241760ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include // Code generated by the command above; see README.md. DO NOT EDIT. // +build ppc64,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d BLKRRPART = 0x2000125f BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 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_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 = 0x8000 BSDLY = 0x8000 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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_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 = 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 = 0x10000000 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 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_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_HDRINCL = 0x24 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 = 0x80 ISTRIP = 0x20 IUCLC = 0x1000 IUTF8 = 0x4000 IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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 MCL_ONFAULT = 0x8000 MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MSG_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 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_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 = 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 = 0x404000 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 = 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 PERF_EVENT_IOC_DISABLE = 0x20002401 PERF_EVENT_IOC_ENABLE = 0x20002400 PERF_EVENT_IOC_ID = 0x40082407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 PERF_EVENT_IOC_PERIOD = 0x80082404 PERF_EVENT_IOC_REFRESH = 0x20002402 PERF_EVENT_IOC_RESET = 0x20002403 PERF_EVENT_IOC_SET_BPF = 0x80042408 PERF_EVENT_IOC_SET_FILTER = 0x80082406 PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 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_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_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 = 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_PEEKSIGINFO = 0x4209 PTRACE_PEEKSIGINFO_SHARED = 0x1 PTRACE_PEEKTEXT = 0x1 PTRACE_PEEKUSR = 0x3 PTRACE_POKEDATA = 0x5 PTRACE_POKETEXT = 0x4 PTRACE_POKEUSR = 0x6 PTRACE_SECCOMP_GET_FILTER = 0x420c 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x8 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 RLIMIT_NPROC = 0x6 RLIMIT_RSS = 0x5 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x4004667f SIOCOUTQ = 0x40047473 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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 = 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 TCFLSH = 0x2000741f TCGETA = 0x40147417 TCGETS = 0x402c7413 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_REPAIR_WINDOW = 0x1d 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 = 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 TS_COMM_LEN = 0x20 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0x10 VEOF = 0x4 VEOL = 0x6 VEOL2 = 0x8 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x5 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go000066400000000000000000003004211317166637100245120ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include // Code generated by the command above; see README.md. DO NOT EDIT. // +build ppc64le,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d BLKRRPART = 0x2000125f BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 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_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 = 0x8000 BSDLY = 0x8000 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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_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 = 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 = 0x10000000 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 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_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_HDRINCL = 0x24 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 = 0x80 ISTRIP = 0x20 IUCLC = 0x1000 IUTF8 = 0x4000 IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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 MCL_ONFAULT = 0x8000 MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MSG_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 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_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 = 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 = 0x404000 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 = 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 PERF_EVENT_IOC_DISABLE = 0x20002401 PERF_EVENT_IOC_ENABLE = 0x20002400 PERF_EVENT_IOC_ID = 0x40082407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 PERF_EVENT_IOC_PERIOD = 0x80082404 PERF_EVENT_IOC_REFRESH = 0x20002402 PERF_EVENT_IOC_RESET = 0x20002403 PERF_EVENT_IOC_SET_BPF = 0x80042408 PERF_EVENT_IOC_SET_FILTER = 0x80082406 PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 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_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_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 = 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_PEEKSIGINFO = 0x4209 PTRACE_PEEKSIGINFO_SHARED = 0x1 PTRACE_PEEKTEXT = 0x1 PTRACE_PEEKUSR = 0x3 PTRACE_POKEDATA = 0x5 PTRACE_POKETEXT = 0x4 PTRACE_POKEUSR = 0x6 PTRACE_SECCOMP_GET_FILTER = 0x420c 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x8 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 RLIMIT_NPROC = 0x6 RLIMIT_RSS = 0x5 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x4004667f SIOCOUTQ = 0x40047473 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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 = 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 TCFLSH = 0x2000741f TCGETA = 0x40147417 TCGETS = 0x402c7413 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_REPAIR_WINDOW = 0x1d 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 = 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 TS_COMM_LEN = 0x20 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0x10 VEOF = 0x4 VEOL = 0x6 VEOL2 = 0x8 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x5 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go000066400000000000000000003002221317166637100241220ustar00rootroot00000000000000// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char // Code generated by the command above; see README.md. DO NOT EDIT. // +build s390x,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2b 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_QIPCRTR = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d BLKRRPART = 0x125f BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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_HSR = 0x892f 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_MACSEC = 0x88e5 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 FS_ENCRYPTION_MODE_INVALID = 0x0 FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 FS_KEY_DESCRIPTOR_SIZE = 0x8 FS_KEY_DESC_PREFIX = "fscrypt:" FS_KEY_DESC_PREFIX_SIZE = 0x8 FS_MAX_KEY_SIZE = 0x40 FS_POLICY_FLAGS_PAD_16 = 0x2 FS_POLICY_FLAGS_PAD_32 = 0x3 FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 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 GENL_ADMIN_PERM = 0x1 GENL_CMD_CAP_DO = 0x2 GENL_CMD_CAP_DUMP = 0x4 GENL_CMD_CAP_HASPOL = 0x8 GENL_HDRLEN = 0x4 GENL_ID_CTRL = 0x10 GENL_ID_PMCRAID = 0x12 GENL_ID_VFS_DQUOT = 0x11 GENL_MAX_ID = 0x3ff GENL_MIN_ID = 0x10 GENL_NAMSIZ = 0x10 GENL_START_ALLOC = 0x13 GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 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_HDRINCL = 0x24 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 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CHOWN = 0x4 KEYCTL_CLEAR = 0x7 KEYCTL_DESCRIBE = 0x6 KEYCTL_DH_COMPUTE = 0x17 KEYCTL_GET_KEYRING_ID = 0x0 KEYCTL_GET_PERSISTENT = 0x16 KEYCTL_GET_SECURITY = 0x11 KEYCTL_INSTANTIATE = 0xc KEYCTL_INSTANTIATE_IOV = 0x14 KEYCTL_INVALIDATE = 0x15 KEYCTL_JOIN_SESSION_KEYRING = 0x1 KEYCTL_LINK = 0x8 KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 KEYCTL_SETPERM = 0x5 KEYCTL_SET_REQKEY_KEYRING = 0xe KEYCTL_SET_TIMEOUT = 0xf KEYCTL_UNLINK = 0x9 KEYCTL_UPDATE = 0x2 KEY_REQKEY_DEFL_DEFAULT = 0x0 KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 KEY_REQKEY_DEFL_NO_CHANGE = -0x1 KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 KEY_REQKEY_DEFL_USER_KEYRING = 0x4 KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 KEY_SPEC_GROUP_KEYRING = -0x6 KEY_SPEC_PROCESS_KEYRING = -0x2 KEY_SPEC_REQKEY_AUTH_KEY = -0x7 KEY_SPEC_REQUESTOR_KEYRING = -0x8 KEY_SPEC_SESSION_KEYRING = -0x3 KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 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_FREE = 0x8 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_BATCH = 0x40000 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_BORN = 0x20000000 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_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 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 MS_VERBOSE = 0x8000 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 PERF_EVENT_IOC_DISABLE = 0x2401 PERF_EVENT_IOC_ENABLE = 0x2400 PERF_EVENT_IOC_ID = 0x80082407 PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 PERF_EVENT_IOC_PERIOD = 0x40082404 PERF_EVENT_IOC_REFRESH = 0x2402 PERF_EVENT_IOC_RESET = 0x2403 PERF_EVENT_IOC_SET_BPF = 0x40042408 PERF_EVENT_IOC_SET_FILTER = 0x40082406 PERF_EVENT_IOC_SET_OUTPUT = 0x2405 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_LOCKS = 0xa RLIMIT_MEMLOCK = 0x8 RLIMIT_MSGQUEUE = 0xc RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 RLIMIT_NPROC = 0x6 RLIMIT_RSS = 0x5 RLIMIT_RTPRIO = 0xe RLIMIT_RTTIME = 0xf RLIMIT_SIGPENDING = 0xb 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 = 0x19 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x19 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_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x541b SIOCOUTQ = 0x5411 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_CAN_BASE = 0x64 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e SO_ATTACH_BPF = 0x32 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x33 SO_ATTACH_REUSEPORT_EBPF = 0x34 SO_BINDTODEVICE = 0x19 SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 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_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 TASKSTATS_CMD_ATTR_MAX = 0x4 TASKSTATS_CMD_MAX = 0x2 TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 TASKSTATS_VERSION = 0x8 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_REPAIR_WINDOW = 0x1d 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 TS_COMM_LEN = 0x20 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 UMOUNT_NOFOLLOW = 0x8 VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb VEOL2 = 0x10 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x6 VM_SOCKETS_INVALID_VERSION = 0xffffffff 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 XATTR_CREATE = 0x1 XATTR_REPLACE = 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go000066400000000000000000002476601317166637100245360ustar00rootroot00000000000000// mkerrors.sh -m64 // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT // +build sparc64,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_KCM = 0x29 AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 AF_MAX = 0x2a 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 ALG_OP_DECRYPT = 0x0 ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 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 ASI_LEON_DFLUSH = 0x11 ASI_LEON_IFLUSH = 0x10 ASI_LEON_MMUFLUSH = 0x18 B0 = 0x0 B1000000 = 0x100c B110 = 0x3 B115200 = 0x1002 B1152000 = 0x100d B1200 = 0x9 B134 = 0x4 B150 = 0x5 B1500000 = 0x100e B153600 = 0x1006 B1800 = 0xa B19200 = 0xe B200 = 0x6 B2000000 = 0x100f B230400 = 0x1003 B2400 = 0xb B300 = 0x7 B307200 = 0x1007 B38400 = 0xf B460800 = 0x1004 B4800 = 0xc B50 = 0x1 B500000 = 0x100a B57600 = 0x1001 B576000 = 0x100b B600 = 0x8 B614400 = 0x1008 B75 = 0x2 B76800 = 0x1005 B921600 = 0x1009 B9600 = 0xd BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d BLKRRPART = 0x125f BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 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 CAN_BCM = 0x2 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff CAN_ERR_FLAG = 0x20000000 CAN_ERR_MASK = 0x1fffffff CAN_INV_FILTER = 0x20000000 CAN_ISOTP = 0x6 CAN_MAX_DLC = 0x8 CAN_MAX_DLEN = 0x8 CAN_MCNET = 0x5 CAN_MTU = 0x10 CAN_NPROTO = 0x7 CAN_RAW = 0x1 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff CAN_TP16 = 0x3 CAN_TP20 = 0x4 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 EMT_TAGOVF = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 ENCODING_MANCHESTER = 0x5 ENCODING_NRZ = 0x1 ENCODING_NRZI = 0x2 EPOLLERR = 0x8 EPOLLET = 0x80000000 EPOLLEXCLUSIVE = 0x10000000 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 = 0x400000 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_HSR = 0x892f 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_MACSEC = 0x88e5 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 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 FALLOC_FL_NO_HIDE_STALE = 0x4 FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_ZERO_RANGE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 F_GETFD = 0x1 F_GETFL = 0x3 F_GETLEASE = 0x401 F_GETLK = 0x7 F_GETLK64 = 0x7 F_GETOWN = 0x5 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 = 0x1 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 F_SETLK = 0x8 F_SETLK64 = 0x8 F_SETLKW = 0x9 F_SETLKW64 = 0x9 F_SETOWN = 0x6 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 = 0x3 F_WRLCK = 0x2 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 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 = 0x400000 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 = 0x4000 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_HDRINCL = 0x24 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_FREE = 0x8 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 = 0x200 MAP_HUGETLB = 0x40000 MAP_HUGE_MASK = 0x3f MAP_HUGE_SHIFT = 0x1a MAP_LOCKED = 0x100 MAP_NONBLOCK = 0x10000 MAP_NORESERVE = 0x40 MAP_POPULATE = 0x8000 MAP_PRIVATE = 0x2 MAP_RENAME = 0x20 MAP_SHARED = 0x1 MAP_STACK = 0x20000 MAP_TYPE = 0xf MCL_CURRENT = 0x2000 MCL_FUTURE = 0x4000 MCL_ONFAULT = 0x8000 MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MSG_BATCH = 0x40000 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 = 0x8 O_ASYNC = 0x40 O_CLOEXEC = 0x400000 O_CREAT = 0x200 O_DIRECT = 0x100000 O_DIRECTORY = 0x10000 O_DSYNC = 0x2000 O_EXCL = 0x800 O_FSYNC = 0x802000 O_LARGEFILE = 0x0 O_NDELAY = 0x4004 O_NOATIME = 0x200000 O_NOCTTY = 0x8000 O_NOFOLLOW = 0x20000 O_NONBLOCK = 0x4000 O_PATH = 0x1000000 O_RDONLY = 0x0 O_RDWR = 0x2 O_RSYNC = 0x802000 O_SYNC = 0x802000 O_TMPFILE = 0x2010000 O_TRUNC = 0x400 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_GETFPAREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETFPREGS64 = 0x19 PTRACE_GETREGS = 0xc PTRACE_GETREGS64 = 0x16 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 = 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_PEEKSIGINFO = 0x4209 PTRACE_PEEKSIGINFO_SHARED = 0x1 PTRACE_PEEKTEXT = 0x1 PTRACE_PEEKUSR = 0x3 PTRACE_POKEDATA = 0x5 PTRACE_POKETEXT = 0x4 PTRACE_POKEUSR = 0x6 PTRACE_READDATA = 0x10 PTRACE_READTEXT = 0x12 PTRACE_SECCOMP_GET_FILTER = 0x420c PTRACE_SEIZE = 0x4206 PTRACE_SETFPAREGS = 0x15 PTRACE_SETFPREGS = 0xf PTRACE_SETFPREGS64 = 0x1a PTRACE_SETOPTIONS = 0x4200 PTRACE_SETREGS = 0xd PTRACE_SETREGS64 = 0x17 PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b PTRACE_SINGLESTEP = 0x9 PTRACE_SPARC_DETACH = 0xb PTRACE_SYSCALL = 0x18 PTRACE_TRACEME = 0x0 PTRACE_WRITEDATA = 0x11 PTRACE_WRITETEXT = 0x13 PT_FP = 0x48 PT_G0 = 0x10 PT_G1 = 0x14 PT_G2 = 0x18 PT_G3 = 0x1c PT_G4 = 0x20 PT_G5 = 0x24 PT_G6 = 0x28 PT_G7 = 0x2c PT_I0 = 0x30 PT_I1 = 0x34 PT_I2 = 0x38 PT_I3 = 0x3c PT_I4 = 0x40 PT_I5 = 0x44 PT_I6 = 0x48 PT_I7 = 0x4c PT_NPC = 0x8 PT_PC = 0x4 PT_PSR = 0x0 PT_REGS_MAGIC = 0x57ac6c00 PT_TNPC = 0x90 PT_TPC = 0x88 PT_TSTATE = 0x80 PT_V9_FP = 0x70 PT_V9_G0 = 0x0 PT_V9_G1 = 0x8 PT_V9_G2 = 0x10 PT_V9_G3 = 0x18 PT_V9_G4 = 0x20 PT_V9_G5 = 0x28 PT_V9_G6 = 0x30 PT_V9_G7 = 0x38 PT_V9_I0 = 0x40 PT_V9_I1 = 0x48 PT_V9_I2 = 0x50 PT_V9_I3 = 0x58 PT_V9_I4 = 0x60 PT_V9_I5 = 0x68 PT_V9_I6 = 0x70 PT_V9_I7 = 0x78 PT_V9_MAGIC = 0x9c PT_V9_TNPC = 0x90 PT_V9_TPC = 0x88 PT_V9_TSTATE = 0x80 PT_V9_Y = 0x98 PT_WIM = 0x10 PT_Y = 0xc RLIMIT_AS = 0x9 RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 RLIMIT_NOFILE = 0x6 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 = 0x18 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_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_MAX = 0x5f 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_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NR_FAMILIES = 0x14 RTM_NR_MSGTYPES = 0x50 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 = 0x23 SCM_TIMESTAMPNS = 0x21 SCM_WIFI_STATUS = 0x25 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 SIOCADDDLCI = 0x8980 SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 SIOCBONDCHANGEACTIVE = 0x8995 SIOCBONDENSLAVE = 0x8990 SIOCBONDINFOQUERY = 0x8994 SIOCBONDRELEASE = 0x8991 SIOCBONDSETHWADDR = 0x8992 SIOCBONDSLAVEINFOQUERY = 0x8993 SIOCBRADDBR = 0x89a0 SIOCBRADDIF = 0x89a2 SIOCBRDELBR = 0x89a1 SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 SIOCDELRT = 0x890c SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 SIOCGHWTSTAMP = 0x89b1 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 SIOCGIFVLAN = 0x8982 SIOCGMIIPHY = 0x8947 SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 SIOCINQ = 0x4004667f SIOCOUTQ = 0x40047473 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 SIOCSHWTSTAMP = 0x89b0 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 SIOCSIFVLAN = 0x8983 SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x400000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 SOCK_NONBLOCK = 0x4000 SOCK_PACKET = 0xa SOCK_RAW = 0x3 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_STREAM = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 SOL_CAIF = 0x116 SOL_DCCP = 0x10d SOL_DECNET = 0x105 SOL_ICMPV6 = 0x3a SOL_IP = 0x0 SOL_IPV6 = 0x29 SOL_IRDA = 0x10a SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 SOL_PACKET = 0x107 SOL_PNPIPE = 0x113 SOL_PPPOL2TP = 0x111 SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x8000 SO_ATTACH_BPF = 0x34 SO_ATTACH_FILTER = 0x1a SO_ATTACH_REUSEPORT_CBPF = 0x35 SO_ATTACH_REUSEPORT_EBPF = 0x36 SO_BINDTODEVICE = 0xd SO_BPF_EXTENSIONS = 0x32 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0x400 SO_BUSY_POLL = 0x30 SO_CNX_ADVICE = 0x37 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 = 0x33 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x28 SO_MARK = 0x22 SO_MAX_PACING_RATE = 0x31 SO_NOFCS = 0x27 SO_NO_CHECK = 0xb SO_OOBINLINE = 0x100 SO_PASSCRED = 0x2 SO_PASSSEC = 0x1f SO_PEEK_OFF = 0x26 SO_PEERCRED = 0x40 SO_PEERNAME = 0x1c SO_PEERSEC = 0x1e SO_PRIORITY = 0xc SO_PROTOCOL = 0x1028 SO_RCVBUF = 0x1002 SO_RCVBUFFORCE = 0x100b SO_RCVLOWAT = 0x800 SO_RCVTIMEO = 0x2000 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_RXQ_OVFL = 0x24 SO_SECURITY_AUTHENTICATION = 0x5001 SO_SECURITY_ENCRYPTION_NETWORK = 0x5004 SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002 SO_SELECT_ERR_QUEUE = 0x29 SO_SNDBUF = 0x1001 SO_SNDBUFFORCE = 0x100a SO_SNDLOWAT = 0x1000 SO_SNDTIMEO = 0x4000 SO_TIMESTAMP = 0x1d SO_TIMESTAMPING = 0x23 SO_TIMESTAMPNS = 0x21 SO_TYPE = 0x1008 SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x25 SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 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 = 0x20005407 TCGETA = 0x40125401 TCGETS = 0x40245408 TCGETS2 = 0x402c540c 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 = 0x20005405 TCSBRKP = 0x5425 TCSETA = 0x80125402 TCSETAF = 0x80125404 TCSETAW = 0x80125403 TCSETS = 0x80245409 TCSETS2 = 0x802c540d TCSETSF = 0x8024540b TCSETSF2 = 0x802c540f TCSETSW = 0x8024540a TCSETSW2 = 0x802c540e TCXONC = 0x20005406 TIOCCBRK = 0x2000747a TIOCCONS = 0x20007424 TIOCEXCL = 0x2000740d TIOCGDEV = 0x40045432 TIOCGETD = 0x40047400 TIOCGEXCL = 0x40045440 TIOCGICOUNT = 0x545d TIOCGLCKTRMIOS = 0x5456 TIOCGPGRP = 0x40047483 TIOCGPKT = 0x40045438 TIOCGPTLCK = 0x40045439 TIOCGPTN = 0x40047486 TIOCGRS485 = 0x40205441 TIOCGSERIAL = 0x541e TIOCGSID = 0x40047485 TIOCGSOFTCAR = 0x40047464 TIOCGWINSZ = 0x40087468 TIOCINQ = 0x4004667f TIOCLINUX = 0x541c TIOCMBIC = 0x8004746b TIOCMBIS = 0x8004746c TIOCMGET = 0x4004746a TIOCMIWAIT = 0x545c TIOCMSET = 0x8004746d 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 = 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 TIOCSBRK = 0x2000747b TIOCSCTTY = 0x20007484 TIOCSERCONFIG = 0x5453 TIOCSERGETLSR = 0x5459 TIOCSERGETMULTI = 0x545a TIOCSERGSTRUCT = 0x5458 TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 TIOCSER_TEMT = 0x1 TIOCSETD = 0x80047401 TIOCSIG = 0x80047488 TIOCSLCKTRMIOS = 0x5457 TIOCSPGRP = 0x80047482 TIOCSPTLCK = 0x80047487 TIOCSRS485 = 0xc0205442 TIOCSSERIAL = 0x541f TIOCSSOFTCAR = 0x80047465 TIOCSTART = 0x2000746e TIOCSTI = 0x80017472 TIOCSTOP = 0x2000746f TIOCSWINSZ = 0x80087467 TIOCVHANGUP = 0x20005437 TOSTOP = 0x100 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 VDSUSP = 0xb VEOF = 0x4 VEOL = 0x5 VEOL2 = 0x6 VERASE = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf VMADDR_CID_ANY = 0xffffffff VMADDR_CID_HOST = 0x2 VMADDR_CID_HYPERVISOR = 0x0 VMADDR_CID_RESERVED = 0x1 VMADDR_PORT_ANY = 0xffffffff VMIN = 0x4 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 WRAP = 0x20000 WSTOPPED = 0x2 WUNTRACED = 0x2 XCASE = 0x4 XTABS = 0x1800 __TIOCFLUSH = 0x80047410 ) // Errors const ( E2BIG = syscall.Errno(0x7) EACCES = syscall.Errno(0xd) EADDRINUSE = syscall.Errno(0x30) EADDRNOTAVAIL = syscall.Errno(0x31) EADV = syscall.Errno(0x53) EAFNOSUPPORT = syscall.Errno(0x2f) EAGAIN = syscall.Errno(0xb) EALREADY = syscall.Errno(0x25) EBADE = syscall.Errno(0x66) EBADF = syscall.Errno(0x9) EBADFD = syscall.Errno(0x5d) EBADMSG = syscall.Errno(0x4c) EBADR = syscall.Errno(0x67) EBADRQC = syscall.Errno(0x6a) EBADSLT = syscall.Errno(0x6b) EBFONT = syscall.Errno(0x6d) EBUSY = syscall.Errno(0x10) ECANCELED = syscall.Errno(0x7f) ECHILD = syscall.Errno(0xa) ECHRNG = syscall.Errno(0x5e) ECOMM = syscall.Errno(0x55) ECONNABORTED = syscall.Errno(0x35) ECONNREFUSED = syscall.Errno(0x3d) ECONNRESET = syscall.Errno(0x36) EDEADLK = syscall.Errno(0x4e) EDEADLOCK = syscall.Errno(0x6c) EDESTADDRREQ = syscall.Errno(0x27) EDOM = syscall.Errno(0x21) EDOTDOT = syscall.Errno(0x58) EDQUOT = syscall.Errno(0x45) EEXIST = syscall.Errno(0x11) EFAULT = syscall.Errno(0xe) EFBIG = syscall.Errno(0x1b) EHOSTDOWN = syscall.Errno(0x40) EHOSTUNREACH = syscall.Errno(0x41) EHWPOISON = syscall.Errno(0x87) EIDRM = syscall.Errno(0x4d) EILSEQ = syscall.Errno(0x7a) EINPROGRESS = syscall.Errno(0x24) EINTR = syscall.Errno(0x4) EINVAL = syscall.Errno(0x16) EIO = syscall.Errno(0x5) EISCONN = syscall.Errno(0x38) EISDIR = syscall.Errno(0x15) EISNAM = syscall.Errno(0x78) EKEYEXPIRED = syscall.Errno(0x81) EKEYREJECTED = syscall.Errno(0x83) EKEYREVOKED = syscall.Errno(0x82) EL2HLT = syscall.Errno(0x65) EL2NSYNC = syscall.Errno(0x5f) EL3HLT = syscall.Errno(0x60) EL3RST = syscall.Errno(0x61) ELIBACC = syscall.Errno(0x72) ELIBBAD = syscall.Errno(0x70) ELIBEXEC = syscall.Errno(0x6e) ELIBMAX = syscall.Errno(0x7b) ELIBSCN = syscall.Errno(0x7c) ELNRNG = syscall.Errno(0x62) ELOOP = syscall.Errno(0x3e) EMEDIUMTYPE = syscall.Errno(0x7e) EMFILE = syscall.Errno(0x18) EMLINK = syscall.Errno(0x1f) EMSGSIZE = syscall.Errno(0x28) EMULTIHOP = syscall.Errno(0x57) ENAMETOOLONG = syscall.Errno(0x3f) ENAVAIL = syscall.Errno(0x77) ENETDOWN = syscall.Errno(0x32) ENETRESET = syscall.Errno(0x34) ENETUNREACH = syscall.Errno(0x33) ENFILE = syscall.Errno(0x17) ENOANO = syscall.Errno(0x69) ENOBUFS = syscall.Errno(0x37) ENOCSI = syscall.Errno(0x64) ENODATA = syscall.Errno(0x6f) ENODEV = syscall.Errno(0x13) ENOENT = syscall.Errno(0x2) ENOEXEC = syscall.Errno(0x8) ENOKEY = syscall.Errno(0x80) ENOLCK = syscall.Errno(0x4f) ENOLINK = syscall.Errno(0x52) ENOMEDIUM = syscall.Errno(0x7d) ENOMEM = syscall.Errno(0xc) ENOMSG = syscall.Errno(0x4b) ENONET = syscall.Errno(0x50) ENOPKG = syscall.Errno(0x71) ENOPROTOOPT = syscall.Errno(0x2a) ENOSPC = syscall.Errno(0x1c) ENOSR = syscall.Errno(0x4a) ENOSTR = syscall.Errno(0x48) ENOSYS = syscall.Errno(0x5a) ENOTBLK = syscall.Errno(0xf) ENOTCONN = syscall.Errno(0x39) ENOTDIR = syscall.Errno(0x14) ENOTEMPTY = syscall.Errno(0x42) ENOTNAM = syscall.Errno(0x76) ENOTRECOVERABLE = syscall.Errno(0x85) ENOTSOCK = syscall.Errno(0x26) ENOTSUP = syscall.Errno(0x2d) ENOTTY = syscall.Errno(0x19) ENOTUNIQ = syscall.Errno(0x73) ENXIO = syscall.Errno(0x6) EOPNOTSUPP = syscall.Errno(0x2d) EOVERFLOW = syscall.Errno(0x5c) EOWNERDEAD = syscall.Errno(0x84) EPERM = syscall.Errno(0x1) EPFNOSUPPORT = syscall.Errno(0x2e) EPIPE = syscall.Errno(0x20) EPROCLIM = syscall.Errno(0x43) EPROTO = syscall.Errno(0x56) EPROTONOSUPPORT = syscall.Errno(0x2b) EPROTOTYPE = syscall.Errno(0x29) ERANGE = syscall.Errno(0x22) EREMCHG = syscall.Errno(0x59) EREMOTE = syscall.Errno(0x47) EREMOTEIO = syscall.Errno(0x79) ERESTART = syscall.Errno(0x74) ERFKILL = syscall.Errno(0x86) EROFS = syscall.Errno(0x1e) ERREMOTE = syscall.Errno(0x51) ESHUTDOWN = syscall.Errno(0x3a) ESOCKTNOSUPPORT = syscall.Errno(0x2c) ESPIPE = syscall.Errno(0x1d) ESRCH = syscall.Errno(0x3) ESRMNT = syscall.Errno(0x54) ESTALE = syscall.Errno(0x46) ESTRPIPE = syscall.Errno(0x5b) ETIME = syscall.Errno(0x49) ETIMEDOUT = syscall.Errno(0x3c) ETOOMANYREFS = syscall.Errno(0x3b) ETXTBSY = syscall.Errno(0x1a) EUCLEAN = syscall.Errno(0x75) EUNATCH = syscall.Errno(0x63) EUSERS = syscall.Errno(0x44) EWOULDBLOCK = syscall.Errno(0xb) EXDEV = syscall.Errno(0x12) EXFULL = syscall.Errno(0x68) ) // Signals const ( SIGABRT = syscall.Signal(0x6) SIGALRM = syscall.Signal(0xe) SIGBUS = syscall.Signal(0xa) SIGCHLD = syscall.Signal(0x14) SIGCLD = syscall.Signal(0x14) SIGCONT = syscall.Signal(0x13) SIGEMT = syscall.Signal(0x7) SIGFPE = syscall.Signal(0x8) SIGHUP = syscall.Signal(0x1) SIGILL = syscall.Signal(0x4) SIGINT = syscall.Signal(0x2) SIGIO = syscall.Signal(0x17) SIGIOT = syscall.Signal(0x6) SIGKILL = syscall.Signal(0x9) SIGLOST = syscall.Signal(0x1d) SIGPIPE = syscall.Signal(0xd) SIGPOLL = syscall.Signal(0x17) SIGPROF = syscall.Signal(0x1b) SIGPWR = syscall.Signal(0x1d) 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: "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", 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", 48: "address already in use", 49: "cannot 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: "transport endpoint is already connected", 57: "transport endpoint is not connected", 58: "cannot send after transport endpoint shutdown", 59: "too many references: cannot 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: "disk quota exceeded", 70: "stale file handle", 71: "object is remote", 72: "device not a stream", 73: "timer expired", 74: "out of streams resources", 75: "no message of desired type", 76: "bad message", 77: "identifier removed", 78: "resource deadlock avoided", 79: "no locks available", 80: "machine is not on the network", 81: "unknown error 81", 82: "link has been severed", 83: "advertise error", 84: "srmount error", 85: "communication error on send", 86: "protocol error", 87: "multihop attempted", 88: "RFS specific error", 89: "remote address changed", 90: "function not implemented", 91: "streams pipe error", 92: "value too large for defined data type", 93: "file descriptor in bad state", 94: "channel number out of range", 95: "level 2 not synchronized", 96: "level 3 halted", 97: "level 3 reset", 98: "link number out of range", 99: "protocol driver not attached", 100: "no CSI structure available", 101: "level 2 halted", 102: "invalid exchange", 103: "invalid request descriptor", 104: "exchange full", 105: "no anode", 106: "invalid request code", 107: "invalid slot", 108: "file locking deadlock error", 109: "bad font file format", 110: "cannot exec a shared library directly", 111: "no data available", 112: "accessing a corrupted shared library", 113: "package not installed", 114: "can not access a needed shared library", 115: "name not unique on network", 116: "interrupted system call should be restarted", 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: "invalid or incomplete multibyte or wide character", 123: "attempting to link in too many shared libraries", 124: ".lib section in a.out corrupted", 125: "no medium found", 126: "wrong medium type", 127: "operation canceled", 128: "required key not available", 129: "key has expired", 130: "key has been revoked", 131: "key was rejected by service", 132: "owner died", 133: "state not recoverable", 134: "operation not possible due to RF-kill", 135: "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: "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: "CPU time limit exceeded", 25: "file size limit exceeded", 26: "virtual timer expired", 27: "profiling timer expired", 28: "window changed", 29: "resource lost", 30: "user defined signal 1", 31: "user defined signal 2", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go000066400000000000000000002107441317166637100237050ustar00rootroot00000000000000// 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go000066400000000000000000002101021317166637100242640ustar00rootroot00000000000000// 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go000066400000000000000000002071551317166637100241460ustar00rootroot00000000000000// 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 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 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go000066400000000000000000001766161317166637100240710ustar00rootroot00000000000000// 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go000066400000000000000000001765421317166637100244620ustar00rootroot00000000000000// 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go000066400000000000000000001767321317166637100243270ustar00rootroot00000000000000// mkerrors.sh // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- _const.go // +build arm,openbsd 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_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_ANONYMOUS = 0x1000 MAP_COPY = 0x2 MAP_FILE = 0x0 MAP_FIXED = 0x10 MAP_FLAGMASK = 0x3ff7 MAP_HASSEMAPHORE = 0x0 MAP_INHERIT = 0x0 MAP_INHERIT_COPY = 0x1 MAP_INHERIT_NONE = 0x2 MAP_INHERIT_SHARE = 0x0 MAP_INHERIT_ZERO = 0x3 MAP_NOEXTEND = 0x0 MAP_NORESERVE = 0x0 MAP_PRIVATE = 0x2 MAP_RENAME = 0x0 MAP_SHARED = 0x1 MAP_TRYFIXED = 0x0 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 MSG_BCAST = 0x100 MSG_CMSG_CLOEXEC = 0x800 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_BROADCAST = 0x400000 RTF_CLONED = 0x10000 RTF_CLONING = 0x100 RTF_DONE = 0x40 RTF_DYNAMIC = 0x10 RTF_FMASK = 0x70f808 RTF_GATEWAY = 0x2 RTF_HOST = 0x4 RTF_LLINFO = 0x400 RTF_LOCAL = 0x200000 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_STATIC = 0x800 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 SIOCGIFRXR = 0x802069aa 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_CLOEXEC = 0x8000 SOCK_DGRAM = 0x2 SOCK_NONBLOCK = 0x4000 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 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go000066400000000000000000001546721317166637100245040ustar00rootroot00000000000000// mkerrors.sh -m64 // Code generated by the command above; see README.md. 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 BS0 = 0x0 BS1 = 0x2000 BSDLY = 0x2000 CBAUD = 0xf CFLUSH = 0xf CIBAUD = 0xf0000 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 CR0 = 0x0 CR1 = 0x200 CR2 = 0x400 CR3 = 0x600 CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 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 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 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_FLOCK = 0x35 F_FLOCK64 = 0x35 F_FLOCKW = 0x36 F_FLOCKW64 = 0x36 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_OFD_GETLK = 0x2f F_OFD_GETLK64 = 0x2f F_OFD_SETLK = 0x30 F_OFD_SETLK64 = 0x30 F_OFD_SETLKW = 0x31 F_OFD_SETLKW64 = 0x31 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 IBSHIFT = 0x10 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 IUCLC = 0x200 IXANY = 0x800 IXOFF = 0x1000 IXON = 0x400 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 LOCK_UN = 0x8 MADV_ACCESS_DEFAULT = 0x6 MADV_ACCESS_LWP = 0x7 MADV_ACCESS_MANY = 0x8 MADV_DONTNEED = 0x4 MADV_FREE = 0x5 MADV_NORMAL = 0x0 MADV_PURGE = 0x9 MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MAP_32BIT = 0x80 MAP_ALIGN = 0x200 MAP_ANON = 0x100 MAP_ANONYMOUS = 0x100 MAP_FILE = 0x0 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 NL0 = 0x0 NL1 = 0x100 NLDLY = 0x100 NOFLSH = 0x80 OCRNL = 0x8 OFDEL = 0x80 OFILL = 0x40 OLCUC = 0x2 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 TAB0 = 0x0 TAB1 = 0x800 TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 TCION = 0x3 TCOFLUSH = 0x1 TCOOFF = 0x0 TCOON = 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 XCASE = 0x4 XTABS = 0x1800 ) // 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", } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go000066400000000000000000001124631317166637100240470ustar00rootroot00000000000000// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build darwin,386 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) 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) 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) 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) 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) 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)) 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) 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)) 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 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) 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 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) 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 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) 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)) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) 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) 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) 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)) 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) 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)) 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)) fd = int(r0) 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, mode int, perm 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(mode), uintptr(perm), 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 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) 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))) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, 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 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) 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) 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) 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) 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) 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) 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) 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))) 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)) 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) 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) 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)) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go000066400000000000000000001122401317166637100244330ustar00rootroot00000000000000// mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build darwin,amd64 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) 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) 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) 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) 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) 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)) 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) 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)) 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 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) 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 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) 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 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) 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)) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) 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) 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) 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)) 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) 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)) 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)) fd = int(r0) 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, mode int, perm 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(mode), uintptr(perm), 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 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) 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))) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, 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 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) 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) 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) 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) 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) 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) 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) 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))) 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) 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) 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) 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)) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go000066400000000000000000001124541317166637100243060ustar00rootroot00000000000000// mksyscall.pl -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build darwin,arm 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) 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) 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) 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) 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) 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)) 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) 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)) 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 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) 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 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) 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 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) 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)) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) 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) 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) 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)) 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) 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)) 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)) fd = int(r0) 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, mode int, perm 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(mode), uintptr(perm), 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 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) 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))) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, 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 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) 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) 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) 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) 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) 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) 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) 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))) 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)) 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) 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) 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)) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go000066400000000000000000001122401317166637100244510ustar00rootroot00000000000000// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build darwin,arm64 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) 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) 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) 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) 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) 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)) 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) 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)) 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 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) 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 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) 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 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) 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)) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) 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) 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) 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)) 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) 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)) 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)) fd = int(r0) 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, mode int, perm 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(mode), uintptr(perm), 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 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) 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))) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, 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 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) 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) 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) 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) 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) 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) 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) 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))) 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) 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) 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) 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)) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go000066400000000000000000001025271317166637100251430ustar00rootroot00000000000000// mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build dragonfly,amd64 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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) 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) 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) 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) 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)) 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) 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)) 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) 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) 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) 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) 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)) 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)) 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) 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))) 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) 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) 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) 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) 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) 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) 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) 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)) 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) 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) 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) 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 } // 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 } // 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go000066400000000000000000001311521317166637100241710ustar00rootroot00000000000000// mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build freebsd,386 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) 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) 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 CapEnter() (err error) { _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func capRightsLimit(fd int, rightsp *CapRights) (err error) { _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 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) 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) 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) 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)) 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) 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) 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) 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))) 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) 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) 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))) 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) 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) 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) 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))) 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) 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 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) 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 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) 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 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) 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)) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) 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) 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) 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)) 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) 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)) 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)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 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 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) 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))) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, 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 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) 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) 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) 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) 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) 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) 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) 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))) 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)) 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) 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) 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)) 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) 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 } // 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go000066400000000000000000001306631317166637100245720ustar00rootroot00000000000000// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build freebsd,amd64 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) 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) 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 CapEnter() (err error) { _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func capRightsLimit(fd int, rightsp *CapRights) (err error) { _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 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) 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) 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) 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)) 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) 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) 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) 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))) 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) 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) 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))) 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) 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) 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) 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))) 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) 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 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) 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 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) 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 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) 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)) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) 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) 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) 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)) 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) 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)) 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)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 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 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) 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))) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, 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 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) 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) 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) 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) 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) 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) 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) 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))) 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) 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) 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) 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)) 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) 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 } // 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go000066400000000000000000001312141317166637100244270ustar00rootroot00000000000000// mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build freebsd,arm 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) 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) 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 CapEnter() (err error) { _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func capRightsLimit(fd int, rightsp *CapRights) (err error) { _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 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) 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) 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) 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)) 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) 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) 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) 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))) 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) 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) 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))) 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) 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) 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) 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))) 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) 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 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) 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 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) 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 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) 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)) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (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 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) 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) 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) 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)) 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) 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)) 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)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 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 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) 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))) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, 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 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) 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) 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) 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) 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) 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) 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) 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))) 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) 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) 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) 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)) 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) 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 } // 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go000066400000000000000000001337711317166637100237270ustar00rootroot00000000000000// mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,386 package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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)) 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) 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) 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)) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go000066400000000000000000001461121317166637100243130ustar00rootroot00000000000000// mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,amd64 package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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)) 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) 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) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go000066400000000000000000001421421317166637100241560ustar00rootroot00000000000000// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,arm package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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)) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go000066400000000000000000001410221317166637100243240ustar00rootroot00000000000000// mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,arm64 package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go000066400000000000000000001446701317166637100243570ustar00rootroot00000000000000// mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,mips package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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>>32), uintptr(off), uintptr(len>>32), uintptr(len)) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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(r0)<<32 | int64(r1)) 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 Ftruncate(fd int, length int64) (err error) { _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 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() (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 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)) 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 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>>32), uintptr(offset)) 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>>32), uintptr(offset)) n = 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 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_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 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, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) n = int64(int64(r0)<<32 | int64(r1)) 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 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), 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 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 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_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 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 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 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) 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 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) 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) 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 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 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_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 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go000066400000000000000000001442171317166637100245260ustar00rootroot00000000000000// mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,mips64 package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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)) 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) 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) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go000066400000000000000000001442231317166637100250440ustar00rootroot00000000000000// mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,mips64le package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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)) 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) 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) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go000066400000000000000000001446741317166637100247040ustar00rootroot00000000000000// mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,mipsle package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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 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 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 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)) 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 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 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 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_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 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, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) 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 SyncFileRange(fd int, off int64, n int64, flags int) (err error) { _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), 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 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 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 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 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 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 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) 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 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) 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) 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 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 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_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 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go000066400000000000000000001464101317166637100243350ustar00rootroot00000000000000// mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,ppc64 package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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)) 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) 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) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go000066400000000000000000001464141317166637100246620ustar00rootroot00000000000000// mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,ppc64le package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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)) 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) 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) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go000066400000000000000000001325401317166637100242660ustar00rootroot00000000000000// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,s390x package unix import ( "syscall" "unsafe" ) var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } // 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) 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) 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) 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))) 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)) 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) 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) 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 KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 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 KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret 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_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 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 keyctlJoin(cmd int, arg2 string) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg2) if err != nil { return } r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 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 keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { var _p0 *byte _p0, err = BytePtrFromString(arg3) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(arg4) if err != nil { return } r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 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 keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { var _p0 unsafe.Pointer if len(payload) > 0 { _p0 = unsafe.Pointer(&payload[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret 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_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 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 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) 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 unsafe.Pointer if len(payload) > 0 { _p2 = unsafe.Pointer(&payload[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) id = int(r0) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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 Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 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 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) 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 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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 Lgetxattr(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_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = 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))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Llistxattr(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_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lremovexattr(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_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lsetxattr(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_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { var _p0 *byte _p0, err = BytePtrFromString(keyType) if err != nil { return } var _p1 *byte _p1, err = BytePtrFromString(description) if err != nil { return } var _p2 *byte _p2, err = BytePtrFromString(callback) if err != nil { return } r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) id = int(r0) 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) 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 Syncfs(fd int) (err error) { _, _, e1 := Syscall(SYS_SYNCFS, 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 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) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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)) 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) 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) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go000066400000000000000000001272701317166637100246660ustar00rootroot00000000000000// mksyscall.pl -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build linux,sparc64 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) 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) 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) 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))) 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)) 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) 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) 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) 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) 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) 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) 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) 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 CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, 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 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) 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) 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) 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 Getrandom(buf []byte, flags int) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) } else { _p0 = unsafe.Pointer(&_zero) } r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { 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 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) 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)) 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))) 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)) 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) 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) 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, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 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) 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) 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) 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) 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_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)) 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) 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) 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) 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) 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) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go000066400000000000000000000762231317166637100240450ustar00rootroot00000000000000// mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build netbsd,386 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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) 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) 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) 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) 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)) 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) 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)) 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) 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) 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) 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) 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)) 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)) 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) 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))) 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) 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) 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) 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) 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) 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) 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) 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) 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 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go000066400000000000000000000757771317166637100244550ustar00rootroot00000000000000// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build netbsd,amd64 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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) 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) 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) 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) 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)) 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) 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)) 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) 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) 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) 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) 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)) 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)) 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) 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))) 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) 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) 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) 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) 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) 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)) 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) 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) 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 } // 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go000066400000000000000000000762301317166637100243020ustar00rootroot00000000000000// mksyscall.pl -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build netbsd,arm 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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) 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) 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) 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) 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)) 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) 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)) 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) 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) 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) 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) 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)) 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)) 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) 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))) 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) 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) 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) 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) 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) 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) 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) 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) 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 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go000066400000000000000000001010241317166637100242040ustar00rootroot00000000000000// mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build openbsd,386 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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) 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) 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) 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) 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)) 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) 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)) 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) 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) 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) 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) 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)) 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)) 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) 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))) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go000066400000000000000000001006001317166637100245760ustar00rootroot00000000000000// mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build openbsd,amd64 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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) 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) 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) 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) 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)) 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) 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)) 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) 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) 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) 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) 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)) 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)) 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) 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))) 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) 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) 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) 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) 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) 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) 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) 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)) 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) 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) 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 } // 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go000066400000000000000000001010311317166637100244410ustar00rootroot00000000000000// mksyscall.pl -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build openbsd,arm 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)) 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) 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 Madvise(b []byte, behav 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(behav)) 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 Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) 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 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) 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) 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) 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) 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)) 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) 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)) 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) 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) 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) 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) 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)) 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)) 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) 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))) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 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) if e1 != 0 { err = errnoErr(e1) } return } dep-0.3.2/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go000066400000000000000000001247601317166637100246350ustar00rootroot00000000000000// mksyscall_solaris.pl -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build solaris,amd64 package unix import ( "syscall" "unsafe" ) //go:cgo_import_dynamic libc_pipe pipe "libc.so" //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_wait4 wait4 "libc.so" //go:cgo_import_dynamic libc_gethostname gethostname "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___xnet_recvmsg __xnet_recvmsg "libsocket.so" //go:cgo_import_dynamic libc___xnet_sendmsg __xnet_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_flock flock "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_fstatvfs fstatvfs "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___xnet_llisten __xnet_llisten "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_statvfs statvfs "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___xnet_bind __xnet_bind "libsocket.so" //go:cgo_import_dynamic libc___xnet_connect __xnet_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___xnet_sendto __xnet_sendto "libsocket.so" //go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so" //go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so" //go:cgo_import_dynamic libc_write write "libc.so" //go:cgo_import_dynamic libc___xnet_getsockopt __xnet_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 procpipe libc_pipe //go:linkname procgetsockname libc_getsockname //go:linkname procGetcwd libc_getcwd //go:linkname procgetgroups libc_getgroups //go:linkname procsetgroups libc_setgroups //go:linkname procwait4 libc_wait4 //go:linkname procgethostname libc_gethostname //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 proc__xnet_recvmsg libc___xnet_recvmsg //go:linkname proc__xnet_sendmsg libc___xnet_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 procFlock libc_flock //go:linkname procFpathconf libc_fpathconf //go:linkname procFstat libc_fstat //go:linkname procFstatvfs libc_fstatvfs //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 proc__xnet_llisten libc___xnet_llisten //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 procStatvfs libc_statvfs //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 proc__xnet_bind libc___xnet_bind //go:linkname proc__xnet_connect libc___xnet_connect //go:linkname procmmap libc_mmap //go:linkname procmunmap libc_munmap //go:linkname proc__xnet_sendto libc___xnet_sendto //go:linkname proc__xnet_socket libc___xnet_socket //go:linkname proc__xnet_socketpair libc___xnet_socketpair //go:linkname procwrite libc_write //go:linkname proc__xnet_getsockopt libc___xnet_getsockopt //go:linkname procgetpeername libc_getpeername //go:linkname procsetsockopt libc_setsockopt //go:linkname procrecvfrom libc_recvfrom //go:linkname procsysconf libc_sysconf var ( procpipe, procgetsockname, procGetcwd, procgetgroups, procsetgroups, procwait4, procgethostname, procutimes, procutimensat, procfcntl, procfutimesat, procaccept, proc__xnet_recvmsg, proc__xnet_sendmsg, procacct, procioctl, procAccess, procAdjtime, procChdir, procChmod, procChown, procChroot, procClose, procCreat, procDup, procDup2, procExit, procFchdir, procFchmod, procFchmodat, procFchown, procFchownat, procFdatasync, procFlock, procFpathconf, procFstat, procFstatvfs, procGetdents, procGetgid, procGetpid, procGetpgid, procGetpgrp, procGeteuid, procGetegid, procGetppid, procGetpriority, procGetrlimit, procGetrusage, procGettimeofday, procGetuid, procKill, procLchown, procLink, proc__xnet_llisten, 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, procStatvfs, procSymlink, procSync, procTimes, procTruncate, procFsync, procFtruncate, procUmask, procUname, procumount, procUnlink, procUnlinkat, procUstat, procUtime, proc__xnet_bind, proc__xnet_connect, procmmap, procmunmap, proc__xnet_sendto, proc__xnet_socket, proc__xnet_socketpair, procwrite, proc__xnet_getsockopt, procgetpeername, procsetsockopt, procrecvfrom, procsysconf syscallFunc ) func pipe(p *[2]_C_int) (n int, err error) { r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0) n = int(r0) if e1 != 0 { err = e1 } return } 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 wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) wpid = int32(r0) if e1 != 0 { err = e1 } return } func gethostname(buf []byte) (n int, err error) { var _p0 *byte if len(buf) > 0 { _p0 = &buf[0] } r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) n = int(r0) 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) 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) 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(&proc__xnet_recvmsg)), 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(&proc__xnet_sendmsg)), 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 uint, 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) 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) 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) 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) 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) 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) 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) 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) 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 Flock(fd int, how int) (err error) { _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 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 Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) { _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 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) 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) if e1 != 0 { err = e1 } return } func Listen(s int, backlog int) (err error) { _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) if e1 != 0 { err = e1 } return } func Statvfs(path string, vfsstat *Statvfs_t) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) 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) 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) 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) 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) 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) 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) if e1 != 0 { err = e1 } return } func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 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(&proc__xnet_connect)), 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(&proc__xnet_sendto)), 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(&proc__xnet_socket)), 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(&proc__xnet_socketpair)), 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(&proc__xnet_getsockopt)), 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go000066400000000000000000000273221317166637100234630ustar00rootroot00000000000000// 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}}, } dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go000066400000000000000000000401721317166637100237300ustar00rootroot00000000000000// 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 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go000066400000000000000000000401741317166637100243250ustar00rootroot00000000000000// 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 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go000066400000000000000000000424411317166637100241700ustar00rootroot00000000000000// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/usr/include/sys/syscall.h // Code generated by the command above; see README.md. 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_TYPEFILTER = 177 SYS_KDEBUG_TRACE_STRING = 178 SYS_KDEBUG_TRACE64 = 179 SYS_KDEBUG_TRACE = 180 SYS_SETGID = 181 SYS_SETEGID = 182 SYS_SETEUID = 183 SYS_SIGRETURN = 184 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_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_KEVENT_QOS = 374 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_PSELECT = 394 SYS_PSELECT_NOCANCEL = 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_USRCTL = 445 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_CLONEFILEAT = 462 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_RENAMEATX_NP = 488 SYS_MREMAP_ENCRYPTED = 489 SYS_NETAGENT_TRIGGER = 490 SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 SYS_MICROSTACKSHOT = 492 SYS_GRAB_PGO_DATA = 493 SYS_PERSONA = 494 SYS_WORK_INTERVAL_CTL = 499 SYS_GETENTROPY = 500 SYS_NECP_OPEN = 501 SYS_NECP_CLIENT_ACTION = 502 SYS___NEXUS_OPEN = 503 SYS___NEXUS_REGISTER = 504 SYS___NEXUS_DEREGISTER = 505 SYS___NEXUS_CREATE = 506 SYS___NEXUS_DESTROY = 507 SYS___NEXUS_GET_OPT = 508 SYS___NEXUS_SET_OPT = 509 SYS___CHANNEL_OPEN = 510 SYS___CHANNEL_GET_INFO = 511 SYS___CHANNEL_SYNC = 512 SYS___CHANNEL_GET_OPT = 513 SYS___CHANNEL_SET_OPT = 514 SYS_ULOCK_WAIT = 515 SYS_ULOCK_WAKE = 516 SYS_FCLONEFILEAT = 517 SYS_FS_SNAPSHOT = 518 SYS_TERMINATE_WITH_PAYLOAD = 520 SYS_ABORT_WITH_PAYLOAD = 521 SYS_MAXSYSCALL = 522 SYS_INVALID = 63 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go000066400000000000000000000424431317166637100243440ustar00rootroot00000000000000// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/usr/include/sys/syscall.h // Code generated by the command above; see README.md. 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_TYPEFILTER = 177 SYS_KDEBUG_TRACE_STRING = 178 SYS_KDEBUG_TRACE64 = 179 SYS_KDEBUG_TRACE = 180 SYS_SETGID = 181 SYS_SETEGID = 182 SYS_SETEUID = 183 SYS_SIGRETURN = 184 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_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_KEVENT_QOS = 374 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_PSELECT = 394 SYS_PSELECT_NOCANCEL = 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_USRCTL = 445 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_CLONEFILEAT = 462 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_RENAMEATX_NP = 488 SYS_MREMAP_ENCRYPTED = 489 SYS_NETAGENT_TRIGGER = 490 SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 SYS_MICROSTACKSHOT = 492 SYS_GRAB_PGO_DATA = 493 SYS_PERSONA = 494 SYS_WORK_INTERVAL_CTL = 499 SYS_GETENTROPY = 500 SYS_NECP_OPEN = 501 SYS_NECP_CLIENT_ACTION = 502 SYS___NEXUS_OPEN = 503 SYS___NEXUS_REGISTER = 504 SYS___NEXUS_DEREGISTER = 505 SYS___NEXUS_CREATE = 506 SYS___NEXUS_DESTROY = 507 SYS___NEXUS_GET_OPT = 508 SYS___NEXUS_SET_OPT = 509 SYS___CHANNEL_OPEN = 510 SYS___CHANNEL_GET_INFO = 511 SYS___CHANNEL_SYNC = 512 SYS___CHANNEL_GET_OPT = 513 SYS___CHANNEL_SET_OPT = 514 SYS_ULOCK_WAIT = 515 SYS_ULOCK_WAKE = 516 SYS_FCLONEFILEAT = 517 SYS_FS_SNAPSHOT = 518 SYS_TERMINATE_WITH_PAYLOAD = 520 SYS_ABORT_WITH_PAYLOAD = 521 SYS_MAXSYSCALL = 522 SYS_INVALID = 63 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go000066400000000000000000000571411317166637100250300ustar00rootroot00000000000000// mksysnum_dragonfly.pl // Code generated by the command above; see README.md. 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(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(int from, 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, const 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_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } 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); } SYS_PROCCTL = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); } SYS_CHFLAGSAT = 537 // { int chflagsat(int fd, const char *path, int flags, int atflags);} SYS_PIPE2 = 538 // { int pipe2(int *fildes, int flags); } SYS_UTIMENSAT = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); } SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); } SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); } SYS_LWP_SETNAME = 542 // { int lwp_setname(lwpid_t tid, const char *name); } SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, \ SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); } SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); } SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); } ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go000066400000000000000000000620271317166637100240610ustar00rootroot00000000000000// mksysnum_freebsd.pl // Code generated by the command above; see README.md. 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_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_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ 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_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ 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, \ SYS_FUTIMENS = 546 // { int futimens(int fd, \ SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go000066400000000000000000000620311317166637100244470ustar00rootroot00000000000000// mksysnum_freebsd.pl // Code generated by the command above; see README.md. 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_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_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ 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_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ 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, \ SYS_FUTIMENS = 546 // { int futimens(int fd, \ SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go000066400000000000000000000620271317166637100243200ustar00rootroot00000000000000// mksysnum_freebsd.pl // Code generated by the command above; see README.md. 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_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_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ 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_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ 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, \ SYS_FUTIMENS = 546 // { int futimens(int fd, \ SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go000066400000000000000000000312631317166637100236040ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. 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_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 SYS_KCMP = 349 SYS_FINIT_MODULE = 350 SYS_SCHED_SETATTR = 351 SYS_SCHED_GETATTR = 352 SYS_RENAMEAT2 = 353 SYS_SECCOMP = 354 SYS_GETRANDOM = 355 SYS_MEMFD_CREATE = 356 SYS_BPF = 357 SYS_EXECVEAT = 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_USERFAULTFD = 374 SYS_MEMBARRIER = 375 SYS_MLOCK2 = 376 SYS_COPY_FILE_RANGE = 377 SYS_PREADV2 = 378 SYS_PWRITEV2 = 379 SYS_PKEY_MPROTECT = 380 SYS_PKEY_ALLOC = 381 SYS_PKEY_FREE = 382 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go000066400000000000000000000261671317166637100242060ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. 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 SYS_KCMP = 312 SYS_FINIT_MODULE = 313 SYS_SCHED_SETATTR = 314 SYS_SCHED_GETATTR = 315 SYS_RENAMEAT2 = 316 SYS_SECCOMP = 317 SYS_GETRANDOM = 318 SYS_MEMFD_CREATE = 319 SYS_KEXEC_FILE_LOAD = 320 SYS_BPF = 321 SYS_EXECVEAT = 322 SYS_USERFAULTFD = 323 SYS_MEMBARRIER = 324 SYS_MLOCK2 = 325 SYS_COPY_FILE_RANGE = 326 SYS_PREADV2 = 327 SYS_PWRITEV2 = 328 SYS_PKEY_MPROTECT = 329 SYS_PKEY_ALLOC = 330 SYS_PKEY_FREE = 331 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go000066400000000000000000000274631317166637100240520ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,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_CREAT = 8 SYS_LINK = 9 SYS_UNLINK = 10 SYS_EXECVE = 11 SYS_CHDIR = 12 SYS_MKNOD = 14 SYS_CHMOD = 15 SYS_LCHOWN = 16 SYS_LSEEK = 19 SYS_GETPID = 20 SYS_MOUNT = 21 SYS_SETUID = 23 SYS_GETUID = 24 SYS_PTRACE = 26 SYS_PAUSE = 29 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_GETRUSAGE = 77 SYS_GETTIMEOFDAY = 78 SYS_SETTIMEOFDAY = 79 SYS_GETGROUPS = 80 SYS_SETGROUPS = 81 SYS_SYMLINK = 83 SYS_READLINK = 85 SYS_USELIB = 86 SYS_SWAPON = 87 SYS_REBOOT = 88 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_SYSLOG = 103 SYS_SETITIMER = 104 SYS_GETITIMER = 105 SYS_STAT = 106 SYS_LSTAT = 107 SYS_FSTAT = 108 SYS_VHANGUP = 111 SYS_WAIT4 = 114 SYS_SWAPOFF = 115 SYS_SYSINFO = 116 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 SYS_KCMP = 378 SYS_FINIT_MODULE = 379 SYS_SCHED_SETATTR = 380 SYS_SCHED_GETATTR = 381 SYS_RENAMEAT2 = 382 SYS_SECCOMP = 383 SYS_GETRANDOM = 384 SYS_MEMFD_CREATE = 385 SYS_BPF = 386 SYS_EXECVEAT = 387 SYS_USERFAULTFD = 388 SYS_MEMBARRIER = 389 SYS_MLOCK2 = 390 SYS_COPY_FILE_RANGE = 391 SYS_PREADV2 = 392 SYS_PWRITEV2 = 393 SYS_PKEY_MPROTECT = 394 SYS_PKEY_ALLOC = 395 SYS_PKEY_FREE = 396 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go000066400000000000000000000224201317166637100242100ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. 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 SYS_GETRANDOM = 278 SYS_MEMFD_CREATE = 279 SYS_BPF = 280 SYS_EXECVEAT = 281 SYS_USERFAULTFD = 282 SYS_MEMBARRIER = 283 SYS_MLOCK2 = 284 SYS_COPY_FILE_RANGE = 285 SYS_PREADV2 = 286 SYS_PWRITEV2 = 287 SYS_PKEY_MPROTECT = 288 SYS_PKEY_ALLOC = 289 SYS_PKEY_FREE = 290 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go000066400000000000000000000312561317166637100242360ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips,linux package unix const ( SYS_SYSCALL = 4000 SYS_EXIT = 4001 SYS_FORK = 4002 SYS_READ = 4003 SYS_WRITE = 4004 SYS_OPEN = 4005 SYS_CLOSE = 4006 SYS_WAITPID = 4007 SYS_CREAT = 4008 SYS_LINK = 4009 SYS_UNLINK = 4010 SYS_EXECVE = 4011 SYS_CHDIR = 4012 SYS_TIME = 4013 SYS_MKNOD = 4014 SYS_CHMOD = 4015 SYS_LCHOWN = 4016 SYS_BREAK = 4017 SYS_UNUSED18 = 4018 SYS_LSEEK = 4019 SYS_GETPID = 4020 SYS_MOUNT = 4021 SYS_UMOUNT = 4022 SYS_SETUID = 4023 SYS_GETUID = 4024 SYS_STIME = 4025 SYS_PTRACE = 4026 SYS_ALARM = 4027 SYS_UNUSED28 = 4028 SYS_PAUSE = 4029 SYS_UTIME = 4030 SYS_STTY = 4031 SYS_GTTY = 4032 SYS_ACCESS = 4033 SYS_NICE = 4034 SYS_FTIME = 4035 SYS_SYNC = 4036 SYS_KILL = 4037 SYS_RENAME = 4038 SYS_MKDIR = 4039 SYS_RMDIR = 4040 SYS_DUP = 4041 SYS_PIPE = 4042 SYS_TIMES = 4043 SYS_PROF = 4044 SYS_BRK = 4045 SYS_SETGID = 4046 SYS_GETGID = 4047 SYS_SIGNAL = 4048 SYS_GETEUID = 4049 SYS_GETEGID = 4050 SYS_ACCT = 4051 SYS_UMOUNT2 = 4052 SYS_LOCK = 4053 SYS_IOCTL = 4054 SYS_FCNTL = 4055 SYS_MPX = 4056 SYS_SETPGID = 4057 SYS_ULIMIT = 4058 SYS_UNUSED59 = 4059 SYS_UMASK = 4060 SYS_CHROOT = 4061 SYS_USTAT = 4062 SYS_DUP2 = 4063 SYS_GETPPID = 4064 SYS_GETPGRP = 4065 SYS_SETSID = 4066 SYS_SIGACTION = 4067 SYS_SGETMASK = 4068 SYS_SSETMASK = 4069 SYS_SETREUID = 4070 SYS_SETREGID = 4071 SYS_SIGSUSPEND = 4072 SYS_SIGPENDING = 4073 SYS_SETHOSTNAME = 4074 SYS_SETRLIMIT = 4075 SYS_GETRLIMIT = 4076 SYS_GETRUSAGE = 4077 SYS_GETTIMEOFDAY = 4078 SYS_SETTIMEOFDAY = 4079 SYS_GETGROUPS = 4080 SYS_SETGROUPS = 4081 SYS_RESERVED82 = 4082 SYS_SYMLINK = 4083 SYS_UNUSED84 = 4084 SYS_READLINK = 4085 SYS_USELIB = 4086 SYS_SWAPON = 4087 SYS_REBOOT = 4088 SYS_READDIR = 4089 SYS_MMAP = 4090 SYS_MUNMAP = 4091 SYS_TRUNCATE = 4092 SYS_FTRUNCATE = 4093 SYS_FCHMOD = 4094 SYS_FCHOWN = 4095 SYS_GETPRIORITY = 4096 SYS_SETPRIORITY = 4097 SYS_PROFIL = 4098 SYS_STATFS = 4099 SYS_FSTATFS = 4100 SYS_IOPERM = 4101 SYS_SOCKETCALL = 4102 SYS_SYSLOG = 4103 SYS_SETITIMER = 4104 SYS_GETITIMER = 4105 SYS_STAT = 4106 SYS_LSTAT = 4107 SYS_FSTAT = 4108 SYS_UNUSED109 = 4109 SYS_IOPL = 4110 SYS_VHANGUP = 4111 SYS_IDLE = 4112 SYS_VM86 = 4113 SYS_WAIT4 = 4114 SYS_SWAPOFF = 4115 SYS_SYSINFO = 4116 SYS_IPC = 4117 SYS_FSYNC = 4118 SYS_SIGRETURN = 4119 SYS_CLONE = 4120 SYS_SETDOMAINNAME = 4121 SYS_UNAME = 4122 SYS_MODIFY_LDT = 4123 SYS_ADJTIMEX = 4124 SYS_MPROTECT = 4125 SYS_SIGPROCMASK = 4126 SYS_CREATE_MODULE = 4127 SYS_INIT_MODULE = 4128 SYS_DELETE_MODULE = 4129 SYS_GET_KERNEL_SYMS = 4130 SYS_QUOTACTL = 4131 SYS_GETPGID = 4132 SYS_FCHDIR = 4133 SYS_BDFLUSH = 4134 SYS_SYSFS = 4135 SYS_PERSONALITY = 4136 SYS_AFS_SYSCALL = 4137 SYS_SETFSUID = 4138 SYS_SETFSGID = 4139 SYS__LLSEEK = 4140 SYS_GETDENTS = 4141 SYS__NEWSELECT = 4142 SYS_FLOCK = 4143 SYS_MSYNC = 4144 SYS_READV = 4145 SYS_WRITEV = 4146 SYS_CACHEFLUSH = 4147 SYS_CACHECTL = 4148 SYS_SYSMIPS = 4149 SYS_UNUSED150 = 4150 SYS_GETSID = 4151 SYS_FDATASYNC = 4152 SYS__SYSCTL = 4153 SYS_MLOCK = 4154 SYS_MUNLOCK = 4155 SYS_MLOCKALL = 4156 SYS_MUNLOCKALL = 4157 SYS_SCHED_SETPARAM = 4158 SYS_SCHED_GETPARAM = 4159 SYS_SCHED_SETSCHEDULER = 4160 SYS_SCHED_GETSCHEDULER = 4161 SYS_SCHED_YIELD = 4162 SYS_SCHED_GET_PRIORITY_MAX = 4163 SYS_SCHED_GET_PRIORITY_MIN = 4164 SYS_SCHED_RR_GET_INTERVAL = 4165 SYS_NANOSLEEP = 4166 SYS_MREMAP = 4167 SYS_ACCEPT = 4168 SYS_BIND = 4169 SYS_CONNECT = 4170 SYS_GETPEERNAME = 4171 SYS_GETSOCKNAME = 4172 SYS_GETSOCKOPT = 4173 SYS_LISTEN = 4174 SYS_RECV = 4175 SYS_RECVFROM = 4176 SYS_RECVMSG = 4177 SYS_SEND = 4178 SYS_SENDMSG = 4179 SYS_SENDTO = 4180 SYS_SETSOCKOPT = 4181 SYS_SHUTDOWN = 4182 SYS_SOCKET = 4183 SYS_SOCKETPAIR = 4184 SYS_SETRESUID = 4185 SYS_GETRESUID = 4186 SYS_QUERY_MODULE = 4187 SYS_POLL = 4188 SYS_NFSSERVCTL = 4189 SYS_SETRESGID = 4190 SYS_GETRESGID = 4191 SYS_PRCTL = 4192 SYS_RT_SIGRETURN = 4193 SYS_RT_SIGACTION = 4194 SYS_RT_SIGPROCMASK = 4195 SYS_RT_SIGPENDING = 4196 SYS_RT_SIGTIMEDWAIT = 4197 SYS_RT_SIGQUEUEINFO = 4198 SYS_RT_SIGSUSPEND = 4199 SYS_PREAD64 = 4200 SYS_PWRITE64 = 4201 SYS_CHOWN = 4202 SYS_GETCWD = 4203 SYS_CAPGET = 4204 SYS_CAPSET = 4205 SYS_SIGALTSTACK = 4206 SYS_SENDFILE = 4207 SYS_GETPMSG = 4208 SYS_PUTPMSG = 4209 SYS_MMAP2 = 4210 SYS_TRUNCATE64 = 4211 SYS_FTRUNCATE64 = 4212 SYS_STAT64 = 4213 SYS_LSTAT64 = 4214 SYS_FSTAT64 = 4215 SYS_PIVOT_ROOT = 4216 SYS_MINCORE = 4217 SYS_MADVISE = 4218 SYS_GETDENTS64 = 4219 SYS_FCNTL64 = 4220 SYS_RESERVED221 = 4221 SYS_GETTID = 4222 SYS_READAHEAD = 4223 SYS_SETXATTR = 4224 SYS_LSETXATTR = 4225 SYS_FSETXATTR = 4226 SYS_GETXATTR = 4227 SYS_LGETXATTR = 4228 SYS_FGETXATTR = 4229 SYS_LISTXATTR = 4230 SYS_LLISTXATTR = 4231 SYS_FLISTXATTR = 4232 SYS_REMOVEXATTR = 4233 SYS_LREMOVEXATTR = 4234 SYS_FREMOVEXATTR = 4235 SYS_TKILL = 4236 SYS_SENDFILE64 = 4237 SYS_FUTEX = 4238 SYS_SCHED_SETAFFINITY = 4239 SYS_SCHED_GETAFFINITY = 4240 SYS_IO_SETUP = 4241 SYS_IO_DESTROY = 4242 SYS_IO_GETEVENTS = 4243 SYS_IO_SUBMIT = 4244 SYS_IO_CANCEL = 4245 SYS_EXIT_GROUP = 4246 SYS_LOOKUP_DCOOKIE = 4247 SYS_EPOLL_CREATE = 4248 SYS_EPOLL_CTL = 4249 SYS_EPOLL_WAIT = 4250 SYS_REMAP_FILE_PAGES = 4251 SYS_SET_TID_ADDRESS = 4252 SYS_RESTART_SYSCALL = 4253 SYS_FADVISE64 = 4254 SYS_STATFS64 = 4255 SYS_FSTATFS64 = 4256 SYS_TIMER_CREATE = 4257 SYS_TIMER_SETTIME = 4258 SYS_TIMER_GETTIME = 4259 SYS_TIMER_GETOVERRUN = 4260 SYS_TIMER_DELETE = 4261 SYS_CLOCK_SETTIME = 4262 SYS_CLOCK_GETTIME = 4263 SYS_CLOCK_GETRES = 4264 SYS_CLOCK_NANOSLEEP = 4265 SYS_TGKILL = 4266 SYS_UTIMES = 4267 SYS_MBIND = 4268 SYS_GET_MEMPOLICY = 4269 SYS_SET_MEMPOLICY = 4270 SYS_MQ_OPEN = 4271 SYS_MQ_UNLINK = 4272 SYS_MQ_TIMEDSEND = 4273 SYS_MQ_TIMEDRECEIVE = 4274 SYS_MQ_NOTIFY = 4275 SYS_MQ_GETSETATTR = 4276 SYS_VSERVER = 4277 SYS_WAITID = 4278 SYS_ADD_KEY = 4280 SYS_REQUEST_KEY = 4281 SYS_KEYCTL = 4282 SYS_SET_THREAD_AREA = 4283 SYS_INOTIFY_INIT = 4284 SYS_INOTIFY_ADD_WATCH = 4285 SYS_INOTIFY_RM_WATCH = 4286 SYS_MIGRATE_PAGES = 4287 SYS_OPENAT = 4288 SYS_MKDIRAT = 4289 SYS_MKNODAT = 4290 SYS_FCHOWNAT = 4291 SYS_FUTIMESAT = 4292 SYS_FSTATAT64 = 4293 SYS_UNLINKAT = 4294 SYS_RENAMEAT = 4295 SYS_LINKAT = 4296 SYS_SYMLINKAT = 4297 SYS_READLINKAT = 4298 SYS_FCHMODAT = 4299 SYS_FACCESSAT = 4300 SYS_PSELECT6 = 4301 SYS_PPOLL = 4302 SYS_UNSHARE = 4303 SYS_SPLICE = 4304 SYS_SYNC_FILE_RANGE = 4305 SYS_TEE = 4306 SYS_VMSPLICE = 4307 SYS_MOVE_PAGES = 4308 SYS_SET_ROBUST_LIST = 4309 SYS_GET_ROBUST_LIST = 4310 SYS_KEXEC_LOAD = 4311 SYS_GETCPU = 4312 SYS_EPOLL_PWAIT = 4313 SYS_IOPRIO_SET = 4314 SYS_IOPRIO_GET = 4315 SYS_UTIMENSAT = 4316 SYS_SIGNALFD = 4317 SYS_TIMERFD = 4318 SYS_EVENTFD = 4319 SYS_FALLOCATE = 4320 SYS_TIMERFD_CREATE = 4321 SYS_TIMERFD_GETTIME = 4322 SYS_TIMERFD_SETTIME = 4323 SYS_SIGNALFD4 = 4324 SYS_EVENTFD2 = 4325 SYS_EPOLL_CREATE1 = 4326 SYS_DUP3 = 4327 SYS_PIPE2 = 4328 SYS_INOTIFY_INIT1 = 4329 SYS_PREADV = 4330 SYS_PWRITEV = 4331 SYS_RT_TGSIGQUEUEINFO = 4332 SYS_PERF_EVENT_OPEN = 4333 SYS_ACCEPT4 = 4334 SYS_RECVMMSG = 4335 SYS_FANOTIFY_INIT = 4336 SYS_FANOTIFY_MARK = 4337 SYS_PRLIMIT64 = 4338 SYS_NAME_TO_HANDLE_AT = 4339 SYS_OPEN_BY_HANDLE_AT = 4340 SYS_CLOCK_ADJTIME = 4341 SYS_SYNCFS = 4342 SYS_SENDMMSG = 4343 SYS_SETNS = 4344 SYS_PROCESS_VM_READV = 4345 SYS_PROCESS_VM_WRITEV = 4346 SYS_KCMP = 4347 SYS_FINIT_MODULE = 4348 SYS_SCHED_SETATTR = 4349 SYS_SCHED_GETATTR = 4350 SYS_RENAMEAT2 = 4351 SYS_SECCOMP = 4352 SYS_GETRANDOM = 4353 SYS_MEMFD_CREATE = 4354 SYS_BPF = 4355 SYS_EXECVEAT = 4356 SYS_USERFAULTFD = 4357 SYS_MEMBARRIER = 4358 SYS_MLOCK2 = 4359 SYS_COPY_FILE_RANGE = 4360 SYS_PREADV2 = 4361 SYS_PWRITEV2 = 4362 SYS_PKEY_MPROTECT = 4363 SYS_PKEY_ALLOC = 4364 SYS_PKEY_FREE = 4365 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go000066400000000000000000000264701317166637100244120ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. 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 SYS_MLOCK2 = 5319 SYS_COPY_FILE_RANGE = 5320 SYS_PREADV2 = 5321 SYS_PWRITEV2 = 5322 SYS_PKEY_MPROTECT = 5323 SYS_PKEY_ALLOC = 5324 SYS_PKEY_FREE = 5325 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go000066400000000000000000000264721317166637100247350ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. 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 SYS_MLOCK2 = 5319 SYS_COPY_FILE_RANGE = 5320 SYS_PREADV2 = 5321 SYS_PWRITEV2 = 5322 SYS_PKEY_MPROTECT = 5323 SYS_PKEY_ALLOC = 5324 SYS_PKEY_FREE = 5325 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go000066400000000000000000000312601317166637100245520ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. // +build mipsle,linux package unix const ( SYS_SYSCALL = 4000 SYS_EXIT = 4001 SYS_FORK = 4002 SYS_READ = 4003 SYS_WRITE = 4004 SYS_OPEN = 4005 SYS_CLOSE = 4006 SYS_WAITPID = 4007 SYS_CREAT = 4008 SYS_LINK = 4009 SYS_UNLINK = 4010 SYS_EXECVE = 4011 SYS_CHDIR = 4012 SYS_TIME = 4013 SYS_MKNOD = 4014 SYS_CHMOD = 4015 SYS_LCHOWN = 4016 SYS_BREAK = 4017 SYS_UNUSED18 = 4018 SYS_LSEEK = 4019 SYS_GETPID = 4020 SYS_MOUNT = 4021 SYS_UMOUNT = 4022 SYS_SETUID = 4023 SYS_GETUID = 4024 SYS_STIME = 4025 SYS_PTRACE = 4026 SYS_ALARM = 4027 SYS_UNUSED28 = 4028 SYS_PAUSE = 4029 SYS_UTIME = 4030 SYS_STTY = 4031 SYS_GTTY = 4032 SYS_ACCESS = 4033 SYS_NICE = 4034 SYS_FTIME = 4035 SYS_SYNC = 4036 SYS_KILL = 4037 SYS_RENAME = 4038 SYS_MKDIR = 4039 SYS_RMDIR = 4040 SYS_DUP = 4041 SYS_PIPE = 4042 SYS_TIMES = 4043 SYS_PROF = 4044 SYS_BRK = 4045 SYS_SETGID = 4046 SYS_GETGID = 4047 SYS_SIGNAL = 4048 SYS_GETEUID = 4049 SYS_GETEGID = 4050 SYS_ACCT = 4051 SYS_UMOUNT2 = 4052 SYS_LOCK = 4053 SYS_IOCTL = 4054 SYS_FCNTL = 4055 SYS_MPX = 4056 SYS_SETPGID = 4057 SYS_ULIMIT = 4058 SYS_UNUSED59 = 4059 SYS_UMASK = 4060 SYS_CHROOT = 4061 SYS_USTAT = 4062 SYS_DUP2 = 4063 SYS_GETPPID = 4064 SYS_GETPGRP = 4065 SYS_SETSID = 4066 SYS_SIGACTION = 4067 SYS_SGETMASK = 4068 SYS_SSETMASK = 4069 SYS_SETREUID = 4070 SYS_SETREGID = 4071 SYS_SIGSUSPEND = 4072 SYS_SIGPENDING = 4073 SYS_SETHOSTNAME = 4074 SYS_SETRLIMIT = 4075 SYS_GETRLIMIT = 4076 SYS_GETRUSAGE = 4077 SYS_GETTIMEOFDAY = 4078 SYS_SETTIMEOFDAY = 4079 SYS_GETGROUPS = 4080 SYS_SETGROUPS = 4081 SYS_RESERVED82 = 4082 SYS_SYMLINK = 4083 SYS_UNUSED84 = 4084 SYS_READLINK = 4085 SYS_USELIB = 4086 SYS_SWAPON = 4087 SYS_REBOOT = 4088 SYS_READDIR = 4089 SYS_MMAP = 4090 SYS_MUNMAP = 4091 SYS_TRUNCATE = 4092 SYS_FTRUNCATE = 4093 SYS_FCHMOD = 4094 SYS_FCHOWN = 4095 SYS_GETPRIORITY = 4096 SYS_SETPRIORITY = 4097 SYS_PROFIL = 4098 SYS_STATFS = 4099 SYS_FSTATFS = 4100 SYS_IOPERM = 4101 SYS_SOCKETCALL = 4102 SYS_SYSLOG = 4103 SYS_SETITIMER = 4104 SYS_GETITIMER = 4105 SYS_STAT = 4106 SYS_LSTAT = 4107 SYS_FSTAT = 4108 SYS_UNUSED109 = 4109 SYS_IOPL = 4110 SYS_VHANGUP = 4111 SYS_IDLE = 4112 SYS_VM86 = 4113 SYS_WAIT4 = 4114 SYS_SWAPOFF = 4115 SYS_SYSINFO = 4116 SYS_IPC = 4117 SYS_FSYNC = 4118 SYS_SIGRETURN = 4119 SYS_CLONE = 4120 SYS_SETDOMAINNAME = 4121 SYS_UNAME = 4122 SYS_MODIFY_LDT = 4123 SYS_ADJTIMEX = 4124 SYS_MPROTECT = 4125 SYS_SIGPROCMASK = 4126 SYS_CREATE_MODULE = 4127 SYS_INIT_MODULE = 4128 SYS_DELETE_MODULE = 4129 SYS_GET_KERNEL_SYMS = 4130 SYS_QUOTACTL = 4131 SYS_GETPGID = 4132 SYS_FCHDIR = 4133 SYS_BDFLUSH = 4134 SYS_SYSFS = 4135 SYS_PERSONALITY = 4136 SYS_AFS_SYSCALL = 4137 SYS_SETFSUID = 4138 SYS_SETFSGID = 4139 SYS__LLSEEK = 4140 SYS_GETDENTS = 4141 SYS__NEWSELECT = 4142 SYS_FLOCK = 4143 SYS_MSYNC = 4144 SYS_READV = 4145 SYS_WRITEV = 4146 SYS_CACHEFLUSH = 4147 SYS_CACHECTL = 4148 SYS_SYSMIPS = 4149 SYS_UNUSED150 = 4150 SYS_GETSID = 4151 SYS_FDATASYNC = 4152 SYS__SYSCTL = 4153 SYS_MLOCK = 4154 SYS_MUNLOCK = 4155 SYS_MLOCKALL = 4156 SYS_MUNLOCKALL = 4157 SYS_SCHED_SETPARAM = 4158 SYS_SCHED_GETPARAM = 4159 SYS_SCHED_SETSCHEDULER = 4160 SYS_SCHED_GETSCHEDULER = 4161 SYS_SCHED_YIELD = 4162 SYS_SCHED_GET_PRIORITY_MAX = 4163 SYS_SCHED_GET_PRIORITY_MIN = 4164 SYS_SCHED_RR_GET_INTERVAL = 4165 SYS_NANOSLEEP = 4166 SYS_MREMAP = 4167 SYS_ACCEPT = 4168 SYS_BIND = 4169 SYS_CONNECT = 4170 SYS_GETPEERNAME = 4171 SYS_GETSOCKNAME = 4172 SYS_GETSOCKOPT = 4173 SYS_LISTEN = 4174 SYS_RECV = 4175 SYS_RECVFROM = 4176 SYS_RECVMSG = 4177 SYS_SEND = 4178 SYS_SENDMSG = 4179 SYS_SENDTO = 4180 SYS_SETSOCKOPT = 4181 SYS_SHUTDOWN = 4182 SYS_SOCKET = 4183 SYS_SOCKETPAIR = 4184 SYS_SETRESUID = 4185 SYS_GETRESUID = 4186 SYS_QUERY_MODULE = 4187 SYS_POLL = 4188 SYS_NFSSERVCTL = 4189 SYS_SETRESGID = 4190 SYS_GETRESGID = 4191 SYS_PRCTL = 4192 SYS_RT_SIGRETURN = 4193 SYS_RT_SIGACTION = 4194 SYS_RT_SIGPROCMASK = 4195 SYS_RT_SIGPENDING = 4196 SYS_RT_SIGTIMEDWAIT = 4197 SYS_RT_SIGQUEUEINFO = 4198 SYS_RT_SIGSUSPEND = 4199 SYS_PREAD64 = 4200 SYS_PWRITE64 = 4201 SYS_CHOWN = 4202 SYS_GETCWD = 4203 SYS_CAPGET = 4204 SYS_CAPSET = 4205 SYS_SIGALTSTACK = 4206 SYS_SENDFILE = 4207 SYS_GETPMSG = 4208 SYS_PUTPMSG = 4209 SYS_MMAP2 = 4210 SYS_TRUNCATE64 = 4211 SYS_FTRUNCATE64 = 4212 SYS_STAT64 = 4213 SYS_LSTAT64 = 4214 SYS_FSTAT64 = 4215 SYS_PIVOT_ROOT = 4216 SYS_MINCORE = 4217 SYS_MADVISE = 4218 SYS_GETDENTS64 = 4219 SYS_FCNTL64 = 4220 SYS_RESERVED221 = 4221 SYS_GETTID = 4222 SYS_READAHEAD = 4223 SYS_SETXATTR = 4224 SYS_LSETXATTR = 4225 SYS_FSETXATTR = 4226 SYS_GETXATTR = 4227 SYS_LGETXATTR = 4228 SYS_FGETXATTR = 4229 SYS_LISTXATTR = 4230 SYS_LLISTXATTR = 4231 SYS_FLISTXATTR = 4232 SYS_REMOVEXATTR = 4233 SYS_LREMOVEXATTR = 4234 SYS_FREMOVEXATTR = 4235 SYS_TKILL = 4236 SYS_SENDFILE64 = 4237 SYS_FUTEX = 4238 SYS_SCHED_SETAFFINITY = 4239 SYS_SCHED_GETAFFINITY = 4240 SYS_IO_SETUP = 4241 SYS_IO_DESTROY = 4242 SYS_IO_GETEVENTS = 4243 SYS_IO_SUBMIT = 4244 SYS_IO_CANCEL = 4245 SYS_EXIT_GROUP = 4246 SYS_LOOKUP_DCOOKIE = 4247 SYS_EPOLL_CREATE = 4248 SYS_EPOLL_CTL = 4249 SYS_EPOLL_WAIT = 4250 SYS_REMAP_FILE_PAGES = 4251 SYS_SET_TID_ADDRESS = 4252 SYS_RESTART_SYSCALL = 4253 SYS_FADVISE64 = 4254 SYS_STATFS64 = 4255 SYS_FSTATFS64 = 4256 SYS_TIMER_CREATE = 4257 SYS_TIMER_SETTIME = 4258 SYS_TIMER_GETTIME = 4259 SYS_TIMER_GETOVERRUN = 4260 SYS_TIMER_DELETE = 4261 SYS_CLOCK_SETTIME = 4262 SYS_CLOCK_GETTIME = 4263 SYS_CLOCK_GETRES = 4264 SYS_CLOCK_NANOSLEEP = 4265 SYS_TGKILL = 4266 SYS_UTIMES = 4267 SYS_MBIND = 4268 SYS_GET_MEMPOLICY = 4269 SYS_SET_MEMPOLICY = 4270 SYS_MQ_OPEN = 4271 SYS_MQ_UNLINK = 4272 SYS_MQ_TIMEDSEND = 4273 SYS_MQ_TIMEDRECEIVE = 4274 SYS_MQ_NOTIFY = 4275 SYS_MQ_GETSETATTR = 4276 SYS_VSERVER = 4277 SYS_WAITID = 4278 SYS_ADD_KEY = 4280 SYS_REQUEST_KEY = 4281 SYS_KEYCTL = 4282 SYS_SET_THREAD_AREA = 4283 SYS_INOTIFY_INIT = 4284 SYS_INOTIFY_ADD_WATCH = 4285 SYS_INOTIFY_RM_WATCH = 4286 SYS_MIGRATE_PAGES = 4287 SYS_OPENAT = 4288 SYS_MKDIRAT = 4289 SYS_MKNODAT = 4290 SYS_FCHOWNAT = 4291 SYS_FUTIMESAT = 4292 SYS_FSTATAT64 = 4293 SYS_UNLINKAT = 4294 SYS_RENAMEAT = 4295 SYS_LINKAT = 4296 SYS_SYMLINKAT = 4297 SYS_READLINKAT = 4298 SYS_FCHMODAT = 4299 SYS_FACCESSAT = 4300 SYS_PSELECT6 = 4301 SYS_PPOLL = 4302 SYS_UNSHARE = 4303 SYS_SPLICE = 4304 SYS_SYNC_FILE_RANGE = 4305 SYS_TEE = 4306 SYS_VMSPLICE = 4307 SYS_MOVE_PAGES = 4308 SYS_SET_ROBUST_LIST = 4309 SYS_GET_ROBUST_LIST = 4310 SYS_KEXEC_LOAD = 4311 SYS_GETCPU = 4312 SYS_EPOLL_PWAIT = 4313 SYS_IOPRIO_SET = 4314 SYS_IOPRIO_GET = 4315 SYS_UTIMENSAT = 4316 SYS_SIGNALFD = 4317 SYS_TIMERFD = 4318 SYS_EVENTFD = 4319 SYS_FALLOCATE = 4320 SYS_TIMERFD_CREATE = 4321 SYS_TIMERFD_GETTIME = 4322 SYS_TIMERFD_SETTIME = 4323 SYS_SIGNALFD4 = 4324 SYS_EVENTFD2 = 4325 SYS_EPOLL_CREATE1 = 4326 SYS_DUP3 = 4327 SYS_PIPE2 = 4328 SYS_INOTIFY_INIT1 = 4329 SYS_PREADV = 4330 SYS_PWRITEV = 4331 SYS_RT_TGSIGQUEUEINFO = 4332 SYS_PERF_EVENT_OPEN = 4333 SYS_ACCEPT4 = 4334 SYS_RECVMMSG = 4335 SYS_FANOTIFY_INIT = 4336 SYS_FANOTIFY_MARK = 4337 SYS_PRLIMIT64 = 4338 SYS_NAME_TO_HANDLE_AT = 4339 SYS_OPEN_BY_HANDLE_AT = 4340 SYS_CLOCK_ADJTIME = 4341 SYS_SYNCFS = 4342 SYS_SENDMMSG = 4343 SYS_SETNS = 4344 SYS_PROCESS_VM_READV = 4345 SYS_PROCESS_VM_WRITEV = 4346 SYS_KCMP = 4347 SYS_FINIT_MODULE = 4348 SYS_SCHED_SETATTR = 4349 SYS_SCHED_GETATTR = 4350 SYS_RENAMEAT2 = 4351 SYS_SECCOMP = 4352 SYS_GETRANDOM = 4353 SYS_MEMFD_CREATE = 4354 SYS_BPF = 4355 SYS_EXECVEAT = 4356 SYS_USERFAULTFD = 4357 SYS_MEMBARRIER = 4358 SYS_MLOCK2 = 4359 SYS_COPY_FILE_RANGE = 4360 SYS_PREADV2 = 4361 SYS_PWRITEV2 = 4362 SYS_PKEY_MPROTECT = 4363 SYS_PKEY_ALLOC = 4364 SYS_PKEY_FREE = 4365 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go000066400000000000000000000300521317166637100242130ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. 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 SYS_EXECVEAT = 362 SYS_SWITCH_ENDIAN = 363 SYS_USERFAULTFD = 364 SYS_MEMBARRIER = 365 SYS_MLOCK2 = 378 SYS_COPY_FILE_RANGE = 379 SYS_PREADV2 = 380 SYS_PWRITEV2 = 381 SYS_KEXEC_FILE_LOAD = 382 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go000066400000000000000000000300541317166637100245360ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. 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 SYS_SCHED_SETATTR = 355 SYS_SCHED_GETATTR = 356 SYS_RENAMEAT2 = 357 SYS_SECCOMP = 358 SYS_GETRANDOM = 359 SYS_MEMFD_CREATE = 360 SYS_BPF = 361 SYS_EXECVEAT = 362 SYS_SWITCH_ENDIAN = 363 SYS_USERFAULTFD = 364 SYS_MEMBARRIER = 365 SYS_MLOCK2 = 378 SYS_COPY_FILE_RANGE = 379 SYS_PREADV2 = 380 SYS_PWRITEV2 = 381 SYS_KEXEC_FILE_LOAD = 382 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go000066400000000000000000000255151317166637100241550ustar00rootroot00000000000000// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h // Code generated by the command above; see README.md. 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_COPY_FILE_RANGE = 375 SYS_PREADV2 = 376 SYS_PWRITEV2 = 377 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 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go000066400000000000000000000265531317166637100245540ustar00rootroot00000000000000// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__arch64__ linux/usr/include/asm/unistd.h // MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT // +build sparc64,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_WAIT4 = 7 SYS_CREAT = 8 SYS_LINK = 9 SYS_UNLINK = 10 SYS_EXECV = 11 SYS_CHDIR = 12 SYS_CHOWN = 13 SYS_MKNOD = 14 SYS_CHMOD = 15 SYS_LCHOWN = 16 SYS_BRK = 17 SYS_PERFCTR = 18 SYS_LSEEK = 19 SYS_GETPID = 20 SYS_CAPGET = 21 SYS_CAPSET = 22 SYS_SETUID = 23 SYS_GETUID = 24 SYS_VMSPLICE = 25 SYS_PTRACE = 26 SYS_ALARM = 27 SYS_SIGALTSTACK = 28 SYS_PAUSE = 29 SYS_UTIME = 30 SYS_ACCESS = 33 SYS_NICE = 34 SYS_SYNC = 36 SYS_KILL = 37 SYS_STAT = 38 SYS_SENDFILE = 39 SYS_LSTAT = 40 SYS_DUP = 41 SYS_PIPE = 42 SYS_TIMES = 43 SYS_UMOUNT2 = 45 SYS_SETGID = 46 SYS_GETGID = 47 SYS_SIGNAL = 48 SYS_GETEUID = 49 SYS_GETEGID = 50 SYS_ACCT = 51 SYS_MEMORY_ORDERING = 52 SYS_IOCTL = 54 SYS_REBOOT = 55 SYS_SYMLINK = 57 SYS_READLINK = 58 SYS_EXECVE = 59 SYS_UMASK = 60 SYS_CHROOT = 61 SYS_FSTAT = 62 SYS_FSTAT64 = 63 SYS_GETPAGESIZE = 64 SYS_MSYNC = 65 SYS_VFORK = 66 SYS_PREAD64 = 67 SYS_PWRITE64 = 68 SYS_MMAP = 71 SYS_MUNMAP = 73 SYS_MPROTECT = 74 SYS_MADVISE = 75 SYS_VHANGUP = 76 SYS_MINCORE = 78 SYS_GETGROUPS = 79 SYS_SETGROUPS = 80 SYS_GETPGRP = 81 SYS_SETITIMER = 83 SYS_SWAPON = 85 SYS_GETITIMER = 86 SYS_SETHOSTNAME = 88 SYS_DUP2 = 90 SYS_FCNTL = 92 SYS_SELECT = 93 SYS_FSYNC = 95 SYS_SETPRIORITY = 96 SYS_SOCKET = 97 SYS_CONNECT = 98 SYS_ACCEPT = 99 SYS_GETPRIORITY = 100 SYS_RT_SIGRETURN = 101 SYS_RT_SIGACTION = 102 SYS_RT_SIGPROCMASK = 103 SYS_RT_SIGPENDING = 104 SYS_RT_SIGTIMEDWAIT = 105 SYS_RT_SIGQUEUEINFO = 106 SYS_RT_SIGSUSPEND = 107 SYS_SETRESUID = 108 SYS_GETRESUID = 109 SYS_SETRESGID = 110 SYS_GETRESGID = 111 SYS_RECVMSG = 113 SYS_SENDMSG = 114 SYS_GETTIMEOFDAY = 116 SYS_GETRUSAGE = 117 SYS_GETSOCKOPT = 118 SYS_GETCWD = 119 SYS_READV = 120 SYS_WRITEV = 121 SYS_SETTIMEOFDAY = 122 SYS_FCHOWN = 123 SYS_FCHMOD = 124 SYS_RECVFROM = 125 SYS_SETREUID = 126 SYS_SETREGID = 127 SYS_RENAME = 128 SYS_TRUNCATE = 129 SYS_FTRUNCATE = 130 SYS_FLOCK = 131 SYS_LSTAT64 = 132 SYS_SENDTO = 133 SYS_SHUTDOWN = 134 SYS_SOCKETPAIR = 135 SYS_MKDIR = 136 SYS_RMDIR = 137 SYS_UTIMES = 138 SYS_STAT64 = 139 SYS_SENDFILE64 = 140 SYS_GETPEERNAME = 141 SYS_FUTEX = 142 SYS_GETTID = 143 SYS_GETRLIMIT = 144 SYS_SETRLIMIT = 145 SYS_PIVOT_ROOT = 146 SYS_PRCTL = 147 SYS_PCICONFIG_READ = 148 SYS_PCICONFIG_WRITE = 149 SYS_GETSOCKNAME = 150 SYS_INOTIFY_INIT = 151 SYS_INOTIFY_ADD_WATCH = 152 SYS_POLL = 153 SYS_GETDENTS64 = 154 SYS_INOTIFY_RM_WATCH = 156 SYS_STATFS = 157 SYS_FSTATFS = 158 SYS_UMOUNT = 159 SYS_SCHED_SET_AFFINITY = 160 SYS_SCHED_GET_AFFINITY = 161 SYS_GETDOMAINNAME = 162 SYS_SETDOMAINNAME = 163 SYS_UTRAP_INSTALL = 164 SYS_QUOTACTL = 165 SYS_SET_TID_ADDRESS = 166 SYS_MOUNT = 167 SYS_USTAT = 168 SYS_SETXATTR = 169 SYS_LSETXATTR = 170 SYS_FSETXATTR = 171 SYS_GETXATTR = 172 SYS_LGETXATTR = 173 SYS_GETDENTS = 174 SYS_SETSID = 175 SYS_FCHDIR = 176 SYS_FGETXATTR = 177 SYS_LISTXATTR = 178 SYS_LLISTXATTR = 179 SYS_FLISTXATTR = 180 SYS_REMOVEXATTR = 181 SYS_LREMOVEXATTR = 182 SYS_SIGPENDING = 183 SYS_QUERY_MODULE = 184 SYS_SETPGID = 185 SYS_FREMOVEXATTR = 186 SYS_TKILL = 187 SYS_EXIT_GROUP = 188 SYS_UNAME = 189 SYS_INIT_MODULE = 190 SYS_PERSONALITY = 191 SYS_REMAP_FILE_PAGES = 192 SYS_EPOLL_CREATE = 193 SYS_EPOLL_CTL = 194 SYS_EPOLL_WAIT = 195 SYS_IOPRIO_SET = 196 SYS_GETPPID = 197 SYS_SIGACTION = 198 SYS_SGETMASK = 199 SYS_SSETMASK = 200 SYS_SIGSUSPEND = 201 SYS_OLDLSTAT = 202 SYS_USELIB = 203 SYS_READDIR = 204 SYS_READAHEAD = 205 SYS_SOCKETCALL = 206 SYS_SYSLOG = 207 SYS_LOOKUP_DCOOKIE = 208 SYS_FADVISE64 = 209 SYS_FADVISE64_64 = 210 SYS_TGKILL = 211 SYS_WAITPID = 212 SYS_SWAPOFF = 213 SYS_SYSINFO = 214 SYS_IPC = 215 SYS_SIGRETURN = 216 SYS_CLONE = 217 SYS_IOPRIO_GET = 218 SYS_ADJTIMEX = 219 SYS_SIGPROCMASK = 220 SYS_CREATE_MODULE = 221 SYS_DELETE_MODULE = 222 SYS_GET_KERNEL_SYMS = 223 SYS_GETPGID = 224 SYS_BDFLUSH = 225 SYS_SYSFS = 226 SYS_AFS_SYSCALL = 227 SYS_SETFSUID = 228 SYS_SETFSGID = 229 SYS__NEWSELECT = 230 SYS_SPLICE = 232 SYS_STIME = 233 SYS_STATFS64 = 234 SYS_FSTATFS64 = 235 SYS__LLSEEK = 236 SYS_MLOCK = 237 SYS_MUNLOCK = 238 SYS_MLOCKALL = 239 SYS_MUNLOCKALL = 240 SYS_SCHED_SETPARAM = 241 SYS_SCHED_GETPARAM = 242 SYS_SCHED_SETSCHEDULER = 243 SYS_SCHED_GETSCHEDULER = 244 SYS_SCHED_YIELD = 245 SYS_SCHED_GET_PRIORITY_MAX = 246 SYS_SCHED_GET_PRIORITY_MIN = 247 SYS_SCHED_RR_GET_INTERVAL = 248 SYS_NANOSLEEP = 249 SYS_MREMAP = 250 SYS__SYSCTL = 251 SYS_GETSID = 252 SYS_FDATASYNC = 253 SYS_NFSSERVCTL = 254 SYS_SYNC_FILE_RANGE = 255 SYS_CLOCK_SETTIME = 256 SYS_CLOCK_GETTIME = 257 SYS_CLOCK_GETRES = 258 SYS_CLOCK_NANOSLEEP = 259 SYS_SCHED_GETAFFINITY = 260 SYS_SCHED_SETAFFINITY = 261 SYS_TIMER_SETTIME = 262 SYS_TIMER_GETTIME = 263 SYS_TIMER_GETOVERRUN = 264 SYS_TIMER_DELETE = 265 SYS_TIMER_CREATE = 266 SYS_IO_SETUP = 268 SYS_IO_DESTROY = 269 SYS_IO_SUBMIT = 270 SYS_IO_CANCEL = 271 SYS_IO_GETEVENTS = 272 SYS_MQ_OPEN = 273 SYS_MQ_UNLINK = 274 SYS_MQ_TIMEDSEND = 275 SYS_MQ_TIMEDRECEIVE = 276 SYS_MQ_NOTIFY = 277 SYS_MQ_GETSETATTR = 278 SYS_WAITID = 279 SYS_TEE = 280 SYS_ADD_KEY = 281 SYS_REQUEST_KEY = 282 SYS_KEYCTL = 283 SYS_OPENAT = 284 SYS_MKDIRAT = 285 SYS_MKNODAT = 286 SYS_FCHOWNAT = 287 SYS_FUTIMESAT = 288 SYS_FSTATAT64 = 289 SYS_UNLINKAT = 290 SYS_RENAMEAT = 291 SYS_LINKAT = 292 SYS_SYMLINKAT = 293 SYS_READLINKAT = 294 SYS_FCHMODAT = 295 SYS_FACCESSAT = 296 SYS_PSELECT6 = 297 SYS_PPOLL = 298 SYS_UNSHARE = 299 SYS_SET_ROBUST_LIST = 300 SYS_GET_ROBUST_LIST = 301 SYS_MIGRATE_PAGES = 302 SYS_MBIND = 303 SYS_GET_MEMPOLICY = 304 SYS_SET_MEMPOLICY = 305 SYS_KEXEC_LOAD = 306 SYS_MOVE_PAGES = 307 SYS_GETCPU = 308 SYS_EPOLL_PWAIT = 309 SYS_UTIMENSAT = 310 SYS_SIGNALFD = 311 SYS_TIMERFD_CREATE = 312 SYS_EVENTFD = 313 SYS_FALLOCATE = 314 SYS_TIMERFD_SETTIME = 315 SYS_TIMERFD_GETTIME = 316 SYS_SIGNALFD4 = 317 SYS_EVENTFD2 = 318 SYS_EPOLL_CREATE1 = 319 SYS_DUP3 = 320 SYS_PIPE2 = 321 SYS_INOTIFY_INIT1 = 322 SYS_ACCEPT4 = 323 SYS_PREADV = 324 SYS_PWRITEV = 325 SYS_RT_TGSIGQUEUEINFO = 326 SYS_PERF_EVENT_OPEN = 327 SYS_RECVMMSG = 328 SYS_FANOTIFY_INIT = 329 SYS_FANOTIFY_MARK = 330 SYS_PRLIMIT64 = 331 SYS_NAME_TO_HANDLE_AT = 332 SYS_OPEN_BY_HANDLE_AT = 333 SYS_CLOCK_ADJTIME = 334 SYS_SYNCFS = 335 SYS_SENDMMSG = 336 SYS_SETNS = 337 SYS_PROCESS_VM_READV = 338 SYS_PROCESS_VM_WRITEV = 339 SYS_KERN_FEATURES = 340 SYS_KCMP = 341 SYS_FINIT_MODULE = 342 SYS_SCHED_SETATTR = 343 SYS_SCHED_GETATTR = 344 SYS_RENAMEAT2 = 345 SYS_SECCOMP = 346 SYS_GETRANDOM = 347 SYS_MEMFD_CREATE = 348 SYS_BPF = 349 SYS_EXECVEAT = 350 SYS_MEMBARRIER = 351 SYS_USERFAULTFD = 352 SYS_BIND = 353 SYS_LISTEN = 354 SYS_SETSOCKOPT = 355 SYS_MLOCK2 = 356 SYS_COPY_FILE_RANGE = 357 SYS_PREADV2 = 358 SYS_PWRITEV2 = 359 ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go000066400000000000000000000632111317166637100237220ustar00rootroot00000000000000// 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_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } 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); } ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go000066400000000000000000000632131317166637100243170ustar00rootroot00000000000000// 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_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } 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); } ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go000066400000000000000000000632111317166637100241610ustar00rootroot00000000000000// 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_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } 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); } ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go000066400000000000000000000340071317166637100240760ustar00rootroot00000000000000// 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); } ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go000066400000000000000000000340111317166637100244640ustar00rootroot00000000000000// 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); } ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go000066400000000000000000000347211317166637100243400ustar00rootroot00000000000000// mksysnum_openbsd.pl // MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT // +build arm,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_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } 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 amode); } 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_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 // { ssize_t sys_readlink(const char *path, \ 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, pid_t pgid); } SYS_SENDSYSLOG = 83 // { int sys_sendsyslog(const void *buf, size_t nbyte); } 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_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \ 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_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } 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_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \ 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_KILL = 122 // { int sys_kill(int pid, int signum); } 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); } ) dep-0.3.2/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go000066400000000000000000000004361317166637100245120ustar00rootroot00000000000000// 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 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go000066400000000000000000000156601317166637100235420ustar00rootroot00000000000000// cgo -godefs types_darwin.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,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 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 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } const ( AT_FDCWD = -0x2 AT_REMOVEDIR = 0x80 AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go000066400000000000000000000162071317166637100241330ustar00rootroot00000000000000// cgo -godefs types_darwin.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,darwin 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 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } const ( AT_FDCWD = -0x2 AT_REMOVEDIR = 0x80 AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go000066400000000000000000000157021317166637100237760ustar00rootroot00000000000000// 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 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } const ( AT_FDCWD = -0x2 AT_REMOVEDIR = 0x80 AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go000066400000000000000000000161271317166637100241520ustar00rootroot00000000000000// +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 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } const ( AT_FDCWD = -0x2 AT_REMOVEDIR = 0x80 AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go000066400000000000000000000153371317166637100246370ustar00rootroot00000000000000// cgo -godefs types_dragonfly.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +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 Oqdrops 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 } const ( AT_FDCWD = 0xfffafdcd AT_SYMLINK_NOFOLLOW = 0x1 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go000066400000000000000000000202771317166637100236700ustar00rootroot00000000000000// cgo -godefs types_freebsd.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,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 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 int32 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 = 0xa8 SizeofIfMsghdr = 0x60 sizeofIfData = 0x98 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 Datalen uint16 Mtu uint32 Metric uint32 Baudrate uint64 Ipackets uint64 Ierrors uint64 Opackets uint64 Oerrors uint64 Collisions uint64 Ibytes uint64 Obytes uint64 Imcasts uint64 Omcasts uint64 Iqdrops uint64 Oqdrops uint64 Noproto uint64 Hwassist uint64 X__ifi_epoch [8]byte X__ifi_lastchange [16]byte } 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 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } const ( AT_FDCWD = -0x64 AT_REMOVEDIR = 0x800 AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x200 ) type CapRights struct { Rights [2]uint64 } dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go000066400000000000000000000204241317166637100242550ustar00rootroot00000000000000// cgo -godefs types_freebsd.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,freebsd 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 int32 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 Datalen uint16 Mtu uint32 Metric uint32 Baudrate uint64 Ipackets uint64 Ierrors uint64 Opackets uint64 Oerrors uint64 Collisions uint64 Ibytes uint64 Obytes uint64 Imcasts uint64 Omcasts uint64 Iqdrops uint64 Oqdrops uint64 Noproto uint64 Hwassist uint64 X__ifi_epoch [8]byte X__ifi_lastchange [16]byte } 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 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } const ( AT_FDCWD = -0x64 AT_REMOVEDIR = 0x800 AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x200 ) type CapRights struct { Rights [2]uint64 } dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go000066400000000000000000000204551317166637100241250ustar00rootroot00000000000000// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +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 int32 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 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 = 0xa8 SizeofIfMsghdr = 0x70 sizeofIfData = 0x98 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 Datalen uint16 Mtu uint32 Metric uint32 Baudrate uint64 Ipackets uint64 Ierrors uint64 Opackets uint64 Oerrors uint64 Collisions uint64 Ibytes uint64 Obytes uint64 Imcasts uint64 Omcasts uint64 Iqdrops uint64 Oqdrops uint64 Noproto uint64 Hwassist uint64 X__ifi_epoch [8]byte X__ifi_lastchange [16]byte } 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 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } const ( AT_FDCWD = -0x64 AT_REMOVEDIR = 0x800 AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x200 ) type CapRights struct { Rights [2]uint64 } dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_386.go000066400000000000000000000351131317166637100234100ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,linux 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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 } 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 [32]uint32 } const RNDGETENTCNT = 0x80045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [19]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]int8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go000066400000000000000000000356441317166637100240140ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,linux 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 _ [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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 { 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 } const RNDGETENTCNT = 0x80045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [19]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]int8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go000066400000000000000000000347261317166637100236600ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,linux 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 FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 } 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 [32]uint32 } const RNDGETENTCNT = 0x80045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [19]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]uint8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go000066400000000000000000000351001317166637100240150ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build arm64,linux 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 _ [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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 [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 } const RNDGETENTCNT = 0x80045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [19]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]int8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go000066400000000000000000000350031317166637100240360ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips,linux 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 uint32 Pad1 [3]int32 Ino uint64 Mode uint32 Nlink uint32 Uid uint32 Gid uint32 Rdev uint32 Pad2 [3]int32 Size int64 Atim Timespec Mtim Timespec Ctim Timespec Blksize int32 Pad4 int32 Blocks int64 Pad5 [14]int32 } type Statfs_t struct { Type int32 Bsize int32 Frsize int32 Pad_cgo_0 [4]byte Blocks uint64 Bfree uint64 Files uint64 Ffree uint64 Bavail uint64 Fsid Fsid Namelen int32 Flags int32 Spare [5]int32 Pad_cgo_1 [4]byte } 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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 } const SizeofInotifyEvent = 0x10 type PtraceRegs struct { Regs [32]uint64 Lo uint64 Hi uint64 Epc uint64 Badvaddr uint64 Status uint64 Cause uint64 } 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 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 [32]uint32 } const RNDGETENTCNT = 0x40045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [23]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]int8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go000066400000000000000000000351461317166637100242200ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips64,linux 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]uint32 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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 [32]uint64 Lo uint64 Hi uint64 Epc uint64 Badvaddr uint64 Status uint64 Cause 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 } const RNDGETENTCNT = 0x40045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [23]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]int8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go000066400000000000000000000351501317166637100245340ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips64le,linux 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]uint32 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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 [32]uint64 Lo uint64 Hi uint64 Epc uint64 Badvaddr uint64 Status uint64 Cause 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 } const RNDGETENTCNT = 0x40045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [23]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]int8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go000066400000000000000000000350051317166637100243610ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build mipsle,linux 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 uint32 Pad1 [3]int32 Ino uint64 Mode uint32 Nlink uint32 Uid uint32 Gid uint32 Rdev uint32 Pad2 [3]int32 Size int64 Atim Timespec Mtim Timespec Ctim Timespec Blksize int32 Pad4 int32 Blocks int64 Pad5 [14]int32 } type Statfs_t struct { Type int32 Bsize int32 Frsize int32 Pad_cgo_0 [4]byte Blocks uint64 Bfree uint64 Files uint64 Ffree uint64 Bavail uint64 Fsid Fsid Namelen int32 Flags int32 Spare [5]int32 Pad_cgo_1 [4]byte } 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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 } const SizeofInotifyEvent = 0x10 type PtraceRegs struct { Regs [32]uint64 Lo uint64 Hi uint64 Epc uint64 Badvaddr uint64 Status uint64 Cause uint64 } 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 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 [32]uint32 } const RNDGETENTCNT = 0x40045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [23]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]int8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go000066400000000000000000000353771317166637100240400ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build ppc64,linux 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 _ uint64 _ uint64 _ 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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 { 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 } const RNDGETENTCNT = 0x40045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Cc [19]uint8 Line uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]uint8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go000066400000000000000000000354011317166637100243450ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build ppc64le,linux 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 _ uint64 _ uint64 _ 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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base 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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 { 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 } const RNDGETENTCNT = 0x40045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Cc [19]uint8 Line uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 Pad_cgo_0 [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 Pad_cgo_1 [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]uint8 Ac_sched uint8 Ac_pad [3]uint8 Pad_cgo_2 [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 Pad_cgo_3 [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go000066400000000000000000000360241317166637100237600ustar00rootroot00000000000000// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build s390x,linux 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 } type FscryptPolicy struct { Version uint8 Contents_encryption_mode uint8 Filenames_encryption_mode uint8 Flags uint8 Master_key_descriptor [8]uint8 } type FscryptKey struct { Mode uint32 Raw [64]uint8 Size uint32 } type KeyctlDHParams struct { Private int32 Prime int32 Base int32 } 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 RawSockaddrCAN struct { Family uint16 _ [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 PacketMreq struct { Ifindex int32 Type uint16 Alen uint16 Address [8]uint8 } 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 SizeofPacketMreq = 0x10 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 = 0x2b 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 { _ [16]uint64 } const RNDGETENTCNT = 0x80045200 const PERF_IOC_FLAG_GROUP = 0x1 const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [19]uint8 Ispeed uint32 Ospeed uint32 } type Winsize struct { Row uint16 Col uint16 Xpixel uint16 Ypixel uint16 } type Taskstats struct { Version uint16 _ [2]byte Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 Blkio_delay_total uint64 Swapin_count uint64 Swapin_delay_total uint64 Cpu_run_real_total uint64 Cpu_run_virtual_total uint64 Ac_comm [32]int8 Ac_sched uint8 Ac_pad [3]uint8 _ [4]byte Ac_uid uint32 Ac_gid uint32 Ac_pid uint32 Ac_ppid uint32 Ac_btime uint32 _ [4]byte Ac_etime uint64 Ac_utime uint64 Ac_stime uint64 Ac_minflt uint64 Ac_majflt uint64 Coremem uint64 Virtmem uint64 Hiwater_rss uint64 Hiwater_vm uint64 Read_char uint64 Write_char uint64 Read_syscalls uint64 Write_syscalls uint64 Read_bytes uint64 Write_bytes uint64 Cancelled_write_bytes uint64 Nvcsw uint64 Nivcsw uint64 Ac_utimescaled uint64 Ac_stimescaled uint64 Cpu_scaled_run_real_total uint64 Freepages_count uint64 Freepages_delay_total uint64 } const ( TASKSTATS_CMD_UNSPEC = 0x0 TASKSTATS_CMD_GET = 0x1 TASKSTATS_CMD_NEW = 0x2 TASKSTATS_TYPE_UNSPEC = 0x0 TASKSTATS_TYPE_PID = 0x1 TASKSTATS_TYPE_TGID = 0x2 TASKSTATS_TYPE_STATS = 0x3 TASKSTATS_TYPE_AGGR_PID = 0x4 TASKSTATS_TYPE_AGGR_TGID = 0x5 TASKSTATS_TYPE_NULL = 0x6 TASKSTATS_CMD_ATTR_UNSPEC = 0x0 TASKSTATS_CMD_ATTR_PID = 0x1 TASKSTATS_CMD_ATTR_TGID = 0x2 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 ) type Genlmsghdr struct { Cmd uint8 Version uint8 Reserved uint16 } const ( CTRL_CMD_UNSPEC = 0x0 CTRL_CMD_NEWFAMILY = 0x1 CTRL_CMD_DELFAMILY = 0x2 CTRL_CMD_GETFAMILY = 0x3 CTRL_CMD_NEWOPS = 0x4 CTRL_CMD_DELOPS = 0x5 CTRL_CMD_GETOPS = 0x6 CTRL_CMD_NEWMCAST_GRP = 0x7 CTRL_CMD_DELMCAST_GRP = 0x8 CTRL_CMD_GETMCAST_GRP = 0x9 CTRL_ATTR_UNSPEC = 0x0 CTRL_ATTR_FAMILY_ID = 0x1 CTRL_ATTR_FAMILY_NAME = 0x2 CTRL_ATTR_VERSION = 0x3 CTRL_ATTR_HDRSIZE = 0x4 CTRL_ATTR_MAXATTR = 0x5 CTRL_ATTR_OPS = 0x6 CTRL_ATTR_MCAST_GROUPS = 0x7 CTRL_ATTR_OP_UNSPEC = 0x0 CTRL_ATTR_OP_ID = 0x1 CTRL_ATTR_OP_FLAGS = 0x2 CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 CTRL_ATTR_MCAST_GRP_NAME = 0x1 CTRL_ATTR_MCAST_GRP_ID = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go000066400000000000000000000262621317166637100243570ustar00rootroot00000000000000// +build sparc64,linux // Created by cgo -godefs - DO NOT EDIT // cgo -godefs types_linux.go | go run mkpost.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 int32 Pad_cgo_0 [4]byte } 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 X__pad1 uint16 Pad_cgo_0 [6]byte Ino uint64 Mode uint32 Nlink uint32 Uid uint32 Gid uint32 Rdev uint64 X__pad2 uint16 Pad_cgo_1 [6]byte Size int64 Blksize int64 Blocks int64 Atim Timespec Mtim Timespec Ctim Timespec X__glibc_reserved4 uint64 X__glibc_reserved5 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]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 X__glibc_reserved int16 Pad_cgo_1 [2]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 RawSockaddrCAN struct { Family uint16 Pad_cgo_0 [2]byte Ifindex int32 Addr [8]byte } type RawSockaddrALG struct { Family uint16 Type [14]uint8 Feat uint32 Mask uint32 Name [64]uint8 } type RawSockaddrVM struct { Family uint16 Reserved1 uint16 Port uint32 Cid uint32 Zero [4]uint8 } 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 SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 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 = 0x2a 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 [16]uint64 Tstate uint64 Tpc uint64 Tnpc uint64 Y uint32 Magic uint32 } type ptracePsw struct { } type ptraceFpregs struct { } type ptracePer struct { } 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 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 = 0x800 POLLERR = 0x8 POLLHUP = 0x10 POLLNVAL = 0x20 ) type Sigset_t struct { X__val [16]uint64 } const _SC_PAGESIZE = 0x1e type Termios struct { Iflag uint32 Oflag uint32 Cflag uint32 Lflag uint32 Line uint8 Cc [19]uint8 Ispeed uint32 Ospeed uint32 } dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go000066400000000000000000000137151317166637100235340ustar00rootroot00000000000000// 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 } const ( AT_FDCWD = -0x64 AT_SYMLINK_NOFOLLOW = 0x200 ) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go000066400000000000000000000142071317166637100241240ustar00rootroot00000000000000// 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 } const ( AT_FDCWD = -0x64 AT_SYMLINK_NOFOLLOW = 0x200 ) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go000066400000000000000000000141361317166637100237710ustar00rootroot00000000000000// 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 } const ( AT_FDCWD = -0x64 AT_SYMLINK_NOFOLLOW = 0x200 ) 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 } dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go000066400000000000000000000153151317166637100237050ustar00rootroot00000000000000// 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 } const ( AT_FDCWD = -0x64 AT_SYMLINK_NOFOLLOW = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go000066400000000000000000000155561317166637100243070ustar00rootroot00000000000000// 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 } const ( AT_FDCWD = -0x64 AT_SYMLINK_NOFOLLOW = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go000066400000000000000000000151621317166637100241440ustar00rootroot00000000000000// Created by cgo -godefs - DO NOT EDIT // cgo -godefs types_openbsd.go // +build arm,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 int32 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]uint8 F_mntonname [90]uint8 F_mntfromname [90]uint8 F_mntfromspec [90]uint8 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]uint8 } 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 = 0x98 SizeofIfData = 0x80 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 } 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]uint8 } 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{} 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 } const ( AT_FDCWD = -0x64 AT_SYMLINK_NOFOLLOW = 0x2 ) dep-0.3.2/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go000066400000000000000000000151341317166637100243210ustar00rootroot00000000000000// cgo -godefs types_solaris.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,solaris package unix const ( sizeofPtr = 0x8 sizeofShort = 0x2 sizeofInt = 0x4 sizeofLong = 0x8 sizeofLongLong = 0x8 PathMax = 0x400 MaxHostNameLen = 0x100 ) 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 _Fsblkcnt_t uint64 type Statvfs_t struct { Bsize uint64 Frsize uint64 Blocks uint64 Bfree uint64 Bavail uint64 Files uint64 Ffree uint64 Favail uint64 Fsid uint64 Basetype [16]int8 Flag uint64 Namemax uint64 Fstr [32]int8 } 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 }