Notice: |

  Apache Brooklyn
  Copyright 2014-2020 The Apache Software Foundation

  This product includes software developed at
  The Apache Software Foundation (http://www.apache.org/).

  This software is released under the Apache Software License, verison 2.0.
  This license and the licenses for all dependencies are included below
  following the dependencies and their notices.

Source dependencies:

  # This software includes the following third-party components in its source code.
  # Additional runtime dependencies are required when built and are listed in the subsequent section.

  font-awesome-fonts: 
    Project:      Font Awesome (fonts)
    Version:      4.5.0
    Available at: http://fontawesome.io/
    Inclusive of: font-awesome/fonts/* cluster.svg
    License name: SIL OFL 1.1
    Notice:       Copyright (c) Dave Gandy (2016)
  
  github.com/kubernetes/client-go/util/jsonpath: 
    Project:      Go client for Kubernetes
    Available at: github.com/kubernetes/client-go
    License name: Apache License, version 2.0
  
  github.com/urfave/cli: 
    Project:      github.com/urfave/cli
    Available at: https://github.com/urfave/cli
    License name: MIT License
    Notice:       Copyright (c) 2016 Jeremy Saenz & Contributors
  
  golang.org/x/crypto/ssh: 
    Project:      golang.org/x/crypto/ssh
    Available at: https://godoc.org/golang.org/x/crypto/ssh
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2009 The Go Authors. All rights reserved.
  
  misc:logo_icons: 
    Project:      Various logos for third-party projects
    Inclusive of: various *.png and other image files containing logos
    Notice: |
      This software includes logos for third-party components as icons
      where those components are blueprinted or otherwise referenced.
      These logo files are used under fair use and all copyright and trademark rights
      remain with the owner(s) of the respective components.
  
  noun-project-icons: 
    Project:      The Noun Project (icons)
    Available at: https://thenounproject.com/
    Inclusive of: service-restarter.png, autoscaler.png, and others
    License name: Creative Commons Public License, Attribution 3.0
    Notice:       Includes icons by Evan Shuster, Sarah Joy, Jack Zwanenburg
  
  tango-project-icons: 
    Project:      Tango Project Icons
    Available at: https://commons.wikimedia.org/wiki/File:Network-server.svg
    License name: Public Domain
    Notice:       Released into the public domain by the people from the Tango! project (The Tango! Desktop Project), via Wikimedia Commons
  
  typeahead.js: 
    Project:      Typeahead JS
    Version:      0.10.5
    Available at: https://github.com/twitter/typeahead.js
    Developed by: Twitter, Inc (http://twitter.com)
    License name: MIT License
    Notice:       Copyright (c) Twitter, Inc. and other contributors (2013-2014)
  
  underscore.js:1.7.0: 
    Project:      Underscore JS
    Version:      1.7.0
    Available at: http://underscorejs.org
    Developed by: DocumentCloud Inc. (http://www.documentcloud.org/)
    Inclusive of: underscore*.{js,map}
    License name: MIT License
    Notice:       Copyright (c) Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors (2009-2014)
  

Runtime dependencies:

  # This software depends on additional third-party components at runtime.
  # These are not bundled here but may be included as part of a build.

  "@uirouter/core@5.0.20": 
    Project:      "@uirouter/core (NodeJS module)"
    Version:      5.0.20
    Available at: 
      - https://github.com/ui-router/core
      - https://ui-router.github.io
    License name: MIT License
    Notice:       Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
  
  angular-animate@1.7.2: 
    Project:      angular-animate (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-cookies@1.7.2: 
    Project:      angular-cookies (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-java-stack-viewer@1.0.1: 
    Project:      angular-java-stack-viewer (NodeJS module)
    Version:      1.0.1
    Available at: https://github.com/tbouron/angular-java-stack-viewer
    Developed by: Thomas Bouron
    License name: Apache License, version 2.0
  
  angular-multiple-transclusion@1.0.0: 
    Project:      angular-multiple-transclusion (NodeJS module)
    Version:      1.0.0
    Available at: https://github.com/mcasimir/angular-multiple-transclusion
    Developed by: mcasimir (https://github.com/mcasimir)
    License name: MIT License
  
  angular-resource@1.7.2: 
    Project:      angular-resource (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-sanitize@1.7.2: 
    Project:      angular-sanitize (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-ui-bootstrap@2.5.6: 
    Project:      angular-ui-bootstrap (NodeJS module)
    Version:      2.5.6
    Available at: 
      - http://angular-ui.github.io/bootstrap/
      - https://github.com/angular-ui/bootstrap
    Developed by: https://github.com/angular-ui/bootstrap/graphs/contributors
    License name: MIT License
    Notice:       Copyright (c) 2012-2017 the AngularUI Team, https://github.com/organizations/angular-ui/teams/291112
  
  angular-ui-router@0.3.2: 
    Project:      angular-ui-router (NodeJS module)
    Version:      0.3.2
    Available at: 
      - http://angular-ui.github.com/
      - https://github.com/angular-ui/ui-router
    License name: MIT License
    Notice:       Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
  
  angular-ui-router@1.0.19: 
    Project:      angular-ui-router (NodeJS module)
    Version:      1.0.19
    Available at: 
      - https://github.com/angular-ui/ui-router
      - https://ui-router.github.io
    License name: MIT License
    Notice:       Copyright (c) 2013-2018 The AngularUI Team, Karsten Sperling
  
  angular-xeditable@0.4.0: 
    Project:      angular-xeditable (NodeJS module)
    Version:      0.4.0
    Available at: 
      - https://github.com/vitalets/angular-xeditable
      - https://vitalets.github.io/angular-xeditable
    Developed by: Vitaliy Potapov (noginsk@rambler.ru)
    License name: MIT License
    Notice:       Copyright (c) 2015 Vitaliy Potapov
  
  angular@1.7.2: 
    Project:      angular (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  aopalliance:1.0: 
    Project:      AOP alliance
    Version:      1.0
    Available at: http://aopalliance.sourceforge.net
    License name: Public Domain
  
  argparse@1.0.10: 
    Project:      argparse (NodeJS module)
    Version:      1.0.10
    Available at: https://github.com/nodeca/argparse
    License name: MIT License
    Notice:       Copyright (C) 2012 by Vitaly Puzrin
  
  bootstrap@3.3.7: 
    Project:      bootstrap (NodeJS module)
    Version:      3.3.7
    Available at: 
      - http://getbootstrap.com
      - https://github.com/twbs/bootstrap
    Developed by: Twitter, Inc.
    License name: MIT License
    Notice:       Copyright (c) 2011-2016 Twitter, Inc.
  
  ch.qos.logback:1.2.3: 
    Project:      Logback Logging Framework
    Version:      1.2.3
    Available at: http://logback.qos.ch
    Developed by: QOS.ch (http://www.qos.ch)
    License name: Eclipse Public License, version 1.0
  
  clipboard@1.5.16: 
    Project:      clipboard (NodeJS module)
    Version:      1.5.16
    Available at: https://github.com/zenorocha/clipboard.js
    License name: MIT License
  
  codemirror@5.39.2: 
    Project:      codemirror (NodeJS module)
    Version:      5.39.2
    Available at: 
      - http://codemirror.net
      - https://github.com/codemirror/CodeMirror
    License name: MIT License
    Notice:       Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
  
  com.fasterxml.jackson:2.11.3: 
    Project:      Jackson FasterXML
    Version:      2.11.3
    Available at: 
      - http://github.com/FasterXML/jackson
      - https://github.com/FasterXML/jackson-core
      - https://github.com/FasterXML/jackson-dataformat-xml
      - https://github.com/FasterXML/jackson-dataformats-text
      - https://github.com/FasterXML/jackson-datatype-joda
      - https://github.com/FasterXML/jackson-modules-base
      - https://github.com/FasterXML/jackson-modules-java8
    Developed by: FasterXML (http://fasterxml.com/)
    License name: Apache License, version 2.0
  
  com.fasterxml.woodstox.woodstox-core:5.0.3: 
    Project:      Woodstox
    Version:      5.0.3
    Available at: https://github.com/FasterXML/woodstox
    Developed by: FasterXML (http://fasterxml.com)
    License name: Apache License, version 2.0
  
  com.github.mifmif.generex:1.0.2: 
    Project:      Generex
    Version:      1.0.2
    Available at: https://github.com/mifmif/Generex/tree/master
    License name: Apache License, version 2.0
  
  com.google.code.findbugs.jsr305:2.0.1: 
    Project:      FindBugs-jsr305
    Version:      2.0.1
    Available at: http://findbugs.sourceforge.net/
    License name: Apache License, version 2.0
  
  com.google.code.gson:2.5: 
    Project:      Gson
    Version:      2.5
    Available at: https://github.com/google/gson
    Developed by: Google, Inc. (http://www.google.com)
    License name: Apache License, version 2.0
  
  com.google.errorprone.error_prone_annotations:2.1.0: 
    Project:      error-prone annotations
    Version:      2.1.0
    Available at: http://nexus.sonatype.org/oss-repository-hosting.html
    License name: Apache License, version 2.0
  
  com.google.guava.failureaccess:1.0.1: 
    Project:      Guava InternalFutureFailureAccess and InternalFutures
    Version:      1.0.1
    Available at: https://github.com/google/guava
    License name: Apache License, version 2.0
  
  com.google.guava:18.0: 
    Project:      "Guava: Google Core Libraries for Java"
    Version:      18.0
    Available at: http://code.google.com/p/guava-libraries
    License name: Apache License, version 2.0
  
  com.google.inject.guice:3.0: 
    Project:      Google Guice
    Version:      3.0
    Available at: http://code.google.com/p/google-guice/
    Developed by: Google, Inc. (http://www.google.com)
    License name: Apache License, version 2.0
  
  com.google.inject:3.0: 
    Project:      Google Guice
    Version:      3.0
    Available at: http://code.google.com/p/google-guice/
    Developed by: Google, Inc. (http://www.google.com)
    License name: Apache License, version 2.0
  
  com.hierynomus.sshj:0.22.0: 
    Project:      sshj
    Version:      0.22.0
    Available at: https://github.com/hierynomus/sshj
    License name: Apache License, version 2.0
  
  com.jamesmurty.utils.java-xmlbuilder:1.1: 
    Project:      java-xmlbuilder
    Version:      1.1
    Available at: https://github.com/jmurty/java-xmlbuilder
    License name: Apache License, version 2.0
  
  com.jayway.jsonpath.json-path:2.4.0: 
    Project:      project ':json-path'
    Version:      2.4.0
    Available at: https://github.com/jayway/JsonPath
    License name: Apache License, version 2.0
  
  com.jcraft.jzlib:1.1.3: 
    Project:      JZlib
    Version:      1.1.3
    Available at: http://www.jcraft.com/jzlib/
    Developed by: jcraft (http://www.jcraft.com/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
  
  com.jcraft:0.0.9: 
    Project:      JCraft jsch ssh library
    Version:      0.0.9
    Available at: http://www.jcraft.com/jsch-agent-proxy/
    Developed by: JCraft,Inc. (http://www.jcraft.com/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2011-2012 Atsuhiko Yamanaka, JCraft,Inc.
  
  com.maxmind.db.maxmind-db:1.2.1: 
    Project:      MaxMind DB Reader
    Version:      1.2.1
    Available at: http://dev.maxmind.com/
    Developed by: MaxMind, Inc. (http://www.maxmind.com/)
    License name: Apache License, version 2.0
  
  com.maxmind.geoip2:2.8.0-rc1: 
    Project:      MaxMind GeoIP2 API
    Version:      2.8.0-rc1
    Available at: http://dev.maxmind.com/geoip/geoip2/web-services
    Developed by: MaxMind, Inc. (http://www.maxmind.com/)
    License name: Apache License, version 2.0
  
  com.squareup.okhttp3:3.12.6: 
    Project: 
      - OkHttp
      - OkHttp Logging Interceptor
    Version:      3.12.6
    Available at: https://github.com/square/okhttp
    License name: Apache License, version 2.0
  
  com.squareup.okhttp:2.2.0: 
    Project:      OkHttp
    Version:      2.2.0
    Available at: https://github.com/square/okhttp
    License name: Apache License, version 2.0
    Notice:       Copyright (c) Square, Inc.
  
  com.squareup.okio:1.15.0: 
    Project:      Okio
    Version:      1.15.0
    Available at: https://github.com/square/okio
    License name: Apache License, version 2.0
    Notice:       Copyright (c) Square, Inc.
  
  com.sun.activation.jakarta.activation:1.2.2: 
    Project:      Jakarta Activation
    Version:      1.2.2
    Available at: https://github.com/eclipse-ee4j/jaf
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  com.sun.activation.javax.activation:1.2.0: 
    Project:      JavaBeans Activation Framework
    Version:      1.2.0
    Available at: http://java.net/
    Developed by: Oracle (http://www.oracle.com)
    License name: Common Development and Distribution License, version 1.1
  
  com.sun.istack.istack-commons-runtime:3.0.10: 
    Project:      istack common utility code runtime
    Version:      3.0.10
    Available at: https://projects.eclipse.org/projects/ee4j
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  com.thoughtworks.xstream:1.4.18: 
    Project:      XStream Core
    Version:      1.4.18
    Available at: http://x-stream.github.io/
    Developed by: XStream (http://x-stream.github.io)
    License name: BSD 3-Clause (New BSD) License
  
  commander@2.16.0: 
    Project:      commander (NodeJS module)
    Version:      2.16.0
    Available at: https://github.com/tj/commander.js
    Developed by: TJ Holowaychuk (tj@vision-media.ca)
    License name: MIT License
    Notice:       Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
  
  commons-beanutils:1.9.4: 
    Project:      Apache Commons BeanUtils
    Version:      1.9.4
    Available at: https://commons.apache.org/proper/commons-beanutils/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-codec:1.15: 
    Project:      Apache Commons Codec
    Version:      1.15
    Available at: https://commons.apache.org/proper/commons-codec/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-collections:3.2.2: 
    Project:      Apache Commons Collections
    Version:      3.2.2
    Available at: http://commons.apache.org/collections/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-io:2.4: 
    Project:      Commons IO
    Version:      2.4
    Available at: http://commons.apache.org/io/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-lang:2.4: 
    Project:      Commons Lang
    Version:      2.4
    Available at: http://commons.apache.org/lang/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-logging:1.2: 
    Project:      Apache Commons Logging
    Version:      1.2
    Available at: http://commons.apache.org/proper/commons-logging/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  d3-array@1.2.0: 
    Project:      d3-array (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-array/
      - https://github.com/d3/d3-array
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-axis@1.0.8: 
    Project:      d3-axis (NodeJS module)
    Version:      1.0.8
    Available at: 
      - https://d3js.org/d3-axis/
      - https://github.com/d3/d3-axis
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-brush@1.0.4: 
    Project:      d3-brush (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-brush/
      - https://github.com/d3/d3-brush
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-chord@1.0.4: 
    Project:      d3-chord (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-chord/
      - https://github.com/d3/d3-chord
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-collection@1.0.4: 
    Project:      d3-collection (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-collection/
      - https://github.com/d3/d3-collection
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016, Mike Bostock. All rights reserved.
  
  d3-color@1.0.3: 
    Project:      d3-color (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-color/
      - https://github.com/d3/d3-color
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-dispatch@1.0.3: 
    Project:      d3-dispatch (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-dispatch/
      - https://github.com/d3/d3-dispatch
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-drag@1.1.1: 
    Project:      d3-drag (NodeJS module)
    Version:      1.1.1
    Available at: 
      - https://d3js.org/d3-drag/
      - https://github.com/d3/d3-drag
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-dsv@1.0.5: 
    Project:      d3-dsv (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-dsv/
      - https://github.com/d3/d3-dsv
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2013-2016 Mike Bostock. All rights reserved.
  
  d3-ease@1.0.3: 
    Project:      d3-ease (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-ease/
      - https://github.com/d3/d3-ease
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. Copyright 2001 Robert Penner. All rights reserved.
  
  d3-force@1.0.6: 
    Project:      d3-force (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-force/
      - https://github.com/d3/d3-force
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-format@1.2.0: 
    Project:      d3-format (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-format/
      - https://github.com/d3/d3-format
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-geo@1.6.4: 
    Project:      d3-geo (NodeJS module)
    Version:      1.6.4
    Available at: 
      - https://d3js.org/d3-geo/
      - https://github.com/d3/d3-geo
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.*
  
  d3-hierarchy@1.1.5: 
    Project:      d3-hierarchy (NodeJS module)
    Version:      1.1.5
    Available at: 
      - https://d3js.org/d3-hierarchy/
      - https://github.com/d3/d3-hierarchy
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-interpolate@1.1.5: 
    Project:      d3-interpolate (NodeJS module)
    Version:      1.1.5
    Available at: 
      - https://d3js.org/d3-interpolate/
      - https://github.com/d3/d3-interpolate
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-path@1.0.5: 
    Project:      d3-path (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-path/
      - https://github.com/d3/d3-path
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2015-2016 Mike Bostock. All rights reserved.
  
  d3-polygon@1.0.3: 
    Project:      d3-polygon (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-polygon/
      - https://github.com/d3/d3-polygon
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-quadtree@1.0.3: 
    Project:      d3-quadtree (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-quadtree/
      - https://github.com/d3/d3-quadtree
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-queue@3.0.7: 
    Project:      d3-queue (NodeJS module)
    Version:      3.0.7
    Available at: 
      - https://d3js.org/d3-queue/
      - https://github.com/d3/d3-queue
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2012-2016, Michael Bostock. All rights reserved.
  
  d3-random@1.1.0: 
    Project:      d3-random (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-random/
      - https://github.com/d3/d3-random
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-request@1.0.5: 
    Project:      d3-request (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-request/
      - https://github.com/d3/d3-request
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-scale@1.0.6: 
    Project:      d3-scale (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-scale/
      - https://github.com/d3/d3-scale
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-selection@1.1.0: 
    Project:      d3-selection (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-selection/
      - https://github.com/d3/d3-selection
    Developed by: Mike Bostock (https://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2010-2016, Michael Bostock. All rights reserved.
  
  d3-shape@1.2.0: 
    Project:      d3-shape (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-shape/
      - https://github.com/d3/d3-shape
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-time-format@2.0.5: 
    Project:      d3-time-format (NodeJS module)
    Version:      2.0.5
    Available at: 
      - https://d3js.org/d3-time-format/
      - https://github.com/d3/d3-time-format
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-time@1.0.7: 
    Project:      d3-time (NodeJS module)
    Version:      1.0.7
    Available at: 
      - https://d3js.org/d3-time/
      - https://github.com/d3/d3-time
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-timer@1.0.6: 
    Project:      d3-timer (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-timer/
      - https://github.com/d3/d3-timer
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-transition@1.1.0: 
    Project:      d3-transition (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-transition/
      - https://github.com/d3/d3-transition
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2010-2015, Michael Bostock. All rights reserved.*
  
  d3-voronoi@1.1.2: 
    Project:      d3-voronoi (NodeJS module)
    Version:      1.1.2
    Available at: 
      - https://d3js.org/d3-voronoi/
      - https://github.com/d3/d3-voronoi
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.*
  
  d3-zoom@1.5.0: 
    Project:      d3-zoom (NodeJS module)
    Version:      1.5.0
    Available at: 
      - https://d3js.org/d3-zoom/
      - https://github.com/d3/d3-zoom
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3@4.10.0: 
    Project:      d3 (NodeJS module)
    Version:      4.10.0
    Available at: 
      - https://d3js.org
      - https://github.com/d3/d3
    Developed by: Mike Bostock (https://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2017 Mike Bostock. All rights reserved.
  
  delegate@3.2.0: 
    Project:      delegate (NodeJS module)
    Version:      3.2.0
    Available at: https://github.com/zenorocha/delegate
    License name: MIT License
  
  dk.brics.automaton:1.11-8: 
    Project:      Automaton
    Version:      1.11-8
    Available at: http://www.brics.dk/automaton/
    License name: BSD 2-Clause (Simplified or FreeBSD) License
  
  encoding@0.1.12: 
    Project:      encoding (NodeJS module)
    Version:      0.1.12
    Available at: https://github.com/andris9/encoding
    Developed by: Andris Reinman
    License name: MIT License
    Notice:       Copyright (c) 2012-2014 Andris Reinman
  
  es6-promise@4.2.4: 
    Project:      es6-promise (NodeJS module)
    Version:      4.2.4
    Available at: https://github.com/stefanpenner/es6-promise
    Developed by: Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
    License name: MIT License
    Notice:       Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors
  
  esprima@4.0.1: 
    Project:      esprima (NodeJS module)
    Version:      4.0.1
    Available at: 
      - http://esprima.org
      - https://github.com/jquery/esprima
    Developed by: Ariya Hidayat (ariya.hidayat@gmail.com)
    License name: BSD 2-Clause (Simplified or FreeBSD) License
    Notice:       Copyright JS Foundation and other contributors, https://js.foundation/
  
  file-saver@1.3.8: 
    Project:      file-saver (NodeJS module)
    Version:      1.3.8
    Available at: https://github.com/eligrey/FileSaver.js
    Developed by: Eli Grey (me@eligrey.com)
    License name: MIT License
    Notice:       Copyright © 2016 [Eli Grey][1].
  
  font-awesome@4.7.0: 
    Project:      font-awesome (NodeJS module)
    Version:      4.7.0
    Available at: 
      - http://fontawesome.io/
      - https://github.com/FortAwesome/Font-Awesome
    Developed by: Dave Gandy (http://twitter.com/davegandy)
    License name: Font Awesome License
  
  good-listener@1.2.2: 
    Project:      good-listener (NodeJS module)
    Version:      1.2.2
    Available at: https://github.com/zenorocha/good-listener
    License name: MIT License
  
  iconv-lite@0.4.23: 
    Project:      iconv-lite (NodeJS module)
    Version:      0.4.23
    Available at: https://github.com/ashtuchkin/iconv-lite
    Developed by: Alexander Shtuchkin (ashtuchkin@gmail.com)
    License name: MIT License
    Notice:       Copyright (c) 2011 Alexander Shtuchkin
  
  identicon.js@1.3.0: 
    Project:      identicon.js (NodeJS module)
    Version:      1.3.0
    Available at: https://github.com/stewartlord/identicon.js
    Developed by: stewardlord
    License name: BSD 2-Clause (Simplified or FreeBSD) License
    Notice:       Copyright (c) 2013, Stewart Lord. All rights reserved.
  
  io.airlift.airline:0.7: 
    Project:      airline
    Version:      0.7
    Available at: https://github.com/airlift/airline
    License name: Apache License, version 2.0
  
  io.cloudsoft.windows:0.12.3: 
    Project: 
      - Java WinRM library
      - WinRM Client
    Version:      0.12.3
    Available at: http://github.com/cloudsoft/winrm4j
    License name: Apache License, version 2.0
  
  io.fabric8.zjsonpatch:0.3.0: 
    Project:      zjsonpatch
    Version:      0.3.0
    Available at: https://github.com/fabric8io/zjsonpatch/
    License name: Apache License, version 2.0
  
  io.fabric8:4.9.0: 
    Project: 
      - "Fabric8 :: Kubernetes :: Java Client"
      - "Fabric8 :: Kubernetes Model"
      - "Fabric8 :: Kubernetes Model :: Common"
      - "Fabric8 :: Openshift :: Java Client"
    Version:      4.9.0
    Available at: http://fabric8.io/
    Developed by: Red Hat (http://redhat.com)
    License name: Apache License, version 2.0
  
  io.github.x-stream.mxparser:1.2.2: 
    Project:      MXParser
    Version:      1.2.2
    Available at: http://x-stream.github.io/mxparser
    License name: Indiana University Extreme! Lab Software License, vesion 1.2
    Notice:       Copyright (c) Extreme! Lab, Indiana University
  
  io.swagger:1.6.2: 
    Project: 
      - swagger-annotations
      - swagger-core
      - swagger-jaxrs
      - swagger-models
    Version:      1.6.2
    Available at: https://github.com/swagger-api/swagger-core
    License name: Apache License, version 2.0
  
  is-stream@1.1.0: 
    Project:      is-stream (NodeJS module)
    Version:      1.1.0
    Available at: https://github.com/sindresorhus/is-stream
    Developed by: Sindre Sorhus (sindresorhus.com)
    License name: MIT License
    Notice:       Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
  
  isomorphic-fetch@2.2.1: 
    Project:      isomorphic-fetch (NodeJS module)
    Version:      2.2.1
    Available at: 
      - https://github.com/matthew-andrews/isomorphic-fetch
      - https://github.com/matthew-andrews/isomorphic-fetch/issues
    Developed by: Matt Andrews (matt@mattandre.ws)
    License name: MIT License
    Notice:       Copyright (c) 2015 Matt Andrews
  
  jakarta.activation.jakarta.activation-api:1.2.2: 
    Project:      Jakarta Activation API jar
    Version:      1.2.2
    Available at: https://github.com/eclipse-ee4j/jaf
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  jakarta.annotation.jakarta.annotation-api:1.3.5: 
    Project:      Jakarta Annotations API
    Version:      1.3.5
    Available at: https://projects.eclipse.org/projects/ee4j.ca
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Public License, version 2.0
  
  jakarta.ws.rs.jakarta.ws.rs-api:2.1.5: 
    Project:      javax.ws.rs-api
    Version:      2.1.5
    Available at: https://github.com/eclipse-ee4j/jaxrs-api
    Developed by: Eclipse Foundation (https://www.eclipse.org/org/foundation/)
    License name: Eclipse Public License, version 2.0
  
  jakarta.xml.bind.jakarta.xml.bind-api:2.3.3: 
    Project:      Jakarta XML Binding API
    Version:      2.3.3
    Available at: https://github.com/eclipse-ee4j/jaxb-api
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  java-stack-parser@1.0.0: 
    Project:      java-stack-parser (NodeJS module)
    Version:      1.0.0
    Available at: https://github.com/tbouron/java-stack-parser
    Developed by: Thomas Bouron
    License name: Apache License, version 2.0
  
  javax.annotation.javax.annotation-api:1.3.2: 
    Project:      javax.annotation API
    Version:      1.3.2
    Available at: http://jcp.org/en/jsr/detail?id=250
    Developed by: GlassFish Community (https://javaee.github.io/glassfish)
    License name: Common Development and Distribution License, version 1.1
  
  javax.annotation.jsr250-api:1.0: 
    Project:      JSR-250 Common Annotations for the JavaTM Platform
    Version:      1.0
    Available at: https://jcp.org/en/jsr/detail?id=250
    License name: Common Development and Distribution License, version 1.0
  
  javax.inject:1: 
    Project:      javax.inject
    Version:      1
    Available at: http://code.google.com/p/atinject/
    License name: Apache License, version 2.0
  
  javax.servlet.javax.servlet-api:3.1.0: 
    Project:      Java Servlet API
    Version:      3.1.0
    Available at: http://servlet-spec.java.net
    Developed by: GlassFish Community (https://glassfish.dev.java.net)
    License name: Common Development and Distribution License, version 1.1
  
  javax.validation.validation-api:1.1.0.Final: 
    Project:      Bean Validation API
    Version:      1.1.0.Final
    Available at: http://beanvalidation.org/
    License name: Apache License, version 2.0
  
  javax.ws.rs.javax.ws.rs-api:2.1.1: 
    Project:      javax.ws.rs-api
    Version:      2.1.1
    Available at: https://github.com/eclipse-ee4j/jaxrs-api
    Developed by: Eclipse Foundation (https://www.eclipse.org/org/foundation/)
    License name: Common Development and Distribution License, version 1.1
  
  joda-time:2.9.9: 
    Project:      Joda-Time
    Version:      2.9.9
    Available at: http://www.joda.org/joda-time/
    Developed by: Joda.org (http://www.joda.org)
    License name: Apache License, version 2.0
  
  jquery@1.12.4: 
    Project:      jquery (NodeJS module)
    Version:      1.12.4
    Available at: 
      - http://jquery.com
      - https://github.com/jquery/jquery
    Developed by: jQuery Foundation and other contributors (https://github.com/jquery/jquery/blob/1.12-stable/AUTHORS.txt)
    License name: MIT License
    Notice:       Copyright jQuery Foundation and other contributors, https://jquery.org/
  
  js-yaml@3.12.0: 
    Project:      js-yaml (NodeJS module)
    Version:      3.12.0
    Available at: https://github.com/nodeca/js-yaml
    Developed by: Vladimir Zapparov (dervus.grim@gmail.com)
    License name: MIT License
    Notice:       Copyright (C) 2011-2015 by Vitaly Puzrin
  
  jsonschema@1.2.4: 
    Project:      jsonschema (NodeJS module)
    Version:      1.2.4
    Available at: https://github.com/tdegrunt/jsonschema
    Developed by: Tom de Grunt (tom@degrunt.nl)
    License name: MIT License
    Notice:       Copyright (C) 2012-2015 Tom de Grunt <tom@degrunt.nl>
  
  jssha@2.3.1: 
    Project:      jssha (NodeJS module)
    Version:      2.3.1
    Available at: https://github.com/Caligatio/jsSHA
    Developed by: Brian Turek (brian.turek@gmail.com)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2008-2017, Brian Turek. All rights reserved.*
  
  lodash@4.17.10: 
    Project:      lodash (NodeJS module)
    Version:      4.17.10
    Available at: 
      - https://github.com/lodash/lodash
      - https://lodash.com/
    Developed by: John-David Dalton (http://allyoucanleet.com/)
    License name: MIT License
    Notice:       Copyright JS Foundation and other contributors <https://js.foundation/>
  
  moment@2.22.2: 
    Project:      moment (NodeJS module)
    Version:      2.22.2
    Available at: 
      - http://momentjs.com
      - https://github.com/moment/moment
    Developed by: Iskren Ivov Chernev (https://github.com/ichernev)
    License name: MIT License
    Notice:       Copyright (c) JS Foundation and other contributors
  
  net.i2p.crypto.eddsa:0.1.0: 
    Project:      ed25519-java
    Version:      0.1.0
    Available at: https://github.com/str4d/ed25519-java
    License name: Public Domain
  
  net.iharder.base64:2.3.8: 
    Project:      base64
    Version:      2.3.8
    Available at: http://iharder.net/base64/
    License name: Public Domain
  
  net.java.dev.jna:5.6.0: 
    Project: 
      - Java Native Access
      - Java Native Access Platform
    Version:      5.6.0
    Available at: https://github.com/java-native-access/jna
    License name: Apache License, version 2.0
  
  net.minidev.accessors-smart:1.2: 
    Project:      ASM based accessors helper used by json-smart
    Version:      1.2
    Available at: http://www.minidev.net/
    Developed by: Chemouni Uriel (http://www.minidev.net/)
    License name: Apache License, version 2.0
  
  net.minidev.json-smart:2.3: 
    Project:      JSON Small and Fast Parser
    Version:      2.3
    Available at: http://www.minidev.net/
    Developed by: Chemouni Uriel (http://www.minidev.net/)
    License name: Apache License, version 2.0
  
  ngclipboard@1.1.2: 
    Project:      ngclipboard (NodeJS module)
    Version:      1.1.2
    Available at: https://github.com/sachinchoolur/ngclipboard
    Developed by: Sachin (https://github.com/sachinchoolur)
    License name: MIT License
    Notice:       Copyright (c) 2015 Sachin N
  
  node-fetch@1.7.3: 
    Project:      node-fetch (NodeJS module)
    Version:      1.7.3
    Available at: https://github.com/bitinn/node-fetch
    Developed by: David Frank
    License name: MIT License
    Notice:       Copyright (c) 2016 David Frank
  
  normalizr@2.3.1: 
    Project:      normalizr (NodeJS module)
    Version:      2.3.1
    Available at: https://github.com/paularmstrong/normalizr
    Developed by: Dan Abramov
    License name: MIT License
    Notice:       Copyright (c) 2014 Dan Abramov
  
  org.apache.commons.commons-compress:1.20: 
    Project:      Apache Commons Compress
    Version:      1.20
    Available at: https://commons.apache.org/proper/commons-compress/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.commons.commons-lang3:3.3.2: 
    Project:      Apache Commons Lang
    Version:      3.3.2
    Available at: http://commons.apache.org/proper/commons-lang/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.cxf:3.3.9: 
    Project:      Apache CXF
    Version:      3.3.9
    Available at: https://cxf.apache.org
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.configadmin.plugin.interpolation:1.1.0: 
    Project:      Apache Felix Configuration Admin Values Interpolation Plugin
    Version:      1.1.0
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.configadmin:1.9.18: 
    Project:      Apache Felix Configuration Admin Service
    Version:      1.9.18
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.fileinstall:3.6.8: 
    Project:      Apache Felix File Install
    Version:      3.6.8
    Available at: http://felix.apache.org/site/apache-felix-file-install.html
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.framework:6.0.3: 
    Project:      Apache Felix Framework
    Version:      6.0.3
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.utils:1.11.4: 
    Project:      Apache Felix Utils
    Version:      1.11.4
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs.geronimo-stax-api_1.0_spec:1.0.1: 
    Project:      Streaming API for XML (STAX API 1.0)
    Version:      1.0.1
    Available at: http://geronimo.apache.org/specs/geronimo-stax-api_1.0_spec
    Developed by: Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs.geronimo-ws-metadata_2.0_spec:1.1.3: 
    Project:      Web Services Metadata 2.0
    Version:      1.1.3
    Available at: http://geronimo.apache.org/maven/specs/geronimo-ws-metadata_2.0_spec/1.1.3
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs:1.1: 
    Project: 
      - Activation 1.1
      - SAAJ 1.3
    Version:      1.1
    Available at: 
      - http://geronimo.apache.org/maven/specs/geronimo-activation_1.1_spec/1.1
      - http://geronimo.apache.org/maven/specs/geronimo-saaj_1.3_spec/1.1
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs:1.2: 
    Project: 
      - Apache Geronimo JAX-WS Spec 2.2
      - Apache Geronimo STAX Spec 1.2
    Version:      1.2
    Available at: 
      - http://geronimo.apache.org/maven/specs/geronimo-jaxws_2.2_spec/1.2
      - http://geronimo.apache.org/maven/specs/geronimo-stax-api_1.2_spec/1.2
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpasyncclient:4.1.4: 
    Project:      Apache HttpAsyncClient
    Version:      4.1.4
    Available at: http://hc.apache.org/httpcomponents-asyncclient
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpclient:4.5.13: 
    Project:      Apache HttpClient
    Version:      4.5.13
    Available at: http://hc.apache.org/httpcomponents-client-ga
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpcore-nio:4.4.12: 
    Project:      Apache HttpCore NIO
    Version:      4.4.12
    Available at: http://hc.apache.org/httpcomponents-core-ga
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpcore:4.4.14: 
    Project:      Apache HttpCore
    Version:      4.4.14
    Available at: http://hc.apache.org/httpcomponents-core-ga
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.jclouds:2.1.2: 
    Project:      Apache jclouds
    Version:      2.1.2
    Available at: http://jclouds.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.karaf:4.3.0: 
    Project: 
      - "Apache Karaf :: Assemblies :: Features :: Base"
      - "Apache Karaf :: Assemblies :: Features :: Framework"
      - "Apache Karaf :: Assemblies :: Features :: Standard"
      - "Apache Karaf :: Client"
      - "Apache Karaf :: Diagnostic :: Boot"
      - "Apache Karaf :: Features :: Core"
      - "Apache Karaf :: Features :: Extension"
      - "Apache Karaf :: JAAS :: Boot"
      - "Apache Karaf :: Main"
      - "Apache Karaf :: Shell :: Core"
      - "Apache Karaf :: Specs :: Activator"
      - "Apache Karaf :: Specs :: Java Xml"
      - "Apache Karaf :: Specs :: Java Xml WS"
      - "Apache Karaf :: Specs :: Locator"
      - "Apache Karaf :: Util"
    Version:      4.3.0
    Available at: https://www.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.maven.resolver:1.3.1: 
    Project: 
      - Maven Artifact Resolver API
      - Maven Artifact Resolver Implementation
      - Maven Artifact Resolver SPI
      - Maven Artifact Resolver Utilities
    Version:      1.3.1
    Available at: https://maven.apache.org/resolver/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.neethi:3.1.1: 
    Project:      Apache Neethi
    Version:      3.1.1
    Available at: http://ws.apache.org/neethi/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.servicemix.specs:2.9.0: 
    Project: 
      - "Apache ServiceMix :: Specs :: Activation API 1.4"
      - "Apache ServiceMix :: Specs :: Activator"
      - "Apache ServiceMix :: Specs :: JAXB API 2.2"
      - "Apache ServiceMix :: Specs :: Stax API 1.0"
    Version:      2.9.0
    Available at: http://servicemix.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.sshd.sshd-osgi:2.5.1: 
    Project:      "Apache Mina SSHD :: OSGi"
    Version:      2.5.1
    Available at: http://www.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.ws.xmlschema.xmlschema-core:2.2.5: 
    Project:      XmlSchema Core
    Version:      2.2.5
    Available at: https://ws.apache.org/commons/xmlschema20/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.bouncycastle:1.67: 
    Project: 
      - Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs
      - Bouncy Castle Provider
    Version:      1.67
    Available at: 
      - http://www.bouncycastle.org/java.html
      - https://www.bouncycastle.org/java.html
    License name: MIT License
    Notice:       Copyright (c) The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
  
  org.codehaus.groovy.groovy-all:2.4.15: 
    Project:      Apache Groovy
    Version:      2.4.15
    Available at: http://groovy-lang.org
    Developed by: Apache Software Foundation (http://groovy-lang.org)
    License name: Apache License, version 2.0
  
  org.codehaus.mojo.animal-sniffer-annotations:1.9: 
    Project:      Animal Sniffer Annotations
    Version:      1.9
    Available at: http://mojo.codehaus.org/animal-sniffer
    Developed by: Codehaus (http://codehaus.org)
    License name: MIT License
  
  org.codehaus.woodstox.stax2-api:3.1.4: 
    Project:      Stax2 API
    Version:      3.1.4
    Available at: http://wiki.fasterxml.com/WoodstoxStax2
    Developed by: fasterxml.com (http://fasterxml.com)
    License name: BSD 2-Clause (Simplified or FreeBSD) License
  
  org.eclipse.jetty:9.4.39.v20210325: 
    Project: 
      - "Jetty :: Http Utility"
      - "Jetty :: IO Utility"
      - "Jetty :: Security"
      - "Jetty :: Server Core"
      - "Jetty :: Servlet Handling"
      - "Jetty :: Utilities"
      - "Jetty :: Utilities :: Ajax(JSON)"
      - "Jetty :: Webapp Application Support"
      - "Jetty :: XML utilities"
    Version:      9.4.39.v20210325
    Available at: https://eclipse.org/jetty
    Developed by: Webtide (https://webtide.com)
    License name: Apache License, version 2.0
  
  org.eclipse.platform.org.eclipse.osgi:3.16.0: 
    Project:      OSGi System Bundle
    Version:      3.16.0
    Available at: http://www.eclipse.org/platform
    Developed by: Eclipse Foundation (http://www.eclipse.org/)
    License name: Eclipse Public License, version 1.0
  
  org.freemarker:2.3.31: 
    Project:      Apache FreeMarker
    Version:      2.3.31
    Available at: https://freemarker.apache.org/
    Developed by: Apache Software Foundation (http://apache.org)
    License name: Apache License, version 2.0
  
  org.glassfish.external.opendmk_jmxremote_optional_jar:1.0-b01-ea: 
    Project:      opendmk_jmxremote_optional_jar
    Version:      1.0-b01-ea
    Available at: https://opendmk.java.net/
    License name: Common Development and Distribution License, version 1.1
  
  org.glassfish.jaxb:2.3.3: 
    Project: 
      - JAXB Runtime
      - TXW2 Runtime
    Version:      2.3.3
    Available at: https://eclipse-ee4j.github.io/jaxb-ri
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  org.hamcrest.hamcrest-core:1.3: 
    Project:      Hamcrest Core
    Version:      1.3
    Available at: https://github.com/hamcrest/JavaHamcrest
    License name: BSD 3-Clause (New BSD) License
  
  org.hibernate.jtidy:r8-20060801: 
    Project:      JTidy
    Version:      r8-20060801
    Available at: http://jtidy.sourceforge.net
    License name: Java HTML Tidy License
  
  org.javassist:3.19.0-GA: 
    Project:      Javassist
    Version:      3.19.0-GA
    Available at: http://www.javassist.org/
    License name: Apache License, version 2.0
    Notice:       Copyright (c) Shigeru Chiba
  
  org.jline:3.16.0: 
    Project:      JLine Bundle
    Version:      3.16.0
    Available at: http://nexus.sonatype.org/oss-repository-hosting.html
    License name: BSD 3-Clause (New BSD) License
    Notice: 
      - Copyright (c) 2002-2018, the original author or authors.
      - Neither the name of JLine nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
  
  org.mongodb.mongo-java-driver:3.0.3: 
    Project:      MongoDB Java Driver
    Version:      3.0.3
    Available at: http://www.mongodb.org
    License name: Apache License, version 2.0
    Notice:       Copyright (c) MongoDB, Inc
  
  org.ops4j.base.ops4j-base-util-collections:1.5.1: 
    Project:      OPS4J Base - Util - Collections
    Version:      1.5.1
    Available at: http://team.ops4j.org/wiki/display/base/
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.logging:2.0.6: 
    Project: 
      - OPS4J Pax Logging - API
      - OPS4J Pax Logging - Log4Jv2 implementation
    Version:      2.0.6
    Available at: https://ops4j1.jira.com/wiki/spaces/paxlogging/overview
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.swissbox.pax-swissbox-property:1.8.3: 
    Project:      "OPS4J Pax Swissbox :: Property"
    Version:      1.8.3
    Available at: http://team.ops4j.org/wiki/display/PAXSB
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.url:2.6.2: 
    Project: 
      - OPS4J Pax Url - mvn:
      - "OPS4J Pax Url - mvn: - support library"
    Version:      2.6.2
    Available at: https://ops4j1.jira.com/wiki/spaces/paxurl/overview
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.osgi:7.0.0: 
    Project: 
      - org.osgi:osgi.cmpn
      - org.osgi:osgi.core
    Version:      7.0.0
    Available at: https://www.osgi.org/
    Developed by: OSGi Alliance (https://www.osgi.org/)
    License name: Apache License, version 2.0
  
  org.ow2.asm:5.0.4: 
    Project:      ASM Core
    Version:      5.0.4
    Available at: http://asm.objectweb.org/
    Developed by: ObjectWeb (http://www.objectweb.org/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2000-2011 INRIA, France Telecom
  
  org.reflections:0.9.10: 
    Project:      Reflections
    Version:      0.9.10
    Available at: http://github.com/ronmamo/reflections
    License name: BSD 3-Clause (New BSD) License
  
  org.slf4j.jcl-over-slf4j:1.7.30: 
    Project:      Simple Logging Framework for Java
    Version:      1.7.30
    Available at: http://www.slf4j.org
    Developed by: QOS.ch (http://www.qos.ch)
    License name: Apache License, version 2.0
  
  org.slf4j:1.7.25: 
    Project:      Simple Logging Framework for Java
    Version:      1.7.25
    Available at: http://www.slf4j.org
    Developed by: QOS.ch (http://www.qos.ch)
    License name: MIT License
  
  org.xmlunit:2.3.0: 
    Project: 
      - org.xmlunit:xmlunit-core
      - org.xmlunit:xmlunit-matchers
    Version:      2.3.0
    Available at: http://www.xmlunit.org/
    Developed by: XMLUnit (http://www.xmlunit.org/)
    License name: Apache License, version 2.0
  
  org.yaml.snakeyaml:1.27: 
    Project:      SnakeYAML
    Version:      1.27
    Available at: http://www.snakeyaml.org
    License name: Apache License, version 2.0
  
  rw@1.3.3: 
    Project:      rw (NodeJS module)
    Version:      1.3.3
    Available at: https://github.com/mbostock/rw
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2014-2016, Michael Bostock. All rights reserved.
  
  rxjs@5.5.11: 
    Project:      rxjs (NodeJS module)
    Version:      5.5.11
    Available at: https://github.com/ReactiveX/RxJS
    Developed by: Ben Lesh (ben@benlesh.com)
    License name: Apache License, version 2.0
  
  safer-buffer@2.1.2: 
    Project:      safer-buffer (NodeJS module)
    Version:      2.1.2
    Available at: https://github.com/ChALkeR/safer-buffer
    Developed by: Nikita Skovoroda (https://github.com/ChALkeR)
    License name: MIT License
    Notice:       Copyright (c) 2018 Nikita Skovoroda <chalkerx@gmail.com>
  
  select@1.1.2: 
    Project:      select (NodeJS module)
    Version:      1.1.2
    Available at: https://github.com/zenorocha/select
    License name: MIT License
  
  sprintf-js@1.0.3: 
    Project:      sprintf-js (NodeJS module)
    Version:      1.0.3
    Available at: https://github.com/alexei/sprintf.js
    Developed by: Alexandru Marasteanu (http://alexei.ro/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2007-2014, Alexandru Marasteanu <hello [at) alexei (dot] ro>. All rights reserved.
  
  symbol-observable@1.0.1: 
    Project:      symbol-observable (NodeJS module)
    Version:      1.0.1
    Available at: https://github.com/blesh/symbol-observable
    Developed by: Ben Lesh (ben@benlesh.com)
    License name: MIT License
    Notice:       Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com). Copyright (c) Ben Lesh <ben@benlesh.com>
  
  tiny-emitter@1.2.0: 
    Project:      tiny-emitter (NodeJS module)
    Version:      1.2.0
    Available at: https://github.com/scottcorgan/tiny-emitter
    Developed by: Scott Corgan
    License name: MIT License
    Notice:       Copyright (c) 2016 Scott Corgan
  
  underscore@1.9.1: 
    Project:      underscore (NodeJS module)
    Version:      1.9.1
    Available at: 
      - http://underscorejs.org
      - https://github.com/jashkenas/underscore
    Developed by: Jeremy Ashkenas (jeremy@documentcloud.org)
    License name: MIT License
    Notice:       Copyright (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative. Reporters & Editors
  
  whatwg-fetch@2.0.4: 
    Project:      whatwg-fetch (NodeJS module)
    Version:      2.0.4
    Available at: https://github.com/github/fetch
    License name: MIT License
    Notice:       Copyright (c) 2014-2016 GitHub, Inc.
  
  wsdl4j:1.6.3: 
    Project:      WSDL4J
    Version:      1.6.3
    Available at: http://sf.net/projects/wsdl4j
    License name: Common Public License, version 1.0
  
  xml-apis:1.4.01: 
    Project:      XML Commons External Components XML APIs
    Version:      1.4.01
    Available at: http://xml.apache.org/commons/components/external/
    License name: Apache License, version 2.0
  
  xml-resolver:1.2: 
    Project:      XML Commons Resolver Component
    Version:      1.2
    Available at: http://xml.apache.org/commons/components/resolver/
    Developed by: Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  xmlhttprequest@1.8.0: 
    Project:      xmlhttprequest (NodeJS module)
    Version:      1.8.0
    Available at: https://github.com/driverdan/node-XMLHttpRequest
    Developed by: Dan DeFelippi (http://driverdan.com)
    License name: MIT License
  
  xmlpull:1.1.3.1: 
    Project:      XML Pull Parsing API
    Version:      1.1.3.1
    Available at: http://www.xmlpull.org
    License name: Public Domain
  

Apache License: |

   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.
   
   
Dependency licenses:

   # Licenses of the source and binary dependencies of this software are included below.

  Apache License, version 2.0: |
    # from https://www.apache.org/licenses/LICENSE-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.
     

  BSD 2-Clause (Simplified or FreeBSD) License: |
    Redistribution and use in source and binary forms, with or without modification, 
    are permitted provided that the following conditions are met:
    
    1. Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.
    
    2. 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.

  BSD 3-Clause (New BSD) License: |
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
    
      1. Redistributions of source code must retain the above copyright notice,
         this list of conditions and the following disclaimer.
    
      2. 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.
    
      3. The names of the authors may not be used to endorse or promote products
         derived from this software without specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT,
    INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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.

  Common Development and Distribution License, version 1.0: |
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    Version 1.0
    
    1. Definitions.
    1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
    1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
    1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
    1.4. "Executable" means the Covered Software in any form other than Source Code.
    1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
    1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
    1.7. "License" means this document.
    1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
    1.9. "Modifications" means the Source Code and Executable form of any of the following:
    A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
    B. Any new file that contains any part of the Original Software or previous Modification; or
    C. Any new file that is contributed or otherwise made available under the terms of this License.
    1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
    1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
    1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
    1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
    2. License Grants.
    2.1. The Initial Developer Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
    (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
    (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
    2.2. Contributor Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
    (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
    (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
    3. Distribution Obligations.
    3.1. Availability of Source Code. 
    Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
    3.2. Modifications. 
    The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
    3.3. Required Notices. 
    You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
    3.4. Application of Additional Terms. 
    You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
    3.5. Distribution of Executable Versions. 
    You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
    3.6. Larger Works. 
    You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
    4. Versions of the License.
    4.1. New Versions. 
    Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
    4.2. Effect of New Versions. 
    You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
    4.3. Modified Versions. 
    When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
    5. DISCLAIMER OF WARRANTY.
    COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    
    6. TERMINATION.
    6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
    6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
    6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
    7. LIMITATION OF LIABILITY.
    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    
    8. U.S. GOVERNMENT END USERS.
    The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
    
    9. MISCELLANEOUS.
    This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
    
    10. RESPONSIBILITY FOR CLAIMS.
    As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.

  Common Development and Distribution License, version 1.1: |
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    Version 1.1
    
    1. Definitions.
    1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
    1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
    1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
    1.4. "Executable" means the Covered Software in any form other than Source Code.
    1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
    1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
    1.7. "License" means this document.
    1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
    1.9. "Modifications" means the Source Code and Executable form of any of the following:
    A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
    B. Any new file that contains any part of the Original Software or previous Modification; or
    C. Any new file that is contributed or otherwise made available under the terms of this License.
    1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
    1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
    1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
    1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
    2. License Grants.
    2.1. The Initial Developer Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
    (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
    (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
    2.2. Contributor Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
    (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
    (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
    3. Distribution Obligations.
    3.1. Availability of Source Code. 
    Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
    3.2. Modifications. 
    The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
    3.3. Required Notices. 
    You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
    3.4. Application of Additional Terms. 
    You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
    3.5. Distribution of Executable Versions. 
    You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
    3.6. Larger Works. 
    You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
    4. Versions of the License.
    4.1. New Versions. 
    Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
    4.2. Effect of New Versions. 
    You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
    4.3. Modified Versions. 
    When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
    5. DISCLAIMER OF WARRANTY.
    COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    
    6. TERMINATION.
    6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
    6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
    6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
    6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
    7. LIMITATION OF LIABILITY.
    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    
    8. U.S. GOVERNMENT END USERS.
    The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
    
    9. MISCELLANEOUS.
    This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
    
    10. RESPONSIBILITY FOR CLAIMS.
    As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
    
    NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.

  Common Public License, version 1.0: |
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1.
    DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
    i) changes to the Program, and
    ii) additions to the Program;
    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
    
    "Contributor" means any person or entity that distributes the Program.
    
    "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
    
    2.
    GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    3.
    REQUIREMENTS
    
    A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
    
    a) it complies with the terms and conditions of this Agreement; and
    b) its license agreement:
    i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
    ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
    iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
    iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
    When the Program is made available in source code form:
    
    a) it must be made available under this Agreement; and
    b) a copy of this Agreement must be included with each copy of the Program.
    Contributors may not remove or alter any copyright notices contained within the Program.
    
    Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
    
    4.
    COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5.
    NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6.
    DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7.
    GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
    
    This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
    

  Creative Commons Public License, Attribution 3.0: |
    THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
    COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
    COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
    AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
    
    BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE
    BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE
    CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE
    IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
    
    1. Definitions
    
    "Collective Work" means a work, such as a periodical issue, anthology or
    encyclopedia, in which the Work in its entirety in unmodified form, along with
    one or more other contributions, constituting separate and independent works in
    themselves, are assembled into a collective whole. A work that constitutes a
    Collective Work will not be considered a Derivative Work (as defined below) for
    the purposes of this License.  "Derivative Work" means a work based upon the
    Work or upon the Work and other pre-existing works, such as a translation,
    musical arrangement, dramatization, fictionalization, motion picture version,
    sound recording, art reproduction, abridgment, condensation, or any other form
    in which the Work may be recast, transformed, or adapted, except that a work
    that constitutes a Collective Work will not be considered a Derivative Work for
    the purpose of this License. For the avoidance of doubt, where the Work is a
    musical composition or sound recording, the synchronization of the Work in
    timed-relation with a moving image ("synching") will be considered a Derivative
    Work for the purpose of this License.  "Licensor" means the individual,
    individuals, entity or entities that offers the Work under the terms of this
    License.  "Original Author" means the individual, individuals, entity or
    entities who created the Work.  "Work" means the copyrightable work of
    authorship offered under the terms of this License.  "You" means an individual
    or entity exercising rights under this License who has not previously violated
    the terms of this License with respect to the Work, or who has received express
    permission from the Licensor to exercise rights under this License despite a
    previous violation.  2. Fair Use Rights. Nothing in this license is intended to
    reduce, limit, or restrict any rights arising from fair use, first sale or
    other limitations on the exclusive rights of the copyright owner under
    copyright law or other applicable laws.
    
    3. License Grant. Subject to the terms and conditions of this License, Licensor
    hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the
    duration of the applicable copyright) license to exercise the rights in the
    Work as stated below:
    
    to reproduce the Work, to incorporate the Work into one or more Collective
    Works, and to reproduce the Work as incorporated in the Collective Works; to
    create and reproduce Derivative Works provided that any such Derivative Work,
    including any translation in any medium, takes reasonable steps to clearly
    label, demarcate or otherwise identify that changes were made to the original
    Work. For example, a translation could be marked "The original work was
    translated from English to Spanish," or a modification could indicate "The
    original work has been modified.";; to distribute copies or phonorecords of,
    display publicly, perform publicly, and perform publicly by means of a digital
    audio transmission the Work including as incorporated in Collective Works; to
    distribute copies or phonorecords of, display publicly, perform publicly, and
    perform publicly by means of a digital audio transmission Derivative Works.
    For the avoidance of doubt, where the Work is a musical composition:
    
    Performance Royalties Under Blanket Licenses. Licensor waives the exclusive
    right to collect, whether individually or, in the event that Licensor is a
    member of a performance rights society (e.g. ASCAP, BMI, SESAC), via that
    society, royalties for the public performance or public digital performance
    (e.g. webcast) of the Work.  Mechanical Rights and Statutory Royalties.
    Licensor waives the exclusive right to collect, whether individually or via a
    music rights agency or designated agent (e.g. Harry Fox Agency), royalties for
    any phonorecord You create from the Work ("cover version") and distribute,
    subject to the compulsory license created by 17 USC Section 115 of the US
    Copyright Act (or the equivalent in other jurisdictions).  Webcasting Rights
    and Statutory Royalties. For the avoidance of doubt, where the Work is a sound
    recording, Licensor waives the exclusive right to collect, whether individually
    or via a performance-rights society (e.g. SoundExchange), royalties for the
    public digital performance (e.g. webcast) of the Work, subject to the
    compulsory license created by 17 USC Section 114 of the US Copyright Act (or
    the equivalent in other jurisdictions).  The above rights may be exercised in
    all media and formats whether now known or hereafter devised. The above rights
    include the right to make such modifications as are technically necessary to
    exercise the rights in other media and formats. All rights not expressly
    granted by Licensor are hereby reserved.
    
    4. Restrictions. The license granted in Section 3 above is expressly made
    subject to and limited by the following restrictions:
    
    You may distribute, publicly display, publicly perform, or publicly digitally
    perform the Work only under the terms of this License, and You must include a
    copy of, or the Uniform Resource Identifier for, this License with every copy
    or phonorecord of the Work You distribute, publicly display, publicly perform,
    or publicly digitally perform. You may not offer or impose any terms on the
    Work that restrict the terms of this License or the ability of a recipient of
    the Work to exercise the rights granted to that recipient under the terms of
    the License. You may not sublicense the Work. You must keep intact all notices
    that refer to this License and to the disclaimer of warranties. When You
    distribute, publicly display, publicly perform, or publicly digitally perform
    the Work, You may not impose any technological measures on the Work that
    restrict the ability of a recipient of the Work from You to exercise the rights
    granted to that recipient under the terms of the License. This Section 4(a)
    applies to the Work as incorporated in a Collective Work, but this does not
    require the Collective Work apart from the Work itself to be made subject to
    the terms of this License. If You create a Collective Work, upon notice from
    any Licensor You must, to the extent practicable, remove from the Collective
    Work any credit as required by Section 4(b), as requested. If You create a
    Derivative Work, upon notice from any Licensor You must, to the extent
    practicable, remove from the Derivative Work any credit as required by Section
    4(b), as requested.  If You distribute, publicly display, publicly perform, or
    publicly digitally perform the Work (as defined in Section 1 above) or any
    Derivative Works (as defined in Section 1 above) or Collective Works (as
    defined in Section 1 above), You must, unless a request has been made pursuant
    to Section 4(a), keep intact all copyright notices for the Work and provide,
    reasonable to the medium or means You are utilizing: (i) the name of the
    Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the
    Original Author and/or Licensor designate another party or parties (e.g. a
    sponsor institute, publishing entity, journal) for attribution ("Attribution
    Parties") in Licensor's copyright notice, terms of service or by other
    reasonable means, the name of such party or parties; the title of the Work if
    supplied; to the extent reasonably practicable, the Uniform Resource
    Identifier, if any, that Licensor specifies to be associated with the Work,
    unless such URI does not refer to the copyright notice or licensing information
    for the Work; and, consistent with Section 3(b) in the case of a Derivative
    Work, a credit identifying the use of the Work in the Derivative Work (e.g.,
    "French translation of the Work by Original Author," or "Screenplay based on
    original Work by Original Author"). The credit required by this Section 4(b)
    may be implemented in any reasonable manner; provided, however, that in the
    case of a Derivative Work or Collective Work, at a minimum such credit will
    appear, if a credit for all contributing authors of the Derivative Work or
    Collective Work appears, then as part of these credits and in a manner at least
    as prominent as the credits for the other contributing authors. For the
    avoidance of doubt, You may only use the credit required by this Section for
    the purpose of attribution in the manner set out above and, by exercising Your
    rights under this License, You may not implicitly or explicitly assert or imply
    any connection with, sponsorship or endorsement by the Original Author,
    Licensor and/or Attribution Parties, as appropriate, of You or Your use of the
    Work, without the separate, express prior written permission of the Original
    Author, Licensor and/or Attribution Parties.  5. Representations, Warranties
    and Disclaimer
    
    UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
    THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY RIGHTS HELD IN THE LICENSED WORK
    BY THE LICENSOR. THE LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
    KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING,
    WITHOUT LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY,
    FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR
    OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
    DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
    WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
    
    6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN
    NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
    INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS
    LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE
    POSSIBILITY OF SUCH DAMAGES.
    
    7. Termination
    
    This License and the rights granted hereunder will terminate automatically upon
    any breach by You of the terms of this License. Individuals or entities who
    have received Derivative Works (as defined in Section 1 above) or Collective
    Works (as defined in Section 1 above) from You under this License, however,
    will not have their licenses terminated provided such individuals or entities
    remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8
    will survive any termination of this License.  Subject to the above terms and
    conditions, the license granted here is perpetual (for the duration of the
    applicable copyright in the Work). Notwithstanding the above, Licensor reserves
    the right to release the Work under different license terms or to stop
    distributing the Work at any time; provided, however that any such election
    will not serve to withdraw this License (or any other license that has been, or
    is required to be, granted under the terms of this License), and this License
    will continue in full force and effect unless terminated as stated above.  8.
    Miscellaneous
    
    Each time You distribute or publicly digitally perform the Work (as defined in
    Section 1 above) or a Collective Work (as defined in Section 1 above), the
    Licensor offers to the recipient a license to the Work on the same terms and
    conditions as the license granted to You under this License.  Each time You
    distribute or publicly digitally perform a Derivative Work, Licensor offers to
    the recipient a license to the original Work on the same terms and conditions
    as the license granted to You under this License.  If any provision of this
    License is invalid or unenforceable under applicable law, it shall not affect
    the validity or enforceability of the remainder of the terms of this License,
    and without further action by the parties to this agreement, such provision
    shall be reformed to the minimum extent necessary to make such provision valid
    and enforceable.  No term or provision of this License shall be deemed waived
    and no breach consented to unless such waiver or consent shall be in writing
    and signed by the party to be charged with such waiver or consent.  This
    License constitutes the entire agreement between the parties with respect to
    the Work licensed here. There are no understandings, agreements or
    representations with respect to the Work not specified here. Licensor shall not
    be bound by any additional provisions that may appear in any communication from
    You. This License may not be modified without the mutual written agreement of
    the Licensor and You.

  Eclipse Distribution License, version 1.0: |
    Eclipse Distribution License - v 1.0
    Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
    
    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 the Eclipse Foundation, 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.

  Eclipse Public License, version 1.0: |
    Eclipse Public License - v 1.0
    
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1. DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
      i) changes to the Program, and
      ii) additions to the Program;
    
    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
    
    "Contributor" means any person or entity that distributes the Program.
    
    "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
    
    2. GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    
    3. REQUIREMENTS
    
    A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
    
    a) it complies with the terms and conditions of this Agreement; and
    b) its license agreement:
      i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
      ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
      iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
      iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
    
    When the Program is made available in source code form:
    
    a) it must be made available under this Agreement; and
    b) a copy of this Agreement must be included with each copy of the Program.
    
    Contributors may not remove or alter any copyright notices contained within the Program.
    
    Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
    
    4. COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5. NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6. DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7. GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
    
    This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

  Eclipse Public License, version 2.0: |
    Eclipse Public License - v 2.0
    
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1. DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
      i) changes to the Program, and
      ii) additions to the Program;
      
    where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution "originates" from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
    
    "Contributor" means any person or entity that Distributes the Program.
    
    "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions Distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
    
    "Derivative Works" shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
    
    "Modified Works" shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof.
    
    "Distribute" means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
    
    "Source Code" means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
    
    "Secondary License" means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
    
    2. GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
    
    3. REQUIREMENTS
    
    3.1 If a Contributor Distributes the Program in any form, then:
    
    a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
    b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
      i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
      ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
      iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
      iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
    
    3.2 When the Program is Distributed as Source Code:
    
    a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
    b) a copy of this Agreement must be included with each copy of the Program.
    
    3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (‘notices’) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
    
    4. COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5. NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED 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. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6. DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7. GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version.
    
    Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
    
    
    Exhibit A – Form of Secondary Licenses Notice
    
    "This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}."
    
    Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
    
    If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
    
    You may add additional accurate notices of copyright ownership.
    

  Font Awesome License: |
    Font Awesome Free License
    -------------------------
    
    Font Awesome Free is free, open source, and GPL friendly. You can use it for
    commercial projects, open source projects, or really almost whatever you want.
    Full Font Awesome Free license: https://fontawesome.com/license.
    
    # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
    In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
    packaged as SVG and JS file types.
    
    # Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
    In the Font Awesome Free download, the SIL OLF license applies to all icons
    packaged as web and desktop font files.
    
    # Code: MIT License (https://opensource.org/licenses/MIT)
    In the Font Awesome Free download, the MIT license applies to all non-font and
    non-icon files.
    
    # Attribution
    Attribution is required by MIT, SIL OLF, and CC BY licenses. Downloaded Font
    Awesome Free files already contain embedded comments with sufficient
    attribution, so you shouldn't need to do anything additional when using these
    files normally.
    
    We've kept attribution comments terse, so we ask that you do not actively work
    to remove them from files, especially code. They're a great way for folks to 
    learn about Font Awesome.
    
    # Brand Icons
    All brand icons are trademarks of their respective owners. The use of these
    trademarks does not indicate endorsement of the trademark holder by Font
    Awesome, nor vice versa. **Please do not use brand logos for any purpose except
    to represent the company, product, or service to which they refer.**

  Indiana University Extreme! Lab Software License, vesion 1.2: |
    Indiana University Extreme! Lab Software License, Version 1.2
    
    Copyright (C) 2003 The Trustees of Indiana University.
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are
    met:
    
    1) All redistributions of source code must retain the above
       copyright notice, the list of authors in the original source
       code, this list of conditions and the disclaimer listed in this
       license;
    
    2) All redistributions in binary form must reproduce the above
       copyright notice, this list of conditions and the disclaimer
       listed in this license in the documentation and/or other
       materials provided with the distribution;
    
    3) Any documentation included with all redistributions must include
       the following acknowledgement:
    
         "This product includes software developed by the Indiana
         University Extreme! Lab.  For further information please visit
         http://www.extreme.indiana.edu/"
    
       Alternatively, this acknowledgment may appear in the software
       itself, and wherever such third-party acknowledgments normally
       appear.
    
    4) The name "Indiana University" or "Indiana University
       Extreme! Lab" shall not be used to endorse or promote
       products derived from this software without prior written
       permission from Indiana University.  For written permission,
       please contact http://www.extreme.indiana.edu/.
    
    5) Products derived from this software may not use "Indiana
       University" name nor may "Indiana University" appear in their name,
       without prior written permission of the Indiana University.
    
    Indiana University provides no reassurances that the source code
    provided does not infringe the patent or any other intellectual
    property rights of any other entity.  Indiana University disclaims any
    liability to any recipient for claims brought by any other entity
    based on infringement of intellectual property rights or otherwise.
    
    LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH
    NO WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA
    UNIVERSITY GIVES NO WARRANTIES AND MAKES NO REPRESENTATION THAT
    SOFTWARE IS FREE OF INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR
    OTHER PROPRIETARY RIGHTS.  INDIANA UNIVERSITY MAKES NO WARRANTIES THAT
    SOFTWARE IS FREE FROM "BUGS", "VIRUSES", "TROJAN HORSES", "TRAP
    DOORS", "WORMS", OR OTHER HARMFUL CODE.  LICENSEE ASSUMES THE ENTIRE
    RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR ASSOCIATED MATERIALS,
    AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION GENERATED USING
    SOFTWARE.

  Java HTML Tidy License: |
    /**
    *  Java HTML Tidy - JTidy
    *  HTML parser and pretty printer
    *
    *  Copyright (c) 1998-2000 World Wide Web Consortium (Massachusetts
    *  Institute of Technology, Institut National de Recherche en
    *  Informatique et en Automatique, Keio University). All Rights
    *  Reserved.
    *
    *  Contributing Author(s):
    *
    *     Dave Raggett <dsr@w3.org>
    *     Andy Quick <ac.quick@sympatico.ca> (translation to Java)
    *     Gary L Peskin <garyp@firstech.com> (Java development)
    *     Sami Lempinen <sami@lempinen.net> (release management)
    *     Fabrizio Giustina <fgiust at users.sourceforge.net>
    *
    *  The contributing author(s) would like to thank all those who
    *  helped with testing, bug fixes, and patience.  This wouldn't
    *  have been possible without all of you.
    *
    *  COPYRIGHT NOTICE:
    * 
    *  This software and documentation is provided "as is," and
    *  the copyright holders and contributing author(s) make no
    *  representations or warranties, express or implied, including
    *  but not limited to, warranties of merchantability or fitness
    *  for any particular purpose or that the use of the software or
    *  documentation will not infringe any third party patents,
    *  copyrights, trademarks or other rights. 
    *
    *  The copyright holders and contributing author(s) will not be
    *  liable for any direct, indirect, special or consequential damages
    *  arising out of any use of the software or documentation, even if
    *  advised of the possibility of such damage.
    *
    *  Permission is hereby granted to use, copy, modify, and distribute
    *  this source code, or portions hereof, documentation and executables,
    *  for any purpose, without fee, subject to the following restrictions:
    *
    *  1. The origin of this source code must not be misrepresented.
    *  2. Altered versions must be plainly marked as such and must
    *     not be misrepresented as being the original source.
    *  3. This Copyright notice may not be removed or altered from any
    *     source or altered source distribution.
    * 
    *  The copyright holders and contributing author(s) specifically
    *  permit, without fee, and encourage the use of this source code
    *  as a component for supporting the Hypertext Markup Language in
    *  commercial products. If you use this source code in a product,
    *  acknowledgment is not required but would be appreciated.
    *
    */

  MIT License: |
    MIT License
    
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    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.

  Public Domain: |
    The project indicates it is in the public domain and does not require any license inclusion.
    

  SIL OFL 1.1: |
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    This Font Software is licensed under the SIL Open Font License, Version 1.1.
    This license is copied below, and is also available with a FAQ at:
    http://scripts.sil.org/OFL
    
    
    -----------------------------------------------------------
    SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
    -----------------------------------------------------------
    
    PREAMBLE
    The goals of the Open Font License (OFL) are to stimulate worldwide
    development of collaborative font projects, to support the font creation
    efforts of academic and linguistic communities, and to provide a free and
    open framework in which fonts may be shared and improved in partnership
    with others.
    
    The OFL allows the licensed fonts to be used, studied, modified and
    redistributed freely as long as they are not sold by themselves. The
    fonts, including any derivative works, can be bundled, embedded, 
    redistributed and/or sold with any software provided that any reserved
    names are not used by derivative works. The fonts and derivatives,
    however, cannot be released under any other type of license. The
    requirement for fonts to remain under this license does not apply
    to any document created using the fonts or their derivatives.
    
    DEFINITIONS
    "Font Software" refers to the set of files released by the Copyright
    Holder(s) under this license and clearly marked as such. This may
    include source files, build scripts and documentation.
    
    "Reserved Font Name" refers to any names specified as such after the
    copyright statement(s).
    
    "Original Version" refers to the collection of Font Software components as
    distributed by the Copyright Holder(s).
    
    "Modified Version" refers to any derivative made by adding to, deleting,
    or substituting -- in part or in whole -- any of the components of the
    Original Version, by changing formats or by porting the Font Software to a
    new environment.
    
    "Author" refers to any designer, engineer, programmer, technical
    writer or other person who contributed to the Font Software.
    
    PERMISSION & CONDITIONS
    Permission is hereby granted, free of charge, to any person obtaining
    a copy of the Font Software, to use, study, copy, merge, embed, modify,
    redistribute, and sell modified and unmodified copies of the Font
    Software, subject to the following conditions:
    
    1) Neither the Font Software nor any of its individual components,
    in Original or Modified Versions, may be sold by itself.
    
    2) Original or Modified Versions of the Font Software may be bundled,
    redistributed and/or sold with any software, provided that each copy
    contains the above copyright notice and this license. These can be
    included either as stand-alone text files, human-readable headers or
    in the appropriate machine-readable metadata fields within text or
    binary files as long as those fields can be easily viewed by the user.
    
    3) No Modified Version of the Font Software may use the Reserved Font
    Name(s) unless explicit written permission is granted by the corresponding
    Copyright Holder. This restriction only applies to the primary font name as
    presented to the users.
    
    4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    Software shall not be used to promote, endorse or advertise any
    Modified Version, except to acknowledge the contribution(s) of the
    Copyright Holder(s) and the Author(s) or with their explicit written
    permission.
    
    5) The Font Software, modified or unmodified, in part or in whole,
    must be distributed entirely under this license, and must not be
    distributed under any other license. The requirement for fonts to
    remain under this license does not apply to any document created
    using the Font Software.
    
    TERMINATION
    This license becomes null and void if any of the above conditions are
    not met.
    
    DISCLAIMER
    THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    OTHER DEALINGS IN THE FONT SOFTWARE.

