//** github.com/Tencent/bk-bcs@v0.0.0-20210107073425-12adaa1f349f **//

{{Types "MIT"}}

Tencent is pleased to support the open source community by making Blueking Container Service available.
Copyright (C) 2019 THL A29 Limited, a Tencent company.  All rights reserved.
If you have downloaded a copy of the Blueking Container Service binary from Tencent, please note that the Blueking Container Service binary is licensed under the MIT License.
If you have downloaded a copy of the Blueking Container Service source code from Tencent, please note that Blueking Container Service source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms.  Your integration of Blueking Container Service into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within Blueking Container Service.
A copy of the MIT License is included in this file.


Other dependencies and licenses:
Open Source Software Licensed Under the BSD 2-Clause License:
----------------------------------------------------------------------------------------
1. fnmatch
Copyright (c) 2016, Daniel Wakefield All rights reserved.

2. go-dockerclient  v1.3.1
Copyright (c) 2013-2018, go-dockerclient authors
All rights reserved.

3. websocket  v1.4.0
Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved.

4. properties  v1.8.0
Copyright (c) 2013-2018 - Frank Schroeder
All rights reserved.

5. errors  v0.8.0
Copyright (c) 2015, Dave Cheney <dave@cheney.net>
All rights reserved.

6. go-metrics
Copyright 2012 Richard Crowley. All rights reserved.

7. mgo  v2
Copyright (c) 2010-2013 - Gustavo Niemeyer <gustavo@niemeyer.net>
All rights reserved.


Terms of the BSD 2-Clause License:
--------------------------------------------------------------------
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.



Open Source Software Licensed Under the BSD 3-Clause License:
----------------------------------------------------------------------------------------
1. protobuf  v1.1.0
Copyright 2010 The Go Authors.  All rights reserved.
https://github.com/golang/protobuf

2. snappy
Copyright (c) 2011 The Snappy-Go Authors. All rights reserved.

3. go-cmp  v0.2.0
Copyright (c) 2017 The Go Authors. All rights reserved.

4. go-querystring  v1.0.0
Copyright (c) 2013 Google. All rights reserved.

5. uuid  v1.1.0
Copyright (c) 2009,2014 Google Inc. All rights reserved.

6. context  v1.1.1
Copyright (c) 2012 Rodrigo Moraes. All rights reserved.

7. mux  v1.6.2
Copyright (c) 2012 Rodrigo Moraes. All rights reserved.

8. grpc-opentracing
Copyright (c) 2016, gRPC Ecosystem
All rights reserved.

9. strcase
Copyright (c) 2015 Ian Coleman
Copyright (c) 2018 Ma_124, <github.com/Ma124>

10. mergo  v0.3.5
Copyright (c) 2013 Dario Castañé. All rights reserved.
Copyright (c) 2012 The Go Authors. All rights reserved.

11. osext
Copyright (c) 2012 The Go Authors. All rights reserved.

12. compress  v1.4.1
Copyright (c) 2012 The Go Authors. All rights reserved.

13. dns  v1.1.1
copyright (c) 2011 Miek Gieben
Copyright (c) 2009 The Go Authors. All rights reserved.

14. go-flowrate
Copyright (c) 2014 The Go-FlowRate Authors. All rights reserved.

15. go-libGeoIP
Copyright (c) 2010, Nikola Ranchev
All rights reserved.

16. uuid  v1.2
Copyright (c) 2009,2014 Google Inc. All rights reserved.

17. GoLLRB
Copyright (c) 2010, Petar Maymounkov
All rights reserved.

18. lz4  v2.0.7
Copyright (c) 2015, Pierre Curto
All rights reserved.

19. go-zookeeper
Copyright (c) 2013, Samuel Stauffer <samuel@descolada.com>
All rights reserved.

20. pflag  v1.0.3
Copyright (c) 2012 Alex Ogier. All rights reserved.
Copyright (c) 2012 The Go Authors. All rights reserved.

21. crypto
Copyright (c) 2009 The Go Authors. All rights reserved.

22. net
Copyright (c) 2009 The Go Authors. All rights reserved.

23. oauth2
Copyright (c) 2009 The Go Authors. All rights reserved.

24. sys
Copyright (c) 2009 The Go Authors. All rights reserved.

25. text  v0.3.0
Copyright (c) 2009 The Go Authors. All rights reserved.

26. time
Copyright (c) 2009 The Go Authors. All rights reserved.

27. fsnotify  v1.4.7
Copyright (c) 2012 fsnotify Authors. All rights reserved.
Copyright (c) 2012 The Go Authors. All rights reserved.

28. inf  v0.9.0
Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go Authors.
All rights reserved.

29. tomb  v1
Copyright (c) 2010-2011 - Gustavo Niemeyer <gustavo@niemeyer.net>
All rights reserved.

30. zstd  v1.3.4
Copyright (c) 2016, Datadog <info@datadoghq.com>
All rights reserved.


Terms of the BSD 3-Clause License:
--------------------------------------------------------------------
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 [copyright holder] 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 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.



Open Source Software Licensed Under the Apache License, Version 2.0:
----------------------------------------------------------------------------------------
1.  thrift  0.11.0
Copyright 2006-2017 The Apache Software Foundation.

2. aws-sdk-go  v1.16.11
Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
Copyright 2014-2015 Stripe, Inc.

3. continuity
Copyright The containerd Authors.

4. cni  v0.6.0
Copyright 2014-2017 CNI authors

5. etcd  v3.3.10
Copyright 2015-2018 The etcd Authors

6. go-semver  v0.2.0
Copyright 2013-2015 CoreOS, Inc.

7. engine-api  v0.4.0
Copyright 2015-2016 Docker, Inc.

8. go-connections  v0.4.0
Copyright 2015 Docker, Inc.

9. go-units  v0.3.3
Copyright 2015 Docker, Inc.

10. beats  v5.6.14
Copyright (c) 2012–2016 Elasticsearch <http://www.elastic.co>

11. go-lumber  v0.1.0
Copyright (c) 2012–2016 Elasticsearch http://www.elastic.co

12. go-shlex
Copyright 2011-2012 Google Inc. All Rights Reserved.

13. redigo  v1.6.0
Copyright 2011-2018 Gary Burd

14. glog
Copyright 2013 Google Inc. All Rights Reserved.

15. btree
Copyright 2014 Google Inc.

16. gofuzz
Copyright 2014 Google Inc. All rights reserved.

17. gophercloud
Copyright 2012-2013 Rackspace, Inc.

18. mousetrap  v1.0
Copyright 2014 Alan Shreve

19. go-jmespath  0.2.2
Copyright 2015 James Saryerwinnie

20. golang_protobuf_extensions  v1.0.1
Copyright 2012 Matt T. Proud (matt.proud@gmail.com)

21. mesos-go  v0.0.2
Copyright 2013-2015, Mesosphere, Inc.

22. caddy  v0.11.1
Copyright 2015 Light Code Labs, LLC

23. image-spec  v1.0.1
Copyright 2016 The Linux Foundation.

24. go-observer
Copyright (c) 2017 opentracing-contrib

25. client_golang  v0.9.2
Copyright 2012-2015 The Prometheus Authors

26. procfs
Copyright 2014-2015 The Prometheus Authors

27. cobra  v0.0.3
Copyright © 2013-2018 Steve Francia spf@spf13.com

28. appengine  v1.4.0
Copyright 2011-2018 Google Inc. All rights reserved.
Copyright 2011 The Go Authors.  All rights reserved.

29. go-genproto
Copyright 2016-2019 Google Inc.

30. grpc-go  v1.17.0
Copyright 2014-2018 gRPC authors.

31. yaml  v2.2.2
Copyright 2011-2016 Canonical Ltd.

32. api  release-1.12
Copyright 2015-2018 The Kubernetes Authors.

33. apimachinery  kubernetes-1.12.0
Copyright 2014-2018 The Kubernetes Authors.

34. client-go  v9.0.0
Copyright 2014-2018 The Kubernetes Authors.

35. kubernetes  v1.13.1
Copyright 2015-2018 The Kubernetes Authors.


Terms of the Apache License, Version 2.0:
---------------------------------------------------
Apache License

Version 2.0, January 2004

http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

“License” shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

“Licensor” shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

“Legal Entity” shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by this License.

“Source” form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

“Object” form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

“Work” shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

“Derivative Works” shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

“Contribution” shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, “submitted” means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as “Not a Contribution.”

“Contributor” shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

a) 	You must give any other recipients of the Work or Derivative Works a copy of this License; and

b) 	You must cause any modified files to carry prominent notices stating that You changed the files; and

c) 	You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

d) 	If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.



Open Source Software Licensed Under the ISC License:
----------------------------------------------------------------------------------------
1. gopass
Copyright (c) 2012 Chris Howey


Terms of the ISC License:
--------------------------------------------------------------------
ISC License

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.



Open Source Software Licensed Under the CC0 1.0 Universal Public Domain Dedication (CC0 1.0):
----------------------------------------------------------------------------------------
1. uniuri
Written in 2011-2014 by Dmitry Chestnykh


Terms of the CC0 1.0 Universal Public Domain Dedication (CC0 1.0):
--------------------------------------------------------------------
Statement of Purpose

The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").

Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.

For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.

1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:

i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;

ii. moral rights retained by the original author(s) and/or performer(s);

iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;

iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;

v. rights protecting the extraction, dissemination, use and reuse of data in a Work;

vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and

vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.

2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.

3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.

4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.

b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.

c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.

d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.



Open Source Software Licensed Under the MIT License:
----------------------------------------------------------------------------------------
1. go-colorable  v0.0.9
Copyright (c) 2016 Yasuhiro Matsumoto

2. go-isatty  v0.0.4
Copyright (c) Yasuhiro MATSUMOTO mattn.jp@gmail.com

3. google-cloud-go  v0.34.0
Copyright 2016 Google LLC

4. go-ansiterm
Copyright © 2015 Microsoft Corporation

5. go-winio  v0.4.11
Copyright (c) 2015 Microsoft Corporation

6. sarama  v1.20.0
Copyright (c) 2013 Shopify

7. megos
Copyright (c) 2015 Andy Grunwald

8. govalidator  v9
Copyright (c) 2014 Alex Saskevich

9. perks
Copyright (C) 2013 Blake Mizerany

10. golang-set  v1.7.1
Copyright (c) 2013 Ralph Caraveo (deckarep@gmail.com)

11. jwt-go  v3.2.0
Copyright (c) 2012 Dave Grijalva

12. go-resiliency  v1.1.0
Copyright (c) 2014 Evan Huus

13. go-xerial-snappy
Copyright (c) 2016 Evan Huus

14. queue  v1.1.0
Copyright (c) 2014 Evan Huus

15. go-restful  v2.8.0
Copyright (c) 2012,2013 Ernest Micklei

16. logfmt  v0.4.0
Copyright (c) 2015 go-logfmt

17. locales  v0.12.1
Copyright (c) 2016 Go Playground

18. universal-translator  v0.16.0
Copyright (c) 2016 Go Playground

19. httpcache
Copyright © 2012 Greg Jones (greg.jones@gmail.com)

20. gorm  v1.9.2
Copyright (c) 2013-NOW Jinzhu wosmvp@gmail.com

21. inflection
Copyright (c) 2015 – Jinzhu

22. multierror
Copyright (c) 2014 Joe Shaw

23. go  v1.1.5
Copyright (c) 2016 json-iterator

24. cupid  v1.2.0
Copyright (c) 2015 Klaus Post

25. go-windows-terminal-sequences  v1.0.1
Copyright (c) 2017 marvin + konsorten GmbH (open-source@konsorten.de)

26. logfmt
Copyright (C) 2013 Keith Rarick, Blake Mizerany

27. hashstructure  v1.0.0
Copyright (c) 2016 Mitchell Hashimoto

28. mapstructure  v1.1.2
Copyright (c) 2013 Mitchell Hashimoto

29. http2curl  v1.0.0
Copyright (c) 2015 Manfred Touron

30. ginkgo  v1.7.0
Copyright (c) 2013-2014 Onsi Fakhouri

31. gomega  v1.4.3
Copyright (c) 2013-2014 Onsi Fakhouri

32. opentracing-go  v1.0.2
Copyright (c) 2016 The OpenTracing Authors

33. zipkin-go-opentracing  v0.3.5
Copyright (c) 2016 The OpenTracing Authors
Copyright (c) 2016 Bas van Beek

34. gorequest  v0.2.15
Copyright (c) 2014 Theeraphol Wattanavekin

35. go-toml  v1.2.0
Copyright (c) 2013 - 2017 Thomas Pelletier, Eric Anderton

36. diskv  v2.0.1
Copyright (c) 2011-2012 Peter Bourgon

37. go.uuid  v1.2.0
Copyright (C) 2013-2018 by Maxim Bublis b@codemonkey.ru

38. logrus  v1.2.0
Copyright (c) 2014 Simon Eskildsen

39. cast  v1.3.0
Copyright (c) 2014 Steve Francia

40. jwalterweatherman  v1.0.0
Copyright (c) 2014 Steve Francia

41. viper  v1.3.1
Copyright (c) 2014 Steve Francia

42. testify  v1.1.4
Copyright (c) 2012 - 2013 Mat Ryer and Tyler Bunnell

43. go  v1.1.1
Copyright (c) 2012-2015 Ugorji Nwoke.
All rights reserved.

44. cli  v1.20.0
Copyright (c) 2016 Jeremy Saenz & Contributors

45. validator  v9.24.0
Copyright (c) 2015 Dean Karn



Terms of the MIT License:
--------------------------------------------------------------------
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
