Move kitematic docs to kitematic subdirectory

This commit is contained in:
Misty Stanley-Jones 2016-09-28 16:46:17 -07:00
parent eaf7fc7244
commit 0b95b86011
336 changed files with 0 additions and 19249 deletions

View File

@ -1,136 +0,0 @@
# Contributing to Kitematic
Thanks for contributing and supporting the Kitematic project!
Before you file an issue or a pull request, read the following tips on how to keep development of the project awesome for all of the contributors:
## Table of Contents
- [Mac Prerequisites](#prerequisites-for-developing-kitematic-on-mac)
- [Windows Prerequisites](#prerequisites-for-developing-kitematic-on-windows)
- [Getting Started](#getting-started)
- [Architecture](#architecture)
- [GitHub Issues](#github-issues)
- [Pull Requests](#pull-requests)
- [Code Guidelines](#code-guidelines)
- [Testing](#testing)
- [License](#license)
### Prerequisites for developing Kitematic on Mac
You will need to install:
- The [Docker Toolbox](https://docker.com/toolbox)
- [Node.js](https://nodejs.org/)
- Wine `brew install wine` (only if you want to generate a Windows release on OS X)
- The latest Xcode from the Apple App Store.
### Prerequisites for developing Kitematic on Windows
You will need to install:
- The [Docker Toolbox](https://docker.com/toolbox)
- [Node.js](https://nodejs.org/)
- Open a command prompt (`cmd`) and run the command `mkdir ~/AppData/Roaming/npm`
- [Visual Studio 2013 Community](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) (or similar) - You do not need to install any optional packages during install.
- [Python](https://www.python.org/downloads/release/python-2710/)
![Toolbox Env Var](https://cloud.githubusercontent.com/assets/251292/10656552/adaedb20-7834-11e5-8881-d5402d3fee37.png)
### Getting Started
- `npm install`
To run the app in development:
- `npm start`
Running `npm start` will download and install the Docker client,
[Docker Machine](https://github.com/docker/machine), [Docker Compose](https://github.com/docker/compose)
the [Boot2Docker iso](https://github.com/boot2docker/boot2docker),
[Electron](http://electron.atom.io/).
### Building & Release
- `npm run release`
### Unit Tests
- `npm test`
## Architecture
### Overview
**Note: This architecture is work in progress and doesn't reflect the current state of the app, yet!**
Kitematic is an application built using [electron](https://github.com/atom/electron) and is powered by the [Docker Engine](https://github.com/docker/docker). While it's work in progress, the goal is to make Kitematic a high-performance, portable Javascript ES6 application built with React and Flux (using [alt](https://github.com/goatslacker/alt). It adopts a single data flow pattern:
```
╔═════════╗ ╔════════╗ ╔═════════════════╗
║ Actions ║──────>║ Stores ║──────>║ View Components ║
╚═════════╝ ╚════════╝ ╚═════════════════╝
^ │
└──────────────────────────────────────┘
```
There are three primary types of objects:
- **Actions**: Interact with the system (Docker Engine, Docker Machine, Registries, Hub, etc)
- **Views**: Views make up the UI, and trigger available actions.
- **Stores**: Stores store the state of the application.
and since Kitematic has a large amount of interaction with outside systems, we've added utils:
- **Utils**: Utils interact with APIs, outside systems, CLI tools and generate. They are called by user-generated actions and in return, also create actions based on API return values, CLI output etc.
### Guidelines
- Avoid asynchronous code in Actions, Stores or Views. Instead, put code involving callbacks, promises or generators in utils or actions.
## GitHub Issues
Please try and label any issue as:
- `bug`: clearly a defect or unwanted behavior (errors, performance issues)
- `enhancement`: making an existing, working feature better (UI improvements, better integration)
- `feature`: an entirely new feature. Please work on [roadmap features](https://github.com/kitematic/kitematic/blob/master/ROADMAP.md).
Before creating an issue, please:
1. **Search the existing issues** to see if an issue already exists (and if so, throw in a handy :+1:)!
2. **Make sure you're running the latest version of Kitematic**. The bug may already be fixed!
3. **Explain how to reproduce the bug**. This will save maintainers tons of time!
Please be as detailed as possible. Include a description of your environment and steps on how to reproduce a bug.
## Pull Requests
We're thrilled to receive pull requests of any kind. Anything from bug fix, tests or new features are welcome.
That said, please let us know what you're planning to do! For large changes always create a proposal. Maintainers will love to give you advice on building it and it keeps the app's design coherent.
### Pull Request Requirements:
- Includes tests
- [Signed Off](https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work)
## Testing
Please try to test any new code.
- Tests can be run using `npm test`
- Kitematic uses the [Jest framework](https://facebook.github.io/jest/) by Facebook. To keep tests fast, please mock as much as possible.
## Code Guidelines
### Javascript
Kitematic is es6 ready. Please use es6 constructs where possible, they are powerful and make the code more succinct, understandable and fun.
- Semicolons
- 2 spaces (no tabs)
#### Checking Javascript code standards with JSHint
Run `npm run lint` before committing to ensure your javascript is up to standard. Feel free to suggest changes to the lint spec in `.jshint`.
We designed Kitematic to be easy to build, extend and distribute for developers.
## License
By contributing your code, you agree to license your contribution under the [Apache license](https://github.com/kitematic/kitematic/blob/master/LICENSE).

View File

@ -1,421 +0,0 @@
var fs = require('fs');
var path = require('path');
var execFile = require('child_process').execFile;
var packagejson = require('./package.json');
var electron = require('electron-prebuilt');
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
var target = grunt.option('target') || 'development';
var beta = grunt.option('beta') || false;
var alpha = grunt.option('alpha') || false;
var env = process.env;
env.NODE_PATH = '..:' + env.NODE_PATH;
env.NODE_ENV = target;
var certificateFile = grunt.option('certificateFile');
var version = function (str) {
var match = str.match(/(\d+\.\d+\.\d+)/);
return match ? match[1] : null;
};
var BASENAME = 'Kitematic';
var OSX_APPNAME = BASENAME + ' (Beta)';
var WINDOWS_APPNAME = BASENAME + ' (Alpha)';
var LINUX_APPNAME = BASENAME + ' (Alpha)';
var OSX_OUT = './dist';
var OSX_OUT_X64 = OSX_OUT + '/' + OSX_APPNAME + '-darwin-x64';
var OSX_FILENAME = OSX_OUT_X64 + '/' + OSX_APPNAME + '.app';
var LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_amd64.deb';
var IS_WINDOWS = process.platform === 'win32';
var IS_LINUX = process.platform === 'linux';
var IS_I386 = process.arch === 'ia32';
var IS_X64 = process.arch === 'x64';
var IS_DEB = fs.existsSync('/etc/lsb-release') || fs.existsSync('/etc/debian_version');
var IS_RPM = fs.existsSync('/etc/redhat-release');
var linuxpackage = null;
// linux package detection
if (IS_DEB && IS_X64) {
linuxpackage = 'electron-installer-debian:linux64';
} else if (IS_DEB && IS_I386) {
linuxpackage = 'electron-installer-debian:linux32';
LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_i386.deb';
} else if (IS_RPM && IS_X64) {
linuxpackage = 'electron-installer-redhat:linux64';
LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_x86_64.rpm';
} else if (IS_RPM && IS_I386) {
linuxpackage = 'electron-installer-redhat:linux32';
LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_x86.rpm';
}
grunt.initConfig({
IDENTITY: 'Developer ID Application: Docker Inc',
OSX_FILENAME: OSX_FILENAME,
OSX_FILENAME_ESCAPED: OSX_FILENAME.replace(/ /g, '\\ ').replace(/\(/g, '\\(').replace(/\)/g, '\\)'),
LINUX_FILENAME: LINUX_FILENAME,
// electron
electron: {
windows: {
options: {
name: BASENAME,
dir: 'build/',
out: 'dist',
version: packagejson['electron-version'],
platform: 'win32',
arch: 'x64',
asar: true,
icon: 'util/kitematic.ico'
}
},
osx: {
options: {
name: OSX_APPNAME,
dir: 'build/',
out: 'dist',
version: packagejson['electron-version'],
platform: 'darwin',
arch: 'x64',
asar: true,
'app-version': packagejson.version
}
},
linux: {
options: {
name: LINUX_APPNAME,
dir: 'build/',
out: 'dist',
version: packagejson['electron-version'],
platform: 'linux',
arch: 'x64',
asar: true,
'app-bundle-id': 'com.kitematic.kitematic',
'app-version': packagejson.version
}
}
},
rcedit: {
exes: {
files: [{
expand: true,
cwd: 'dist/' + BASENAME + '-win32-x64',
src: [BASENAME + '.exe']
}],
options: {
icon: 'util/kitematic.ico',
'file-version': packagejson.version,
'product-version': packagejson.version,
'version-string': {
'CompanyName': 'Docker',
'ProductVersion': packagejson.version,
'ProductName': WINDOWS_APPNAME,
'FileDescription': WINDOWS_APPNAME,
'InternalName': BASENAME + '.exe',
'OriginalFilename': BASENAME + '.exe',
'LegalCopyright': 'Copyright 2015-2016 Docker Inc. All rights reserved.'
}
}
}
},
// images
copy: {
dev: {
files: [{
expand: true,
cwd: '.',
src: ['package.json', 'settings.json', 'index.html'],
dest: 'build/'
}, {
expand: true,
cwd: 'images/',
src: ['**/*'],
dest: 'build/'
}, {
expand: true,
cwd: 'fonts/',
src: ['**/*'],
dest: 'build/'
}, {
cwd: 'node_modules/',
src: Object.keys(packagejson.dependencies).map(function (dep) {
return dep + '/**/*';
}),
dest: 'build/node_modules/',
expand: true
}]
},
windows: {
files: [{
expand: true,
cwd: 'resources',
src: ['ssh.exe', 'OPENSSH_LICENSE', 'msys-*'],
dest: 'dist/' + BASENAME + '-win32-x64/resources/resources'
}],
options: {
mode: true
}
},
osx: {
files: [{
expand: true,
cwd: 'resources',
src: ['terminal'],
dest: '<%= OSX_FILENAME %>/Contents/Resources/resources/'
}, {
src: 'util/kitematic.icns',
dest: '<%= OSX_FILENAME %>/Contents/Resources/atom.icns'
}],
options: {
mode: true
}
}
},
rename: {
installer: {
src: 'dist/Setup.exe',
dest: 'dist/' + BASENAME + 'Setup-' + packagejson.version + '-Windows-Alpha.exe'
}
},
// styles
less: {
options: {
sourceMapFileInline: true
},
dist: {
files: {
'build/main.css': 'styles/main.less'
}
}
},
// javascript
babel: {
options: {
sourceMap: 'inline',
blacklist: 'regenerator',
stage: 1,
optional: ['asyncToGenerator']
},
dist: {
files: [{
expand: true,
cwd: 'src/',
src: ['**/*.js'],
dest: 'build/'
}]
}
},
shell: {
electron: {
command: electron + ' ' + 'build',
options: {
async: true,
execOptions: {
env: env
}
}
},
sign: {
options: {
failOnError: false
},
command: [
'codesign --deep -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>/Contents/Frameworks/*',
'codesign -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>',
'codesign -vvv --display <%= OSX_FILENAME_ESCAPED %>',
'codesign -v --verify <%= OSX_FILENAME_ESCAPED %>'
].join(' && ')
},
zip: {
command: 'ditto -c -k --sequesterRsrc --keepParent <%= OSX_FILENAME_ESCAPED %> release/' + BASENAME + '-Mac.zip'
},
linux_npm: {
command: 'cd build && npm install --production'
},
linux_zip: {
command: 'ditto -c -k --sequesterRsrc --keepParent <%= LINUX_FILENAME %> release/' + BASENAME + '-Ubuntu.zip'
}
},
clean: {
release: ['build/', 'dist/']
},
compress: {
windows: {
options: {
archive: './release/' + BASENAME + '-Windows.zip',
mode: 'zip'
},
files: [{
expand: true,
dot: true,
cwd: './dist/Kitematic-win32-x64',
src: '**/*'
}]
}
},
// livereload
watchChokidar: {
options: {
spawn: true
},
livereload: {
options: {livereload: true},
files: ['build/**/*']
},
js: {
files: ['src/**/*.js'],
tasks: ['newer:babel']
},
less: {
files: ['styles/**/*.less'],
tasks: ['less']
},
copy: {
files: ['images/*', 'index.html', 'fonts/*'],
tasks: ['newer:copy:dev']
}
},
'electron-packager': {
build: {
options: {
platform: process.platform,
arch: process.arch,
dir: './build',
out: './dist/',
name: 'Kitematic',
ignore: 'bower.json',
version: packagejson['electron-version'], // set version of electron
overwrite: true
}
},
osxlnx: {
options: {
platform: 'linux',
arch: 'x64',
dir: './build',
out: './dist/',
name: 'Kitematic',
ignore: 'bower.json',
version: packagejson['electron-version'], // set version of electron
overwrite: true
}
}
},
'electron-installer-debian': {
options: {
name: BASENAME.toLowerCase(), // spaces and brackets cause linting errors
productName: LINUX_APPNAME.toLowerCase(),
productDescription: 'Run containers through a simple, yet powerful graphical user interface.',
maintainer: 'Ben French <frenchben@docker.com>',
section: 'devel',
priority: 'optional',
icon: './util/kitematic.png',
lintianOverrides: [
'changelog-file-missing-in-native-package',
'executable-not-elf-or-script',
'extra-license-file',
'non-standard-dir-perm',
'non-standard-file-perm',
'non-standard-executable-perm',
'script-not-executable',
'shlib-with-executable-bit',
'binary-without-manpage',
'debian-changelog-file-missing',
'unusual-interpreter',
'wrong-path-for-interpreter',
'backup-file-in-package',
'package-contains-vcs-control-file',
'embedded-javascript-library',
'embedded-library',
'arch-dependent-file-in-usr-share'
],
categories: [
'Utility'
],
rename: function (dest, src) {
return LINUX_FILENAME;
}
},
linux64: {
options: {
arch: 'amd64'
},
src: './dist/Kitematic-linux-x64/',
dest: './dist/'
},
linux32: {
options: {
arch: 'i386'
},
src: './dist/Kitematic-linux-ia32/',
dest: './dist/'
}
},
'electron-installer-redhat': {
options: {
productName: LINUX_APPNAME,
productDescription: 'Run containers through a simple, yet powerful graphical user interface.',
priority: 'optional',
icon: './util/kitematic.png',
categories: [
'Utilities'
],
rename: function (dest, src) {
return LINUX_FILENAME;
}
},
linux64: {
options: {
arch: 'x86_64'
},
src: './dist/Kitematic-linux-x64/',
dest: './dist/'
},
linux32: {
options: {
arch: 'x86'
},
src: './dist/Kitematic-linux-ia32/',
dest: './dist/'
}
}
});
// Load the plugins for linux packaging
grunt.loadNpmTasks('grunt-electron-packager');
grunt.loadNpmTasks('grunt-electron-installer-debian');
grunt.loadNpmTasks('grunt-electron-installer-redhat');
grunt.registerTask('default', ['newer:babel', 'less', 'newer:copy:dev', 'shell:electron', 'watchChokidar']);
if (!IS_WINDOWS && !IS_LINUX) {
grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'compress', 'shell:linux_npm', 'electron-packager:osxlnx', 'electron-installer-debian:linux64', 'shell:linux_zip']);
}else if (IS_LINUX) {
if (linuxpackage) {
grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'shell:linux_npm', 'electron-packager:build', linuxpackage]);
}else {
grunt.log.errorlns('Your Linux distribution is not yet supported - arch:' + process.arch + ' platform:' + process.platform);
}
}else {
grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron:windows', 'copy:windows', 'rcedit:exes', 'compress']);
}
process.on('SIGINT', function () {
grunt.task.run(['shell:electron:kill']);
process.exit(1);
});
};

202
LICENSE
View File

@ -1,202 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2014-2016 Docker, Inc.
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.

View File

@ -1,46 +0,0 @@
# Kitematic maintainers file
#
# This file describes who runs the docker/kitematic project and how.
# This is a living document - if you see something out of date or missing, speak up!
#
# It is structured to be consumable by both humans and programs.
# To extract its contents programmatically, use any TOML-compliant parser.
#
# This file is compiled into the MAINTAINERS file in docker/opensource.
#
[Org]
[Org."Core maintainers"]
people = [
"elesant",
"FrenchBen",
"jeffdm",
"mchiang0610",
]
[people]
# A reference list of all people associated with the project.
# All other sections should refer to people by their canonical key
# in the people section.
# ADD YOURSELF HERE IN ALPHABETICAL ORDER
[people.elesant]
Name = "Sean Li"
Email = "mail@shang.li"
GitHub = "elesant"
[people.FrenchBen]
Name = "Ben French"
Email = "frenchben@docker.com"
GitHub = "FrenchBen"
[people.jeffdm]
Name = "Jeff Morgan"
Email = "jmorgan@docker.com"
GitHub = "jeffdm"
[people.mchiang0610]
Name = "Michael Chiang"
Email = "mchiang@docker.com"
GitHub = "mchiang0610"

View File

@ -1,29 +0,0 @@
.PHONY: docs docs-shell docs-build run
# TODO: clearly need to note pre-req's - OSX and node installed? - see contributing docs
run:
npm install
npm run
# Get the IP ADDRESS
DOCKER_IP=$(shell python -c "import urlparse ; print urlparse.urlparse('$(DOCKER_HOST)').hostname or ''")
HUGO_BASE_URL=$(shell test -z "$(DOCKER_IP)" && echo localhost || echo "$(DOCKER_IP)")
HUGO_BIND_IP=0.0.0.0
# import the existing docs build cmds from docker/docker
DOCS_MOUNT := $(if $(DOCSDIR),-v $(CURDIR)/$(DOCSDIR):/$(DOCSDIR))
DOCSPORT := 8000
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)
DOCKER_DOCS_IMAGE := kitematic-docs$(if $(GIT_BRANCH),:$(GIT_BRANCH))
DOCKER_RUN_DOCS := docker run --rm -it $(DOCS_MOUNT)
docs: docs-build
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" \
hugo server \
--port=$(DOCSPORT) --baseUrl=$(HUGO_BASE_URL) --bind=$(HUGO_BIND_IP)
docs-shell: docs-build
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" bash
docs-build:
docker build -t "$(DOCKER_DOCS_IMAGE)" -f docs/Dockerfile .

View File

@ -1,60 +0,0 @@
[![Build Status](https://travis-ci.org/docker/kitematic.svg?branch=master)](https://travis-ci.org/docker/kitematic)
[![Kitematic Logo](https://cloud.githubusercontent.com/assets/251292/5269258/1b229c3c-7a2f-11e4-96f1-e7baf3c86d73.png)](https://kitematic.com)
Kitematic is a simple application for managing Docker containers on Mac, Linux and Windows.
![Kitematic Screenshot](https://cloud.githubusercontent.com/assets/251292/8246120/d3ab271a-15ed-11e5-8736-9a730a27c79a.png)
## Installing Kitematic
[Download the latest version](https://docker.com/toolbox) of Kitematic via the Docker Toolbox.
## Documentation
Kitematic's documentation and other information can be found at [http://kitematic.com/docs](http://kitematic.com/docs).
## Security Disclosure
Security is very important to us. If you have any issue regarding security, please disclose the information responsibly by sending an email to security@docker.com and not by creating a github issue.
## Bugs and Feature Requests
Have a bug or a feature request? Please first read the [Issue Guidelines](https://github.com/kitematic/kitematic/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/kitematic/kitematic/issues/new).
## Roadmap & Contributing
We welcome all pull requests and contributions that anyone would like to make. The Kitematic team is super happy to support anyone who wants to get involved. Please checkout our [roadmap](ROADMAP.md) that we keep up to date for ideas to help you with contributing. We would love to talk to you about contributing.
Please read through our [Contributing Guidelines](https://github.com/kitematic/kitematic/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
## Community
- [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kitematic/kitematic?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
- Ask questions on our [user forum](https://forums.docker.com/c/open-source-projects/kitematic).
- **#kitematic** on IRC. [Join the channel](http://webchat.freenode.net/?channels=%23kitematic&uio=d4).
- Follow [@kitematic on Twitter](https://twitter.com/kitematic).
## Uninstalling
**Mac**
- Remove Kitematic.app
- Remove any unwanted Virtual Machines in VirtualBox
```bash
# remove app data
rm -rf ~/Library/Application\ Support/Kitematic
```
**Windows**
Open `Programs and Features` from `Control Panel`
- Uninstall Kitematic
- Uninstall Oracle VM VirtualBox
## Copyright and License
Code released under the [Apache license](LICENSE).
Images are copyrighted by Docker, Inc.

View File

@ -1,46 +0,0 @@
## Kitematic Roadmap
**January 2015**
* Automatic updates
* Stability bug fixes
**Februay 2015**
* Docker machine support
* Front-end refactor
* Starting Unit tests
**March 2015**
* Kitematic re-design (container centric workflow)
* Docker Hub pull / search for public Docker images
**April 2015**
* Custom URL protocol
**May 2015**
* Docker Hub - sign-up/sign-in
* Allow users to sign-up / sign-in to Docker Hub from Kitematic.
* Docker Hub - private repo view if user is logged-in to Docker Hub account
**June 2015**
* Microsoft Windows alpha
**July 2015**
* Refactor to Flux Architecture
* Stability & code quality improvements
**August 2015**
* Make Kitematic part of the Docker Toolbox
* Stability & code quality improvements
**September 2015**
* Better integration with new version of Docker Hub
* Stability & code quality improvements

View File

@ -1,32 +0,0 @@
jest.autoMockOff();
jasmine.getEnv().defaultTimeoutInterval = 60000;
let hubUtil = require('../src/utils/HubUtil');
let Promise = require('bluebird');
describe('HubUtil Integration Tests', () => {
describe('auth', () => {
pit('successfully authenticates', () => {
return new Promise((resolve) => {
hubUtil.auth(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, (error, response, body) => {
expect(response.statusCode).toBe(200);
expect(error).toBe(null);
let data = JSON.parse(body);
expect(data.token).toBeTruthy();
resolve();
});
});
});
pit('provides a 401 if credentials are incorrect', () => {
return new Promise((resolve) => {
hubUtil.auth(process.env.INTEGRATION_USER, 'incorrectpassword', (error, response) => {
expect(response.statusCode).toBe(401);
resolve();
});
});
});
});
});

View File

@ -1,62 +0,0 @@
jest.autoMockOff();
jasmine.getEnv().defaultTimeoutInterval = 60000;
let _ = require('underscore');
let regHubUtil = require('../src/utils/RegHubUtil');
let hubUtil = require('../src/utils/HubUtil');
let Promise = require('bluebird');
describe('RegHubUtil Integration Tests', () => {
describe('with login', () => {
pit('lists private repos', () => {
return new Promise((resolve) => {
hubUtil.login(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, () => {
regHubUtil.repos((error, repos) => {
expect(_.findWhere(repos, {name: 'test_private', is_private: true})).toBeTruthy();
resolve();
});
});
});
});
pit('lists tags for a private repo', () => {
return new Promise((resolve) => {
hubUtil.login(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, () => {
regHubUtil.tags(`${process.env.INTEGRATION_USER}/test_private`, (error, tags) => {
expect(error).toBeFalsy();
expect(tags.length).toEqual(1);
expect(tags[0].name).toEqual('latest');
resolve();
});
});
});
});
});
describe('public repos', () => {
pit('lists repos', () => {
return new Promise((resolve) => {
hubUtil.login(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, () => {
regHubUtil.repos((error, repos) => {
expect(_.findWhere(repos, {name: 'test'})).toBeTruthy();
resolve();
});
});
});
});
pit('lists tags for a repo', () => {
return new Promise((resolve) => {
hubUtil.login(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, () => {
regHubUtil.tags(`${process.env.INTEGRATION_USER}/test`, (error, tags) => {
expect(error).toBeFalsy();
expect(tags.length).toEqual(1);
expect(tags[0].name).toEqual('latest');
resolve();
});
});
});
});
});
});

View File

@ -1,5 +0,0 @@
module.exports = {
require: jest.genMockFunction(),
match: jest.genMockFunction(),
on: jest.genMockFunction()
};

View File

@ -1,7 +0,0 @@
module.exports = {
require: jest.genMockFunction(),
match: jest.genMockFunction(),
app: jest.genMockFunction(),
remote: jest.genMockFunction(),
dialog: jest.genMockFunction()
};

View File

@ -1,4 +0,0 @@
module.exports = {
require: jest.genMockFunction(),
match: jest.genMockFunction()
};

View File

@ -1,67 +0,0 @@
jest.dontMock('../src/utils/Util').dontMock('console');
const util = require('../src/utils/Util');
describe('Util', () => {
describe('when removing sensitive data', () => {
it('filters ssh certificate data', () => {
var testdata = String.raw`time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=30 -o LogLevel=quiet -p 50483 -i /Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost sudo mkdir -p /var/lib/boot2docker" time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=30 -o LogLevel=quiet -p 50483 -i /Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost echo \"-----BEGIN CERTIFICATE-----\nMIIC+DCCAeKgAwIBAgIRANfIbsa2M94gDY+fBiBiQBkwCwYJKoZIhvcNAQELMBIx\nEDAOBgNVBAoTB2ptb3JnYW4wHhcNMTUwNDE4MDEzODAwWhcNMTgwNDAyMDEzODAw\nWjAPMQ0wCwYDVQQKEwRkZXYyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEA1yamWT0bk0pRU7eiStjiXe2jkzdeI0SdJZo+bjczkl6kzNW/FmR/OkcP8gHX\nCO3fUCWkR/+rBgz3nuM1Sy0BIUo0EMQGfx17OqIJPXO+BrpCHsXlphHmbQl5bE2Y\nF+bAsGc6WCippw/caNnIHRsb6zAZVYX2AHLYY0fwIDAQABo1AwTjAOBgNVHQ8BAf8EBAMCAKAwHQYD\nVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwDwYDVR0R\nBAgwBocEwKhjZTALBgkqhkiG9w0BAQsDggEBAKBdD86+kl4X1VMjgGlNYnc42tWa\nbo1iDl/frxiLkfPSc2McAOm3AqX1ao+ynjqq1XTlBLPTQByu/oNZgA724LRJDfdG\nCKGUV8latW7rB1yhf/SZSmyhNjufuWlgCtbkw7Q/oPddzYuSOdDW8tVok9gMC0vL\naqKCWfVKkCmvGH+8/wPrkYmro/f0uwJ8ee+yrbBPlBE/qE+Lqcfr0YcXEDaS8CmL\nDjWg7KNFpA6M+/tFNQhplbjwRsCt7C4bzQu0aBIG5XH1Jr2HrKlLjWdmluPHWUL6\nX5Vh1bslYJzsSdBNZFWSKShZ+gtRpjtV7NynANDJPQNIRhDxAf4uDY9hA2c=\n-----END CERTIFICATE-----\n\" | sudo tee /var/lib/boot2docker/server.pem"
time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: /usr/bin/VBoxManage showvminfo dev2 --machinereadable"`;
expect(util.removeSensitiveData(testdata).indexOf('CERTIFICATE')).toEqual(-1);
expect(util.removeSensitiveData(testdata).indexOf('nX5Vh1bslYJzsSdBNZFWSKShZ+gtRpjtV7NynANDJPQNIRhDxAf4uDY9hA2c')).toEqual(-1);
expect(util.removeSensitiveData(testdata).indexOf('<redacted>')).toNotEqual(-1);
});
it('filters ssh private key data', () => {
var testdata = String.raw`hZbuxglOtQv2AQqOp/luhZ3Y8kDs4cqRzoA1o+k+LAyjEb+Nk\nGA8=\n-----END CERTIFICATE-----\n\" | sudo tee /var/lib/boot2docker/ca.pem"
time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=30 -o LogLevel=quiet -p 50483 -i /Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost echo \"-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA1yamWT0bk0pRU7eiStjiXe2jkzdeI0SdJZo+bjczkl6kzNW/\nFmR/OkcP8gHXCO3fUCWkR/+rBgz3nuM1Sy0BIUo0EMQGfx17OqIJPXO+BrpCHsXl\nphHmbQl5bE2YF+bAsGc6WCippczQIu5bPweeAkR1WdlkhD08tHD4o1ESe09fXx5G\nXcZFfd2xQWdvAJX3fTuGBk3IMEF2fye5b69zUyVDGbTylyjKDOi9Xxdlc4y9cOPw\nzcwQFCOJiCBYlxDO0fbinA+KigCs29Dd5U3oXbloLr3JQTE/SkxFh9W5rkX8ysY4\n2h3EnR7YIBWt/caNnIHRsb6zAZVYX2AHLYY0fwIDAQABAoIBAQDKF3TTh/G59WnU\n4D2iXnyqy8gFRVG4gP+3TV3s+w8HIr1b5j6akwVqwUs5//5zVbSYPPNF6eJESbPi\nW/s4ROq10VR8lxSfHBsfJQrW3TwWZ6gp7atbxZ6Stv6F+5CsisReLmiAXJmVsn+j\nAA9Xchk6egFcxzWCfV7jAuaZyVI53cclepm/xkGjPwrfXr+nA+UMvO6DllC6IcBF\no4+O0jVtzdMecZnQk6nWxNJjurodTTQakrNAqSMgBshn48wf3N35b+p8RtTzLJ8L\nYuHkv6OKMITIazcHadjsN8icGgIGf2BJ1CRje7j0Yzow8jwY+Pet3yxKSfXED89B\nD34AEXl5AoGBANi17og+yPFOWURUrksO/QyzlOtXcQdQu8SmkUj4ACoqF0gegQIb\nC/DNMcYxJAsPPgw/t5Ws/af8DuatYguGukmekYREVjc7DS/hPWDZzeavPd95cOw0\nuMPgJE76HJ3BSYcp1f8WKcN+xDket9CF6Qz+VX5aQSUEc333V5h7D/nzAoGBAP4o\nVCvQu5eKYmDhMFSOA0+Qm3EECRqMLoH6kpEcbMjM8+kOeI0fUuE3CX8nzs7P4py/\n0IFj2Yxl578NHJOjCpbB1UKtxLkmDH42wXXzrWJXRaWXC93dh1sl0aB6qE25FtSD\nzjYh4y1DA/t6y95YRrIqC2WhIU7eigIoujmtOFJFAoGABSKiiWX7ewRhRyY+jxbG\n1lM3FzCWRBccq/dKgBEoZ9dhf9sBMZyUdttV751gfkaZMM8duZVE2YM2ky7OoPlL\nVs1EI38/D8X9dQIAY1gl8e57J92H2IETU8ju81Qn83EOHf7WzFmpGbHaUoQw1Ocn\nc6BfREQ9QPRPDFAdKkbYRRMCgYEAl44k4xvNQUhb8blWwJUOlFt+1Z26cAI3mXp5\n+94fYH4W1Fq0uDJ9kZ7oItLyF5EPaLlY9E8+YuJBl0OSTtdicROUv/Yu4Nk3ievM\n4TE1qvavqVaw1NRM6qVao3+A7Rf57S/Lv6vldBAKR+OpviSVw5gew7OZ0RYS5caz\nhcEtXKECgYAJb7t67nococm0PsRe8Xv1SQOQjetrhzwzD1PLOSC9TrzwA22/ZktZ\neu/qfvYgOPT4LkDGVCzn8J+TAcUVnIvAnJRQTsBu55uiL8YC5jZQ8E1hBf7kskMq\nh16WD19Djv3WhfBNXBxvnagDDWw5DxmiiKzSf0k3QDDoX7wjDAV1dQ==\n-----END RSA PRIVATE KEY-----\n\" | sudo tee /var/lib/boot2docker/server-key.pem"
time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=30 -o LogLevel=quiet -p 50483 -i /Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost echo \"-----BEGIN CERTIFICATE-----\nMIIC+DCCAeKgAwIBAgIRANfIbsa2M94gDY+fBiBiQBkwCwYJKoZIhvcNAQELMBIx\nEDAOBg`;
expect(util.removeSensitiveData(testdata).indexOf('PRIVATE')).toEqual(-1);
expect(util.removeSensitiveData(testdata).indexOf('94fYH4W1Fq0uDJ9kZ7oItLyF5EPaLlY9E8+YuJBl0OSTtdicROUv')).toEqual(-1);
expect(util.removeSensitiveData(testdata).indexOf('<redacted>')).toNotEqual(-1);
});
it('filters username data', () => {
var testdata = String.raw`/Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost echo`;
expect(util.removeSensitiveData(testdata).indexOf('/Users/johnappleseed/')).toEqual(-1);
expect(util.removeSensitiveData(testdata).indexOf('/Users/<redacted>/')).toNotEqual(-1);
testdata = String.raw`/Users/some.wei-rdUsername/.docker/machine/machines/dev2/id_rsa docker@localhost echo`;
expect(util.removeSensitiveData(testdata).indexOf('/Users/some.wei-rdUsername/.docker')).toEqual(-1);
expect(util.removeSensitiveData(testdata).indexOf('/Users/<redacted>/.docker')).toNotEqual(-1);
});
it('filters Windows username data', () => {
var testdata = String.raw`C:\\Users\\johnappleseed\\.docker\\machine`;
expect(util.removeSensitiveData(testdata).indexOf('johnappleseed')).toEqual(-1);
expect(util.removeSensitiveData(testdata).indexOf('<redacted>')).toNotEqual(-1);
});
it ('returns input if empty or not a string', () => {
expect(util.removeSensitiveData('')).toBe('');
expect(util.removeSensitiveData(1)).toBe(1);
expect(util.removeSensitiveData(undefined)).toBe(undefined);
});
});
describe('when verifying that a repo is official', () => {
it('accepts official repo', () => {
expect(util.isOfficialRepo('redis')).toBe(true);
});
it('rejects falsy value as official repo', () => {
expect(util.isOfficialRepo(undefined)).toBe(false);
});
it('rejects empty repo name', () => {
expect(util.isOfficialRepo('')).toBe(false);
});
it('rejects repo with non official namespace', () => {
expect(util.isOfficialRepo('kitematic/html')).toBe(false);
});
it('rejects repo with a different registry address', () => {
expect(util.isOfficialRepo('www.myregistry.com/kitematic/html')).toBe(false);
});
});
});

View File

@ -1,16 +0,0 @@
machine:
xcode:
version: "7.0"
dependencies:
cache_directories:
- "node_modules"
deployment:
release:
tag: /v.*/
owner: docker
commands:
- github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Mac.zip --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Mac.zip
- github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Windows.zip --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Windows.zip
- github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Ubuntu.zip --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Ubuntu.zip

Binary file not shown.

View File

@ -1,32 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by Fontastic.me</metadata>
<defs>
<font id="kitematic" horiz-adv-x="512">
<font-face font-family="kitematic" units-per-em="512" ascent="480" descent="-32"/>
<missing-glyph horiz-adv-x="512" />
<glyph glyph-name="add" unicode="&#97;" d="M256 0c-7 0-12 5-12 12l0 488c0 7 5 12 12 12 7 0 12-5 12-12l0-488c0-7-5-12-12-12z m244 256l-488 0c-7 0-12 5-12 12 0 8 5 12 12 12l488 0c7 0 12-4 12-12 0-7-5-12-12-12z"/>
<glyph glyph-name="badge-private" unicode="&#101;" d="M411 0l-310 0c-19 0-36 15-36 36l0 238c0 20 16 36 36 36l310 0c19 0 36-16 36-36l0-238c0-21-16-36-36-36z m-310 286c-6 0-12-6-12-12l0-238c0-7 5-12 12-12l310 0c6 0 12 6 12 12l0 238c0 7-5 12-12 12z m286 12l-24 0 0 76c0 55-43 114-107 114-64 0-107-59-107-114l0-76-24 0 0 76c0 75 60 138 131 138 71 0 131-63 131-138z m-131-227c-20 0-36 16-36 36l0 36c-14 11-24 28-24 48 0 33 27 59 60 59 33 0 60-26 60-59 0-20-10-37-24-48l0-36c0-20-16-36-36-36z m0 155c-20 0-36-15-36-35 0-14 7-25 18-31l6-4 0-49c0-7 5-12 12-12 7 0 12 5 12 12l0 49 6 4c11 6 18 17 18 31 0 20-16 35-36 35z"/>
<glyph glyph-name="restart" unicode="&#102;" d="M156 226c-1 0-1 0 0 0-5 0-7 3-10 5l-36 48c-4 4-4 13 2 16 5 4 13 4 17-2l28-37 37 38c5 5 12 5 17 0 5-5 5-12 0-17l-47-47c-2-3-6-4-8-4z m104-71c-6 0-12 5-12 12 0 7 4 12 12 12 25 1 47 10 64 28 14 16 22 37 21 59-2 46-43 82-91 79-25-1-49-12-65-29-16-18-23-43-21-70 0-7-5-11-11-13-7 0-12 5-13 11-2 33 7 63 27 87 21 23 50 37 81 38 62 2 115-44 117-103 1-28-8-55-28-75-21-22-49-35-81-36 1 0 1 0 0 0z m-4-155c-142 0-256 114-256 256 0 142 114 256 256 256 142 0 256-114 256-256 0-142-114-256-256-256z m0 488c-129 0-232-103-232-232 0-129 103-232 232-232 129 0 232 103 232 232 0 129-103 232-232 232z"/>
<glyph glyph-name="browser-view" unicode="&#103;" d="M256 0c-142 0-256 114-256 256 0 142 114 256 256 256 142 0 256-114 256-256 0-142-114-256-256-256z m0 488c-129 0-232-103-232-232 0-129 103-232 232-232 129 0 232 103 232 232 0 129-103 232-232 232z m137-292l-19 0-14 48-14-48-19 0-20 65-20-65-19 0-14 48-13-48-20 0-20 65-20-65-19 0-14 48-13-48-20 0-27 86 23 0 14-49 13 49 19 0 14-49 15 49 31 0 14-49 13 49 19 0 14-49 15 49 31 0 14-49 13 49 19 0 14-49 15 49 22 0z"/>
<glyph glyph-name="search" unicode="&#104;" d="M500 0c-3 0-5 1-8 3l-198 198c-4 5-4 12 0 17 5 4 12 4 17 0l198-198c4-5 4-12 0-17-3-2-5-3-9-3z m-320 151c-99 0-180 82-180 181 0 99 81 180 180 180 99 0 181-81 181-180 0-99-82-181-181-181z m0 338c-86 0-157-71-157-157 0-86 71-157 157-157 86 0 157 71 157 157 0 86-71 157-157 157z"/>
<glyph glyph-name="start" unicode="&#105;" d="M256 0c-142 0-256 114-256 256 0 142 114 256 256 256 142 0 256-114 256-256 0-142-114-256-256-256z m0 488c-129 0-232-103-232-232 0-129 103-232 232-232 129 0 232 103 232 232 0 129-103 232-232 232z m-52-337c-15 0-25 11-25 28l0 142c0 16 9 28 25 28 4 0 9-1 14-4l148-74c9-4 15-13 15-21 0-8-6-17-15-21l-148-74c-6-3-11-4-14-4z m0 174c0 0-2-1-2-4l0-142c0-3 0-4 2-4 0 0 1 0 3 1l148 74-148 74c-2 1-3 1-3 1z"/>
<glyph glyph-name="delete" unicode="&#106;" d="M27 18c-4 0-8 1-11 4-6 6-6 14 0 21l445 444c6 7 15 7 21 0 6-6 6-14 0-20l-445-445c-2-2-6-4-10-4z m457-2c-4 0-7 1-10 4l-445 445c-6 6-6 14 0 20 6 7 14 7 20 0l445-444c6-7 6-15 0-21-2-2-6-4-10-4z"/>
<glyph glyph-name="stop" unicode="&#108;" d="M321 155l-130 0c-21 0-36 15-36 36l0 130c0 21 15 36 36 36l130 0c21 0 36-15 36-36l0-130c0-21-15-36-36-36z m-130 178c-8 0-12-4-12-12l0-130c0-8 4-12 12-12l130 0c8 0 12 4 12 12l0 130c0 8-4 12-12 12z m65-333c-142 0-256 114-256 256 0 142 114 256 256 256 142 0 256-114 256-256 0-142-114-256-256-256z m0 488c-129 0-232-103-232-232 0-129 103-232 232-232 129 0 232 103 232 232 0 129-103 232-232 232z"/>
<glyph glyph-name="tag" unicode="&#109;" d="M315 9c-4 0-7 1-9 3l-302 306c-3 3-4 5-4 9l0 173c0 7 5 12 12 12l173 0c4 0 6-1 9-4l306-302c2-2 5-7 3-12-1-4-3-7-8-9l-129-39-39-129c-2-4-5-7-9-8-1 0-2 0-3 0z m-291 323l284-288 36 116c1 3 3 7 8 8l116 36-288 284-156 0z m95 7c-29 0-53 24-53 54 0 29 24 53 53 53 30 0 54-24 54-53 0-30-24-54-54-54z m0 83c-15 0-29-14-29-29 0-16 14-30 29-30 16 0 30 14 30 30 0 15-14 29-30 29z"/>
<glyph glyph-name="expand" unicode="&#113;" d="M300 287c-4 0-7 1-9 4-5 5-5 12 0 17l200 200c5 5 12 5 17 0 5-5 5-12 0-17l-200-200c-2-3-5-4-8-4z m-275-275c-4 0-6 2-9 4-5 5-5 13 0 18l200 200c5 5 13 5 18 0 5-5 5-13 0-18l-200-200c-3-2-5-4-9-4z m475 338c-8 0-13 5-13 12l0 125-125 0c-7 0-12 5-12 13 0 7 5 12 12 12l138 0c7 0 12-5 12-12l0-138c0-7-5-12-12-12z m-350-350l-138 0c-7 0-12 5-12 12l0 138c0 7 5 12 12 12 8 0 13-5 13-12l0-125 125 0c7 0 12-5 12-13 0-7-5-12-12-12z"/>
<glyph glyph-name="favorite" unicode="&#114;" d="M256 23c-2 0-5 1-7 3-10 7-249 181-249 317 0 91 67 146 133 146 43 0 95-26 123-93 28 67 80 93 123 93 66 0 133-55 133-146 0-135-239-309-249-317-2-2-5-3-7-3z m-123 442c-54 0-110-45-110-122 0-111 193-264 233-293 40 29 233 182 233 293 0 77-56 122-110 122-53 0-95-40-111-110-2-5-6-9-12-9-6 0-10 3-12 9-16 70-58 110-111 110z"/>
<glyph glyph-name="feedback" unicode="&#115;" d="M29 6c-4 0-6 1-9 4-3 3-5 9-2 14l55 107c-47 42-73 98-73 154 0 122 114 222 256 222 142 0 256-100 256-222 0-123-114-223-256-223-32 0-61 7-83 14l-140-69c-1-1-3-1-4-1z m227 476c-129 0-232-89-232-199 0-51 26-103 71-141 5-4 6-10 3-15l-43-83 111 55c2 1 5 1 9 1 21-7 50-14 81-14 129 0 232 89 232 199 0 108-103 197-232 197z m-115-119l219 0 0-24-219 0z m0-59l219 0 0-24-219 0z m0-60l219 0 0-24-219 0z"/>
<glyph glyph-name="link" unicode="&#116;" d="M162 214c-13 0-24 5-33 15l-109 108c-13 13-20 30-20 48 0 17 7 34 20 47l61 61c13 13 30 20 48 20 17 0 34-7 47-20l109-108c10-11 15-25 13-41-3-14-10-28-23-40-5-5-12-5-17 0-4 4-4 12 0 16 10 10 15 19 16 28 1 8-1 14-7 20l-109 108c-16 17-45 17-62 0l-60-60c-9-9-13-19-13-31 0-12 4-23 13-31l108-109c6-6 12-8 20-7 9 1 19 7 28 16 4 4 12 4 16 0 5-5 5-12 0-17-13-13-27-20-41-23 0 0-3 0-5 0z m221-214c-17 0-34 7-47 20l-107 109c-22 21-18 54 9 81 5 4 12 4 17 0 5-5 5-12 0-17-14-14-24-33-10-48l107-108c9-8 19-13 31-13 12 0 23 5 31 13l62 62c9 8 13 19 13 31 0 12-4 22-13 31l-108 107c-14 14-35 5-48-10-4-4-12-4-16 0-5 5-5 12 0 17 27 27 59 31 81 10l108-108c13-13 20-29 20-47 0-18-7-35-19-48l-62-62c-14-13-31-20-49-20z m-26 143c-3 0-6 1-8 3l-191 191c-4 5-4 12 0 17 5 4 12 4 17 0l191-191c4-5 4-12 0-17-3-2-5-3-9-3z"/>
<glyph glyph-name="more" unicode="&#117;" d="M70 186c-39 0-70 32-70 70 0 38 31 70 70 70 38 0 70-32 70-70 0-38-32-70-70-70z m0 117c-26 0-47-21-47-47 0-26 21-47 47-47 25 0 46 21 46 47 0 26-21 47-46 47z m186-117c-38 0-70 32-70 70 0 38 32 70 70 70 38 0 70-32 70-70 0-38-32-70-70-70z m0 117c-26 0-47-21-47-47 0-26 21-47 47-47 26 0 47 21 47 47 0 26-21 47-47 47z m186-117c-38 0-70 32-70 70 0 38 32 70 70 70 39 0 70-32 70-70 0-38-31-70-70-70z m0 117c-25 0-46-21-46-47 0-26 21-47 46-47 26 0 47 21 47 47 0 26-21 47-47 47z"/>
<glyph glyph-name="preferences" unicode="&#118;" d="M297 0l-84 0c-7 0-12 5-12 12l0 61c-2 1-5 3-8 3-9 3-20 7-30 11l-42-43c-5-5-13-5-17 0l-60 60c-3 2-4 4-4 8 0 4 1 6 4 9l43 42c-8 15-14 34-18 54l-58 0c-7 0-12 5-12 12l0 67c0 8 5 12 12 12l60 0c3 11 9 26 16 38l-43 43c-5 5-5 12 0 17l60 60c4 5 12 5 17 0l42-43c13 6 27 12 38 16l0 61c0 7 5 12 12 12l84 0c8 0 13-5 13-12l0-60c11-4 25-8 37-16l43 43c5 5 12 5 17 0l60-60c2-2 4-5 4-8 0-4-2-6-4-9l-43-43c6-12 11-24 16-37l60 0c7 0 12-5 12-13l0-67c0-7-5-12-12-12l-59 0c-3-29-9-42-17-55l42-41c5-5 5-12 0-17l-60-60c-5-5-12-5-17 0l-43 43c-10-5-19-9-29-11-2-1-6-3-9-3l0-61c2-8-3-13-11-13z m-70 24l59 0 0 56c0 5 3 9 7 11 3 3 9 5 18 8 11 3 24 8 33 13 5 3 11 3 14-1l41-40 42 42-40 41c-4 3-5 9-1 14l1 1c9 15 15 25 18 63 2 6 6 11 13 11l56 0 0 42-56 0c-7 0-11 4-13 10-3 17-11 34-19 49-3 5-3 11 1 14l40 41-42 42-41-40c-3-4-9-5-14-1-15 8-40 18-48 19-6 2-10 6-10 13l0 56-59 0 0-56c0-7-4-11-10-13-10-2-34-11-48-19-4-3-11-3-14 1l-40 40-43-42 40-41c4-3 5-9 1-14-8-15-17-39-19-49-1-5-6-10-12-10l-56 0 0-42 56 0c6 0 11-5 12-11 4-25 11-50 19-64 3-5 3-11-1-14l-40-41 43-42 40 40c3 4 10 5 14 1 9-5 22-10 33-13 8-3 15-5 19-8 3-2 6-6 6-11z m29 122c-61 0-110 49-110 110 0 61 49 110 110 110 61 0 110-49 110-110 0-61-49-110-110-110z m0 195c-48 0-85-37-85-85 0-48 37-85 85-85 48 0 85 37 85 85 0 48-37 85-85 85z"/>
<glyph glyph-name="badge-official" unicode="&#99;" d="M252 512c8 0 14 0 21 0 0 0 1 0 1 0 9 0 19-2 28-4 33-7 61-22 85-47 25-28 38-60 37-97-1-19-6-38-16-54-15-30-39-52-69-66-4-2-10-5-15-7 33-76 68-152 101-229-1 0-1 0-2 2-55 30-110 63-165 94-1 1-2 1-3 0-55-31-111-64-166-94 0 0-1-2-1-2 0 0 0 0 0 2 0 1 1 1 1 2 34 74 67 149 99 223 1 2 3 4 4 8-1 0-1 0-1 1-24 11-43 25-60 45-23 29-32 62-27 98 2 24 11 45 26 63 30 38 69 57 116 62 2-1 4 0 6 0z m16-24c-24 0-42-2-58-9-28-11-52-28-67-53-17-26-22-53-14-83 6-25 20-45 39-61 24-19 51-30 82-32 23-2 44 1 64 8 28 10 52 27 67 52 18 27 23 58 13 90-8 25-24 45-45 61-25 18-55 26-81 27z m105-424c-24 55-49 111-73 166-29-6-57-5-86 2-25-56-50-112-75-168 2 0 2 0 2 0 38 22 75 43 113 65 1 1 2 1 3 0 26-16 53-30 79-46 13-4 25-12 37-19z m-113 222c-29 0-52 8-72 25-14 13-24 28-26 47-2 19 1 37 12 53 13 20 31 32 53 38 30 8 59 5 86-12 18-11 30-26 36-46 7-27 2-49-14-70-15-17-35-28-58-33-7-2-14-2-17-2z m-4 24c2 0 4 0 6 0 1 0 2 0 4 0 17 2 34 8 46 21 14 14 19 32 13 51-5 16-14 26-27 34-19 11-41 14-63 9-16-3-30-12-40-25-9-12-13-26-10-40 2-15 9-25 20-34 15-12 33-16 51-16z"/>
<glyph glyph-name="docker-cli" unicode="&#100;" d="M0 274c0 5 0 11 0 16 0 0 0 0 0 2 0 4 1 8 1 13 0 3 1 7 1 12 17 0 34 0 50 0 0 28 0 55 0 83 28 0 56 0 84 0 0 1 0 1 0 2 0 26 0 54 0 80 0 1 0 1 0 2 34 0 70 0 104 0 0 0 0 0 0-1 0-27 0-55 0-82 0 0 0-1 0-1 29 0 56 0 84 0 0-28 0-55 0-83 16-1 31 1 46 7-1 3-2 6-3 9-4 13-5 25-3 39 1 9 3 18 7 26 3 6 7 12 11 17 3 3 5 5 8 8 5-4 9-8 14-12 12-10 21-21 28-35 2-4 3-7 4-11 0 0 0 0 1 0 5 0 11 1 16 1 11 0 21-2 31-8 7-3 13-8 20-11-2-5-6-11-8-16-6-11-13-21-25-28-14-9-30-13-47-14-1 0-2 0-2-1-5-11-10-23-17-33 0 0 0-1-1-2 1 0 1 0 2 0 21 0 43 0 64 0 17 0 32-14 32-31 0-60 0-120 0-179 0-14-10-26-23-30-3-2-5-2-7-2-81 0-164 0-245 0 0 0 0 0-1 0-17 3-29 15-29 32 0 27 0 54 0 82 0 1 0 1 0 2-8 0-15-1-23-1-18 0-38 1-57 7-31 7-57 23-79 46-10 9-17 21-23 32-10 19-15 38-16 59 2 0 1 2 1 4z m350-44c-40 0-79 0-119 0-6 0-12-4-12-12 0-58 0-117 0-175 0-7 5-12 12-12 79 0 159 0 238 0 7 0 12 6 12 12 0 58 0 117 0 175 0 8-5 12-12 12-40 0-79 0-119 0z m50 86c-3-3-6-5-8-6-16-9-33-14-51-15-10-1-19 0-29 0-96 0-192 0-288 0-1 0-1 0-2 0 0-1 0-1 0-1-1-12 0-23 1-34 2-14 6-29 14-42 9-16 22-31 37-42 24-18 52-27 82-28 10-1 21 0 30 0 4 0 8 0 11 1 0 1 0 1 0 3 0 22 0 45 0 70 0 17 14 31 32 31 49 0 99 0 148 0 1 0 2 0 3 1 11 17 19 33 26 52 2 1 2 4 3 4 1 1 3 0 5 0 8-1 16 0 25 1 12 2 23 8 31 17 2 3 5 6 6 10 0 0-1 0-1 1-7 4-14 5-23 6-9 0-17-1-27-4-2-1-5-2-8-2-1 10-2 20-7 31-6 9-12 18-20 25-1-3-3-5-4-7-4-7-5-14-5-21 0-8 0-14 2-20 5-15 11-23 17-31z m-264 0c0 20 0 41 0 62-21 0-42 0-63 0 0-21 0-42 0-62 21 0 42 0 63 0z m21 0c21 0 42 0 62 0 0 20 0 41 0 62-20 0-41 0-62 0 0-21 0-42 0-62z m62 146c-20 0-41 0-62 0 0-21 0-42 0-63 21 0 42 0 62 0 0 21 0 42 0 63z m84-84c-21 0-42 0-63 0 0-21 0-42 0-62 21 0 42 0 63 0 0 20 0 41 0 62z m7-247c-5 6-10 12-15 18-3 5-7 8-10 12-4 4-3 11 1 15 4 4 12 3 15-2 10-12 21-25 31-36 2-2 3-4 6-6-4-5-7-8-10-12-9-10-18-21-27-31-4-5-12-5-16 0-3 4-4 9 0 13 8 9 15 17 22 27 1-2 2 0 3 2z m71-48c-8 0-16 0-26 0-4 0-7 2-9 6-2 4-1 7 1 10 2 3 5 4 8 4 18 0 35 0 53 0 6 0 10-4 10-10 0-6-4-10-10-10-9 0-17 0-27 0z m-235 142c0-20-15-37-34-38-21-1-38 15-39 36-1 20 16 36 35 37 21 2 37-13 38-35z m-36-16c8 0 15 7 15 16 0 8-7 15-15 15-9 0-16-7-16-15 0-10 7-16 16-16z"/>
<glyph glyph-name="docker-exec" unicode="&#107;" d="M256 0c-141 0-256 115-256 256 0 141 115 256 256 256 141 0 256-115 256-256 0-141-115-256-256-256z m0 488c-128 0-232-104-232-232 0-128 104-232 232-232 128 0 232 104 232 232 0 128-104 232-232 232z m98-306l-110 0c-8 0-12 5-12 12 0 7 4 12 12 12l110 0c7 0 12-5 12-12 0-7-5-12-12-12z m-220 1c-2 0-6 1-8 4-5 4-5 12-2 17l54 58-54 59c-5 4-3 12 2 17 4 5 12 3 17-2l68-75-68-76c-3-1-5-2-9-2z"/>
<glyph glyph-name="user" unicode="&#110;" d="M245 512c7 0 15 0 23 0 0 0 1 0 1 0 11-1 20-1 31-4 36-6 69-19 100-40 37-25 66-57 85-97 15-32 25-65 27-101 1-22 0-45-5-68-7-32-20-63-38-90-25-36-57-64-96-85-32-16-66-25-102-27-23-1-47 0-71 6-51 12-95 37-131 76-25 28-43 57-55 93-7 20-10 42-12 63 0 3 0 5-1 7 0 7 0 15 0 23 0 0 0 1 0 1 1 13 3 26 5 39 11 49 33 92 69 128 21 21 45 38 71 51 31 14 64 23 98 25 0-1 1 0 1 0z m-62-319c-19 19-28 42-28 69 0 27 11 50 30 68 34 33 88 34 126 5 19-16 30-36 33-60 5-30-3-56-23-79 49-29 73-72 72-129 67 46 113 140 88 243-25 103-121 181-235 176-108-5-198-84-219-191-9-52-2-103 24-151 17-31 39-57 68-79-1 56 20 98 64 128z m48-4c-6-2-12-6-18-8-18-7-32-18-44-33-21-27-28-58-24-91 1-6 1-6 7-9 43-22 90-29 137-23 27 4 53 12 77 25 1 0 1 1 2 2 5 22 3 42-4 62-10 29-29 50-57 65-8 3-16 6-24 9-2 1-4 1-7 3 3 1 4 2 6 3 7 6 16 11 22 17 15 16 21 35 19 57-3 17-10 32-22 44-16 15-35 21-57 19-17-2-32-10-44-21-15-17-23-37-19-61 4-22 14-38 33-50 5-1 11-6 17-10z"/>
<glyph glyph-name="open-external" unicode="&#98;" d="M4 436c1 0 1 0 3 0 78 0 157 0 236 0 1 0 1 0 2 0 0-9 0-17 0-26-72 0-143 0-215 0 0-126 0-254 0-380 126 0 254 0 380 0 0 67 0 135 0 202 9 0 17 0 26 0 0-1 0-1 0-2 0-75 0-150 0-225 0-1 0-1 0-2-145 0-289 0-432 0 0 144 0 288 0 433z m508-116c0-1 0-2-1-4-3-5-8-9-15-7-6 1-10 6-10 13 0 47 0 95 0 143 0 1 0 1 0 2-2-1-2-1-3-1-80-80-161-161-241-242-7-6-18-5-21 3-3 5-2 11 2 15 0 0 1 1 1 1 81 80 161 160 241 240 0 0 1 1 1 1-1 0-1 0-3 0-47 0-94 0-141 0-7 0-12 3-13 10-3 6 1 14 7 17 0 0 2 0 2 1 60 0 122 0 182 0 4-1 7-3 9-7 2-1 2-4 2-5 1-60 1-121 1-180z m0 179c0 1-1 4-1 5-2 4-6 5-10 7 4 0 8 0 11 0 0-3 0-7 0-12z"/>
<glyph glyph-name="edit" unicode="&#111;" d="M11 436c1 0 1 0 2 0 78 0 155 0 232 0 2 0 2 0 3 0 0-9 0-17 0-26-71 0-142 0-211 0 0-125 0-250 0-375 124 0 249 0 374 0 0 71 0 142 0 212 9 0 17 0 26 0 0-2 0-2 0-3 0-79 0-156 0-235 0 0 0-1 0-1-142 0-285 0-426 0 0 144 0 286 0 428z m501 0c-1-4-4-7-7-9-53-54-107-108-162-162-2-1-4-4-7-4-31-12-64-25-96-37-5-2-10-1-14 3-4 4-5 9-3 15 12 31 25 64 37 95 1 3 3 6 4 7 54 54 108 108 163 163 2 2 5 5 9 6 1 0 2 0 4 0 4-1 6-4 9-6 18-19 37-37 55-55 3-3 5-6 7-10 1-4 1-5 1-6z m-177-142c35 36 71 71 106 106-13 14-27 28-41 41-35-35-70-71-106-106 13-15 28-28 41-41z m126 125c6 6 13 13 19 19-13 14-27 28-40 41-7-6-13-13-20-20 13-13 26-27 41-40z m-150-141c-10 11-21 21-33 33-6-17-13-34-19-52 18 6 35 13 52 19z"/>
<glyph glyph-name="download" unicode="&#112;" d="M256 512c-39 0-70-32-70-71l0-236 20 9-59 59c-23 23-60 23-83 0-23-24-23-61 0-84l184-186c4-4 12-4 16 0l184 186c23 23 23 60 0 84-23 23-60 23-83 0l-59-59 20-9 0 236c0 39-31 71-70 71z m0-23c26 0 47-21 47-48l0-236c0-10 12-15 20-8l58 59c14 14 37 14 51 0 14-14 14-37 0-51l-184-185 16 0-184 185c-14 14-14 37 0 51 14 14 37 14 51 0l58-59c8-7 20-2 20 8l0 236c0 27 21 48 47 48z"/>
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 568 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 899 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 734 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 705 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 657 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

Some files were not shown because too many files have changed in this diff Show More